Path: blob/master/Sonic 2/Scripts/MCZ/MCZSetup.txt
1480 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: MCZ Setup Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.value1 : object.paletteTimer12private alias object.value2 : object.paletteFrame1314// Tracks15private alias 0 : TRACK_STAGE16private alias 1 : TRACK_ACTFINISH17private alias 2 : TRACK_INVINCIBLE18private alias 3 : TRACK_CONTINUE19private alias 4 : TRACK_BOSS20private alias 5 : TRACK_GAMEOVER21private alias 6 : TRACK_DROWNING22private alias 7 : TRACK_SUPER2324// Reserved object slots25private alias 10 : SLOT_ZONESETUP26private alias 25 : SLOT_MUSICEVENT_CHANGE27private alias 26 : SLOT_MUSICEVENT_BOSS2829// Music Events30private alias 0 : MUSICEVENT_FADETOBOSS31private alias 1 : MUSICEVENT_FADETOSTAGE32private alias 2 : MUSICEVENT_TRANSITION3334private alias 0 : MUSICEVENT_FLAG_NOCHANGE35private alias 1 : MUSICEVENT_FLAG_SPEEDUP36private alias 2 : MUSICEVENT_FLAG_SLOWDOWN3738// Music Loops39private alias 99356 : MUSIC_LOOP_MCZ_1P40private alias 79574 : MUSIC_LOOP_MCZ_1P_F4142private alias 18672 : MUSIC_LOOP_MCZ_2P // This is 18671 in the Sound Test and some parts of HPZ...43private alias 15272 : MUSIC_LOOP_MCZ_2P_F4445private alias 38679 : MUSIC_LOOP_INV46private alias 30897 : MUSIC_LOOP_INV_F474849// ========================50// Function Declarations51// ========================5253reserve function MCZSetup_SpeedUpMusic1P54reserve function MCZSetup_SlowDownMusic1P55reserve function MCZSetup_SpeedUpMusic2P56reserve function MCZSetup_SlowDownMusic2P575859// ========================60// Tables61// ========================6263private table MCZSetup_paletteCycle640xC00000, 0xE06000, 0xE0C000, 0xE0E08065end table666768// ========================69// Function Definitions70// ========================7172private function MCZSetup_SpeedUpMusic1P73CheckEqual(object[SLOT_MUSICEVENT_CHANGE].type, TypeName[Music Event])74temp0 = checkResult75CheckEqual(object[SLOT_MUSICEVENT_CHANGE].propertyValue, MUSICEVENT_TRANSITION)76temp0 &= checkResult77CheckEqual(stage.musicFlag, MUSICEVENT_FLAG_NOCHANGE)78temp0 &= checkResult79if temp0 == false80switch music.currentTrack81case TRACK_STAGE82SetMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F)83SwapMusicTrack("MysticCave_F.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_1P_F, 8000)84break8586case TRACK_INVINCIBLE87SetMusicTrack("MysticCave_F.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_1P_F)88SwapMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F, 8000)89break9091case TRACK_BOSS92case TRACK_DROWNING93case TRACK_SUPER94SetMusicTrack("MysticCave_F.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_1P_F)95SetMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F)96break9798end switch99else100stage.musicFlag = MUSICEVENT_FLAG_SPEEDUP101end if102end function103104105private function MCZSetup_SlowDownMusic1P106CheckEqual(object[SLOT_MUSICEVENT_CHANGE].type, TypeName[Music Event])107temp0 = checkResult108CheckEqual(object[SLOT_MUSICEVENT_CHANGE].propertyValue, MUSICEVENT_TRANSITION)109temp0 &= checkResult110CheckEqual(stage.musicFlag, MUSICEVENT_FLAG_NOCHANGE)111temp0 &= checkResult112if temp0 == false113switch music.currentTrack114case TRACK_STAGE115SetMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV)116SwapMusicTrack("MysticCave.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_1P, 12500)117break118119case TRACK_INVINCIBLE120SetMusicTrack("MysticCave.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_1P)121SwapMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV, 12500)122break123124case TRACK_BOSS125case TRACK_DROWNING126case TRACK_SUPER127SetMusicTrack("MysticCave.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_1P)128SetMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV)129break130131end switch132else133stage.musicFlag = MUSICEVENT_FLAG_SLOWDOWN134end if135end function136137138private function MCZSetup_SpeedUpMusic2P139CheckEqual(object[SLOT_MUSICEVENT_CHANGE].type, TypeName[Music Event])140temp0 = checkResult141CheckEqual(object[SLOT_MUSICEVENT_CHANGE].propertyValue, MUSICEVENT_TRANSITION)142temp0 &= checkResult143CheckEqual(stage.musicFlag, MUSICEVENT_FLAG_NOCHANGE)144temp0 &= checkResult145if temp0 == false146switch music.currentTrack147case TRACK_STAGE148SetMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F)149SwapMusicTrack("MysticCave2_F.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_2P_F, 8000)150break151152case TRACK_INVINCIBLE153SetMusicTrack("MysticCave2_F.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_2P_F)154SwapMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F, 8000)155break156157case TRACK_BOSS158SetMusicTrack("MysticCave2_F.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_2P_F)159SetMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F)160break161162end switch163else164stage.musicFlag = MUSICEVENT_FLAG_SPEEDUP165end if166end function167168169private function MCZSetup_SlowDownMusic2P170CheckEqual(object[SLOT_MUSICEVENT_CHANGE].type, TypeName[Music Event])171temp0 = checkResult172CheckEqual(object[SLOT_MUSICEVENT_CHANGE].propertyValue, MUSICEVENT_TRANSITION)173temp0 &= checkResult174CheckEqual(stage.musicFlag, MUSICEVENT_FLAG_NOCHANGE)175temp0 &= checkResult176if temp0 == false177switch music.currentTrack178case TRACK_STAGE179SetMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV)180SwapMusicTrack("MysticCave2.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_2P, 12500)181break182183case TRACK_INVINCIBLE184SetMusicTrack("MysticCave2.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_2P)185SwapMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV, 12500)186break187188case TRACK_BOSS189SetMusicTrack("MysticCave2.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_2P)190SetMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV)191break192193end switch194else195stage.musicFlag = MUSICEVENT_FLAG_SLOWDOWN196end if197end function198199200// ========================201// Events202// ========================203204event ObjectUpdate205// Update the flashing lantern palette cycle206object.paletteTimer++207if object.paletteTimer == 2208object.paletteTimer = 0209object.paletteFrame++210object.paletteFrame &= 3211212GetTableValue(temp0, object.paletteFrame, MCZSetup_paletteCycle)213SetPaletteEntry(0, 155, temp0)214end if215end event216217218event ObjectStartup219if options.vsMode == false220SetMusicTrack("MysticCave.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_1P)221SpeedUpMusic = MCZSetup_SpeedUpMusic1P222SlowDownMusic = MCZSetup_SlowDownMusic1P223else224SetMusicTrack("MysticCave2.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_2P)225SpeedUpMusic = MCZSetup_SpeedUpMusic2P226SlowDownMusic = MCZSetup_SlowDownMusic2P227end if228229// Reset the color used in the boss flash230SetPaletteEntry(0, 192, 0x000000)231232// Cucky and Mocky live in this endless mine233animalType1 = TypeName[Cucky]234animalType2 = TypeName[Mocky]235236object[SLOT_ZONESETUP].type = TypeName[MCZ Setup]237object[SLOT_ZONESETUP].priority = PRIORITY_ACTIVE238239// The different acts get different parallax values240// Do note that the boss act (act "B") doesn't have anything here and instead uses the default values already in MCZ's Backgrounds.bin241switch stage.actNum242case 1243stage.curYBoundary1 = 960244tileLayer[1].scrollPos = -0x1400000245tileLayer[1].parallaxFactor = 85246break247248case 2249stage.curYBoundary1 = 96250tileLayer[1].scrollPos = -0x100000251tileLayer[1].parallaxFactor = 42252// Some small bounds adjustments are needed for the HPZ entrance to trigger253stage.curYBoundary2 = 2048254stage.deathBoundary = stage.curYBoundary2255stage.deathBoundary <<= 16256break257258end switch259end event260261262// ========================263// Editor Events264// ========================265266event RSDKDraw267DrawSprite(0)268end event269270271event RSDKLoad272LoadSpriteSheet("Global/Display.gif")273SpriteFrame(-16, -16, 32, 32, 1, 143)274275SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")276end event277278279