Path: blob/master/Sonic 2/Scripts/CNZ/CNZSetup.txt
1483 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: CNZ 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.paletteIndex113private alias object.value3 : object.paletteIndex214private alias object.value4 : object.paletteIndex315private alias object.value5 : object.deformTimer16private alias object.value6 : object.sonicPlateFrameID17private alias object.value7 : object.tailsPlateFrameID1819// Player Aliases20private alias object.state : player.state21private alias object.gravity : player.gravity22private alias object.direction : player.direction23private alias object.left : player.left24private alias object.right : player.right25private alias object.speed : player.speed26private alias object.angle : player.angle27private alias object.animation : player.animation28private alias object.animationSpeed : player.animationSpeed2930private alias object.value1 : player.timer31private alias object.value5 : player.rollAnimationSpeed32private alias object.value14 : player.skidding33private alias object.value29 : player.rollingFriction34private alias object.value31 : player.rollingDeceleration3536// Tracks37private alias 0 : TRACK_STAGE38private alias 1 : TRACK_ACTFINISH39private alias 2 : TRACK_INVINCIBLE40private alias 3 : TRACK_CONTINUE41private alias 4 : TRACK_BOSS42private alias 5 : TRACK_GAMEOVER43private alias 6 : TRACK_DROWNING44private alias 7 : TRACK_SUPER4546// Reserved object slots47private alias 10 : SLOT_ZONESETUP48private alias 25 : SLOT_MUSICEVENT_CHANGE49private alias 26 : SLOT_MUSICEVENT_BOSS5051// Music Events52private alias 2 : MUSICEVENT_TRANSITION5354private alias 0 : MUSICEVENT_FLAG_NOCHANGE55private alias 1 : MUSICEVENT_FLAG_SPEEDUP56private alias 2 : MUSICEVENT_FLAG_SLOWDOWN5758// Music Loops59private alias 62820 : MUSIC_LOOP_CNZ_1P60private alias 50312 : MUSIC_LOOP_CNZ_1P_F6162private alias 95868 : MUSIC_LOOP_CNZ_2P63private alias 76718 : MUSIC_LOOP_CNZ_2P_F6465private alias 38679 : MUSIC_LOOP_INV66private alias 30897 : MUSIC_LOOP_INV_F676869// ========================70// Function Declarations71// ========================7273// These first two functions are Player states, used by the D Plunger, Spinner H, and Spinner V74reserve function CNZSetup_Player_TubeRoll75reserve function CNZSetup_Player_TubeAirRoll7677reserve function CNZSetup_SpeedUpMusic1P78reserve function CNZSetup_SlowDownMusic1P79reserve function CNZSetup_SpeedUpMusic2P80reserve function CNZSetup_SlowDownMusic2P818283// ========================84// Tables85// ========================8687private table CNZSetup_palCycleTable880xE08000, 0xE0A000, 0xC0E000890xE0E0E0, 0xA0E000, 0x40E000900x00C060, 0x40C0C0, 0x0080E0910x0040E0, 0x4000E0, 0x8000C0920xE020C0, 0xE00080, 0xE00040930xE00000, 0xE04000, 0xE0600094end table9596private table CNZSetup_sonicPlateAniTileTable97390, 391, 394, 39598398, 399, 402, 40399406, 407, 410, 411100414, 415, 418, 419101422, 423, 426, 427102430, 431, 434, 435103438, 439, 442, 443104446, 447, 450, 451105end table106107private table CNZSetup_tailsPlateAniTileTable108388, 389, 392, 393109396, 397, 400, 401110404, 405, 408, 409111412, 413, 416, 417112420, 421, 424, 425113428, 429, 432, 433114436, 437, 440, 441115444, 445, 448, 449116end table117118private table CNZSetup_aniTileIndexTable1190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 01200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 01211, 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 41224, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 41234, 4, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7124255125end table126127private table CNZSetup_deformationTable1281, 2, 1, 3, 1, 2, 2, 1, 2, 3, 1, 2, 1, 2, 0, 01292, 0, 3, 2, 2, 3, 2, 2, 1, 3, 0, 0, 1, 0, 1, 31301, 2, 1, 3, 1, 2, 2, 1, 2, 3, 1, 2, 1, 2, 0, 01312, 0, 3, 2, 2, 3, 2, 2, 1, 3, 0, 0, 1, 0, 1, 3132end table133134private table CNZSetup_replay_attract_S1350x480000, 0x2AC00001360x00, 731370x08, 1071380x00, 11390x30, 11400x20, 31410x00, 31420x04, 201430x00, 371440x04, 231450x00, 1081460x04, 231470x00, 241480x08, 601490x38, 11500x28, 311510x08, 41520x00, 91530x04, 81540x00, 411550x08, 991560x00, 21570x04, 391580x00, 181590x08, 21600x00, 91610x08, 371620x38, 11630x28, 171640x20, 61650x24, 251660x20, 51670x28, 421680x20, 81690x24, 61700x20, 31710x28, 891720x20, 11730x24, 31740x04, 371750x00, 51760x08, 451770x38, 11780x28, 31790x20, 131800x28, 81810x20, 11820x24, 21830x04, 711840x00, 1151850x08, 381860x00, 141870x08, 121880x00, 11890x04, 221900x00, 301910x30, 11920x20, 21930x28, 451940x20, 91950x28, 81960x08, 511970x00, 11980x04, 1061990x00, 142000x04, 92010x00, 22020x04, 142030x00, 152040x04, 182050x00, 27206end table207208private table CNZSetup_replay_attract_T2090x480000, 0x2B000002100x00, 522110x08, 1052120x38, 12130x20, 32140x00, 82150x04, 202160x00, 122170x08, 102180x38, 12190x28, 412200x08, 72210x00, 62220x04, 112230x00, 32240x30, 12250x20, 42260x28, 312270x08, 732280x38, 12290x28, 652300x08, 292310x00, 202320x04, 72330x00, 22340x08, 362350x38, 12360x28, 62370x08, 112380x00, 22390x30, 12400x20, 42410x28, 52420x08, 52430x38, 12440x28, 82450x08, 62460x00, 462470x08, 1142480x00, 32490x04, 512500x00, 282510x08, 272520x00, 92530x04, 92540x00, 1792550x08, 382560x00, 122570x08, 172580x00, 12590x04, 42600x00, 152610x04, 92620x00, 12630x08, 152640x00, 12650x04, 152660x00, 82670x04, 182680x34, 12690x24, 52700x04, 72710x34, 12720x24, 42730x04, 52740x30, 12750x20, 42760x00, 32770x30, 12780x20, 42790x28, 32800x38, 12810x28, 42820x38, 12830x20, 42840x28, 22850x08, 12860x38, 12870x28, 32880x38, 12890x28, 42900x08, 12910x30, 12920x20, 32930x30, 12940x20, 42950x30, 12960x20, 42970x30, 12980x20, 32990x00, 13000x30, 13010x20, 33020x30, 13030x20, 43040x00, 13050x30, 13060x20, 33070x30, 13080x20, 43090x30, 13100x20, 43110x30, 13120x20, 33130x00, 13140x30, 13150x20, 33160x30, 13170x20, 63180x30, 13190x20, 13200x30, 13210x20, 63220x30, 13230x20, 33240x30, 13250x20, 23260x28, 43270x38, 13280x28, 23290x38, 13300x28, 13310x20, 63320x00, 13330x30, 13340x20, 23350x30, 13360x20, 63370x30, 13380x20, 33390x30, 13400x20, 53410x00, 13420x30, 13430x20, 23440x30, 13450x20, 53460x00, 13470x30, 13480x20, 23490x30, 13500x20, 53510x00, 13520x30, 13530x20, 33540x30, 13550x20, 53560x00, 13570x30, 13580x20, 33590x30, 13600x20, 53610x30, 13620x20, 13630x28, 33640x38, 13650x28, 43660x38, 13670x28, 13680x20, 33690x30, 13700x20, 53710x30, 13720x20, 53730x30, 13740x20, 53750x00, 13760x30, 13770x20, 23780x30, 13790x20, 43800x00, 23810x30, 13820x20, 23830x30, 13840x20, 43850x30, 13860x20, 43870x30, 13880x20, 53890x24, 13900x04, 13910x34, 13920x24, 13930x34, 13940x24, 73950x04, 13960x34, 13970x24, 23980x20, 13990x30, 14000x20, 74010x00, 14020x34, 14030x24, 34040x04, 234050x34, 14060x20, 14070x28, 24080x38, 14090x28, 74100x08, 14110x38, 14120x28, 24130x38, 14140x28, 14150x20, 44160x30, 14170x20, 54180x30, 14190x20, 34200x00, 24210x30, 14220x20, 24230x30, 14240x20, 64250x00, 24260x30, 24270x20, 74280x00, 14290x30, 14300x20, 14310x30, 14320x20, 64330x30, 14340x20, 34350x30, 14360x20, 34370x30, 14380x20, 54390x30, 14400x20, 54410x00, 14420x30, 14430x20, 24440x30, 14450x20, 64460x00, 24470x30, 24480x20, 44490x28, 34500x08, 34510x30, 14520x20, 14530x30, 14540x24, 64550x04, 24560x34, 14570x24, 14580x34, 14590x24, 74600x04, 14610x34, 14620x24, 34630x34, 14640x24, 34650x04, 104660x00, 94670x08, 104680x00, 334690x08, 5470end table471472private table CNZSetup_replay_attract_K4730x480000, 0x2AC00004740x00, 584750x08, 1334760x38, 14770x28, 124780x08, 134790x38, 14800x28, 2504810x08, 324820x38, 14830x28, 54840x08, 64850x00, 94860x04, 54870x00, 154880x04, 44890x00, 84900x04, 84910x00, 54920x04, 134930x00, 254940x08, 114950x00, 34960x04, 234970x00, 44980x08, 294990x30, 15000x24, 85010x04, 15020x00, 325030x04, 275040x34, 15050x24, 25060x20, 15070x00, 195080x08, 145090x00, 105100x04, 85110x34, 15120x24, 185130x20, 25140x28, 465150x20, 15160x24, 205170x20, 15180x28, 145190x2A, 435200x0A, 145210x3A, 15220x2A, 55230x0A, 25240x08, 85250x00, 115260x04, 185270x34, 15280x24, 725290x25, 175300x05, 25310x04, 345320x00, 125330x04, 35340x00, 65350x04, 1025360x34, 15370x24, 35380x04, 1845390x34, 15400x24, 245410x04, 75420x34, 15430x24, 105440x25, 145450x24, 235460x25, 115470x21, 25480x29, 25490x09, 105500x39, 15510x29, 115520x09, 165530x39, 15540x29, 395550x28, 25560x08, 125570x38, 15580x28, 55590x20, 105600x28, 475610x20, 1562end table563564565// ========================566// Function Definitions567// ========================568569public function CNZSetup_Player_TubeRoll570if player.gravity == GRAVITY_AIR571object.state = CNZSetup_Player_TubeAirRoll572player.timer = 0573CallFunction(Player_HandleAirMovement)574else575temp1 = false576GetBit(temp0, player.direction, 0)577if temp0 == FACING_RIGHT578if player.left == true579if player.speed > 0580player.speed -= player.rollingDeceleration581else582player.direction ^= FACING_LEFT583player.speed = -0x8000584end if585else586if player.angle == 0587if player.speed <= 0588player.speed = 0x40000589end if590end if591end if592else593if player.right == true594if player.speed < 0595player.speed += player.rollingDeceleration596else597player.direction ^= FACING_LEFT598player.speed = 0x8000599end if600else601if player.angle == 0602if player.speed >= 0603player.speed = -0x40000604end if605end if606end if607end if608609if player.speed > 0610player.speed -= player.rollingFriction611Sin256(temp0, player.angle)612if temp0 > 0613Sin256(temp0, player.angle)614temp0 *= 0x5000615else616Sin256(temp0, player.angle)617temp0 *= 0x1E00618end if619temp0 >>= 8620player.speed += temp0621else622player.speed += player.rollingFriction623Sin256(temp0, player.angle)624if temp0 < 0625Sin256(temp0, player.angle)626temp0 *= 0x5000627else628Sin256(temp0, player.angle)629temp0 *= 0x1E00630end if631temp0 >>= 8632player.speed += temp0633end if634635CallFunction(Player_HandleRollAnimSpeed)636player.animationSpeed = player.rollAnimationSpeed637CallFunction(Player_HandleOnGround)638end if639end function640641642public function CNZSetup_Player_TubeAirRoll643CallFunction(Player_HandleAirFriction)644if player.gravity == GRAVITY_AIR645CallFunction(Player_HandleAirMovement)646else647player.state = CNZSetup_Player_TubeRoll648CallFunction(Player_HandleOnGround)649player.skidding = 0650end if651player.animation = ANI_JUMPING652end function653654655private function CNZSetup_SpeedUpMusic1P656CheckEqual(object[SLOT_MUSICEVENT_CHANGE].type, TypeName[Music Event])657temp0 = checkResult658CheckEqual(object[SLOT_MUSICEVENT_CHANGE].propertyValue, MUSICEVENT_TRANSITION)659temp0 &= checkResult660CheckEqual(stage.musicFlag, MUSICEVENT_FLAG_NOCHANGE)661temp0 &= checkResult662if temp0 == false663switch music.currentTrack664case TRACK_STAGE665SetMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F)666SwapMusicTrack("CasinoNight_F.ogg", TRACK_STAGE, MUSIC_LOOP_CNZ_1P_F, 8000)667break668669case TRACK_INVINCIBLE670SetMusicTrack("CasinoNight_F.ogg", TRACK_STAGE, MUSIC_LOOP_CNZ_1P_F)671SwapMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F, 8000)672break673674case TRACK_BOSS675case TRACK_DROWNING676case TRACK_SUPER677SetMusicTrack("CasinoNight_F.ogg", TRACK_STAGE, MUSIC_LOOP_CNZ_1P_F)678SetMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F)679break680681end switch682else683stage.musicFlag = MUSICEVENT_FLAG_SPEEDUP684end if685end function686687688private function CNZSetup_SlowDownMusic1P689CheckEqual(object[SLOT_MUSICEVENT_CHANGE].type, TypeName[Music Event])690temp0 = checkResult691CheckEqual(object[SLOT_MUSICEVENT_CHANGE].propertyValue, MUSICEVENT_TRANSITION)692temp0 &= checkResult693CheckEqual(stage.musicFlag, MUSICEVENT_FLAG_NOCHANGE)694temp0 &= checkResult695if temp0 == false696switch music.currentTrack697case TRACK_STAGE698SetMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV)699SwapMusicTrack("CasinoNight.ogg", TRACK_STAGE, MUSIC_LOOP_CNZ_1P, 12500)700break701702case TRACK_INVINCIBLE703SetMusicTrack("CasinoNight.ogg", TRACK_STAGE, MUSIC_LOOP_CNZ_1P)704SwapMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV, 12500)705break706707case TRACK_BOSS708case TRACK_DROWNING709case TRACK_SUPER710SetMusicTrack("CasinoNight.ogg", TRACK_STAGE, MUSIC_LOOP_CNZ_1P)711SetMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV)712break713714end switch715else716stage.musicFlag = MUSICEVENT_FLAG_SLOWDOWN717end if718end function719720721private function CNZSetup_SpeedUpMusic2P722CheckEqual(object[SLOT_MUSICEVENT_CHANGE].type, TypeName[Music Event])723temp0 = checkResult724CheckEqual(object[SLOT_MUSICEVENT_CHANGE].propertyValue, MUSICEVENT_TRANSITION)725temp0 &= checkResult726CheckEqual(stage.musicFlag, MUSICEVENT_FLAG_NOCHANGE)727temp0 &= checkResult728if temp0 == false729switch music.currentTrack730case TRACK_STAGE731SetMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F)732SwapMusicTrack("CasinoNight2_F.ogg", TRACK_STAGE, MUSIC_LOOP_CNZ_2P_F, 8000)733break734735case TRACK_INVINCIBLE736SetMusicTrack("CasinoNight2_F.ogg", TRACK_STAGE, MUSIC_LOOP_CNZ_2P_F)737SwapMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F, 8000)738break739740case TRACK_BOSS741case TRACK_DROWNING742case TRACK_SUPER743SetMusicTrack("CasinoNight2_F.ogg", TRACK_STAGE, MUSIC_LOOP_CNZ_2P_F)744SetMusicTrack("Invincibility_F.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV_F)745break746747end switch748else749stage.musicFlag = MUSICEVENT_FLAG_SPEEDUP750end if751end function752753754private function CNZSetup_SlowDownMusic2P755CheckEqual(object[SLOT_MUSICEVENT_CHANGE].type, TypeName[Music Event])756temp0 = checkResult757CheckEqual(object[SLOT_MUSICEVENT_CHANGE].propertyValue, MUSICEVENT_TRANSITION)758temp0 &= checkResult759CheckEqual(stage.musicFlag, MUSICEVENT_FLAG_NOCHANGE)760temp0 &= checkResult761if temp0 == false762switch music.currentTrack763case TRACK_STAGE764SetMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV)765SwapMusicTrack("CasinoNight2.ogg", TRACK_STAGE, MUSIC_LOOP_CNZ_2P, 12500)766break767768case TRACK_INVINCIBLE769SetMusicTrack("CasinoNight2.ogg", TRACK_STAGE, MUSIC_LOOP_CNZ_2P)770SwapMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV, 12500)771break772773case TRACK_BOSS774case TRACK_DROWNING775case TRACK_SUPER776SetMusicTrack("CasinoNight2.ogg", TRACK_STAGE, MUSIC_LOOP_CNZ_2P)777SetMusicTrack("Invincibility.ogg", TRACK_INVINCIBLE, MUSIC_LOOP_INV)778break779780end switch781else782stage.musicFlag = MUSICEVENT_FLAG_SLOWDOWN783end if784end function785786787// ========================788// Events789// ========================790791event ObjectUpdate792object.deformTimer++793if object.deformTimer > 7794tileLayer[1].deformationOffset++795object.deformTimer = 0796end if797798object.paletteTimer++799if object.paletteTimer == 8800object.paletteTimer = 0801RotatePalette(0, 165, 167, true)802RotatePalette(0, 171, 173, true)803RotatePalette(0, 178, 180, false)804805object.paletteIndex1++806object.paletteIndex1 %= 18807GetTableValue(temp0, object.paletteIndex1, CNZSetup_palCycleTable)808SetPaletteEntry(0, 187, temp0)809810object.paletteIndex2++811object.paletteIndex2 %= 18812GetTableValue(temp0, object.paletteIndex2, CNZSetup_palCycleTable)813SetPaletteEntry(0, 186, temp0)814815object.paletteIndex3++816object.paletteIndex3 %= 18817GetTableValue(temp0, object.paletteIndex3, CNZSetup_palCycleTable)818SetPaletteEntry(0, 185, temp0)819end if820821if object.animationTimer < 2822GetTableValue(temp0, object.sonicPlateFrameID, CNZSetup_aniTileIndexTable)823if temp0 == 0xFF824object.sonicPlateFrameID = 0825GetTableValue(temp0, object.sonicPlateFrameID, CNZSetup_aniTileIndexTable)826end if827828temp0 <<= 2829GetTableValue(temp1, temp0, CNZSetup_sonicPlateAniTileTable)830Copy16x16Tile(760, temp1)831832temp0++833GetTableValue(temp1, temp0, CNZSetup_sonicPlateAniTileTable)834Copy16x16Tile(761, temp1)835836temp0++837GetTableValue(temp1, temp0, CNZSetup_sonicPlateAniTileTable)838Copy16x16Tile(762, temp1)839840temp0++841GetTableValue(temp1, temp0, CNZSetup_sonicPlateAniTileTable)842Copy16x16Tile(763, temp1)843844object.sonicPlateFrameID++845846GetTableValue(temp0, object.tailsPlateFrameID, CNZSetup_aniTileIndexTable)847if temp0 == 0xFF848object.tailsPlateFrameID = 0849GetTableValue(temp0, object.tailsPlateFrameID, CNZSetup_aniTileIndexTable)850end if851852temp0 <<= 2853GetTableValue(temp1, temp0, CNZSetup_tailsPlateAniTileTable)854Copy16x16Tile(764, temp1)855856temp0++857GetTableValue(temp1, temp0, CNZSetup_tailsPlateAniTileTable)858Copy16x16Tile(765, temp1)859860temp0++861GetTableValue(temp1, temp0, CNZSetup_tailsPlateAniTileTable)862Copy16x16Tile(766, temp1)863temp0++864GetTableValue(temp1, temp0, CNZSetup_tailsPlateAniTileTable)865Copy16x16Tile(767, temp1)866867object.tailsPlateFrameID++868object.animationTimer = 6869else870object.animationTimer--871end if872end event873874875event ObjectStartup876if options.vsMode == false877SetMusicTrack("CasinoNight.ogg", TRACK_STAGE, MUSIC_LOOP_CNZ_1P)878SpeedUpMusic = CNZSetup_SpeedUpMusic1P879SlowDownMusic = CNZSetup_SlowDownMusic1P880else881SetMusicTrack("CasinoNight2.ogg", TRACK_STAGE, MUSIC_LOOP_CNZ_2P)882SpeedUpMusic = CNZSetup_SpeedUpMusic2P883SlowDownMusic = CNZSetup_SlowDownMusic2P884end if885886SetPaletteEntry(0, 192, 0x000000)887888animalType1 = TypeName[Flicky]889animalType2 = TypeName[Becky]890891arrayPos0 = 0892while arrayPos0 < 576893temp0 = arrayPos0894temp0 &= 0x3F895GetTableValue(stage.deformationData2[arrayPos0], temp0, CNZSetup_deformationTable)896arrayPos0++897loop898899// 10 = SLOT_ZONESETUP900object[10].type = TypeName[CNZ Setup]901object[10].priority = PRIORITY_ACTIVE902object[10].paletteIndex2 = 1903object[10].paletteIndex3 = 2904object[10].tailsPlateFrameID = 70905906if options.attractMode == true907switch stage.playerListPos908case PLAYER_SONIC_A909#platform: USE_ORIGINS910case PLAYER_AMY_A // Amy isn't even able to show up in demos, but check for her anyway I guess911#endplatform912Player_attractTable = CNZSetup_replay_attract_S913Player_attractTableSize = 142914Player_attractDuration = 1800915break916917case PLAYER_TAILS_A918Player_attractTable = CNZSetup_replay_attract_T919Player_attractTableSize = 522920Player_attractDuration = 1800921break922923case PLAYER_KNUCKLES_A924Player_attractTable = CNZSetup_replay_attract_K925Player_attractTableSize = 178926Player_attractDuration = 1800927break928end switch929930CallFunction(Player_SetupAttractDemo)931end if932end event933934935// ========================936// Editor Events937// ========================938939event RSDKDraw940DrawSprite(0)941end event942943944event RSDKLoad945LoadSpriteSheet("Global/Display.gif")946SpriteFrame(-16, -16, 32, 32, 1, 143)947948SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")949end event950951952