Path: blob/master/Sonic 2/Scripts/HTZ/HTZSetup.txt
1478 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: HTZ Setup Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011// value0 is unused12private alias object.value1 : object.palRotateTimer13// value2-4 are unused, too1415private alias object.value5 : object.bgLightDuration16private alias object.value6 : object.bgLightFrame1718private alias object.value7 : object.pinkFlowerDuration19private alias object.value8 : object.pinkFlowerFrame2021private alias object.value9 : object.redFlowerDuration22private alias object.value10 : object.redFlowerFrame2324private alias object.value11 : object.rectFlowerDuration25private alias object.value12 : object.rectFlowerFrame2627private alias object.value13 : object.pointyFlowerDuration28private alias object.value14 : object.pointyFlowerFrame2930private alias object.value15 : object.lavaPalIndex131private alias object.value16 : object.lavaPalIndex232private alias object.value17 : object.lavaPalIndex333private alias object.value18 : object.lavaPalIndex43435private alias object.value19 : object.shakeTimer36private alias object.value20 : object.unused // unused (besides being reset after earthquakes)37private alias object.value21 : object.earthquakeTimer38private alias object.value22 : object.movementState39private alias object.value23 : object.earthquakePos40// value24 is unused41private alias object.value25 : object.prevEarthquakeActive42private alias object.value26 : object.prevEarthquakeType4344// Earthquake states45private alias 0 : EARTHQUAKE_NONE46private alias 1 : EARTHQUAKE_HOLD47private alias 2 : EARTHQUAKE_ACTIVE4849// Tile Flag Aliases50private alias 1 : TILE_LAVA5152// Tile Info ID Aliases53private alias 8 : TILEINFO_ANGLEB5455// Player Aliases56private alias object.type : player.type57private alias object.xpos : player.xpos58private alias object.ypos : player.ypos5960// Tracks61private alias 0 : TRACK_STAGE62private alias 1 : TRACK_ACTFINISH63private alias 2 : TRACK_INVINCIBLE64private alias 3 : TRACK_CONTINUE65private alias 4 : TRACK_BOSS66private alias 5 : TRACK_GAMEOVER67private alias 6 : TRACK_DROWNING68private alias 7 : TRACK_SUPER6970// Reserved object slots71private alias 0 : SLOT_PLAYER172private alias 10 : SLOT_ZONESETUP73private alias 25 : SLOT_MUSICEVENT_CHANGE7475// Music Events76private alias 2 : MUSICEVENT_TRANSITION7778private alias 0 : MUSICEVENT_FLAG_NOCHANGE79private alias 1 : MUSICEVENT_FLAG_SPEEDUP80private alias 2 : MUSICEVENT_FLAG_SLOWDOWN8182// Music Loops83private alias 1 : MUSIC_LOOP_HTZ84private alias 1 : MUSIC_LOOP_HTZ_F8586private alias 38679 : MUSIC_LOOP_INV87private alias 30897 : MUSIC_LOOP_INV_F888990// ========================91// Function Declarations92// ========================9394reserve function HTZSetup_SpeedUpMusic95reserve function HTZSetup_SlowDownMusic969798// ========================99// Static Values100// ========================101102public value HTZSetup_earthquakeState = 0103public value HTZSetup_activeEarthquakeType = 0104public value HTZSetup_earthquakePosMin = 0105public value HTZSetup_earthquakePos = 0 // Y Position, truncated down to 1:1 value106public value HTZSetup_earthquakePosMax = 0 // Lowest point the earthquake should go107108109// ========================110// Tables111// ========================112113// Format: Tile ID followed by duration114private table HTZSetup_bgLightFrameTable115508, 24116509, 10117510, 12118511, 24119510, 12120509, 10121end table122123private table HTZSetup_pinkFlowerFrameTable124512, 128125513, 20126512, 8127513, 8128512, 8129513, 8130end table131132private table HTZSetup_redFlowerFrameTable133514, 128134515, 12135514, 12136515, 12137514, 6138515, 6139514, 6140515, 6141end table142143private table HTZSetup_rectFlowerFrameTable144516, 8145517, 8146end table147148private table HTZSetup_pointyFlowerFrameTable149518, 128150519, 8151518, 8152519, 8153518, 8154519, 12155518, 12156519, 12157end table158159private table HTZSetup_palTable1600xE00000, 0xE06000, 0xE0A000, 0xE0E0001610xE0E000, 0xE00000, 0xE06000, 0xE0A0001620xE0C020, 0xE0E000, 0xE00000, 0xE060001630xE06000, 0xE0E040, 0xE0E080, 0xE020001640xE04000, 0xE08000, 0xE0E060, 0xE0E0A01650xE0E080, 0xE02000, 0xE06000, 0xE0E0401660xE0C020, 0xE0E000, 0xE00000, 0xE060001670xE06000, 0xE0C020, 0xE0E000, 0xE000001680xE00000, 0xE06000, 0xE0A000, 0xE0E0001690xE0C000, 0xC00000, 0xE04000, 0xE080001700xE06000, 0xC0A000, 0xA00000, 0xE020001710xC00000, 0xC04000, 0xE08000, 0x8000001720xA00000, 0xE02000, 0xE06000, 0xC0A0001730xE0C000, 0xC00000, 0xE04000, 0xE080001740xE0A000, 0xE0E000, 0xE00000, 0xE060001750xE06000, 0xE0A000, 0xE0E000, 0xE00000176end table177178179// ========================180// Function Definitions181// ========================182183private function HTZSetup_SpeedUpMusic184CheckEqual(object[SLOT_MUSICEVENT_CHANGE].type, TypeName[Music Event])185temp0 = checkResult186CheckEqual(object[SLOT_MUSICEVENT_CHANGE].propertyValue, MUSICEVENT_TRANSITION)187temp0 &= checkResult188CheckEqual(stage.musicFlag, MUSICEVENT_FLAG_NOCHANGE)189temp0 &= checkResult190if temp0 == false191switch music.currentTrack192case TRACK_STAGE193SetMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F)194SwapMusicTrack("HillTop_F.ogg", TRACK_STAGE, MUSIC_LOOP_HTZ_F, 8000)195break196197case TRACK_INVINCIBLE198SetMusicTrack("HillTop_F.ogg", TRACK_STAGE, MUSIC_LOOP_HTZ_F)199SwapMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F, 8000)200break201202case TRACK_BOSS203case TRACK_GAMEOVER204case TRACK_SUPER205SetMusicTrack("HillTop_F.ogg", TRACK_STAGE, MUSIC_LOOP_HTZ_F)206SetMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F)207break208209end switch210else211stage.musicFlag = MUSICEVENT_FLAG_SPEEDUP212end if213end function214215216private function HTZSetup_SlowDownMusic217CheckEqual(object[SLOT_MUSICEVENT_CHANGE].type, TypeName[Music Event])218temp0 = checkResult219CheckEqual(object[SLOT_MUSICEVENT_CHANGE].propertyValue, MUSICEVENT_TRANSITION)220temp0 &= checkResult221CheckEqual(stage.musicFlag, MUSICEVENT_FLAG_NOCHANGE)222temp0 &= checkResult223if temp0 == false224switch music.currentTrack225case TRACK_STAGE226SetMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV)227SwapMusicTrack("HillTop.ogg", TRACK_STAGE, MUSIC_LOOP_HTZ, 12500)228break229230case TRACK_INVINCIBLE231SetMusicTrack("HillTop.ogg", TRACK_STAGE, MUSIC_LOOP_HTZ)232SwapMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV, 12500)233break234235case TRACK_BOSS236case TRACK_GAMEOVER237case TRACK_SUPER238SetMusicTrack("HillTop.ogg", TRACK_STAGE, MUSIC_LOOP_HTZ)239SetMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV)240break241242end switch243else244stage.musicFlag = MUSICEVENT_FLAG_SLOWDOWN245end if246end function247248249// ========================250// Events251// ========================252253event ObjectUpdate254object.palRotateTimer++255if object.palRotateTimer == 12256object.palRotateTimer = 0257258object.lavaPalIndex1 += 4259object.lavaPalIndex1 &= 0x3F260GetTableValue(temp0, object.lavaPalIndex1, HTZSetup_palTable)261SetPaletteEntry(0, 147, temp0)262263object.lavaPalIndex2 += 4264object.lavaPalIndex2 &= 0x3F265GetTableValue(temp0, object.lavaPalIndex2, HTZSetup_palTable)266SetPaletteEntry(0, 148, temp0)267268object.lavaPalIndex3 += 4269object.lavaPalIndex3 &= 0x3F270GetTableValue(temp0, object.lavaPalIndex3, HTZSetup_palTable)271SetPaletteEntry(0, 158, temp0)272273object.lavaPalIndex4 += 4274object.lavaPalIndex4 &= 0x3F275GetTableValue(temp0, object.lavaPalIndex4, HTZSetup_palTable)276SetPaletteEntry(0, 159, temp0)277end if278279if object.bgLightDuration < 2280GetTableValue(temp0, object.bgLightFrame, HTZSetup_bgLightFrameTable)281282Copy16x16Tile(761, temp0)283temp0 += 12284285Copy16x16Tile(762, temp0)286temp0 += 4287288Copy16x16Tile(763, temp0)289object.bgLightFrame++290291GetTableValue(object.bgLightDuration, object.bgLightFrame, HTZSetup_bgLightFrameTable)292object.bgLightFrame++293294object.bgLightFrame %= 12295else296object.bgLightDuration--297end if298299if object.pinkFlowerDuration < 2300GetTableValue(temp0, object.pinkFlowerFrame, HTZSetup_pinkFlowerFrameTable)301302Copy16x16Tile(764, temp0)303object.pinkFlowerFrame++304305GetTableValue(object.pinkFlowerDuration, object.pinkFlowerFrame, HTZSetup_pinkFlowerFrameTable)306object.pinkFlowerFrame++307308object.pinkFlowerFrame %= 12309else310object.pinkFlowerDuration--311end if312313if object.redFlowerDuration < 2314GetTableValue(temp0, object.redFlowerFrame, HTZSetup_redFlowerFrameTable)315316Copy16x16Tile(765, temp0)317object.redFlowerFrame++318319GetTableValue(object.redFlowerDuration, object.redFlowerFrame, HTZSetup_redFlowerFrameTable)320object.redFlowerFrame++321322object.redFlowerFrame &= 15323else324object.redFlowerDuration--325end if326327if object.rectFlowerDuration < 2328GetTableValue(temp0, object.rectFlowerFrame, HTZSetup_rectFlowerFrameTable)329330Copy16x16Tile(766, temp0)331object.rectFlowerFrame++332333GetTableValue(object.rectFlowerDuration, object.rectFlowerFrame, HTZSetup_rectFlowerFrameTable)334object.rectFlowerFrame++335336object.rectFlowerFrame &= 3337else338object.rectFlowerDuration--339end if340341if object.pointyFlowerDuration < 2342GetTableValue(temp0, object.pointyFlowerFrame, HTZSetup_pointyFlowerFrameTable)343344Copy16x16Tile(767, temp0)345object.pointyFlowerFrame++346347GetTableValue(object.pointyFlowerDuration, object.pointyFlowerFrame, HTZSetup_pointyFlowerFrameTable)348object.pointyFlowerFrame++349350object.pointyFlowerFrame &= 15351else352object.pointyFlowerDuration--353end if354355// Check if any players are standing on lava tiles, hurt them if so356foreach (GROUP_PLAYERS, currentPlayer, ACTIVE_ENTITIES)357temp1 = player[currentPlayer].xpos358temp1 >>= 16359360temp2 = player[currentPlayer].ypos361temp2 >>= 16362temp2 += 4363364Get16x16TileInfo(temp0, temp1, temp2, TILEINFO_ANGLEB)365temp0 &= TILE_LAVA366367if temp0 == TILE_LAVA368CallFunction(Player_FireHit)369end if370next371372if HTZSetup_earthquakeState >= EARTHQUAKE_HOLD373if object.prevEarthquakeActive == false374if HTZSetup_activeEarthquakeType < 2375stage.midPoint = 2376stage.activeLayer[0] = 9 // None377stage.activeLayer[1] = 0 // FG (Low)378stage.activeLayer[2] = 3 // BG 3 (High)379stage.activeLayer[3] = 0 // FG (High)380else381stage.midPoint = 2382stage.activeLayer[0] = 9 // None383stage.activeLayer[1] = 0 // FG (Low)384stage.activeLayer[2] = 4 // BG 4 (Low)385stage.activeLayer[3] = 0 // FG (High)386end if387388object.prevEarthquakeActive = true389if HTZSetup_activeEarthquakeType != object.prevEarthquakeType390// Earthquake has been newly-initiated, reset its variables391object.earthquakePos = HTZSetup_earthquakePosMin392HTZSetup_earthquakePos = 0393tileLayer[3].scrollPos = object.earthquakePos394tileLayer[4].scrollPos = object.earthquakePos395object.prevEarthquakeType = HTZSetup_activeEarthquakeType396end if397end if398399if HTZSetup_earthquakeState > EARTHQUAKE_HOLD400if object.earthquakeTimer > 0401object.earthquakeTimer--402else403object.shakeTimer++404object.shakeTimer %= 40405if object.shakeTimer == 8406PlaySfx(SfxName[Rumble], false)407end if408409temp0 = object.shakeTimer410temp0 &= 7411if temp0 == 0412screen.shakeX = 1413end if414415temp0 = object.shakeTimer416temp0 &= 3417if temp0 == 0418screen.shakeY = 2419end if420421if object.movementState == 0422// Going down...423object.earthquakePos += 0x4000424if object.earthquakePos == HTZSetup_earthquakePosMax425object.movementState = 1426object.earthquakeTimer = 120427end if428else429// Goin up!430object.earthquakePos -= 0x4000431if object.earthquakePos == HTZSetup_earthquakePosMin432object.movementState = 0433object.earthquakeTimer = 120434end if435end if436437// Move the earthquake layers in accordance with their planned position438tileLayer[3].scrollPos = object.earthquakePos439tileLayer[4].scrollPos = object.earthquakePos440441// Set the static variable as well, the Earthquake object needs it for collision checks442HTZSetup_earthquakePos = object.earthquakePos443HTZSetup_earthquakePos -= HTZSetup_earthquakePosMin444HTZSetup_earthquakePos >>= 16445end if446end if447448if player[0].type != TypeName[Debug Mode] // Not quite sure exactly what this is for... if anything you'd want to disable earthquakes *in* debug mode, not the other way around449HTZSetup_earthquakeState = EARTHQUAKE_NONE450else451object.prevEarthquakeActive = false452end if453else454if object.prevEarthquakeActive != false455// Restore the stage to its non-earthquaking state456457object.earthquakePos = HTZSetup_earthquakePosMin458HTZSetup_earthquakePos = 0459tileLayer[3].scrollPos = object.earthquakePos460tileLayer[4].scrollPos = object.earthquakePos461462stage.midPoint = 3463stage.activeLayer[0] = 1 // First BG layer (far blue cliffs) (Low)464stage.activeLayer[1] = 2 // Second BG Layer (closer orange cliffs) (Low)465stage.activeLayer[2] = 0 // FG (Low)466stage.activeLayer[3] = 0 // FG (High)467468object.shakeTimer = 0469object.unused = 0470object.earthquakeTimer = 0471object.movementState = 0472object.prevEarthquakeActive = false473end if474end if475end event476477478event ObjectStartup479SetMusicTrack("HillTop.ogg", TRACK_STAGE, MUSIC_LOOP_HTZ)480481// Set the music speed-changing functions482SpeedUpMusic = HTZSetup_SpeedUpMusic483SlowDownMusic = HTZSetup_SlowDownMusic484485// Reset the boss flash color486SetPaletteEntry(0, 192, 0x000000)487488animalType1 = TypeName[Locky]489animalType2 = TypeName[Wocky]490491// Set the BG layers to start from the correct places492tileLayer[1].scrollPos = -0x40000493tileLayer[2].scrollPos = -0x40000494495object[SLOT_ZONESETUP].type = TypeName[HTZ Setup]496object[SLOT_ZONESETUP].priority = PRIORITY_ACTIVE497498object[SLOT_ZONESETUP].lavaPalIndex1 = 0499object[SLOT_ZONESETUP].lavaPalIndex2 = 1500object[SLOT_ZONESETUP].lavaPalIndex3 = 2501object[SLOT_ZONESETUP].lavaPalIndex4 = 3502end event503504505// ========================506// Editor Events507// ========================508509event RSDKDraw510DrawSprite(0)511end event512513514event RSDKLoad515LoadSpriteSheet("Global/Display.gif")516SpriteFrame(-16, -16, 32, 32, 1, 143)517518SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")519end event520521522