Sonic Unused Content/Prototype Digging General

Discussion in 'Discussion & Q&A' started by Devon, Jun 30, 2022.

  1. Devon

    Devon I am lost in you Member

    Aug 26, 2013
    Gonna start this thread because I've found a couple neat things in the August prototype.

    Let's start with something I found out about the development of Chemical Plant Zone's boss.

    It's probably known by some that this boss was the first boss that they programmed. It appears first in the subtype list for the master boss object that they were using early on, was spawned in act 3 of CPZ in the Nick Arcade proto, and was called "bossvac"/"vacumeguy", according to the symbol data in that proto as well. However, that code was scrapped and dummied out in the Nick Arcade and Simon Wai prototypes.

    Here's where it gets interesting. In the August prototype, they appeared to have RESTORED that code! It still uses that old master boss object for the EHZ boss, but this time, the dummied out subtype actually point to code, and surprise surprise, using the leftover spawn code from the Nick Arcade prototype gets you...

    Tada! The object code's position checks match up closely with the Nick Arcade spawn location in "CPZ3", which doesn't fit in anywhere in the August proto.

    I personally believe they restored it so they could use it as a reference for the rewrite of the code that was put into object 5D. You can actually see a WIP version in the August prototype. However, as is, it causes a crash due to buggy code, so some changes do need to be made to make it function. When it does function, it's obvious that it's in a very incomplete state.

    EDIT: Did a quick copy and paste job of the object 56 code over to the Nick Arcade prototype, and with a couple object ID, pointer, and PLC fixes, it works just about out of the box!


    Also, object 5A is an actual functioning early version of the Crawl badnik from CNZ! Its mappings were made specifically for the art found in the Simon Wai prototype, which was updated and replaced in this build.

    Here's what it looks like restored
    Last edited: Dec 26, 2022
    Nik Pi, Pacca, Crimson Neo and 14 others like this.
  2. rayisepic

    rayisepic Newcomer Trialist

    Aug 29, 2021
  3. Devon

    Devon I am lost in you Member

    Aug 26, 2013
    I do appreciate the sentiment, but I'm not very comfortable with being called a "god", 'tis a bit much :p
    Bluestreak likes this.
  4. D.A. Garden

    D.A. Garden Sonic CD's Sound Test Member

    Aug 6, 2009
    Please do not post in all caps like this. It does not contribute to discussion in any way.

    Back to the topic at hand:
    I find it interesting that the CPZ boss went through so many changes, and yet it still has issues in the final version. I guess some of these issues are leftovers from the fact that it was the first boss that was created. Also, that prototype crawl looks very similar to the old sketches that show him in a desert level. Interesting stuff.
  5. Stdh

    Stdh Newcomer Member

    Jan 11, 2021
    the netherlands
    Since this stuff has been found i wonder if theres more early object code in the rom still not discovered but i'd doubt that since it looks like everything has pretty much been found.
  6. rayisepic

    rayisepic Newcomer Trialist

    Aug 29, 2021
    sorry, i was just too excited from this
  7. saan1ty

    saan1ty Well-Known Member Member

    Mar 1, 2021
    North Carolina
    This is pretty cool, good job on restoring these
  8. Nik Pi

    Nik Pi Well-Known Member Member

    Feb 14, 2022
    Yo, Ralakimus! It's a great
    discovery. I wonder how many other unprecedented things these ROMs conceal?!?
  9. Devon

    Devon I am lost in you Member

    Aug 26, 2013
    Let's talk about Sonic CD. I was digging through Wacky Workbench in the final version, and as it turns out, they copy and pasted the Sonic object earlier in development specifically for that level, and they forgot to apply certain updates to the code that they made to the main object code, including removing some prototype code. For instance, the spindash charge speed increment value is 50, like in the 510 prototype, compared to the intended 75.

    WWZ's copy of Sonic's code actually does have some code for what I believe is handling the unused sneeze animation, which can also be found in prototypes as early as v0.02.
        tst.b    sneezeFlag.w            ; Is Sonic sneezing?
        beq.s    .NoSneeze               ; If not, branch
        cmpi.b   #5,oAnim(a0)            ; Has Sonic stopped sneezing?
        bne.s    .End                    ; If not, branch
        clr.b    sneezeFlag.w            ; Clear sneeze flag
    Found at the top of the ground mode routine for Sonic, it locks Sonic in place until his animation ID is set to 5 (the idle animation).

    According to the Gems Collection symbols, the flag is called "kusya_flag". "kusya" looks to be shortened Romaji for the Japanese word for "sneeze". To back this up, the sneezing animation data looks like this:
    SonAni_Sneeze:    dc.b    3, 7, 7, 7, 7, 7, 9, 9, 8, 8, 8, 1, $A, $A, $FD, 5
    "$FD" means to go to a different animation. In this case, it's going to animation 5, which is what the code checks for to unlock Sonic's movement. Unfortunately, I have found no other code related to this, so it effectively goes unused.

    There's also an unused routine that spawns the splash animation for when Sonic comes out of the spin tunnel that's covered in water in Palmtree Panic. In the final, the door object itself spawns the splash, but originally, it seems that they were gonna make Sonic check his position in the level and his speed for it to spawn.

    So, now let's go into v0.02.

    It's been documented before, but yes, there is leftover Collision Chaos code. The routine for handling CCZ bumpers and the glass orbs exists and is nearly identical to the final's version. It even checks the same block IDs! The routine is actually called in PPZ, but the beginning checks if the zone ID is set to "2", which is what CCZ was assigned to before R2 was taken out fully.
    ROM:00203826 sub_203826:                             ; CODE XREF: ObjSonic_Main+52p
    ROM:00203826                 cmpi.b  #2,($FF1210).l
    ROM:0020382E                 beq.s   loc_203832
    ROM:00203830                 rts
    ROM:00203832 ; ---------------------------------------------------------------------------
    ROM:00203832 loc_203832:
    There's also code for handling Sonic while he's on a pinball flipper. CCZ also has a defined entry in the level events routine.
    ROM:0020309A off_20309A:     dc.w LevEvents_PPZ-off_20309A ; CODE XREF: RunLevelEvents+12p
    ROM:0020309A                                         ; DATA XREF: RunLevelEvents+Er ...
    ROM:0020309C                 dc.w LevEvents_PPZ-off_20309A
    ROM:0020309E                 dc.w LevEvents_CCZ-off_20309A
    ROM:002030A0                 dc.w LevEvents_Unk-off_20309A
    ROM:002030A2                 dc.w LevEvents_Unk-off_20309A
    ROM:002030A4                 dc.w LevEvents_Unk-off_20309A
    ROM:002030A6                 dc.w LevEvents_Unk-off_20309A
    ROM:002030A8                 dc.w LevEvents_Unk-off_20309A
    ROM:002030AA ; ---------------------------------------------------------------------------
    ROM:002030AA LevEvents_PPZ:                          ; DATA XREF: ROM:off_20309Ao
    ROM:002030AA                                         ; ROM:0020309Co
    ROM:002030AA                 moveq   #0,d0
    ROM:002030AC                 move.b  ($FF1211).l,d0
    ROM:002030B2                 add.w   d0,d0
    ROM:002030B4                 move.w  off_2030BC(pc,d0.w),d0
    ROM:002030B8                 jmp     off_2030BC(pc,d0.w)
    ROM:002030B8 ; ---------------------------------------------------------------------------
    ROM:002030BC off_2030BC:     dc.w LevEvents_PPZ123-off_2030BC ; CODE XREF: ROM:002030B8j
    ROM:002030BC                                         ; DATA XREF: ROM:002030B4r ...
    ROM:002030BE                 dc.w LevEvents_PPZ123-off_2030BC
    ROM:002030C0                 dc.w LevEvents_PPZ123-off_2030BC
    ROM:002030C2 ; ---------------------------------------------------------------------------
    ROM:002030C2 LevEvents_PPZ123:                       ; DATA XREF: ROM:off_2030BCo
    ROM:002030C2                                         ; ROM:002030BEo ...
    ROM:002030C2                 move.w  #$310,($FFFFF726).w
    ROM:002030C8                 rts
    ROM:002030CA ; ---------------------------------------------------------------------------
    ROM:002030CA LevEvents_CCZ:                          ; DATA XREF: ROM:0020309Eo
    ROM:002030CA                 moveq   #0,d0
    ROM:002030CC                 move.b  ($FF1211).l,d0
    ROM:002030D2                 add.w   d0,d0
    ROM:002030D4                 move.w  off_2030DC(pc,d0.w),d0
    ROM:002030D8                 jmp     off_2030DC(pc,d0.w)
    ROM:002030D8 ; ---------------------------------------------------------------------------
    ROM:002030DC off_2030DC:     dc.w LevEvents_CCZ123-off_2030DC ; CODE XREF: ROM:002030D8j
    ROM:002030DC                                         ; DATA XREF: ROM:002030D4r ...
    ROM:002030DE                 dc.w LevEvents_CCZ123-off_2030DC
    ROM:002030E0                 dc.w LevEvents_CCZ123-off_2030DC
    ROM:002030E2 ; ---------------------------------------------------------------------------
    ROM:002030E2 LevEvents_CCZ123:                       ; DATA XREF: ROM:off_2030DCo
    ROM:002030E2                                         ; ROM:002030DEo ...
    ROM:002030E2                 move.w  #$510,($FFFFF726).w
    ROM:002030E8                 rts
    ROM:002030EA ; ---------------------------------------------------------------------------
    ROM:002030EA LevEvents_Unk:                          ; DATA XREF: ROM:002030A0o
    ROM:002030EA                                         ; ROM:002030A2o ...
    ROM:002030EA                 move.w  #$710,($FFFFF726).w
    ROM:002030F0                 rts
    It's with this that I feel like some people are misunderstanding what is going on when they notice the leftovers in action. I've seen people go around forcing the time attack menu to select inaccessible levels. However, the problem with this is that the levels past PPZ2 don't actually exist and aren't properly defined in the time attack menu.
    ROM:00FF0154 ; ---------------------------------------------------------------------------
    ROM:00FF0154 TimeAttackMenu:
    ROM:00FF0154                 moveq   #$D,d0
    ROM:00FF0156                 bsr.w   RunMMD
    ROM:00FF015A                 move.w  d0,($FF0594).l
    ROM:00FF0160                 beq.w   loc_FF0016
    ROM:00FF0164                 add.w   d0,d0
    ROM:00FF0166                 move.w  TimeAttackLevelFiles-2(pc,d0.w),d0
    ROM:00FF016A                 move.b  #1,($FF0580).l
    ROM:00FF0172                 bsr.w   RunMMD
    ROM:00FF0176                 move.l  ($FF1222).l,($FF0590).l
    ROM:00FF0180                 bra.s   TimeAttackMenu
    ROM:00FF0180 ; ---------------------------------------------------------------------------
    ROM:00FF0182 TimeAttackLevelFiles:
    ROM:00FF0182                 dc.w 1
    ROM:00FF0184                 dc.w 7
    "1" is the command ID for loading PPZ1 present and "7" is for loading PPZ2 present. Everything after this is just other code. Any levels loading after PPZ2 is purely coincidental. The levels that do load are just loading PPZ past levels, but with the zone ID and time zone ID overridden by the time attack menu. This is why the present music plays and also why the CCZ collision function activates. Functions for loading any other level also do not exist in the Sub CPU program.
    ROM:000060C4 SubCPUCmds:     dc.w locret_605C-SubCPUCmds ; DATA XREF: ROM:SubCPUCmdso
    ROM:000060C4                                         ; ROM:000060C6o ...
    ROM:000060C6                 dc.w LoadR11A-SubCPUCmds
    ROM:000060C8                 dc.w LoadR11B-SubCPUCmds
    ROM:000060CA                 dc.w LoadR11C-SubCPUCmds
    ROM:000060CC                 dc.w LoadR11D-SubCPUCmds
    ROM:000060CE                 dc.w LoadSegaScreen-SubCPUCmds
    ROM:000060D0                 dc.w LoadStageSelect-SubCPUCmds
    ROM:000060D2                 dc.w LoadR12A-SubCPUCmds
    ROM:000060D4                 dc.w LoadR12B-SubCPUCmds
    ROM:000060D6                 dc.w LoadR12C-SubCPUCmds
    ROM:000060D8                 dc.w LoadR12D-SubCPUCmds
    ROM:000060DA                 dc.w LoadTitleScreen-SubCPUCmds
    ROM:000060DC                 dc.w LoadWarpSequence-SubCPUCmds
    ROM:000060DE                 dc.w LoadTimeAttackMenu-SubCPUCmds
    ROM:000060E0                 dc.w FadeOutCDDA-SubCPUCmds
    ROM:000060E2                 dc.w PlayPPZPresentMusic-SubCPUCmds
    ROM:000060E4                 dc.w PlayCCZPresentMusic-SubCPUCmds
    ROM:000060E6                 dc.w PlayTitleMusic-SubCPUCmds
    ROM:000060E8                 dc.w PlayPPZGoodFutureMusic-SubCPUCmds
    ROM:000060EA                 dc.w PlayPPZBadFutureMusic-SubCPUCmds
    ROM:000060EC                 dc.w PlayPPZPastMusic-SubCPUCmds
    ROM:000060EE                 dc.w PlayPPZPresentMusic2-SubCPUCmds
    ROM:000060F0                 dc.w PlayPPZPresentMusic3-SubCPUCmds
    ROM:000060F2                 dc.w PlayPPZPresentMusic4-SubCPUCmds
    ROM:000060F4                 dc.w PlayPPZPresentMusic5-SubCPUCmds
    ROM:000060F6                 dc.w PlayPPZPresentMusic6-SubCPUCmds
    ROM:000060F8                 dc.w PlayPPZPresentMusic7-SubCPUCmds
    ROM:000060FA                 dc.w PlayPPZPresentMusic8-SubCPUCmds
    ROM:000060FC                 dc.w PlayPPZPresentMusic9-SubCPUCmds
    ROM:000060FE                 dc.w PlayPPZPresentMusic10-SubCPUCmds
    ROM:00006100                 dc.w PlayPPZPresentMusic11-SubCPUCmds
    ROM:00006102                 dc.w PlayPPZPresentMusic12-SubCPUCmds
    ROM:00006104                 dc.w PlayPPZPresentMusic13-SubCPUCmds
    ROM:00006106                 dc.w PlayPPZPresentMusic14-SubCPUCmds
    ROM:00006108                 dc.w PlayPPZPresentMusic15-SubCPUCmds
    ROM:0000610A                 dc.w LoadIPX-SubCPUCmds
    ROM:0000610C                 dc.w LoadOpenFMV-SubCPUCmds
    ROM:0000610E                 dc.w LoadCominSoon-SubCPUCmds
    ROM:00006110 ; ---------------------------------------------------------------------------
    ROM:00006110 LoadR12A:                               ; DATA XREF: ROM:000060D2o
    ROM:00006110                 lea     aR12a___mmd1,a0 ; "R12A__.MMD;1"
    ROM:00006114                 bra.s   LoadLevelFile
    ROM:00006116 ; ---------------------------------------------------------------------------
    ROM:00006116 LoadR12B:                               ; DATA XREF: ROM:000060D4o
    ROM:00006116                 lea     aR12b___mmd1,a0 ; "R12B__.MMD;1"
    ROM:0000611A                 bra.s   LoadLevelFile
    ROM:0000611C ; ---------------------------------------------------------------------------
    ROM:0000611C LoadR12C:                               ; DATA XREF: ROM:000060D6o
    ROM:0000611C                 lea     aR12c___mmd1,a0 ; "R12C__.MMD;1"
    ROM:00006120                 bra.s   LoadLevelFile
    ROM:00006122 ; ---------------------------------------------------------------------------
    ROM:00006122 LoadR12D:                               ; DATA XREF: ROM:000060D8o
    ROM:00006122                 lea     aR12d___mmd1,a0 ; "R12D__.MMD;1"
    ROM:00006126                 bra.s   LoadLevelFile
    ROM:00006128 ; ---------------------------------------------------------------------------
    ROM:00006128 LoadR11A:                               ; DATA XREF: ROM:000060C6o
    ROM:00006128                 lea     aR11a___mmd1,a0 ; "R11A__.MMD;1"
    ROM:0000612C                 bra.s   LoadLevelFile
    ROM:0000612E ; ---------------------------------------------------------------------------
    ROM:0000612E LoadR11B:                               ; DATA XREF: ROM:000060C8o
    ROM:0000612E                 lea     aR11b___mmd1,a0 ; "R11B__.MMD;1"
    ROM:00006132                 bra.s   LoadLevelFile
    ROM:00006134 ; ---------------------------------------------------------------------------
    ROM:00006134 LoadR11C:                               ; DATA XREF: ROM:000060CAo
    ROM:00006134                 lea     aR11c___mmd1,a0 ; "R11C__.MMD;1"
    ROM:00006138                 bra.s   LoadLevelFile
    ROM:0000613A ; ---------------------------------------------------------------------------
    ROM:0000613A LoadR11D:                               ; DATA XREF: ROM:000060CCo
    ROM:0000613A                 lea     aR11d___mmd1,a0 ; "R11D__.MMD;1"
    ROM:0000613E LoadLevelFile:                          ; CODE XREF: ROM:00006114j
    ROM:0000613E                                         ; ROM:0000611Aj ...
    ROM:0000613E                 bsr.w   WaitWordRAMAccess
    ROM:00006142                 lea     ($80000).l,a1
    ROM:00006148                 jsr     LoadFile
    ROM:0000614C                 bsr.w   ResetCDDAVol
    ROM:00006150                 bra.w   GiveWordRAMAccess
    Will say that the copy and pasted entries for playing PPZ present's music is quite interesting. Wonder what that's all about...

    But yeah, there is also 0 reference to Quartz Quadrant from what I've seen, so any claims about that level being leftover. I did find one check for Tidal Tempest in the routine for handling loops and spin tunnels so that it's activated for that zone, though!
    ROM:00204E18 ObjSonic_SpecialChunks:
    ROM:00204E18                 cmpi.b  #3,($FF1210).l
    ROM:00204E20                 beq.s   loc_204E2C
    ROM:00204E22                 tst.b   ($FF1210).l
    ROM:00204E28                 bne.w   locret_204EE2
    ROM:00204E2C loc_204E2C:
    Other than that, the only other leftovers I have found is that PPZ has every animal type's graphics stored, including TTZ's fish. Unfortunately, I have found absolutely no R2 stuff at all.
    Crimson Neo, W0LfP4Ck, Trance and 3 others like this.
  10. Trance

    Trance Newcomer Trialist

    Dec 21, 2020
    About what you said about R2. I'm pretty sure R2 wasn't even programmed yet, but it was just merely an idea. Yes, there's an unnamed place in the credits, and we don't know where it's from. It could most likely be a early Tidal Tempest since it's the only place in the credits that has water. All we have right now is speculation. I'm just going off what I see in the credits/what you said. Tell me otherwise if you have anything else.
  11. Devon

    Devon I am lost in you Member

    Aug 26, 2013
    The only things we have are concepts. There is no evidence right now that R2 was even programmed to begin with. They either never put it in, or they did a *really* good job of scrubbing it away, but I find the former to be more believable.
    MarkeyJester likes this.
  12. SpeedyGonzales

    SpeedyGonzales Newcomer Trialist

    Jul 5, 2022
    I agree that it was most likely not even past the design phase. Probably it got stuck in that phase until the deadline came and passed. Since both Sonic 2 and SonicCD was developed at the same time by different teams they would likely not want too much similarities in the level designs. R2 could have been too similar to a S2 level. If there had been development we would have seen traces of it I think. But they could simply just renamed the level file during tests so it was loaded as another level.
  13. Devon

    Devon I am lost in you Member

    Aug 26, 2013
    This is definitely just speculation, but it just looks like most of Sonic CD's levels are basically just redone versions of Sonic 1 levels. Similar order, too.

    Green Hill -> Palmtree Panic
    Spring Yard -> Collision Chaos
    Labyrinth -> Tidal Tempest
    Star Light -> Stardust Speedway
    Scrap Brain -> Metallic Madness

    People suspect that R2 was based off of Marble Zone, and judging from the concept art and ending animation, I can see it.
    JGamer2151 likes this.
  14. SpeedyGonzales

    SpeedyGonzales Newcomer Trialist

    Jul 5, 2022
    Good point. Never really reflected on the similar order. All Sonic games usually started with a beach or hill level and had a water level so the themes was probably set from what they thought made Sonic 1 good.
  15. Devon

    Devon I am lost in you Member

    Aug 26, 2013
    So, as it turns out, the special stages in Sonic CD have unused background chunks! They were possibly intended to be used in a full 1024px wide background, but VRAM limitations could have prevented that, so they cut the backgrounds in half. If that was the intention, then possibly, for stages 1 and 7, the chunks would have alternated (1st chunk from used background, then 1st unused chunk, then 2nd used chunk, then 2nd unused chunk), while the rest would have placed them after the used chunks.

    I've went and documented them on TCRF, if you wanna take a look. Some of them even use unused tiles.

    Also as a side note: the oil slick stamps in the special stages are actually tagged as oil in 712 and later. They just never implemented the collision code for it, so touching them does nothing.

    EDIT: So, now I am *very* certain that these are background extensions, because I just noticed this in stage 4's background, when it wraps around:

    There's a seam! But if I add the unused chunks...

    Seamless. Even when it wraps around.
    Last edited: Aug 24, 2022
  16. Devon

    Devon I am lost in you Member

    Aug 26, 2013
    Special stage 3 background from the Sonic CD 510 prototype

    Its unused chunks:
    [​IMG] [​IMG]
    And potential extended background with those unused chunks:
  17. Devon

    Devon I am lost in you Member

    Aug 26, 2013
    So, remember these unused sprites?

    Found some unused animation data that makes use of them!

    The animation after this is just the last sprite (the one where his feet are sunk in a little) on a loop:

    Falls right in line with this concept art:

    Might have something to do with this unused and unfinished mode for Sonic's object:
    Last edited: Aug 27, 2022
  18. Devon

    Devon I am lost in you Member

    Aug 26, 2013

    Let's talk about this monitor in Sonic CD. As it is documented, it was a prototype monitor that was ultimately scrapped in the final. In prototype builds, it acted as some sort of invisible shield that can be layered with the regular shield. This is the code that handles Sonic getting hurt in the 712 prototype:
            tst.b   shieldFlag                      ; Does Sonic have a shield?
            bne.s   .ClearShield                    ; If so, branch
            tst.b   blueRing                        ; Is the blue ring flag set?
            bne.s   .ClearShield                    ; If so, branch
            tst.w   levelRings                      ; Does Sonic have any rings?
            beq.w   .CheckKill                      ; If not, branch
            jsr     FindObjSlot                     ; Spawn ring loss object
            bne.s   .ClearShield
            move.b  #$11,oID(a1)
            move.w  oX(a0),oX(a1)
            move.w  oY(a0),oY(a1)
            bclr    #0,shieldFlag                   ; Clear shield flag
            bne.s   .SetHurt                        ; If the shield flag was set beforehand, branch
            move.b  #0,blueRing                     ; If not, clear the blue ring flag then
    Basically, the regular shield still has priority, but if the blue ring flag was set, then it still acts like an additional shield, and it only gets cleared when the regular shield flag is already cleared. In the final, it looks like they made an attempt to remove the feature, but they merely only got rid of the first blue ring flag check.

    Recently, I was taking another look at the Gems Collection symbols, and how they look in code, and I noticed that the blue ring flag is called "conbine_flag"... considering that in Chaotix, the Combine Ring powerup is also represented by a blue ring monitor, and that Chaotix was worked on by some of the people who worked on Sonic CD, and also considering the behavior as explained above... perhaps the Combine Ring powerup really was going to be in Sonic CD first, but then scrapped it?

    Well, this newly released piece of concept art put in Sonic Origins seems to confirm it even further:

    Just some food for thought~

    By the way...
    If the flag and animation was to ever get set, it would have looked like this:

    The final game mostly removes the code, except for Wacky Workbench, which again, has its own copy of Sonic's object code, which didn't seem to received a few of the code updates that the main object code got.
    Last edited: Sep 14, 2022
  19. Devon

    Devon I am lost in you Member

    Aug 26, 2013
    Sonic CD's unused special stage animations:

    07 and 08 (waiting):
    [​IMG] [​IMG]

    0C (being grabbed):

    0F (in game and fixed, sliding from oil slicks maybe?):
    [​IMG] [​IMG]

    1F and 20 (jumping?):
    [​IMG] [​IMG]

    21 and 22 (sinking?):
    [​IMG] [​IMG]

    23 (landing, possibly goes with 1F and 20):

    This frame actually has no mappings/animation data attached to it!

    Also, test object in 510's special stage that tests sprite positioning in a 3D space (which wasn't quite figured out at the point of development):

    Unused "press start" text. Still leftover in the final, but the video shows it in v0.51:
    Last edited: Dec 24, 2022
    ProjectFM and JGamer2151 like this.
  20. RobiWanKenobi

    RobiWanKenobi Python Developer Member

    Sep 10, 2022
    United States
    Those are some interesting finds. Especially the special stage red square. I wonder what other interesting things were in the special stage that haven't been discovered yet.