News: 11 March 2016 - Forum Rules
Current Moderators - DarkSol, KingMike, MathOnNapkins, Azkadellia, Danke

Author Topic: Solstice Randomizer (NES)  (Read 10432 times)

pbandpickle

  • Jr. Member
  • **
  • Posts: 18
    • View Profile
    • PBandPickle
Re: Solstice Randomizer (NES)
« Reply #20 on: July 06, 2020, 05:27:54 pm »
Well, the magic boot randomizer being broken makes complete sense as I am incapable of fixing anything without breaking something :P I’ll review this later today.

I will review my detonator code again and will implement the room change that you have suggested.

EDIT:
-The magic boot randomizer appears to be working as intended. Please note that there are currently only 10 spots where the magic boots will spawn and 3 of them are in A3. So currently, there is a 30% chance the boots will be there. This will not be as prevalent once magic boot randomization is expanded.

-Detonator randomization is now disabled for the time being.
« Last Edit: July 06, 2020, 09:45:58 pm by pbandpickle »

pbandpickle

  • Jr. Member
  • **
  • Posts: 18
    • View Profile
    • PBandPickle
Re: Solstice Randomizer (NES)
« Reply #21 on: July 19, 2020, 09:06:04 pm »
Slight update. I fixed up the graphics a bit in rm 0x30. It's still a bit jacked but much better than before. I probably won't be touching it any further as solstice graphics are kind of complicated.

If playing on Random Start, room 0xFC has received a complete redesign to prevent a softlock while also making the room not boring. If you do not use random start, this room stays vanilla.

Here is the current roadmap:
   1. Fix detonator randomization
   2. Fix color correction
   3. Expand magic boots randomization
   4. Any other goofy things I can think of.

I haven't had as much time to work on it as I would like but I'll still be updating periodically.

Also, one randomization quirk i need to fix:
   Both rooms 60 and 5E are valid locations for Cave of the Doomed Souls key. This means if you happen to drop down the wrong shaft, it's a softlock. I may adjust this so that it can not spawn there but I dunno.

Another note, I am very curious what bytes 0x01A371 -> 0x01A3FE are used for. These bytes are strangely sandwiched between data for room 0x45 and 0x46 but is definitely NOT room data. I'll like to look into that some day....

pbandpickle

  • Jr. Member
  • **
  • Posts: 18
    • View Profile
    • PBandPickle
Re: Solstice Randomizer (NES)
« Reply #22 on: July 26, 2020, 10:34:21 pm »
Not much to add except detonator randomization has been fixed. All this time I assumed there was something wrong with my randomization code when it was actually a side-effect of the game's programming.

Detonators are still only randomized with detonators but they should work correctly now. The only sideeffect is that you can hit the same detonator multiple times (doesn't do anything extra). It will never show a trigger detonator. Also, detonator randomization is forced on at the moment. I'll fix it during my vacation next week.

pbandpickle

  • Jr. Member
  • **
  • Posts: 18
    • View Profile
    • PBandPickle
Re: Solstice Randomizer (NES)
« Reply #23 on: August 23, 2020, 07:44:35 pm »
***NEW UPDATE***

Expert Mode! - Start with 0 lives, cannot gain more lives, start with 1 use of each potion. Cannot hold more than 1 usage of each potion
New "Bottomless Hole" in the Caves of the Doom Souls when playing rando (to prevent softlocks)
Teleporter randomization now works instead of just pretending to work! wow!
Other miscellaneous bug fixes and text changes

detonator rando is still forced on. That will be a included in my next update.

pbandpickle

  • Jr. Member
  • **
  • Posts: 18
    • View Profile
    • PBandPickle
Re: Solstice Randomizer (NES)
« Reply #24 on: August 30, 2020, 08:33:29 pm »
I was hoping to get detonator randomization done today but I ran into some issues. My next update will be out probably next weekend and will feature full detonator randomization and a greatly expanded magic boots randomization.

September 05, 2020, 10:50:22 pm - (Auto Merged - Double Posts are not allowed before 7 days.)
*** New Update is now live and contains the following features: ***

-Full detonator randomization (optional)
-Greatly expanded Magic Boots randomization (10+ more rooms it can appear in)
-"Fix object color palettes" actually works now

There are a few important notes about this latest update:

-Detonators will NEVER be replaced with a "triggered" detonator but they still work
-Enabling Magic Boots randomization will also apply the Random Start room edits. Sorry.

I pretty much break something every time I update it so plz let me know if something is not working or seems strange. Also, some room edits will seem strange (that's on purpose).
« Last Edit: September 05, 2020, 10:50:22 pm by pbandpickle »

JonnyManjiro

  • Newbie
  • *
  • Posts: 1
    • View Profile
Re: Solstice Randomizer (NES)
« Reply #25 on: October 04, 2020, 08:28:49 am »
Got through a seed of this with the latest build. Really enjoyed it and hope you keep up the good work ;)

pbandpickle

  • Jr. Member
  • **
  • Posts: 18
    • View Profile
    • PBandPickle
Re: Solstice Randomizer (NES)
« Reply #26 on: February 15, 2021, 06:10:40 pm »
I'm finally coming back to this after a personal hiatus. I'll have some additional randomization options soon and finally fix the item color correction. The item color correction logic is technically correct but does not use the right colors due to a documentation error on my part. I plan to implement an update by this weekend.

pbandpickle

  • Jr. Member
  • **
  • Posts: 18
    • View Profile
    • PBandPickle
Re: Solstice Randomizer (NES)
« Reply #27 on: April 02, 2021, 10:30:52 pm »
Heeeeeey, so this isn't dead. I did fix the color correction several seeks ago but forgot to update this topic. In other news, I finally found the room pointers. I'm not super knowledgeable with assembly or anything so figuring this out took quite a long time. With this info it should be fairly easy to make all sorts of adjustments to rooms.

Room Pointer Data:

Room pointer data starts at 0x18010 in the rom. The pointers are stored in two groups, the first byte for all rooms, in order, followed by the second byte for all rooms, also in order.

First bytes are 0x18010 - 0x1810C
Second bytes are 0x1810D - 0x18209

During a room transition, the room data is very briefly switched into memory. The room pointers are then stored at 0x0016 and 0x0017 in memory and used as an offset to lookup the room data.

So for example:
Room 02:
    1st byte: 0x18012 = 03
    2nd byte: 0x1810F = 84

This means the room data for Room 02 is currently loaded into memory address 0x8403. And sure enough, here is is:



Interestingly enough, this also explains why Room A2 does not exist. The pointer data for A2 just points to Room 00. With this information, you could easily adjust the pointer and add room A2 back in somewhere.

Room 00: 0x18010 = 88, 0x1810F = 83
Room A2: 0x180B2 = 88, 0x181AF = 83

Super neat!

Also, if you make room edits and need to update the pointers in the ROM your room data should start at 0x010010 + room offset. For example, room 2A:

2A offset byte 1 @ 0x1803A: D7
2A offset byte 2 @ 0x18137: 98

Room start should be located in ROM at byte 10010 + 98D7 = 0x0198E7 which is correct. This works for every single room in game and I have validated it accordingly. I already have an idea on how to reintroduce missing room A2 into my randomizer... so many ideas!

Regarding room data, there are three groups of bytes in the middle of room data that I don't believe are ever utilized. While I am not 100% sure yet, this appears to be left over partial room data or just garbage.

Unused Bytes #1: 0x183CB -> 0x183F9 (47 bytes)
Unused Bytes #2: 0x1A321 -> 0x1A3FE (222 bytes)
Unused Bytes #3: 0x1E57F -> 0x1E597 (25 bytes)

While this isn't tons of space, it does give us an additional 294 bytes of room data space for whatever adjustments we would like to make. 99% of rooms are < 300 bytes so this is fairly substation extra space.

One thing that still eludes me in exactly how the graphics are stored in the ROM. Currently, this is beyond my grasp but I hope to figure this out eventually because adding custom graphics would be great.
« Last Edit: April 03, 2021, 05:56:04 pm by pbandpickle »

J^P

  • Full Member
  • ***
  • Posts: 140
    • View Profile
Re: Solstice Randomizer (NES)
« Reply #28 on: April 04, 2021, 06:51:18 am »
You just need to press +1 byte button few times in yy-chr to make graphics appear properly:




Like here I replaced the solstice guy sprites with the troll enemy via editing graphics. I have no idea how to do the same thing outside of yy-chr though ;D.

Quote
Regarding room data, there are three groups of bytes in the middle of room data that I don't believe are ever utilized. While I am not 100% sure yet, this appears to be left over partial room data or just garbage.

Unused Bytes #1: 0x183CB -> 0x183F9 (47 bytes)
Unused Bytes #2: 0x1A321 -> 0x1A3FE (222 bytes)
Unused Bytes #3: 0x1E57F -> 0x1E597 (25 bytes)
Interesting, I'll poke around to see if theres any stray room data there or if the game ever accesses that.

Also do you mind if I add your Room Pointer Data findings to my doc?


EDIT:

Unused Bytes #1: 0x183CB -> 0x183F9 (47 bytes)
Unused room!
Nothing special, it has no sprites and it only has on exit to room ID 01

Code: [Select]
27 17 37 13 00 ;orange room, 5x3 size
00 FF 00 81 00 00 FF FF FF FF FF FF FF ;main castle 1 wall graphics window-less, basic floor.
04 18 01 ;only one exit to room ID 01
06 ;how many normal blocks
00 01 00 80 ;normal blocks start
00 01 01 80 ;basic block graphics
00 01 02 80
00 11 00 80
00 11 01 80 
00 21 00 80  ;normal blocks end
00 ;end of room data


Sooo.. early version of the very first room, its also located right after where final room ID 00 is  ::) .
« Last Edit: April 04, 2021, 03:06:19 pm by J^P »

pbandpickle

  • Jr. Member
  • **
  • Posts: 18
    • View Profile
    • PBandPickle
Re: Solstice Randomizer (NES)
« Reply #29 on: April 04, 2021, 03:06:03 pm »
Please go ahead and add to your notes! I couldn’t have done any of this without your documentation anyway.

I zeroed out the bytes in group 1 and 2 and played around a bit. There were no issues but I wasn’t thorough in any way.

That is awesome that you figured out the graphics, at least within yy-chr. I’ll take a look at it soon and see if I can get any more information.

I have a lot of other documentation I have gathered over the year. I created a complete, color-coded spread sheet of all room data. I have color coded each section of room data so that it is easy to tell what part it is. Specifically, I have objects, room graphics, exits, normal blocks, special blocks all color coded.

I plan on making an room exit randomizer soon but it will take some serious planning...

J^P

  • Full Member
  • ***
  • Posts: 140
    • View Profile
Re: Solstice Randomizer (NES)
« Reply #30 on: April 05, 2021, 05:47:10 am »
Unused Bytes #2: 0x1A321 -> 0x1A3FE (222 bytes) Junk, not accessed by the game ever.
Code: [Select]
01 03 16 03 80 09 03 00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 03 10 03 00 00 00 00 00 00 00 00 00 00 00 00 00 03 20 03 00 00 00 00 00
00 00 00 00 00 00 00 00 03 06 03 02 00 00 00 00 00 00 00 00 00 00 00 00 03 16 03 02 00 00 00 00 00 00 00 00 00 00 00 00 03 26 03 02 00 00
00 00 00 00 00 00 00 00 00 00 00 02 03 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 22 03 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 14
03 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

Junk/stray/erased data, not accessed by the game ever.
Located in-between of rooms ID 45 and ID 46 (1a2f5 and 1A3FF), its possible that one point room ID 45 was larger or had more objects in it,
and then they made it smaller, or maybe there was room/rooms in this space, but since the leftover data is just junk its impossible to tell.


Unused Bytes #3: 0x1E57F -> 0x1E597 (25 bytes)

Used by the intro's rooms:




Kinda weird placement since its in-between rooms FC and FE. Room attributes(palette, room size) is in 0x0006e6, which is also shared by room ID FE / ending cut-scene.


Like here I changed rooms palette to blue, and same and only change changes ending cut-scene:



So the devs used same Room attributes for both and everything else in different locations. the endings full room (room ID FE) data is located in 0x1e598 - 0x01e601, which interestingly enough has its unique room palette(14 04 24, purple/pink) that gets overridden to green.