Path: blob/master/Sonic 1/Scripts/GHZ/GHZSetup.txt
1480 views
// ----------------------------------1// RSDK Project: Sonic 12// Script Description: GHZ Setup Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.frame : object.sunFlowerFrame12private alias object.value0 : object.sunFlowerTimer13private alias object.value1 : object.extendFlowerTimer14private alias object.value2 : object.extendFlowerFrame15private alias object.value3 : object.paletteTimer16private alias object.value4 : object.waterfallLoopTimer17private alias object.value5 : object.playingWaterfallLoop1819// Tracks20private alias 0 : TRACK_STAGE21private alias 2 : TRACK_INVINCIBLE22private alias 4 : TRACK_BOSS2324// Reserved object slots25private alias 10 : SLOT_ZONESETUP26private alias 25 : SLOT_MUSICEVENT_CHANGE2728// Music Events29private alias 0 : MUSICEVENT_FADETOBOSS30private alias 1 : MUSICEVENT_FADETOSTAGE31private alias 2 : MUSICEVENT_TRANSITION3233private alias 0 : MUSICEVENT_FLAG_NOCHANGE34private alias 1 : MUSICEVENT_FLAG_SPEEDUP35private alias 2 : MUSICEVENT_FLAG_SLOWDOWN3637// Music loops38private alias 635050 : MUSIC_LOOP_GHZ // Interestingly, this loop point was instead 635970 in older S1 versions...39private alias 502294 : MUSIC_LOOP_GHZ_F // ...but this sped-up version had its loop point stay the same...4041private alias 39528 : MUSIC_LOOP_INV42private alias 30436 : MUSIC_LOOP_INV_F434445// ========================46// Function Declarations47// ========================4849reserve function GHZSetup_SpeedUpMusic50reserve function GHZSetup_SlowDownMusic515253// ========================54// Static Values55// ========================5657public value GHZSetup_spikeLogsCounter = 05859// These next two values are used to transmit values from [Waterfall Sound] Objects60public value GHZSetup_playWaterfallSfx = 061public value GHZSetup_waterfallPan = 0626364// ========================65// Tables66// ========================6768private table GHZSetup_replay_attract_S690x00500000, 0x3B00000700x00, 11710x08, 91720x38, 1730x28, 7740x08, 87750x38, 1760x28, 8770x08, 47780x38, 1790x28, 7800x08, 204810x38, 1820x28, 7830x08, 32840x38, 1850x28, 9860x08, 43870x38, 1880x28, 28890x08, 61900x38, 1910x28, 24920x08, 30930x38, 1940x28, 44950x08, 22960x38, 1970x28, 21980x08, 42990x38, 11000x28, 1071010x08, 2551020x08, 331030x00, 2031040x04, 441050x00, 121060x04, 111070x00, 231080x08, 201090x00, 151100x04, 41110x00, 191120x08, 161130x38, 11140x28, 101150x08, 391160x38, 11170x28, 81180x08, 421190x38, 1120end table121122private table GHZSetup_replay_attract_T1230x00500000, 0x3B400001240x00, 111250x08, 911260x38, 11270x28, 101280x08, 751290x04, 121300x34, 11310x24, 241320x04, 191330x34, 11340x24, 71350x04, 81360x00, 271370x08, 551380x38, 11390x28, 41400x20, 51410x00, 291420x04, 251430x00, 111440x08, 341450x00, 111460x08, 301470x38, 11480x28, 91490x08, 2021500x38, 11510x28, 91520x08, 351530x38, 11540x28, 81550x08, 451560x38, 11570x280, 141580x08, 171590x00, 71600x08, 521610x38, 11620x28, 171630x08, 331640x38, 11650x28, 331660x08, 21670x00, 291680x08, 141690x38, 11700x28, 61710x08, 51720x00, 131730x04, 91740x00, 111750x30, 11760x20, 61770x08, 61780x38, 11790x28, 61800x08, 161810x38, 11820x28, 51830x08, 331840x00, 81850x04, 111860x00, 211870x08, 91880x00, 311890x30, 11900x20, 61910x00, 21920x08, 281930x00, 281940x04, 51950x00, 51960x08, 251970x38, 11980x28, 21990x08, 282000x00, 62010x04, 92020x00, 62030x08, 312040x00, 452050x38, 12060x28, 52070x00, 22080x08, 92090x00, 72100x08, 102110x00, 302120x08, 122130x00, 372140x04, 172150x00, 222160x08, 202170x38, 12180x28, 112190x08, 522200x38, 12210x28, 12222end table223224private table GHZSetup_replay_attract_K2250x00500000, 0x3B000002260x00, 112270x08, 922280x38, 12290x28, 122300x08, 822310x02, 122320x00, 242330x30, 12340x20, 262350x00, 32360x08, 22370x38, 12380x28, 882390x08, 22400x00, 282410x02, 162420x32, 12430x22, 72440x02, 52450x32, 12460x22, 22470x02, 52480x32, 12490x22, 32500x02, 32510x32, 12520x22, 22530x02, 42540x08, 1052550x00, 1092560x08, 122570x38, 12580x28, 442590x08, 512600x38, 12610x28, 332620x08, 172630x38, 12640x28, 402650x08, 312660x38, 12670x28, 392680x08, 242690x38, 12700x28, 642710x08, 172720x38, 12730x28, 152740x08, 2412750x00, 292760x30, 12770x20, 182780x00, 42790x30, 12800x20, 302810x21, 32820x01, 1712830x00, 152840x02, 122850x32, 12860x22, 72870x02, 42880x32, 12890x22, 22900x02, 62910x32, 12920x22, 22930x02, 42940x32, 12950x22, 52960x02, 222970x00, 22980x08, 472990x00, 6300end table301302private table GHZSetup_replay_credits_STK_13030x00500000, 0x3B000003040x08, 913050x38, 13060x28, 93070x08, 833080x38, 13090x28, 53100x08, 523110x38, 13120x28, 83130x08, 1603140x00, 83150x08, 263160x38, 13170x28, 33180x20, 23190x00, 63200x04, 53210x00, 133220x08, 443230x38, 13240x28, 53250x08, 173260x00, 163270x08, 133280x08, 53290x08, 423300x00, 523310x08, 30332end table333334private table GHZSetup_replay_credits_STK_23350x13E80000, 0x2AC00003360x00, 173370x08, 2553380x08, 313390x00, 219340end table341342343// ========================344// Function Definitions345// ========================346347private function GHZSetup_SpeedUpMusic348CheckEqual(object[SLOT_MUSICEVENT_CHANGE].type, TypeName[Music Event])349temp0 = checkResult350CheckEqual(object[SLOT_MUSICEVENT_CHANGE].propertyValue, MUSICEVENT_TRANSITION)351temp0 &= checkResult352CheckEqual(stage.musicFlag, MUSICEVENT_FLAG_NOCHANGE)353temp0 &= checkResult354if temp0 == false355switch music.currentTrack356case TRACK_STAGE357SetMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F)358SwapMusicTrack("GreenHill_F.ogg", TRACK_STAGE, MUSIC_LOOP_GHZ_F, 7920)359break360361case TRACK_INVINCIBLE362SetMusicTrack("GreenHill_F.ogg", TRACK_STAGE, MUSIC_LOOP_GHZ_F)363SwapMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F, 8000)364break365366case TRACK_BOSS367SetMusicTrack("GreenHill_F.ogg", TRACK_STAGE, MUSIC_LOOP_GHZ_F)368SetMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F)369break370371end switch372else373stage.musicFlag = MUSICEVENT_FLAG_SPEEDUP374end if375end function376377378private function GHZSetup_SlowDownMusic379CheckEqual(object[SLOT_MUSICEVENT_CHANGE].type, TypeName[Music Event])380temp0 = checkResult381CheckEqual(object[SLOT_MUSICEVENT_CHANGE].propertyValue, MUSICEVENT_TRANSITION)382temp0 &= checkResult383CheckEqual(stage.musicFlag, MUSICEVENT_FLAG_NOCHANGE)384temp0 &= checkResult385if temp0 == false386switch music.currentTrack387case TRACK_STAGE388SetMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV)389SwapMusicTrack("GreenHill.ogg", TRACK_STAGE, MUSIC_LOOP_GHZ, 12650)390break391392case TRACK_INVINCIBLE393SetMusicTrack("GreenHill.ogg", TRACK_STAGE, MUSIC_LOOP_GHZ)394SwapMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV, 12650)395break396397case TRACK_BOSS398SetMusicTrack("GreenHill.ogg", TRACK_STAGE, MUSIC_LOOP_GHZ)399SetMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV)400break401402end switch403else404stage.musicFlag = MUSICEVENT_FLAG_SLOWDOWN405end if406end function407408409// ========================410// Events411// ========================412413event ObjectUpdate414if GHZSetup_playWaterfallSfx != false415GHZSetup_playWaterfallSfx = false416object.waterfallLoopTimer--417if object.waterfallLoopTimer <= 0418object.waterfallLoopTimer = 31419if object.playingWaterfallLoop == false420if credits.screen == 0421PlaySfx(SfxName[Waterfall], false)422StopSfx(SfxName[Waterfall Loop])423end if424object.playingWaterfallLoop = true425else426if credits.screen == 0427StopSfx(SfxName[Waterfall])428PlaySfx(SfxName[Waterfall Loop], false)429end if430end if431end if432433SetSfxAttributes(SfxName[Waterfall], -1, GHZSetup_waterfallPan)434SetSfxAttributes(SfxName[Waterfall Loop], -1, GHZSetup_waterfallPan)435else436object.playingWaterfallLoop = false437object.waterfallLoopTimer = 0438end if439440// This object's state never changes...441if object.state < 5442object.paletteTimer++443if object.paletteTimer == 6444object.paletteTimer = 0445RotatePalette(0, 168, 171, true)446447GHZSetup_spikeLogsCounter++448GHZSetup_spikeLogsCounter &= 15449end if450end if451452if object.sunFlowerTimer == 0453object.sunFlowerTimer = 20454temp0 = 768455temp0 += object.sunFlowerFrame456Copy16x16Tile(427, temp0)457temp0++458Copy16x16Tile(428, temp0)459temp0++460Copy16x16Tile(429, temp0)461temp0++462Copy16x16Tile(430, temp0)463object.sunFlowerFrame += 4464object.sunFlowerFrame &= 7465else466object.sunFlowerTimer--467end if468469if object.extendFlowerTimer == 0470switch object.extendFlowerFrame471case 0472object.extendFlowerTimer = 160473temp0 = 0474break475476case 1477object.extendFlowerTimer = 10478temp0 = 6479break480481case 2482object.extendFlowerTimer = 160483temp0 = 12484break485486case 3487object.extendFlowerTimer = 10488temp0 = 6489break490491end switch492493temp0 += 776494Copy16x16Tile(431, temp0)495temp0++496Copy16x16Tile(432, temp0)497temp0++498Copy16x16Tile(433, temp0)499temp0++500Copy16x16Tile(434, temp0)501temp0++502Copy16x16Tile(435, temp0)503temp0++504Copy16x16Tile(436, temp0)505object.extendFlowerFrame++506object.extendFlowerFrame &= 3507else508object.extendFlowerTimer--509end if510end event511512513event ObjectStartup514SetMusicTrack("GreenHill.ogg", TRACK_STAGE, MUSIC_LOOP_GHZ)515SpeedUpMusic = GHZSetup_SpeedUpMusic516SlowDownMusic = GHZSetup_SlowDownMusic517518animalType1 = TypeName[Pocky]519animalType2 = TypeName[Flicky]520521// Scroll values stored in scenes are unsigned and can't be negative, so we have to reverse the value manually ourselves in script instead522Abs(tileLayer[1].parallaxFactor)523FlipSign(tileLayer[1].parallaxFactor)524tileLayer[1].scrollPos = 0x180000525526object[SLOT_ZONESETUP].type = TypeName[GHZ Setup]527object[SLOT_ZONESETUP].priority = PRIORITY_ACTIVE528529GHZSetup_spikeLogsCounter = 0530531if options.attractMode == true532switch stage.playerListPos533case PLAYER_SONIC_A534#platform: USE_ORIGINS535case PLAYER_AMY_A536#endplatform537538switch credits.screen539case 0540Player_attractTable = GHZSetup_replay_attract_S541Player_attractTableSize = 102542Player_attractDuration = 1800543break544545case 1546Player_attractTable = GHZSetup_replay_credits_STK_1547Player_attractTableSize = 58548Player_attractDuration = 540549break550551case 8552Player_attractTable = GHZSetup_replay_credits_STK_2553Player_attractTableSize = 10554Player_attractDuration = 540555break556557end switch558break559560case PLAYER_TAILS_A561switch credits.screen562case 0563Player_attractTable = GHZSetup_replay_attract_T564Player_attractTableSize = 198565Player_attractDuration = 1800566break567568case 1569Player_attractTable = GHZSetup_replay_credits_STK_1570Player_attractTableSize = 58571Player_attractDuration = 540572break573574case 8575Player_attractTable = GHZSetup_replay_credits_STK_2576Player_attractTableSize = 10577Player_attractDuration = 540578break579580end switch581break582583case PLAYER_KNUCKLES_A584switch credits.screen585case 0586Player_attractTable = GHZSetup_replay_attract_K587Player_attractTableSize = 150588Player_attractDuration = 1800589break590591case 1592Player_attractTable = GHZSetup_replay_credits_STK_1593Player_attractTableSize = 58594Player_attractDuration = 540595break596597case 8598Player_attractTable = GHZSetup_replay_credits_STK_2599Player_attractTableSize = 10600Player_attractDuration = 540601break602603end switch604break605606end switch607608CallFunction(Player_SetupAttractDemo)609end if610end event611612613// ========================614// Editor Events615// ========================616617event RSDKDraw618DrawSprite(0)619end event620621622event RSDKLoad623LoadSpriteSheet("Global/Display.gif")624SpriteFrame(-16, -16, 32, 32, 1, 143)625626SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")627end event628629630