Path: blob/master/Sonic 1/Scripts/MZ/MZSetup.txt
1483 views
// ----------------------------------1// RSDK Project: Sonic 12// Script Description: MZ Setup Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.value1 : object.lavaTileFrame12private alias object.value2 : object.lavaAniTileID13private alias object.value3 : object.lavaAnimTimer14private alias object.value4 : object.candleAnimTimer1516// Player Aliases17private alias object.xpos : player.xpos18private alias object.ypos : player.ypos19private alias object.value37 : player.shield2021// Tile Info ID Aliases22private alias 8 : TILEINFO_ANGLEB2324// Tile Flag Aliases25private alias 1 : TILE_LAVA2627// Shields28private alias 3 : SHIELD_FIRE2930// Tracks31private alias 0 : TRACK_STAGE32private alias 2 : TRACK_INVINCIBLE33private alias 4 : TRACK_BOSS3435// Reserved object slots36private alias 10 : SLOT_ZONESETUP37private alias 25 : SLOT_MUSICEVENT_CHANGE3839private alias 0 : MUSICEVENT_FADETOBOSS40private alias 1 : MUSICEVENT_FADETOSTAGE41private alias 2 : MUSICEVENT_TRANSITION4243private alias 0 : MUSICEVENT_FLAG_NOCHANGE44private alias 1 : MUSICEVENT_FLAG_SPEEDUP45private alias 2 : MUSICEVENT_FLAG_SLOWDOWN4647// Music loops48private alias 99380 : MUSIC_LOOP_MZ49private alias 79537 : MUSIC_LOOP_MZ_F5051private alias 39528 : MUSIC_LOOP_INV52private alias 30436 : MUSIC_LOOP_INV_F535455// ========================56// Function Declarations57// ========================5859reserve function MZSetup_SpeedUpMusic60reserve function MZSetup_SlowDownMusic616263// ========================64// Tables65// ========================6667private table MZSetup_replay_attract_S680x0300000, 0x2640000690x00, 8700x08, 137710x38, 1720x28, 4730x08, 14740x00, 18750x08, 18760x38, 1770x28, 7780x08, 2790x00, 32800x02, 13810x00, 3820x30, 1830x20, 8840x00, 3850x08, 49860x38, 1870x28, 7880x08, 37890x38, 1900x28, 8910x08, 2920x00, 18930x04, 16940x00, 5950x30, 1960x20, 11970x08, 11980x00, 7990x04, 161000x00, 41010x08, 61020x00, 221030x08, 51040x38, 11050x28, 121060x08, 161070x00, 171080x08, 311090x00, 131100x38, 11110x28, 91120x00, 361130x08, 21140x38, 11150x28, 91160x08, 361170x00, 661180x30, 11190x20, 81200x04, 371210x00, 61220x04, 171230x34, 11240x24, 61250x04, 681260x00, 281270x02, 121280x32, 11290x22, 81300x02, 501310x00, 321320x08, 831330x38, 11340x28, 81350x08, 91360x00, 211370x38, 11380x28, 71390x08, 51400x00, 981410x08, 691420x00, 251430x08, 211440x38, 11450x28, 61460x08, 41470x00, 151480x04, 161490x00, 41500x08, 181510x38, 11520x28, 71530x08, 51540x00, 271550x08, 231560x00, 91570x30, 11580x20, 61590x00, 191600x08, 191610x00, 201620x38, 41630x28, 91640x08, 4165end table166167private table MZSetup_replay_attract_T1680x0300000, 0x26800001690x00, 81700x08, 411710x38, 11720x28, 31730x08, 801740x38, 11750x28, 61760x08, 71770x00, 231780x08, 211790x38, 11800x28, 51810x08, 61820x00, 151830x08, 81840x00, 171850x38, 11860x28, 51870x08, 461880x38, 11890x28, 121900x08, 301910x00, 91920x30, 11930x20, 31940x28, 31950x00, 251960x04, 41970x00, 71980x08, 31990x38, 12000x28, 72010x00, 142020x04, 182030x00, 52040x08, 52050x38, 12060x28, 92070x08, 72080x00, 242090x08, 172100x00, 122110x08, 192120x00, 32130x30, 12140x20, 72150x28, 42160x08, 122170x00, 202180x08, 172190x38, 12200x28, 102210x08, 982220x00, 72230x04, 802240x34, 12250x24, 202260x04, 22270x00, 142280x08, 212290x38, 12300x28, 102310x08, 152320x38, 12330x28, 72340x08, 592350x00, 232360x08, 62370x38, 12380x28, 62390x08, 562400x00, 272410x08, 242420x00, 172430x08, 732440x38, 12450x28, 82460x08, 232470x00, 52480x04, 252490x00, 242500x04, 362510x00, 772520x04, 352530x34, 12540x24, 72550x04, 72560x00, 132570x08, 192580x00, 532590x04, 102600x34, 12610x24, 42620x04, 162630x00, 142640x04, 82650x00, 1012660x04, 42670x34, 12680x24, 22690x04, 322700x00, 14271end table272273private table MZSetup_replay_attract_K2740x0300000, 0x26400002750x00, 222760x08, 1372770x38, 12780x28, 72790x08, 62800x00, 402810x08, 92820x38, 12830x28, 62840x08, 182850x00, 32860x04, 162870x08, 52880x38, 12890x28, 82900x08, 222910x38, 12920x28, 272930x08, 322940x38, 12950x28, 152960x08, 92970x00, 272980x30, 12990x20, 103000x28, 23010x08, 183020x00, 213030x08, 23040x38, 13050x28, 143060x20, 33070x00, 83080x04, 163090x00, 33100x08, 403110x38, 13120x28, 243130x08, 43140x00, 183150x08, 113160x38, 13170x28, 133180x08, 863190x38, 13200x28, 53210x08, 63220x38, 13230x28, 2013240x08, 313250x38, 13260x28, 63270x08, 113280x00, 173290x08, 293300x00, 473310x30, 13320x20, 143330x00, 243340x04, 153350x00, 163360x08, 93370x00, 473380x30, 13390x20, 133400x28, 23410x08, 83420x38, 13430x28, 203440x09, 33450x01, 833460x09, 23470x08, 913480x00, 293490x30, 13500x20, 133510x00, 73520x30, 13530x20, 153540x21, 1355end table356357private table MZSetup_replay_credits_ST3580x0EA00000, 0x46C00003590x00, 233600x04, 403610x00, 53620x08, 313630x38, 13640x28, 303650x08, 243660x38, 13670x28, 33680x2C, 23690x24, 83700x04, 133710x00, 153720x04, 163730x00, 53740x04, 223750x34, 13760x24, 33770x04, 43780x00, 163790x04, 1213800x00, 423810x08, 83820x00, 193830x00, 83840x04, 13850x00, 64386end table387388private table MZSetup_replay_credits_K3890x0EA00000, 0x46C00003900x00, 253910x04, 293920x34, 13930x24, 153940x04, 53950x00, 183960x08, 173970x38, 13980x28, 103990x08, 44000x38, 14010x28, 434020x08, 44030x00, 174040x04, 44050x34, 14060x24, 54070x04, 34080x00, 334090x04, 1094100x00, 344110x08, 94120x00, 154130x04, 54140x00, 2554150x00, 404160x30, 14170x20, 84180x00, 74190x04, 12420end table421422423// ========================424// Function Definitions425// ========================426427private function MZSetup_SpeedUpMusic428CheckEqual(object[SLOT_MUSICEVENT_CHANGE].type, TypeName[Music Event])429temp0 = checkResult430CheckEqual(object[SLOT_MUSICEVENT_CHANGE].propertyValue, MUSICEVENT_TRANSITION)431temp0 &= checkResult432CheckEqual(stage.musicFlag, MUSICEVENT_FLAG_NOCHANGE)433temp0 &= checkResult434if temp0 == false435switch music.currentTrack436case TRACK_STAGE437SetMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F)438SwapMusicTrack("Marble_F.ogg", TRACK_STAGE, MUSIC_LOOP_MZ_F, 8000)439break440441case TRACK_INVINCIBLE442SetMusicTrack("Marble_F.ogg", TRACK_STAGE, MUSIC_LOOP_MZ_F)443SwapMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F, 8000)444break445446case TRACK_BOSS447SetMusicTrack("Marble_F.ogg", TRACK_STAGE, MUSIC_LOOP_MZ_F)448SetMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F)449break450451end switch452else453stage.musicFlag = MUSICEVENT_FLAG_SPEEDUP454end if455end function456457458private function MZSetup_SlowDownMusic459CheckEqual(object[SLOT_MUSICEVENT_CHANGE].type, TypeName[Music Event])460temp0 = checkResult461CheckEqual(object[SLOT_MUSICEVENT_CHANGE].propertyValue, MUSICEVENT_TRANSITION)462temp0 &= checkResult463CheckEqual(stage.musicFlag, MUSICEVENT_FLAG_NOCHANGE)464temp0 &= checkResult465if temp0 == false466switch music.currentTrack467case TRACK_STAGE468SetMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV)469SwapMusicTrack("Marble.ogg", TRACK_STAGE, MUSIC_LOOP_MZ, 12500)470break471472case TRACK_INVINCIBLE473SetMusicTrack("Marble.ogg", TRACK_STAGE, MUSIC_LOOP_MZ)474SwapMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV, 12500)475break476477case TRACK_BOSS478SetMusicTrack("Marble.ogg", TRACK_STAGE, MUSIC_LOOP_MZ)479SetMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV)480break481482end switch483else484stage.musicFlag = MUSICEVENT_FLAG_SLOWDOWN485end if486end function487488489// ========================490// Events491// ========================492493event ObjectUpdate494object.frame = object.animationTimer495object.frame /= 20496object.animationTimer++497object.animationTimer %= 60498499object.lavaAniTileID = object.frame500object.lavaAniTileID <<= 1501object.lavaAniTileID += 440502Copy16x16Tile(366, object.lavaAniTileID)503504object.lavaAniTileID++505Copy16x16Tile(367, object.lavaAniTileID)506507switch object.frame508case 0509object.lavaAniTileID = 460510break511512case 1513object.lavaAniTileID = 528514break515516case 2517object.lavaAniTileID = 596518break519520end switch521522object.lavaAnimTimer++523object.lavaAnimTimer &= 0x1FF524Sin(object.lavaTileFrame, object.lavaAnimTimer)525object.lavaTileFrame += 0x200526object.lavaTileFrame >>= 2527object.lavaTileFrame &= 0x1F528if object.lavaTileFrame > 0xF529object.lavaTileFrame &= 15530object.lavaTileFrame <<= 2531532object.lavaAniTileID += object.lavaTileFrame533Copy16x16Tile(363, object.lavaAniTileID)534535object.lavaAniTileID++536Copy16x16Tile(362, object.lavaAniTileID)537538object.lavaAniTileID++539Copy16x16Tile(365, object.lavaAniTileID)540541object.lavaAniTileID++542Copy16x16Tile(364, object.lavaAniTileID)543else544object.lavaTileFrame <<= 2545546object.lavaAniTileID += object.lavaTileFrame547Copy16x16Tile(362, object.lavaAniTileID)548549object.lavaAniTileID++550Copy16x16Tile(363, object.lavaAniTileID)551552object.lavaAniTileID++553Copy16x16Tile(364, object.lavaAniTileID)554555object.lavaAniTileID++556Copy16x16Tile(365, object.lavaAniTileID)557end if558559// BG Candles560temp0 = object.candleAnimTimer561temp0 >>= 4562temp0 <<= 1563temp0 += 446564Copy16x16Tile(360, temp0)565temp0++566Copy16x16Tile(361, temp0)567temp0++568object.candleAnimTimer++569object.candleAnimTimer &= 0x3F570571// Check interaction with lava tiles572foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)573temp1 = player[currentPlayer].xpos574temp1 >>= 16575576temp2 = player[currentPlayer].ypos577temp2 >>= 16578temp2 += 4579580Get16x16TileInfo(temp0, temp1, temp2, TILEINFO_ANGLEB)581if temp0 == TILE_LAVA582// Instead of calling Player_FireHit, this script checks against the Player's shield and hurts them via the normal function if the player isn't protected583// Don't know why, but my best guess is that this script predated Player_FireHit's creation or something584if player[currentPlayer].shield != SHIELD_FIRE585CallFunction(Player_Hit)586end if587end if588next589end event590591592event ObjectDraw593// Special handling for keeping the interior BG aligned594if screen.yoffset > 458595// Camera is underground, inside the interior596temp0 = screen.yoffset597temp0 -= 458598temp0 *= 0xC000599tileLayer[1].scrollPos = temp0600else601// Camera is above ground602tileLayer[1].scrollPos = 0603end if604end event605606607event ObjectStartup608// Set the music track for this Stage609SetMusicTrack("Marble.ogg", TRACK_STAGE, MUSIC_LOOP_MZ)610SpeedUpMusic = MZSetup_SpeedUpMusic611SlowDownMusic = MZSetup_SlowDownMusic612613// Ricky and Rocky are the inhabitants along this flamed quest614animalType1 = TypeName[Ricky]615animalType2 = TypeName[Rocky]616617// Set object 10 to an MZ Setup object618object[SLOT_ZONESETUP].type = TypeName[MZ Setup]619object[SLOT_ZONESETUP].priority = PRIORITY_ACTIVE620object[SLOT_ZONESETUP].drawOrder = 0621622// Different parallax between the different acts623// (Act 1 parallax info is built into the normal MZ BG file)624switch stage.actNum625case 2626hParallax[0].scrollPos = 0x1000000627hParallax[1].scrollPos = 0x2000000628hParallax[2].scrollPos = 0x2000000629hParallax[3].scrollPos = 0x2000000630hParallax[4].scrollPos = 0x2000000631hParallax[5].scrollPos = 0x2000000632hParallax[6].scrollPos = 0x2000000633break634635case 3636hParallax[0].scrollPos = 0x4000000637hParallax[1].scrollPos = 0x1000000638hParallax[2].scrollPos = 0x1000000639hParallax[3].scrollPos = 0x1000000640hParallax[4].scrollPos = 0x1000000641hParallax[5].scrollPos = 0x1000000642hParallax[6].scrollPos = 0x1000000643break644645end switch646647if options.attractMode == true648switch stage.playerListPos649case PLAYER_SONIC_A650#platform: USE_ORIGINS651case PLAYER_AMY_A652#endplatform653if credits.screen == 0654Player_attractTable = MZSetup_replay_attract_S655Player_attractTableSize = 194656Player_attractDuration = 1660657else658Player_attractTable = MZSetup_replay_credits_ST659Player_attractTableSize = 56660Player_attractDuration = 540661end if662break663664case PLAYER_TAILS_A665if credits.screen == 0666Player_attractTable = MZSetup_replay_attract_T667Player_attractTableSize = 206668Player_attractDuration = 1800669else670Player_attractTable = MZSetup_replay_credits_ST671Player_attractTableSize = 56672Player_attractDuration = 540673end if674break675676case PLAYER_KNUCKLES_A677if credits.screen == 0678Player_attractTable = MZSetup_replay_attract_K679Player_attractTableSize = 162680Player_attractDuration = 1800681else682Player_attractTable = MZSetup_replay_credits_K683Player_attractTableSize = 62684Player_attractDuration = 540685end if686break687688end switch689690CallFunction(Player_SetupAttractDemo)691end if692end event693694695// ========================696// Editor Events697// ========================698699event RSDKDraw700DrawSprite(0)701end event702703704event RSDKLoad705LoadSpriteSheet("Global/Display.gif")706SpriteFrame(-16, -16, 32, 32, 1, 143)707708SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")709end event710711712