don't click here

Everything That I Know About Sonic the Hedgehog's Source Code

Discussion in 'General Sonic Discussion' started by Clownacy, Mar 30, 2022.

  1. Antheraea

    Antheraea

    Bug Hunter Member
    the chant was added in late IIRC, when they removed the graphics for the band in the sound test because they couldn't finish it and put the chant in the extra space.
     
  2. Kilo

    Kilo

    Starting new projects every week Tech Member
    1,240
    1,185
    93
    Canada
    Changes with the weather
    The band was never implemented in the first place there were no graphics to remove. The ROM space was likely planned for it, ended up not being used, and so the Sega chant was added.

    Edit: Also did my wiki update for the day. I lied about working on functions, sorry! However, I did do a lot of work on actors. Sonic 1 is effectively finished (aside from images) at least until we somehow uncover more names. Also added a bit to Sonic 2 and 3K. And I fixed up met in the Special Stage block table. Oh and put notes on actors that got renamed in other games as Devon mentioned.
     
    Last edited: Jan 9, 2025
  3. ndiddy

    ndiddy

    Member
    43
    66
    18
    The video is from a show where they brought Vadim Gerasimov (programmer of the original DOS version of Tetris) around to meet various Japanese game developers. I don't think Naka's actually doing anything, they probably just had him load the final Sonic code onto dev hardware and step around in the debugger for b-roll purposes. The Sega chant was added in the final few days of crunch before the game shipped, so I don't think they would have brought a news crew and visitors into the office at that point.
     
    • Informative Informative x 2
    • Like Like x 1
    • Agree Agree x 1
    • List
  4. Kilo

    Kilo

    Starting new projects every week Tech Member
    1,240
    1,185
    93
    Canada
    Changes with the weather
    Now that you mention it, it does just seem like he's awkwardly staring at the screens scrolling through the code lol.
     
  5. Cooljerk

    Cooljerk

    Professional Electromancer Oldbie
    4,973
    631
    93
    I would put money on the graphic of Sonic singing into the microphone from the ending to Sonic 1 Game Gear being a modified asset intended for the Sega Genesis just like the title screen graphic was.

    FCJ7SXxXoAQPsXm.jpg
     
  6. Kilo

    Kilo

    Starting new projects every week Tech Member
    1,240
    1,185
    93
    Canada
    Changes with the weather
    So @TwoSpaces sent an unobfuscated version of Sonic 1 J2ME Part 2.
    Unfortunately it's mostly useless, almost everything got renamed into it's own thing. The only thing I got out of it was a single new actor name; shooter. Which I believe to be the SBZ teleporter trigger, here's the code:
    Code (Text):
    1.   private void shooter_nflag_move_ikeshita(int paramInt) {
    2.     byte b1 = 27;
    3.     byte b2 = 44;
    4.     int i = -1;
    5.     b1 = 5;
    6.     objectData[6] = objectData[2];
    7.     objectData[7] = objectData[3];
    8.     if (objectData[5] == 0) {
    9.       i = ObjectColChk(PlayerPosX(), PlayerPosY() - 12, ploldpos[0], ploldpos[1] - 12, 12, 12, objectData[2], objectData[3], objectData[6], objectData[7], b1, b2);
    10.       if (i >= 0)
    11.         if (i == 0) {
    12.           PlayerParam[1] = objectData[3] - b2 << 8;
    13.           setRaidOnSize(objectData[2], b1);
    14.           playerRaidOn(objectData[22]);
    15.         } else if (i == 1) {
    16.           PlayerParam[0] = objectData[2] - b1 - 12 << 8;
    17.           PlayerParam[10] = 0;
    18.           if (objectData[19] == 0) {
    19.             objectData[5] = 1;
    20.             objectData[10] = 0;
    21.           } else if (KeyPress[4]) {
    22.             playerPushSet();
    23.           }
    24.         } else if (i == 2) {
    25.           PlayerParam[0] = objectData[2] + b1 + 12 + 1 << 8;
    26.           PlayerParam[10] = 0;
    27.           if (objectData[19] != 0) {
    28.             objectData[5] = 1;
    29.             objectData[10] = 0;
    30.           } else if (KeyPress[3]) {
    31.             playerPushSet();
    32.           }
    33.         } else if (i == 3) {
    34.           PlayerParam[1] = objectData[3] + b2 + 12 + 12 + 1 << 8;
    35.           setHeadHit();
    36.         }
    37.     }
    38.     if (objectData[5] == 1) {
    39.       PlayerJump = true;
    40.       PlayerDamage = false;
    41.       PlayerBall = true;
    42.       PlayerNoCol = true;
    43.       PlayerNoCtrl = true;
    44.       PlayerParam[11] = PlayerParam[11] + plmaxspd;
    45.       objectData[10] = objectData[10] + 1;
    46.       PlayerParam[0] = objectData[2] << 8;
    47.       PlayerParam[1] = objectData[3] + 12 - this.shooter_nflag_ike_pos[objectData[10] / 5 % 12] << 8;
    48.       if (objectData[10] / 5 % 12 == 11) {
    49.         objectData[5] = 2;
    50.         if (objectData[4] == 0 || objectData[4] == 6)
    51.           objectData[5] = 4;
    52.         objectData[10] = 0;
    53.         objectData[11] = 0;
    54.         objectData[12] = 0;
    55.         PlayerParam[3] = 0;
    56.         PlayerParam[5] = 0;
    57.         PlayerParam[10] = 0;
    58.       }
    59.     }
    60.     if (objectData[5] == 4)
    61.       if (objectData[4] == 0) {
    62.         PlayerParam[1] = PlayerPosY() + 10 << 8;
    63.         if (objectData[3] > PlayerPosY())
    64.           objectData[5] = 2;
    65.       } else {
    66.         PlayerParam[1] = PlayerPosY() - 10 << 8;
    67.         if (158 < PlayerPosY())
    68.           objectData[5] = 2;
    69.       }
    70.     if (objectData[5] == 2) {
    71.       PlayerJump = true;
    72.       PlayerDamage = false;
    73.       PlayerBall = true;
    74.       PlayerNoCol = true;
    75.       PlayerNoCtrl = true;
    76.       PlayerParam[11] = PlayerParam[11] + plmaxspd;
    77.       objectData[11] = 0;
    78.       objectData[12] = 0;
    79.       if (objectData[10] * 2 + 1 < (this.shooter_nflag_ike_objectPos[objectData[4]]).length) {
    80.         if (PlayerPosX() > this.shooter_nflag_ike_objectPos[objectData[4]][objectData[10] * 2]) {
    81.           objectData[11] = -1;
    82.         } else if (PlayerPosX() < this.shooter_nflag_ike_objectPos[objectData[4]][objectData[10] * 2]) {
    83.           objectData[11] = 1;
    84.         }
    85.         if (PlayerPosY() > this.shooter_nflag_ike_objectPos[objectData[4]][objectData[10] * 2 + 1]) {
    86.           objectData[12] = -1;
    87.         } else if (PlayerPosY() < this.shooter_nflag_ike_objectPos[objectData[4]][objectData[10] * 2 + 1]) {
    88.           objectData[12] = 1;
    89.         }
    90.         objectData[10] = objectData[10] + 1;
    91.         objectData[5] = 3;
    92.       } else {
    93.         objectData[5] = 0;
    94.         PlayerNoCol = false;
    95.         PlayerNoCtrl = false;
    96.       }
    97.     }
    98.     if (objectData[5] == 3) {
    99.       PlayerParam[11] = PlayerParam[11] + plmaxspd;
    100.       PlayerJump = true;
    101.       PlayerDamage = false;
    102.       PlayerBall = true;
    103.       PlayerNoCol = true;
    104.       PlayerNoCtrl = true;
    105.       if (objectData[11] != 0) {
    106.         PlayerParam[0] = PlayerPosX() + objectData[11] * 10 << 8;
    107.         if (objectData[11] == -1 && PlayerPosX() < this.shooter_nflag_ike_objectPos[objectData[4]][(objectData[10] - 1) * 2]) {
    108.           PlayerParam[0] = this.shooter_nflag_ike_objectPos[objectData[4]][(objectData[10] - 1) * 2] << 8;
    109.           objectData[11] = 0;
    110.         }
    111.         if (objectData[11] == 1 && PlayerPosX() > this.shooter_nflag_ike_objectPos[objectData[4]][(objectData[10] - 1) * 2]) {
    112.           PlayerParam[0] = this.shooter_nflag_ike_objectPos[objectData[4]][(objectData[10] - 1) * 2] << 8;
    113.           objectData[11] = 0;
    114.         }
    115.       }
    116.       if (objectData[12] != 0) {
    117.         PlayerParam[1] = PlayerPosY() + objectData[12] * 10 << 8;
    118.         if (objectData[12] == -1 && PlayerPosY() < this.shooter_nflag_ike_objectPos[objectData[4]][(objectData[10] - 1) * 2 + 1]) {
    119.           PlayerParam[1] = this.shooter_nflag_ike_objectPos[objectData[4]][(objectData[10] - 1) * 2 + 1] << 8;
    120.           objectData[12] = 0;
    121.         }
    122.         if (objectData[12] == 1 && PlayerPosY() > this.shooter_nflag_ike_objectPos[objectData[4]][(objectData[10] - 1) * 2 + 1]) {
    123.           PlayerParam[1] = this.shooter_nflag_ike_objectPos[objectData[4]][(objectData[10] - 1) * 2 + 1] << 8;
    124.           objectData[12] = 0;
    125.         }
    126.       }
    127.       if (objectData[11] == 0 && objectData[12] == 0) {
    128.         PlayerParam[0] = this.shooter_nflag_ike_objectPos[objectData[4]][(objectData[10] - 1) * 2] << 8;
    129.         PlayerParam[1] = this.shooter_nflag_ike_objectPos[objectData[4]][(objectData[10] - 1) * 2 + 1] << 8;
    130.         objectData[5] = 2;
    131.       }
    132.     }
    133.     if (raidOn && raidObjectNum == objectData[20] && i != 0)
    134.       raidOn = false;
    135.   }
    Also turns out the absurd amount of draw functions was not an obfuscation thing.
    Every single actor has it's own drawing function.

    And there's still a chance now that met isn't the special stage walls:
    upload_2025-1-10_9-59-13.png
     
    Last edited: Jan 10, 2025
    • Informative Informative x 2
    • List
  7. TwoSpaces

    TwoSpaces

    Member
    Cool stuff, though it's not Part 2 (the version of Part 2 with debug prints was another thing). Basically someone I know went digging on old forums and found a firmware of the Chinese release of the Panasonic VS3, which is one of the phones that had Sonic 1 for the J2ME preinstalled in it - not Part 1 (or 2), but seemingly a different port of the DoJa version produced specifically for these Panasonic preinstalls, with key differences being that all content is in one app (as opposed to being split into Part 1 and Part 2), that the music is in Yamaha SMAF (.MMF) format (most versions of Part 1 and 2 have MIDI music), and now, after the Japanese phone preservationists managed to extract this version out of the firmware dump, it turned out that there's no obfuscation on the Java classes. Also, there's music and graphics for the special stages, but you can't actually enter the giant rings in this Panasonic version (apparently their graphics aren't present), so I'm guessing all versions aside from DoJa had those cut because of tech limitations.
    Screenshot from 2025-01-11 14-30-10.png
     
    • Like Like x 3
    • Informative Informative x 3
    • List
  8. Kilo

    Kilo

    Starting new projects every week Tech Member
    1,240
    1,185
    93
    Canada
    Changes with the weather
    The well's running pretty dry on things we can get out of Sonic 1 at this point, so I've switched over to investigating Sonic 2 and 3K, and pushed out a big update to the wiki. I added a bunch of actors for both games, and a decent chunk of variables and constants for 3K. If you're wondering why some of the Sonic 2 actors don't have references, it's because I pulled their names from Sonic 2 J2ME, which we don't have a thread on.
    Oh and I started uploading images to the wiki so we have more sprites to look at. Not a lot done yet in that regard, but it's something.
    I'll probably take a week off from this since I spent the whole day on it. But then I swear I'll work on functions instead of actors like I said I would. :V
    I'm also thinking at this point we should split off the resources we're referencing into their own wiki page rather than linking to a bunch of threads that are wildly disorganized.
     
    Last edited: Jan 12, 2025
  9. Kilo

    Kilo

    Starting new projects every week Tech Member
    1,240
    1,185
    93
    Canada
    Changes with the weather
    So I figured out Sonic 1's boss names. Of course, we knew for a while it was boss1 to boss6 thanks to S2NA's symbols and S1 J2ME's graphics but the question was whether or not they followed the internal zone order or the final zone order, since the prototype showed us that the bosses were implemented very late into development after the zone order had already been changed. But I've got an answer now, and they follow the internal zone order. I got this information via the unobfuscated Chinese version of Sonic 1 J2ME I talked about 3 posts ago. Where it contains the following variables:
    Code (Text):
    1. Boss1MoveWidth
    2. Boss1Speed
    3. Boss1FurikoSpeed
    4. boss1BallPosX
    5. boss1BallPosY
    6. boss1BallOn
    7. boss2MoveTbl
    8. boss3AttackWidth
    9. boss3SpeedX
    10. boss3DownSpeed
    11. boss3FloatSpeed
    12. boss3AttackWait
    13. boss3FireCount
    14. boss4Sisoo
    15. Boss4SisooOfs
    16. Boss4ShootWait
    17. Boss4Speed
    18. Boss4HighPos
    19. Boss4LowPos
    20. Boss4BakuhatuCount
    21. boss5Block
    22. Boss5BlockLine
    23. boss5AttackWidth
    24. boss5Speed
    25. boss5AttackCount
    26. boss6Piston
    27. boss6PistonXY
    28. boss6RideNum
    29. boss6PistonNum
    30. boss6TamaY
    31. boss6Lamp
    32. boss6Destroy
    33. boss6PistonPos
    I've also got some more actor names, specifically the spike balls.
    tekyu = Chained spike ball (Small in SYZ, large in LZ) (0x57)
    fetama = Big spike balls in Spring Yard Zone (0x58)
    Beyond that projectiles and fireballs are "sub objects" or stuff like the continue screen and ending were redone to such a degree they ressemble literally nothing like what the Genesis names could've been.
     
    Last edited: Jan 26, 2025
    • Informative Informative x 3
    • Like Like x 1
    • List
  10. sayonararobocop

    sayonararobocop

    Member
    343
    119
    43
    Sure enough, no additional boss objects for Zone 2, Labyrinth. I suppose Boss6Tama is the energy balls generated from the lamps?
     
  11. Kilo

    Kilo

    Starting new projects every week Tech Member
    1,240
    1,185
    93
    Canada
    Changes with the weather
    That'd be correct. Tama is the term used throughout the code to refer to projectiles.
    Also I should've maybe specified that these 'variables' are actually more like constants. So boss6TamaY would actually be used to set the starting height of the energy balls when they spawn, rather than containing their current height.
     
    Last edited: Jan 26, 2025
  12. Cooljerk

    Cooljerk

    Professional Electromancer Oldbie
    4,973
    631
    93
    Tama means ball, btw.
     
  13. Devon

    Devon

    La mer va embrassé moi et délivré moi lakay. Tech Member
    1,511
    1,858
    93
    your mom
    Yeah on that note, the wrecking ball used for Green Hill's boss is called "btama", with "b" presumably being short for "boss", and the graphics for it being called "tamacg".
     
    Last edited: Jan 26, 2025
    • Informative Informative x 2
    • Like Like x 1
    • List
  14. BenoitRen

    BenoitRen

    Tech Member
    875
    500
    93
    I took the time to add a bunch of actors to the neglected Sonic CD section of the wiki's page on the source code.
     
  15. sayonararobocop

    sayonararobocop

    Member
    343
    119
    43
    Starlight Zone boss, presumably boss4Sisoo and the related object SissooOfs is the teeter-totter in its two states. Shiso is the romanization for Teeter Totter under Kunrei-Shiki. I suppose the Boss4Bakuhaku must be the bomb. I couldn't confirm what bakuhaku means, it must have a nonstandard romanization. My guess is it's an onomatopoeia for the bomb's explosion.
     
  16. Devon

    Devon

    La mer va embrassé moi et délivré moi lakay. Tech Member
    1,511
    1,858
    93
    your mom
    By the way, here's a list of symbols and their disassembly equivalents for data in Sonic 1:
    • burankopat = Map_Swing_GHZ
    • ballpat = Map_GBall
    • shimapat2 = Map_Plat_GHZ
    • kanipat = Map_Crab
    • hachipat = Map_Buzz
    • ringpat = Map_Ring
    • itempat = Map_Monitor
    • fishpat = Map_Chop
    • togepat = Map_Spike
    • jyamapat = Map_PRock
    • sjumppat = Map_Spring
    • kamerepat = Map_Newt
    • kagebpat = Map_Edge
    • musipat = Map_Moto
    • savepat = Map_Lamp
    • bobinpat = Map_Bump
    • sisoopat = Map_Seesaw
    • sballpat = Map_SSawBall
    • staffpat = Map_Cred
    • boss1chg = Ani_Eggman
    • boss1pat = Map_Eggman
    • boss2pat = Map_BossItems
    • masinchg = Ani_Pri
    • masinpat = Map_Pri
    • .colitbl = .sizes (under ReactToItem)
    • escoretbl = .points (under React_Enemy)
    • scrpattbl = SS_MapIndex
    • metpat = Map_SS_Walls (probably)
    • sprevpat = Map_SS_R
    • zonepat = Map_SS_R
    • derupat = Map_SS_R
    • sp1uppat = Map_SS_R
    • golepat = Map_SS_R
    • warppat = Map_SS_R
    • sphashpat = Map_SS_Glass
    • koukapat = Map_SS_Glass
    • breakpat = Map_SS_Glass
    • spuppat = Map_SS_Up
    • spdownpat = Map_SS_Down
    • hous0pat = Map_SS_Chaos1
    • hous1pat = Map_SS_Chaos2
    • hous2pat = Map_SS_Chaos3
    • scorepat = Map_HUD
    • scorewrtcg = Art_Hud
    • playsuucg = Art_LivesNums
    • edittbl = DebugList
    • edit1tbl = .GHZ (under DebugList)
    • edit2tbl = .LZ (under DebugList)
    • edit3tbl = .MZ (under DebugList)
    • edit4tbl = .SLZ (under DebugList)
    • edit5tbl = .SYZ (under DebugList)
    • edit6tbl = .SBZ (under DebugList)
    • edit7tbl = .Ending (under DebugList)
    • fish2pat = Map_Jaws
    • mogurapat = Map_Burro
    • yaripat = Map_Harp
    • boxpat = Map_Push
    • switch2pat = Map_But
    • udaipat = Map_MBlockLZ
    • dai3pat = Map_LBlock
    • kazaripat = Map_Gar
    • kassyapat = Map_LConv
    • unipat = Map_Orb
    • awapat = Map_Bub
    • mizupat = Map_WFall
    • boupat = Map_Pole
    • benpat = Map_Flap
    • firepat = Map_Fire
    • fblockpat = Map_Brick
    • yoganpat = Map_Geyser
    • yogan2pat = Map_LWall
    • yadopat = Map_Yad
    • bryukapat = Map_Smab
    • daipat = Map_MBlock
    • break2pat = Map_CFlo
    • yogancpat = Map_LTag
    • batpat = Map_Bas
    • imopat = Map_Cat
    • elevpat = Map_Elev
    • z4daipat = Map_Plat_SLZ
    • pedalpat = Map_Circ
    • steppat = Map_Stair
    • funpat = Map_Fan
    • hassyapat = Map_Scen
    • brobopat = Map_Bomb
    • unipat = Map_Orb
    • arumapat = Map_Roll
    • signalpat = Map_Light
    • z5daipat = Map_Plat_SYZ
    • dai2pat = Map_FBlock
    • fetamapat = Map_BBall
    • hagurumapat = Map_Disc
    • patapat = Map_Trap
    • yukafpat = Map_Spin
    • nokopat = Map_Saw
    • dai4pat = Map_Stomp
    • doorpat = Map_ADoor
    • yukaepat = Map_VanP
    • fire6pat = Map_Flame
    • elepat = Map_Elec
    • yukaipat = Map_Gird
    • scolipat = Map_Invis
    • butapat = Map_Hog
    • usapat = Map_Splats (in prototype)
    • mawarupat = Map_Jun
    • usagipat = Map_Animal1
    • pengpat = Map_Animal1
    • flicpat = Map_Animal2
    • azarpat = Map_Animal2
    • niwapat = Map_Animal2
    • fbutapat = Map_Animal3
    • risupat = Map_Animal3
    • mapinittbl = LevelHeaders
    • divdevtbl = ArtLoadCues
    • ddev00 = PLC_Main
    • ddev01 = PLC_Main2
    • ddev02 = PLC_Explode
    • ddev03 = PLC_GameOver
    • ddev04 = PLC_GHZ
    • ddev05 = PLC_GHZ2
    • ddev06 = PLC_LZ
    • ddev07 = PLC_LZ2
    • ddev08 = PLC_MZ
    • ddev09 = PLC_MZ2
    • ddev10 = PLC_SLZ
    • ddev11 = PLC_SLZ2
    • ddev12 = PLC_SYZ
    • ddev13 = PLC_SYZ2
    • ddev14 = PLC_SBZ
    • ddev15 = PLC_SBZ2
    • ddev16 = PLC_TitleCard
    • ddev17 = PLC_Boss
    • ddev18 = PLC_Signpost
    • ddev19 = PLC_Warp
    • ddev20 = PLC_SpecialStage
    • ddev21 = PLC_GHZAnimals
    • ddev22 = PLC_LZAnimals
    • ddev23 = PLC_MZAnimals
    • ddev24 = PLC_SLZAnimals
    • ddev25 = PLC_SYZAnimals
    • ddev26 = PLC_SBZAnimals
    • ddev27 = PLC_SSResult
    • ddev28 = PLC_Ending
    • ddev29 = PLC_TryAgain
    • ddev30 = PLC_EggmanSBZ2
    • ddev31 = PLC_FZBoss
    • scddirtbl = AngleMap
    • scdtbl = CollArray1
    • scdtbl1 = CollArray1
    • scdtbl2 = CollArray2
    • zone1scd = Col_GHZ
    • zone2scd = Col_LZ
    • zone3scd = Col_MZ
    • zone4scd = Col_SLZ
    • zone5scd = Col_SYZ
    • zone6scd = Col_SBZ
    • rotmaptbl0 = SS_1
    • rotmaptbl1 = SS_2
    • rotmaptbl2 = SS_3
    • rotmaptbl3 = SS_4
    • rotmaptbl4 = SS_5
    • rotmaptbl5 = SS_6
    • zonemaptbl = Level_Index
    • zone1_1a = Level_GHZ1
    • zone1_1b = Level_GHZbg
    • zone1_1z = byte_68D70
    • zone1_2a = Level_GHZ2
    • zone1_2b = Level_GHZbg
    • zone1_2z = byte_68E3C
    • zone1_3a = Level_GHZ3
    • zone1_3b = Level_GHZbg
    • zone1_3z = byte_68F84
    • zone1_4a = byte_68F88
    • zone1_4b = byte_68F88
    • zone1_4z = byte_68F88
    • zone2_1a = Level_LZ1
    • zone2_1b = Level_LZbg
    • zone2_1z = byte_69190
    • zone2_2a = Level_LZ2
    • zone2_2b = Level_LZbg
    • zone2_2z = byte_6922E
    • zone2_3a = Level_LZ3
    • zone2_3b = Level_LZbg
    • zone2_3z = byte_6934C
    • zone2_4a = Level_SBZ3
    • zone2_4b = Level_LZbg
    • zone2_4z = byte_6940A
    • zone3_1a = Level_MZ1
    • zone3_1b = Level_MZ1bg
    • zone3_1z = Level_MZ1
    • zone3_2a = Level_MZ2
    • zone3_2b = Level_MZ2bg
    • zone3_2z = byte_6965C
    • zone3_3a = Level_MZ3
    • zone3_3b = Level_MZ3bg
    • zone3_3z = byte_697E6
    • zone3_4a = byte_697EA
    • zone3_4b = byte_697EA
    • zone3_4z = byte_697EA
    • zone4_1a = Level_SLZ1
    • zone4_1b = Level_SLZbg
    • zone4_1z = byte_69B84
    • zone4_2a = Level_SLZ2
    • zone4_2b = Level_SLZbg
    • zone4_2z = byte_69B84
    • zone4_3a = Level_SLZ3
    • zone4_3b = Level_SLZbg
    • zone4_3z = byte_69B84
    • zone4_4a = byte_69B84
    • zone4_4b = byte_69B84
    • zone5_4z = byte_69B84
    • zone5_1a = Level_SYZ1
    • zone5_1b = Level_SYZbg
    • zone5_1z = byte_69C7E
    • zone5_2a = Level_SYZ2
    • zone5_2b = Level_SYZbg
    • zone5_2z = byte_69D86
    • zone5_3a = Level_SYZ3
    • zone5_3b = Level_SYZbg
    • zone5_3z = byte_69EE4
    • zone5_4a = byte_69EE8
    • zone5_4b = byte_69EE8
    • zone5_4z = byte_69EE8
    • zone6_1a = Level_SBZ1
    • zone6_1b = Level_SBZ1bg
    • zone6_1z = Level_SBZ1bg
    • zone6_2a = Level_SBZ2
    • zone6_2b = Level_SBZ2bg
    • zone6_2z = Level_SBZ2bg
    • zone6_3a = Level_SBZ2
    • zone6_3b = Level_SBZ2bg
    • zone6_3z = byte_6A2F8
    • zone6_4a = byte_6A2FC
    • zone6_4b = byte_6A2FC
    • zone6_4z = byte_6A2FC
    • zone7_1a = Level_End
    • zone7_1b = Level_GHZbg
    • zone7_1z = byte_6A320
    • zone7_2a = Level_End
    • zone7_2b = Level_GHZbg
    • zone7_2z = byte_6A320
    • zone7_3a = byte_6A320
    • zone7_3b = byte_6A320
    • zone7_3z = byte_6A320
    • zone7_4a = byte_6A320
    • zone7_4b = byte_6A320
    • zone7_4z = byte_6A320
    • bigringcg = Art_BigRing
    • asettbl = ObjPos_Index
    • asettbl10 = ObjPos_GHZ1
    • asettbl11 = ObjPos_GHZ2
    • asettbl12 = ObjPos_GHZ3
    • asettbl20 = ObjPos_LZ1
    • asettbl21 = ObjPos_LZ2
    • asettbl22 = ObjPos_LZ3
    • asettbl23 = ObjPos_SBZ3
    • kassya10 = ObjPos_LZ1pf1
    • kassya11 = ObjPos_LZ1pf2
    • kassya20 = ObjPos_LZ2pf1
    • kassya21 = ObjPos_LZ2pf2
    • kassya30 = ObjPos_LZ3pf1
    • kassya31 = ObjPos_LZ3pf2
    • asettbl30 = ObjPos_MZ1
    • asettbl31 = ObjPos_MZ2
    • asettbl32 = ObjPos_MZ3
    • asettbl40 = ObjPos_SLZ1
    • asettbl41 = ObjPos_SLZ2
    • asettbl42 = ObjPos_SLZ3
    • asettbl50 = ObjPos_SYZ1
    • asettbl51 = ObjPos_SYZ2
    • asettbl52 = ObjPos_SYZ3
    • asettbl60 = ObjPos_SBZ1
    • asettbl61 = ObjPos_SBZ2
    • asettbl62 = ObjPos_FZ
    • beltc10 = ObjPos_SBZ1pf1
    • beltc11 = ObjPos_SBZ1pf2
    • beltc12 = ObjPos_SBZ1pf3
    • beltc13 = ObjPos_SBZ1pf4
    • beltc14 = ObjPos_SBZ1pf5
    • beltc15 = ObjPos_SBZ1pf6
    • asettbl70 = ObjPos_End
    • asettbl10z = ObjPos_Null
    • asettbl20z = ObjPos_Null
    • asettbl30z = ObjPos_Null
    • asettbl40z = ObjPos_Null
    • asettbl50z = ObjPos_Null
    • asettbl60z = ObjPos_Null
    • asettbl70z = ObjPos_Null
    • pcm_top = DACDriver
    • playcg = Art_Sonic
    • playpat = Map_Sonic
    • playwrtpat = SonicDynPLC
    • bariacg = Nem_Shield
    • mutekicg = Nem_Stars
    • logocg = Nem_SegaLogo
    • logomap = Eni_SegaLogo
    • greencg = Nem_Stalk
    • burankocg = Nem_Swing
    • hashicg = Nem_Bridge
    • movecg = Nem_GhzUnkBlock
    • tamacg = Nem_Ball
    • togehcg = Nem_GhzLog
    • togehcg2 = Nem_SpikePole
    • jyamacg = Nem_PplRock
    • brkabecg = Nem_GhzWall1
    • kagebcg = Nem_GhzWall2
    • scorecg = Nem_Hud
    • playnocg = Nem_Lives
    • ringcg = Nem_Ring
    • itemcg = Nem_Monitors
    • togecg = Nem_Spikes
    • tencg = Nem_Points
    • savecg = Nem_Lamp
    • butacg = Nem_BallHog
    • kanicg = Nem_Crabmeat
    • hachicg = Nem_Buzz
    • bakuhacg = Nem_UnkExplode
    • moguracg = Nem_Burrobot
    • fishcg = Nem_Chopper
    • fish2cg = Nem_Jaws
    • arumacg = Nem_Roller
    • musicg = Nem_Motobug
    • kamerecg = Nem_Newtron
    • yadocg = Nem_Yadrin
    • batcg = Nem_Basaran
    • usacg = Nem_Splats
    • brobocg = Nem_Bomb
    • unicg = Nem_Orbinaut
    • imocg = Nem_Cater
    • zonecg = Nem_TitleCard
    • yararecg = Nem_Explode
    • overcg = Nem_GameOver
    • jumpcg = Nem_HSpring
    • jump2cg = Nem_VSpring
    • golecg = Nem_SignPost
    • ebigringcg = Nem_BigFlash
    • btencg = Nem_Bonus
    • contcg = Nem_ContSonic
    • sdsoniccg = Nem_MiniSonic
    • usagicg = Nem_Rabbit
    • niwacg = Nem_Chicken
    • pengcg = Nem_Penguin
    • azarcg = Nem_Seal
    • fbutacg = Nem_Pig
    • fliccg = Nem_Flicky
    • risucg = Nem_Squirrel
    • zone1blk = Blk16_GHZ
    • zone1cg = Nem_GHZ_1st
    • enkeicg = Nem_GHZ_2nd
    • zone1map = Blk256_GHZ
    • zone2blk = Blk16_LZ
    • zone2cg = Nem_LZ
    • zone2map = Blk256_LZ
    • zone3blk = Blk16_MZ
    • zone3cg = Nem_MZ
    • zone3map = Blk256_MZ
    • zone4blk = Blk16_SLZ
    • zone4cg = Nem_SLZ
    • zone4map = Blk256_SLZ
    • zone5blk = Blk16_SYZ
    • zone5cg = Nem_SYZ
    • zone5map = Blk256_SYZ
    • zone6blk = Blk16_SBZ
    • zone6cg = Nem_SBZ
    • zone6map = Blk256_SBZ
     
    • Informative Informative x 2
    • Agree Agree x 1
    • List
  17. nineko

    nineko

    I am the Holy Cat Tech Member
    6,386
    537
    93
    italy
    Baku does mean "bomb". It's often mentioned as part of techniques in Dragon Ball, such as the Bakuhatsuha.

    Haku can mean "white", though that would make no sense.

    edit: actually, I just noticed that you typed it wrong, it was "bakuhatu" in Kilo's original post, so there's no "haku" at all.
     
    Last edited: Jan 27, 2025
    • Informative Informative x 1
    • List
  18. Devon

    Devon

    La mer va embrassé moi et délivré moi lakay. Tech Member
    1,511
    1,858
    93
    your mom
    Additionally, this refers to the prototype Ball Hog's bomb explosion.

    [​IMG]
     
    Last edited: Jan 27, 2025
  19. sayonararobocop

    sayonararobocop

    Member
    343
    119
    43
    Ah, ADHD strikes again. I looked up Bakuhatu and it appears to have limited use, however there are quite a few Bombeman vinyl figures of bombs under that name.
     
  20. nineko

    nineko

    I am the Holy Cat Tech Member
    6,386
    537
    93
    italy
    *sigh*

    Bakuhatu and bakuhatsu are effectively the same thing. Why do you keep on guessing when it's clear that you can't speak Japanese?

    Here's a great starting point from Retro's member Chimes.

    And, for the record, "sisoo" is literally the Japanese pronunciation of "seesaw".