Path: blob/master/Sonic 2/Scripts/HPZ/HPZSetup.txt
1478 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: HPZ Setup Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.value9 : object.clrDivisor_R12private alias object.value10 : object.clrDivisor_G13private alias object.value11 : object.clrDivisor_B14private alias object.value12 : object.waterClrDivisor_R15private alias object.value13 : object.waterClrDivisor_G16private alias object.value14 : object.waterClrDivisor_B1718private alias object.value0 : object.deformTimer19private alias object.value1 : object.paletteTimer20private alias object.value2 : object.orb1AniTileDelay21private alias object.value3 : object.orb1AniTileFrame22private alias object.value4 : object.orb2AniTileDelay23private alias object.value5 : object.orb2AniTileFrame24private alias object.value6 : object.orb3AniTileDelay25private alias object.value7 : object.orb3AniTileFrame26private alias object.value8 : object.orbFrameTimer27private alias object.value16 : object.waterfallLoopTimer28private alias object.value17 : object.playingWaterfallLoop2930// Player Aliases31private alias object.state : player.state32private alias object.xpos : player.xpos33private alias object.ypos : player.ypos34private alias object.direction : player.direction35private alias object.gravity : player.gravity36private alias object.collisionBottom : player.collisionBottom3738// Tile Flag Aliases39private alias 1 : TILE_WATERSLIDE4041// Tile Info ID Aliases42private alias 8 : TILEINFO_ANGLEB4344// Tracks45private alias 0 : TRACK_STAGE46private alias 1 : TRACK_ACTFINISH47private alias 2 : TRACK_INVINCIBLE48private alias 3 : TRACK_CONTINUE49private alias 4 : TRACK_BOSS50private alias 5 : TRACK_GAMEOVER51private alias 6 : TRACK_DROWNING52private alias 7 : TRACK_SUPER5354// Reserved object slots55private alias 10 : SLOT_ZONESETUP56private alias 25 : SLOT_MUSICEVENT_CHANGE57private alias 26 : SLOT_MUSICEVENT_BOSS5859// Music Events60private alias 2 : MUSICEVENT_TRANSITION6162private alias 0 : MUSICEVENT_FLAG_NOCHANGE63private alias 1 : MUSICEVENT_FLAG_SPEEDUP64private alias 2 : MUSICEVENT_FLAG_SLOWDOWN6566// Music Loops6768// There's something weird about the normal stage song's loop point:69// - The initial setup for this stage uses 1867170// - This is what the Sound Test uses as well71// - However, the loop point set when slowing down the tracks is 1867272// - This may just be a one sample difference but I assure you, it's quite important because now it makes everything more complicated73// - Here, I've just decided to label the slow-down version as the proper one, I do hope you'll understand...74private alias 18672 : MUSIC_LOOP_MCZ_2P75private alias 15272 : MUSIC_LOOP_MCZ_2P_F7677private alias 59852 : MUSIC_LOOP_PPZ7879private alias 38679 : MUSIC_LOOP_INV80private alias 30897 : MUSIC_LOOP_INV_F8182// Achievement Aliases83private alias 7 : ACHIEVEMENT_ASECRETREVEALED848586// ========================87// Function Declarations88// ========================8990reserve function HPZSetup_getClrDivisor91reserve function HPZSetup_InitSuperSonicPal92reserve function HPZSetup_InitSuperTailsPal93reserve function HPZSetup_InitSuperKnuxPal94reserve function HPZSetup_InitSuperAmyPal95reserve function HPZSetup_SpeedUpMusic96reserve function HPZSetup_SlowDownMusic979899// ========================100// Static Values101// ========================102103public value Water_flashTimer = 0 // Uses "Water_" since all water objects use it from the setup so its easier to make new objs this way104public value HPZSetup_bossFightActive = 0105public value HPZSetup_glowingOrbFrame = 0106private value HPZSetup_hasAchievement = 0107108109// ========================110// Tables111// ========================112113private table HPZSetup_greenOrbFramesTable1114768, 18115770, 9116772, 18117770, 9118end table119120private table HPZSetup_purpleOrbFramesTable1121774, 18122776, 9123778, 18124776, 9125end table126127private table HPZSetup_greenOrbFramesTable2128780, 18129783, 9130786, 18131783, 9132end table133134private table HPZSetup_purpleOrbFramesTable2135789, 18136792, 9137795, 18138792, 9139end table140141private table HPZSetup_orbFrameTable1420, 0, 1, 2, 3, 3, 21431, 2, 3, 3, 2, 1, 0144end table145146147// ========================148// Function Definitions149// ========================150151// Wacky function to take a normal color and turn it into an underwater color152private function HPZSetup_getClrDivisor153// Regular Color154object.clrDivisor_R = temp1155object.clrDivisor_R >>= 16156157object.clrDivisor_G = temp1158object.clrDivisor_G >>= 8159object.clrDivisor_G &= 0xFF160161object.clrDivisor_B = temp1162object.clrDivisor_B &= 0xFF163164// Underwater Color165object.waterClrDivisor_R = temp2166object.waterClrDivisor_R >>= 16167168object.waterClrDivisor_G = temp2169object.waterClrDivisor_G >>= 8170object.waterClrDivisor_G &= 0xFF171172object.waterClrDivisor_B = temp2173object.waterClrDivisor_B &= 0xFF174175// Minimum of 1 (you cant divide by zero)176if object.waterClrDivisor_R == 0177object.waterClrDivisor_R = 1178end if179180if object.waterClrDivisor_G == 0181object.waterClrDivisor_G = 1182end if183184if object.waterClrDivisor_B == 0185object.waterClrDivisor_B = 1186end if187188object.clrDivisor_R <<= 8189object.clrDivisor_G <<= 8190object.clrDivisor_B <<= 8191object.clrDivisor_R /= object.waterClrDivisor_R192object.clrDivisor_G /= object.waterClrDivisor_G193object.clrDivisor_B /= object.waterClrDivisor_B194195if object.clrDivisor_R == 0196object.clrDivisor_R = 0x100197end if198199if object.clrDivisor_G == 0200object.clrDivisor_G = 0x100201end if202203if object.clrDivisor_B == 0204object.clrDivisor_B = 0x100205end if206end function207208209private function HPZSetup_InitSuperSonicPal210temp0 = 0211212// First Set of colors is just the regular underwater palette213GetPaletteEntry(1, 2, temp1)214SetTableValue(temp1, temp0, Player_SonicSuperAltPal)215temp0++216217GetPaletteEntry(1, 3, temp1)218SetTableValue(temp1, temp0, Player_SonicSuperAltPal)219temp0++220221GetPaletteEntry(1, 4, temp1)222SetTableValue(temp1, temp0, Player_SonicSuperAltPal)223temp0++224225GetPaletteEntry(1, 5, temp1)226SetTableValue(temp1, temp0, Player_SonicSuperAltPal)227temp0++228229CopyPalette(1, 0, 4, 2, 4)230while temp0 < 64231GetTableValue(temp1, temp0, Player_SonicSuperPal)232SetPaletteEntry(3, 0, temp1)233temp0++234235GetTableValue(temp1, temp0, Player_SonicSuperPal)236SetPaletteEntry(3, 1, temp1)237temp0++238239GetTableValue(temp1, temp0, Player_SonicSuperPal)240SetPaletteEntry(3, 2, temp1)241temp0++242243GetTableValue(temp1, temp0, Player_SonicSuperPal)244SetPaletteEntry(3, 3, temp1)245temp0 -= 3246247// Just mix the 2 palettes, we'll use the results as our new colors248SetPaletteFade(5, 3, 4, 48, 0, 4)249250GetPaletteEntry(5, 0, temp1)251SetTableValue(temp1, temp0, Player_SonicSuperAltPal)252temp0++253254GetPaletteEntry(5, 1, temp1)255SetTableValue(temp1, temp0, Player_SonicSuperAltPal)256temp0++257258GetPaletteEntry(5, 2, temp1)259SetTableValue(temp1, temp0, Player_SonicSuperAltPal)260temp0++261262GetPaletteEntry(5, 3, temp1)263SetTableValue(temp1, temp0, Player_SonicSuperAltPal)264temp0++265loop266end function267268269private function HPZSetup_InitSuperTailsPal270temp0 = 0271272GetPaletteEntry(1, 13, temp1)273SetTableValue(temp1, temp0, Player_TailsSuperAltPal)274temp0++275276GetPaletteEntry(1, 17, temp1)277SetTableValue(temp1, temp0, Player_TailsSuperAltPal)278temp0++279280GetPaletteEntry(1, 18, temp1)281SetTableValue(temp1, temp0, Player_TailsSuperAltPal)282temp0++283284GetPaletteEntry(1, 16, temp1)285SetTableValue(temp1, temp0, Player_TailsSuperAltPal)286temp0++287288while temp0 < 24289GetPaletteEntry(0, 13, temp1)290GetPaletteEntry(1, 13, temp2)291292CallFunction(HPZSetup_getClrDivisor)293294GetTableValue(temp1, temp0, Player_TailsSuperPal)295296temp2 = temp1297temp2 >>= 8298temp2 &= 0xFF299300temp3 = temp1301temp3 &= 0xFF302303temp1 >>= 16304305temp1 *= 0xF8306temp1 /= object.clrDivisor_R307308temp2 *= 0xF8309temp2 /= object.clrDivisor_G310311temp3 *= 0xF8312temp3 /= object.clrDivisor_B313314temp1 &= 0xF0315temp2 &= 0xF0316temp3 &= 0xF0317318if temp1 > 0xE0319temp1 = 0xE0320end if321322if temp2 > 0xE0323temp2 = 0xE0324end if325326if temp3 > 0xE0327temp3 = 0xE0328end if329330temp1 <<= 16331temp2 <<= 8332temp1 += temp2333temp1 += temp3334SetTableValue(temp1, temp0, Player_TailsSuperAltPal)335temp0++336337338GetPaletteEntry(0, 17, temp1)339GetPaletteEntry(1, 17, temp2)340341CallFunction(HPZSetup_getClrDivisor)342343GetTableValue(temp1, temp0, Player_TailsSuperPal)344345temp2 = temp1346temp2 >>= 8347temp2 &= 0xFF348349temp3 = temp1350temp3 &= 0xFF351352temp1 >>= 16353354temp1 *= 0x100355temp1 /= object.clrDivisor_R356357temp2 *= 0x100358temp2 /= object.clrDivisor_G359360temp3 *= 0x100361temp3 /= object.clrDivisor_B362363temp1 &= 0xF0364temp2 &= 0xF0365temp3 &= 0xF0366367if temp1 > 0xE0368temp1 = 0xE0369end if370371if temp2 > 0xE0372temp2 = 0xE0373end if374375if temp3 > 0xE0376temp3 = 0xE0377end if378379temp1 <<= 16380temp2 <<= 8381temp1 += temp2382temp1 += temp3383SetTableValue(temp1, temp0, Player_TailsSuperAltPal)384temp0++385386387GetPaletteEntry(0, 18, temp1)388GetPaletteEntry(1, 18, temp2)389390CallFunction(HPZSetup_getClrDivisor)391392GetTableValue(temp1, temp0, Player_TailsSuperPal)393394temp2 = temp1395temp2 >>= 8396temp2 &= 0xFF397398temp3 = temp1399temp3 &= 0xFF400401temp1 >>= 16402403temp1 *= 0x100404temp1 /= object.clrDivisor_R405406temp2 *= 0x100407temp2 /= object.clrDivisor_G408409temp3 *= 0x100410temp3 /= object.clrDivisor_B411412temp1 &= 0xF0413temp2 &= 0xF0414temp3 &= 0xF0415416if temp1 > 0xE0417temp1 = 0xE0418end if419420if temp2 > 0xE0421temp2 = 0xE0422end if423424if temp3 > 0xE0425temp3 = 0xE0426end if427428temp1 <<= 16429temp2 <<= 8430temp1 += temp2431temp1 += temp3432SetTableValue(temp1, temp0, Player_TailsSuperAltPal)433temp0++434435436GetPaletteEntry(0, 16, temp1)437GetPaletteEntry(1, 16, temp2)438439CallFunction(HPZSetup_getClrDivisor)440441GetTableValue(temp1, temp0, Player_TailsSuperPal)442443temp2 = temp1444temp2 >>= 8445temp2 &= 0xFF446447temp3 = temp1448temp3 &= 0xFF449450temp1 >>= 16451452temp1 *= 0x100453temp1 /= object.clrDivisor_R454455temp2 *= 0x100456temp2 /= object.clrDivisor_G457458temp3 *= 0x100459temp3 /= object.clrDivisor_B460461temp1 &= 0xF0462temp2 &= 0xF0463temp3 &= 0xF0464465if temp1 > 0xE0466temp1 = 0xE0467end if468469if temp2 > 0xE0470temp2 = 0xE0471end if472473if temp3 > 0xE0474temp3 = 0xE0475end if476477temp1 <<= 16478temp2 <<= 8479temp1 += temp2480temp1 += temp3481SetTableValue(temp1, temp0, Player_TailsSuperAltPal)482temp0++483loop484end function485486487private function HPZSetup_InitSuperKnuxPal488temp0 = 0489490GetPaletteEntry(1, 26, temp1)491SetTableValue(temp1, temp0, Player_KnuxSuperAltPal)492temp0++493494GetPaletteEntry(1, 27, temp1)495SetTableValue(temp1, temp0, Player_KnuxSuperAltPal)496temp0++497498GetPaletteEntry(1, 28, temp1)499SetTableValue(temp1, temp0, Player_KnuxSuperAltPal)500temp0++501end function502503504private function HPZSetup_InitSuperAmyPal505#platform: USE_ORIGINS506temp0 = 0507508GetPaletteEntry(1, 54, temp1)509SetTableValue(temp1, temp0, Player_AmySuperAltPal)510temp0++511512GetPaletteEntry(1, 50, temp1)513SetTableValue(temp1, temp0, Player_AmySuperAltPal)514temp0++515516GetPaletteEntry(1, 51, temp1)517SetTableValue(temp1, temp0, Player_AmySuperAltPal)518temp0++519520GetPaletteEntry(1, 52, temp1)521SetTableValue(temp1, temp0, Player_AmySuperAltPal)522temp0++523524GetPaletteEntry(1, 53, temp1)525SetTableValue(temp1, temp0, Player_AmySuperAltPal)526temp0++527528while temp0 < 30529temp4 = temp0530temp4 -= 5531532GetTableValue(temp1, temp4, Player_AmySuperAltPal)533534temp2 = temp1535temp2 >>= 8536temp2 &= 255537538temp3 = temp1539temp3 &= 255540541temp1 >>= 16542temp1 += 32543if temp1 > 255544temp1 = 255545end if546547temp2 += 32548if temp2 > 255549temp2 = 255550end if551552temp3 += 32553if temp3 > 255554temp3 = 255555end if556557temp1 <<= 16558temp2 <<= 8559temp1 += temp2560temp1 += temp3561SetTableValue(temp1, temp0, Player_AmySuperAltPal)562temp0++563loop564565temp6 = 25566while temp0 < 50567temp5 = 0568while temp5 < 5569temp4 = temp6570temp4 += temp5571GetTableValue(temp1, temp4, Player_AmySuperAltPal)572SetTableValue(temp1, temp0, Player_AmySuperAltPal)573temp0++574temp5++575loop576577temp6 -= 5578loop579#endplatform580end function581582583private function HPZSetup_SpeedUpMusic584CheckEqual(object[SLOT_MUSICEVENT_CHANGE].type, TypeName[Music Event])585temp0 = checkResult586CheckEqual(object[SLOT_MUSICEVENT_CHANGE].propertyValue, MUSICEVENT_TRANSITION)587temp0 &= checkResult588CheckEqual(stage.musicFlag, MUSICEVENT_FLAG_NOCHANGE)589temp0 &= checkResult590if temp0 == false591switch music.currentTrack592case TRACK_STAGE593SetMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F)594SwapMusicTrack("MysticCave2_F.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_2P_F, 8000)595break596597case TRACK_INVINCIBLE598SetMusicTrack("MysticCave2_F.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_2P_F)599SwapMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F, 8000)600break601602case TRACK_BOSS603case TRACK_DROWNING604case TRACK_SUPER605SetMusicTrack("MysticCave2_F.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_2P_F)606SetMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F)607break608609end switch610else611stage.musicFlag = MUSICEVENT_FLAG_SPEEDUP612end if613end function614615616private function HPZSetup_SlowDownMusic617CheckEqual(object[SLOT_MUSICEVENT_CHANGE].type, TypeName[Music Event])618temp0 = checkResult619CheckEqual(object[SLOT_MUSICEVENT_CHANGE].propertyValue, MUSICEVENT_TRANSITION)620temp0 &= checkResult621CheckEqual(stage.musicFlag, MUSICEVENT_FLAG_NOCHANGE)622temp0 &= checkResult623if temp0 == false624switch music.currentTrack625case TRACK_STAGE626SetMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV)627SwapMusicTrack("MysticCave2.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_2P, 12500)628break629630case TRACK_INVINCIBLE631SetMusicTrack("MysticCave2.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_2P)632SwapMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV, 12500)633break634635case TRACK_BOSS636case TRACK_DROWNING637case TRACK_SUPER638SetMusicTrack("MysticCave2.ogg", TRACK_STAGE, MUSIC_LOOP_MCZ_2P)639SetMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV)640break641642end switch643else644stage.musicFlag = MUSICEVENT_FLAG_SLOWDOWN645end if646end function647648649// ========================650// Events651// ========================652653event ObjectUpdate654if stage.actNum == 1655// If in act 1 - the Hidden Palace act encountered in normal play - set the correct water level for before and after the boss arena656if player[0].xpos > 0xE800000657stage.newWaterLevel = 0x6140000658else659stage.newWaterLevel = 0x74C0000660end if661end if662663object.deformTimer++664if object.deformTimer == 2665tileLayer[0].deformationOffsetW++666end if667668if object.deformTimer == 4669tileLayer[0].deformationOffsetW++670tileLayer[1].deformationOffsetW++671object.deformTimer = 0672end if673674object.paletteTimer++675if object.paletteTimer == 5676object.paletteTimer = 0677RotatePalette(0, 185, 188, true)678end if679680if object.orb1AniTileDelay < 2681GetTableValue(temp0, object.orb1AniTileFrame, HPZSetup_greenOrbFramesTable1)682Copy16x16Tile(738, temp0)683684temp0++685Copy16x16Tile(739, temp0)686687GetTableValue(temp0, object.orb1AniTileFrame, HPZSetup_purpleOrbFramesTable1)688Copy16x16Tile(744, temp0)689690temp0++691Copy16x16Tile(745, temp0)692693GetTableValue(temp0, object.orb1AniTileFrame, HPZSetup_greenOrbFramesTable2)694Copy16x16Tile(750, temp0)695696temp0++697Copy16x16Tile(751, temp0)698699temp0++700Copy16x16Tile(752, temp0)701702GetTableValue(temp0, object.orb1AniTileFrame, HPZSetup_purpleOrbFramesTable2)703Copy16x16Tile(759, temp0)704705temp0++706Copy16x16Tile(760, temp0)707708temp0++709Copy16x16Tile(761, temp0)710711object.orb1AniTileFrame++712GetTableValue(object.orb1AniTileDelay, object.orb1AniTileFrame, HPZSetup_greenOrbFramesTable1)713714object.orb1AniTileFrame++715object.orb1AniTileFrame &= 7716else717object.orb1AniTileDelay--718end if719720if object.orb2AniTileDelay < 2721GetTableValue(temp0, object.orb2AniTileFrame, HPZSetup_greenOrbFramesTable1)722Copy16x16Tile(740, temp0)723724temp0++725Copy16x16Tile(741, temp0)726727GetTableValue(temp0, object.orb2AniTileFrame, HPZSetup_purpleOrbFramesTable1)728Copy16x16Tile(746, temp0)729730temp0++731Copy16x16Tile(747, temp0)732733GetTableValue(temp0, object.orb2AniTileFrame, HPZSetup_greenOrbFramesTable2)734Copy16x16Tile(753, temp0)735736temp0++737Copy16x16Tile(754, temp0)738739temp0++740Copy16x16Tile(755, temp0)741742GetTableValue(temp0, object.orb2AniTileFrame, HPZSetup_purpleOrbFramesTable2)743Copy16x16Tile(762, temp0)744745temp0++746Copy16x16Tile(763, temp0)747748temp0++749Copy16x16Tile(764, temp0)750751object.orb2AniTileFrame++752GetTableValue(object.orb2AniTileDelay, object.orb2AniTileFrame, HPZSetup_greenOrbFramesTable1)753754object.orb2AniTileFrame++755object.orb2AniTileFrame &= 7756else757object.orb2AniTileDelay--758end if759760if object.orb3AniTileDelay < 2761GetTableValue(temp0, object.orb3AniTileFrame, HPZSetup_greenOrbFramesTable1)762Copy16x16Tile(742, temp0)763temp0++764765Copy16x16Tile(743, temp0)766767GetTableValue(temp0, object.orb3AniTileFrame, HPZSetup_purpleOrbFramesTable1)768Copy16x16Tile(748, temp0)769temp0++770771Copy16x16Tile(749, temp0)772773GetTableValue(temp0, object.orb3AniTileFrame, HPZSetup_greenOrbFramesTable2)774Copy16x16Tile(756, temp0)775776temp0++777Copy16x16Tile(757, temp0)778779temp0++780Copy16x16Tile(758, temp0)781782GetTableValue(temp0, object.orb3AniTileFrame, HPZSetup_purpleOrbFramesTable2)783Copy16x16Tile(765, temp0)784785temp0++786Copy16x16Tile(766, temp0)787788temp0++789Copy16x16Tile(767, temp0)790791object.orb3AniTileFrame++792GetTableValue(object.orb3AniTileDelay, object.orb3AniTileFrame, HPZSetup_greenOrbFramesTable1)793794object.orb3AniTileFrame++795object.orb3AniTileFrame &= 7796else797object.orb3AniTileDelay--798end if799800if Water_flashTimer > 0801Water_flashTimer--802end if803804temp0 = object.orbFrameTimer805temp0 /= 6806GetTableValue(HPZSetup_glowingOrbFrame, temp0, HPZSetup_orbFrameTable)807object.orbFrameTimer++808object.orbFrameTimer %= 84809810// Check if any players are on waterslides811foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)812temp1 = player[currentPlayer].xpos813temp1 >>= 16814815temp2 = player[currentPlayer].ypos816temp2 >>= 16817temp2 += player[currentPlayer].collisionBottom818temp2--819820if player[currentPlayer].gravity == GRAVITY_GROUND821Get16x16TileInfo(temp0, temp1, temp2, TILEINFO_ANGLEB)822if temp0 == TILE_WATERSLIDE823player[currentPlayer].state = Player_State_Waterslide824player[currentPlayer].direction = FACING_RIGHT825end if826end if827next828829// Waterslide Sfx830if player[0].state == Player_State_Waterslide831if object.waterfallLoopTimer == 0832if object.playingWaterfallLoop == false833PlaySfx(SfxName[Waterfall], false)834StopSfx(SfxName[Waterfall Loop])835object.playingWaterfallLoop = true836else837StopSfx(SfxName[Waterfall])838PlaySfx(SfxName[Waterfall Loop], false)839end if840end if841842object.waterfallLoopTimer++843object.waterfallLoopTimer &= 0x3F844else845if object.waterfallLoopTimer != 0846object.waterfallLoopTimer++847object.waterfallLoopTimer &= 0x3F848else849object.waterfallLoopTimer = 0850object.playingWaterfallLoop = false851end if852end if853854if HPZSetup_hasAchievement == false855if stage.debugMode == false856if options.stageSelectFlag == false857if object[30].type == TypeName[Act Finish]858HPZSetup_hasAchievement = true859860// Grant the "A Secret Revealed" Achievement861CallNativeFunction2(SetAchievement, ACHIEVEMENT_ASECRETREVEALED, 100)862end if863end if864end if865end if866end event867868869event ObjectDraw870temp0 = stage.waterLevel871temp0 -= screen.yoffset872if temp0 < 0873temp0 = 0874end if875876if temp0 > screen.ysize877temp0 = screen.ysize878end if879880SetActivePalette(0, 0, temp0)881if Water_flashTimer > 0882SetActivePalette(2, temp0, screen.ysize)883else884SetActivePalette(1, temp0, screen.ysize)885end if886887AddDrawListEntityRef(2, object.entityPos)888end event889890891event ObjectStartup892if stage.actNum == 1893// Act 1 is the normal Hidden Palace Zone, as reachable in a normal playthrough894SetMusicTrack("MysticCave2.ogg", TRACK_STAGE, 18671) // see note up top as for why MUSIC_LOOP_MCZ_2P isn't being used here895SpeedUpMusic = HPZSetup_SpeedUpMusic896SlowDownMusic = HPZSetup_SlowDownMusic897else898// Act 2 is Proto Palace Zone, as a secret in the Sound Test899SetMusicTrack("Extra.ogg", TRACK_STAGE, MUSIC_LOOP_PPZ)900end if901902if stage.player2Enabled == true903player[1].xpos = player[0].xpos904end if905906animalType1 = TypeName[Rocky]907animalType2 = TypeName[Mocky]908909SetPaletteEntry(0, 192, 0x000000)910911object[SLOT_ZONESETUP].type = TypeName[HPZ Setup]912object[SLOT_ZONESETUP].priority = PRIORITY_ACTIVE913object[SLOT_ZONESETUP].drawOrder = 0914object[SLOT_ZONESETUP].orb2AniTileFrame = 2915object[SLOT_ZONESETUP].orb3AniTileFrame = 4916917// Load the water palette918LoadPalette("HPZ_WaterPal.act", 1, 0, 0, 256)919920// Initialize the Super palettes921CallFunction(HPZSetup_InitSuperSonicPal)922CallFunction(HPZSetup_InitSuperTailsPal)923CallFunction(HPZSetup_InitSuperKnuxPal)924#platform: USE_ORIGINS925CallFunction(HPZSetup_InitSuperAmyPal)926#endplatform927928// Load the electric flash palette in case the player gets an eletric shield929LoadPalette("ElectricFlash.act", 2, 0, 0, 256)930931Water_flashTimer = 0932HPZSetup_bossFightActive = false933934// The Stage List Pos should be set to HPZ's entry already, but double-check just in case935stage.activeList = REGULAR_STAGE936stage.listPos = 20937938SetLayerDeformation(1, 64, 2, 0, 0, 0)939940temp0 = 0941while temp0 < 0x100942Rand(temp1, 4)943SetLayerDeformation(3, 16, temp1, 1, temp0, 16)944temp0 += 16945loop946end event947948949// ========================950// Editor Events951// ========================952953event RSDKDraw954DrawSprite(0)955end event956957958event RSDKLoad959LoadSpriteSheet("Global/Display.gif")960SpriteFrame(-16, -16, 32, 32, 1, 143)961962SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")963end event964965966