Sonic Unused Content/Prototype Digging General

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

  1. faith

    faith Well-Known Member Member

    Joined:
    Aug 26, 2013
    Messages:
    1,213
    I haven't seen this documented anywhere, but there's a THIRD unused hanging sprite (on the very left here). The unused hanging sprites are found in Tidal Tempest (which seems to be a hub for these unused sprites in the final, with leftover mappings as far back as v0.02).

    [​IMG]

    In the Wacky Workbench sprite data, all 3 are replaced with the final sprites, even in the 510 prototype, so it's possible that this set is the pre-510 version, before they were redrawn.

    Also, funny thing about these sprites. On TCRF and Retro's wiki, they were portrayed as a single sprite, colored blue, and a few sprite sheets I've seen color the second frame white. The game data shows that the first frame is black and white, and the second frame is yellow and black.

    [​IMG]
     
    Last edited: Nov 27, 2022
    ProjectFM, Pacca, MrLordSith and 3 others like this.
  2. faith

    faith Well-Known Member Member

    Joined:
    Aug 26, 2013
    Messages:
    1,213
    So, in the v0.02 prototype of Sonic CD, object ID 0x25 just points to a blank object. However, there is leftover code that was assigned to that ID. By adding the pointer back in, it can be seen that object 0x25 was a log bridge! The graphics for it were already found, and in fact, are also loaded into VRAM. The mappings were also referenced in the debug mode object list. If you restore the bridge pointer and re-enable debug mode, you can place bridges.



    Interesting thing to note is that bridges were actually placed in the level earlier in the development, but got dummied out, with a row of those invisible platforms being put in its place.

    Also, if you set its subtype value to be nonzero, it does this:
    [​IMG]
     
    Last edited: Jan 25, 2023
    Pacca, Clownacy, Scrap Sorra and 4 others like this.
  3. faith

    faith Well-Known Member Member

    Joined:
    Aug 26, 2013
    Messages:
    1,213
    So, I took a dive into the Nemesis compressed graphics/objects in the stage files, and came across some stuff.

    Collision Chaos

    [​IMG]

    This is a teleporter. It can be found in the 510 prototype, albeit with broken mappings. 3 of these will circle around, and when Sonic enters one, he gets teleported to another one within the circle.

    [​IMG]

    Tidal Tempest

    [​IMG] [​IMG]

    First, some unused platforms. Interestingly, despite the fact it doesn't seem to fit, the one on the left came from the past. The others come from the future.

    [​IMG]
    [​IMG]

    This is some kind of electric beam? The code for it can be found in the 510 and v0.51 prototypes. Only the v0.51 prototype has working collision detection, where touching it makes it stop. The code was removed by the 712 prototype.

    [​IMG]

    I wonder if these unused sprites are related... they are also found in Tidal Tempest's sprite data...

    [​IMG]

    Stardust Speedway

    [​IMG]
    [​IMG]

    So, as you may know, in earlier prototypes, Stardust Speedway didn't have searchlights. They instead used horizontal interrupts to move a lit up section up and down. These sprites were gonna be placed at the edges of the lit up section. As is, it would've looked something like:

    [​IMG] [​IMG]

    [​IMG]

    This is a duplicate set of those mesh tiles that would've been placed as objects.

    Metallic Madness

    [​IMG]

    This is a trap door. This was actually used in later prototypes, but got scrapped in the final.

    [​IMG]
     
  4. faith

    faith Well-Known Member Member

    Joined:
    Aug 26, 2013
    Messages:
    1,213
    So, in most of the stage files, there are 2 unused sets of stage layout data. They are layouts for Green Hill Act 2 and 3 from Sonic 1.

    What I think happened is that each stage started off with all 3 acts of Green Hill in the stage layout data, and just replaced act 1 with the proper stage layout. The loading routine always loads the first entry, hence why act 1 is missing. These leftovers date as far back as v0.02!

    The only exception is R11A, which had a few optimizations not applied to the rest of the stage files, which included removing those leftover layouts.
     
    Last edited: Feb 2, 2023 at 3:04 AM
    JGamer2151 and EpsilionDubwool like this.
  5. SSaturn

    SSaturn Newcomer Trialist

    Joined:
    Friday
    Messages:
    1
    Holy crap!! That is a lot of prototype discoveries, you're the TRUE discovery! [​IMG]
     
  6. JGamer2151

    JGamer2151 Active Member Member

    Joined:
    Dec 1, 2020
    Messages:
    36
    So most of the levels (aside from R11A) in Sonic CD started off with a complete set of Green Hill Zone level layouts ranging from acts 1-3, then the first act layout was replaced with the proper one while the others were kept intact…interesting find I’ll say.

    Never would’ve guessed that the Green Hill level layouts for acts 2 and 3 would be leftover in Sonic CD, really points towards the fact that Sonic CD was built off of Sonic 1's code.
     
  7. faith

    faith Well-Known Member Member

    Joined:
    Aug 26, 2013
    Messages:
    1,213
    ...besides the fact that it uses Sonic 1's engine.

    Also, I completely forgot to crosspost this over here. I found an alternate prototype palette for Palmtree Panic Past in the final game. It fits the v0.02 graphics like so:
    [​IMG]

    [​IMG]

    Palette cycling is the same as in v0.02.

    Also, in between v0.02 and 510, before the background was changed to the final one, the palette was slightly altered to make the sky a little less saturated. This palette data can be found leftover in the final game.

    (Left = v0.02, Right = Alteration before 510)
    [​IMG] [​IMG]
     
    Last edited: Feb 4, 2023 at 5:05 AM
    JGamer2151 and Nik Pi like this.
  8. Nik Pi

    Nik Pi Well-Known Member Member

    Joined:
    Feb 14, 2022
    Messages:
    70
    Location:
    Kazakhstan
    I guess, I can post here something.

    I have research of wall recoil program in Sonic 2 beta and try to port it in the final game.
    You know, that it has main code, but also it has some links.

    First that I've found was the Sonic_HurtStop:
    It has a check of flag, that recoil code sets:

    Code:
    Sonic_HurtStop:                ; CODE XREF: ROM:loc_1077Ep
            move.w    ($FFFFEECE).w,d0
            addi.w    #$E0,d0    ; 'а'
            cmp.w    $C(a0),d0
            bcs.w    JmpTo_KillSonic
            bsr.w    Sonic_DoLevelCollision
            btst    #1,$22(a0)
            bne.s    locret_107E6
            moveq    #0,d0
            move.w    d0,$12(a0)
            move.w    d0,$10(a0)
            move.w    d0,$14(a0)
            tst.b    $25(a0); test wall recoil flag
            beq.s    loc_107D6; if not- go away!
            move.b    #$FF,$25(a0); delete(?) recoil flag
            move.b    #$B,$1C(a0); play second recoil animation
            rts
    But between this and Obj01_Dead you can see the code, that was removed since Simon Wai prototype!
    Code:
    loc_107E8:     
            cmpi.b    #$B,$1C(a0); test for recoil 2 anim
            bne.s    loc_107FA; if no- go there
            move.b    ($FFFFF605).w,d0; idk lol
            andi.b    #$7F,d0    ; .. something :p
            beq.s    loc_10804; go to unused function
    
    loc_107FA:
            subq.b    #2,routine(a0)
            move.b    #0,$25(a0); zeroize wall recoil flag(?)
    
    loc_10804:
            bsr.w    Sonic_RecordPos
            bsr.w    Sonic_Animate
            bsr.w    LoadSonicDynPLC
            jmp    DisplaySprite
    It uses to not flickering sonic, unlike it flickering when it get a hurt.

    Ok, I lied. loc_10804 still exists in da final game as unused function:

    Code:
    Sonic_HurtInstantRecover:
        subq.b    #2,routine(a0)    ; => Obj01_Control
        move.b    #0,routine_secondary(a0)
        bsr.w    Sonic_RecordPos
        bsr.w    Sonic_Animate
        bsr.w    LoadSonicDynPLC
        jmp    (DisplaySprite).l
    Link to this code you can find in Obj01_Hurt:

    Code:
    Obj01_Hurt:                ; DATA XREF: ROM:0000FA1Ao
            tst.b    $25(a0); test recoil flag
            bmi.w    loc_107E8; go there
    Well, I hasn't found anything for Tails, so wall recoil can be presented here as function that will be removed soon.


    I explained you how this shit have been worked in NA proto. I... idk why you need it but anyway :D



    Btw, if you'll try to port it all in the fg disasm- you'll get all working well, but animation is too fast.
     
    Last edited: Feb 4, 2023 at 6:39 AM
    JGamer2151 likes this.