Path: blob/master/Sonic 2/Scripts/Special/Halfpipe.txt
1483 views
// ----------------------------------1// RSDK Project: Sonic 22// Script Description: Halfpipe Object3// Script Author: Christian Whitehead/Simon Thomley4// Unpacked by Rubberduckycooly's script unpacker5// ----------------------------------67// ========================8// Aliases9// ========================1011private alias object.value1 : object.moveStep12private alias object.value2 : object.transformIDHalfpipe13private alias object.value3 : object.nextTransformIDHalfpipe14private alias object.value4 : object.halfpipeTranslation.x15private alias object.value5 : object.halfpipeTranslation.y16private alias object.value6 : object.halfpipeTranslation.z17private alias object.value7 : object.halfpipeRotation.x18private alias object.value8 : object.halfpipeRotation.y19private alias object.value9 : object.halfpipeRotation.z20private alias object.value10 : object.newHalfpipeRotation.x21private alias object.value11 : object.newHalfpipeRotation.y22private alias object.value12 : object.newHalfpipeRotation.z23private alias object.value13 : object.playerPos.z24private alias object.value14 : object.worldTranslation.x25private alias object.value15 : object.worldTranslation.y26private alias object.value16 : object.worldTranslation.z27private alias object.value17 : object.worldRotation.x28private alias object.value18 : object.worldRotation.y29private alias object.value19 : object.worldRotation.z30private alias object.value20 : object.transformIDWorld31private alias object.value21 : object.nextTransformIDWorld32private alias object.value22 : object.localPos.z33private alias object.value23 : object.moveSpeed3435// Stage Object Aliases36// value0 isn't used here37private alias object.value1 : stageObject.localPos.x38private alias object.value2 : stageObject.localPos.y39private alias object.value3 : stageObject.localPos.z40private alias object.value4 : stageObject.worldPos.x41private alias object.value5 : stageObject.worldPos.y42private alias object.value6 : stageObject.worldPos.z4344private alias object.value7 : stageObject.shadowsEnabled45private alias object.value8 : stageObject.localShadowPos.x46private alias object.value9 : stageObject.localShadowPos.y47// value10 isn't used here48private alias object.value11 : stageObject.worldShadowPos.x49private alias object.value12 : stageObject.worldShadowPos.y50private alias object.value13 : stageObject.worldShadowPos.z51private alias object.value14 : stageObject.worldShadowPos.u5253// Player Aliases54private alias object.xpos : player.xpos55private alias object.ypos : player.ypos5657// Tile Flag Aliases58private alias 1 : TILE_ENDMARKER5960// Tile Info ID Aliases61private alias 6 : TILEINFO_ANGLEA6263// Face Buffer Flag Aliases64private alias 4 : FACE_FADED65private alias 5 : FACE_TEXTURED_C666768// ========================69// Function Declarations70// ========================7172reserve function Halfpipe_SetupVertices73reserve function Halfpipe_SetupFaces747576// ========================77// Static Values78// ========================7980private value Halfpipe_vertexInfoTable = 081private value Halfpipe_vertexCount = 082private value Halfpipe_faceInfoTable = 083private value Halfpipe_vertexTableID = 084private value Halfpipe_prevVertexCount = 085private value Halfpipe_faceCount = 086private value Halfpipe_rotateOffset.x = 087private value Halfpipe_rotateOffset.y = 088private value Halfpipe_rotateOffset.z = 089private value Halfpipe_tempTranslate.x = 090private value Halfpipe_tempTranslate.y = 091private value Halfpipe_tempTranslate.z = 092private value Halfpipe_worldRotate.x = 093private value Halfpipe_worldRotate.y = 094private value Halfpipe_worldRotate.z = 095private value Halfpipe_transformPos = 096private value Halfpipe_checkpointTexCount = 0979899// ========================100// Tables101// ========================102103private table Halfpipe_translateXTable[40]104private table Halfpipe_translateYTable[40]105private table Halfpipe_translateZTable[40]106107private table Halfpipe_rotateXTable[40]108private table Halfpipe_rotateYTable[40]109private table Halfpipe_rotateZTable[40]110111public table Halfpipe_checkpointFaceTable[4]112113private table Halfpipe_vertexOffsetTable11419, 19, 19, 19, 17, 17, 45, 17115end table116117// These values correspond to tile angles in the scene118// (Do note, TILE_ENDMARKER is separate from these, even if it has a numerical angle value of 1)119private table Halfpipe_matTransformTable12001212, 4, 6, 8, 10, 12, 14, 16122-2, -4, -6, -8, -10, -12, -14, -16123end table124125private table Halfpipe_vertexTablePtrs[8]126127private table Halfpipe_vertexTable112838129-0x4000, 0x1100, 0x0000130-0x4400, 0xD00, 0x0000131-0x3C00, 0xD00, 0x0000132-0x4000, 0x900, 0x0000133-0x4000, -0x91C, 0x0000134-0x3A37, -0x1A96, 0x0000135-0x305E, -0x29E9, 0x0000136-0x2298, -0x35D7, 0x0000137-0x1208, -0x3D68, 0x00001380x0000, -0x4000, 0x00001390x1208, -0x3D68, 0x00001400x2298, -0x35D7, 0x00001410x305E, -0x29E9, 0x00001420x3A37, -0x1A96, 0x00001430x4000, -0x91C, 0x00001440x4000, 0x900, 0x00001450x4000, 0x1100, 0x00001460x3C00, 0xD00, 0x00001470x4400, 0xD00, 0x0000148-0x4000, 0x1100, 0x0000149-0x4400, 0xD00, 0x0000150-0x3C00, 0xD00, 0x0000151-0x4000, 0x900, 0x0000152-0x4000, -0x91C, 0x0000153-0x3A37, -0x1A96, 0x0000154-0x305E, -0x29E9, 0x0000155-0x2298, -0x35D7, 0x0000156-0x1208, -0x3D68, 0x00001570x0000, -0x4000, 0x00001580x1208, -0x3D68, 0x00001590x2298, -0x35D7, 0x00001600x305E, -0x29E9, 0x00001610x3A37, -0x1A96, 0x00001620x4000, -0x91C, 0x00001630x4000, 0x900, 0x00001640x4000, 0x1100, 0x00001650x3C00, 0xD00, 0x00001660x4400, 0xD00, 0x0000167end table168169private table Halfpipe_faceTable1170221710, 1, 3, 2, 31720, 1, 20, 19, 21730, 2, 21, 19, 21741, 20, 22, 3, 21752, 21, 22, 3, 21763, 22, 23, 4, 11774, 23, 24, 5, 01785, 24, 25, 6, 01796, 25, 26, 7, 01807, 26, 27, 8, 11818, 27, 28, 9, 01829, 28, 29, 10, 018310, 29, 30, 11, 118411, 30, 31, 12, 018512, 31, 32, 13, 018613, 32, 33, 14, 018714, 33, 34, 15, 118816, 17, 15, 18, 318916, 35, 36, 17, 219017, 36, 15, 34, 219116, 35, 37, 18, 219218, 37, 34, 15, 2193end table194195private table Halfpipe_faceTable2196201970, 1, 20, 19, 21980, 2, 21, 19, 21991, 20, 22, 3, 22002, 21, 22, 3, 22013, 22, 23, 4, 12024, 23, 24, 5, 02035, 24, 25, 6, 02046, 25, 26, 7, 02057, 26, 27, 8, 12068, 27, 28, 9, 02079, 28, 29, 10, 020810, 29, 30, 11, 120911, 30, 31, 12, 021012, 31, 32, 13, 021113, 32, 33, 14, 021214, 33, 34, 15, 121316, 35, 36, 17, 221417, 36, 15, 34, 221516, 35, 37, 18, 221618, 37, 34, 15, 2217end table218219private table Halfpipe_vertexTable222034221-0x4000, 0x900, 0x0000222-0x4000, -0x91C, 0x0000223-0x3A37, -0x1A96, 0x0000224-0x305E, -0x29E9, 0x0000225-0x2298, -0x35D7, 0x0000226-0x2059, -0x36DE, 0x0000227-0x1449, -0x3C5D, 0x0000228-0x1208, -0x3D68, 0x00002290x0000, -0x4000, 0x00002300x1208, -0x3D68, 0x00002310x1449, -0x3C5D, 0x00002320x2059, -0x36DE, 0x00002330x2298, -0x35D7, 0x00002340x305E, -0x29E9, 0x00002350x3A37, -0x1A96, 0x00002360x4000, -0x91C, 0x00002370x4000, 0x900, 0x0000238-0x4000, 0x900, 0x0000239-0x4000, -0x91C, 0x0000240-0x3A37, -0x1A96, 0x0000241-0x305E, -0x29E9, 0x0000242-0x2298, -0x35D7, 0x0000243-0x1ED7, -0x378F, 0x0000244-0x15CB, -0x3BAF, 0x0000245-0x1208, -0x3D68, 0x00002460x0000, -0x4000, 0x00002470x1208, -0x3D68, 0x00002480x15CB, -0x3BAF, 0x00002490x1ED7, -0x378F, 0x00002500x2298, -0x35D7, 0x00002510x305E, -0x29E9, 0x00002520x3A37, -0x1A96, 0x00002530x4000, -0x91C, 0x00002540x4000, 0x900, 0x0000255end table256257private table Halfpipe_faceTable3258162590, 17, 18, 1, 12601, 18, 19, 2, 02612, 19, 20, 3, 02623, 20, 21, 4, 02634, 21, 22, 5, 12645, 22, 23, 6, 22656, 23, 24, 7, 12667, 24, 25, 8, 02678, 25, 26, 9, 02689, 26, 27, 10, 126910, 27, 28, 11, 227011, 28, 29, 12, 127112, 29, 30, 13, 027213, 30, 31, 14, 027314, 31, 32, 15, 027415, 32, 33, 16, 1275end table276277private table Halfpipe_vertexTable327851279-0x4000, 0x900, 0x0000280-0x4000, -0x91C, 0x0000281-0x3A37, -0x1A96, 0x0000282-0x305E, -0x29E9, 0x0000283-0x2298, -0x35D7, 0x0000284-0x1ED7, -0x378F, 0x0000285-0x15CB, -0x3BAF, 0x0000286-0x1208, -0x3D68, 0x00002870x0000, -0x4000, 0x00002880x1208, -0x3D68, 0x00002890x15CB, -0x3BAF, 0x00002900x1ED7, -0x378F, 0x00002910x2298, -0x35D7, 0x00002920x305E, -0x29E9, 0x00002930x3A37, -0x1A96, 0x00002940x4000, -0x91C, 0x00002950x4000, 0x900, 0x0000296-0x4000, 0x900, 0x0000297-0x4000, -0x91C, 0x0000298-0x3A37, -0x1A96, 0x0000299-0x305E, -0x29E9, 0x0000300-0x2298, -0x35D7, 0x0000301-0x1E46, -0x37D1, 0x0000302-0x165C, -0x3B6D, 0x0000303-0x1208, -0x3D68, 0x00003040x0000, -0x4000, 0x00003050x1208, -0x3D68, 0x00003060x165C, -0x3B6D, 0x00003070x1E46, -0x37D1, 0x00003080x2298, -0x35D7, 0x00003090x305E, -0x29E9, 0x00003100x3A37, -0x1A96, 0x00003110x4000, -0x91C, 0x00003120x4000, 0x900, 0x0000313-0x4000, 0x900, 0x0000314-0x4000, -0x91C, 0x0000315-0x3A37, -0x1A96, 0x0000316-0x305E, -0x29E9, 0x0000317-0x2298, -0x35D7, 0x0000318-0x1D55, -0x383F, 0x0000319-0x174D, -0x3AFF, 0x0000320-0x1208, -0x3D68, 0x00003210x0000, -0x4000, 0x00003220x1208, -0x3D68, 0x00003230x174D, -0x3AFF, 0x00003240x1D55, -0x383F, 0x00003250x2298, -0x35D7, 0x00003260x305E, -0x29E9, 0x00003270x3A37, -0x1A96, 0x00003280x4000, -0x91C, 0x00003290x4000, 0x900, 0x0000330end table331332private table Halfpipe_faceTable4333323340, 17, 18, 1, 13351, 18, 19, 2, 03362, 19, 20, 3, 03373, 20, 21, 4, 03384, 21, 22, 5, 13395, 22, 23, 6, 23406, 23, 24, 7, 13417, 24, 25, 8, 03428, 25, 26, 9, 03439, 26, 27, 10, 134410, 27, 28, 11, 234511, 28, 29, 12, 134612, 29, 30, 13, 034713, 30, 31, 14, 034814, 31, 32, 15, 034915, 32, 33, 16, 135017, 34, 35, 18, 135118, 35, 36, 19, 135219, 36, 37, 20, 135320, 37, 38, 21, 135421, 38, 39, 22, 135522, 39, 40, 23, 235623, 40, 41, 24, 135724, 41, 42, 25, 135825, 42, 43, 26, 135926, 43, 44, 27, 136027, 44, 45, 28, 236128, 45, 46, 29, 136229, 46, 47, 30, 136330, 47, 48, 31, 136431, 48, 49, 32, 136532, 49, 50, 33, 1366end table367368private table Halfpipe_vertexTable436979370-0x3800, 0xA00, 0x0000371-0x3800, 0xA00, 0x0000372-0x3800, 0xA00, 0x0000373-0x3800, 0xA00, 0x0000374-0x2E00, 0x2400, 0x0000375-0x2E00, 0x2400, 0x0000376-0x2E00, 0x2400, 0x0000377-0x2E00, 0x2400, 0x0000378-0x1A00, 0x3600, 0x0000379-0x1A00, 0x3600, 0x0000380-0x1A00, 0x3600, 0x0000381-0x1A00, 0x3600, 0x00003820x0000, 0x4000, 0x00003830x0000, 0x4000, 0x00003840x0000, 0x4000, 0x00003850x0000, 0x4000, 0x00003860x1A00, 0x3600, 0x00003870x1A00, 0x3600, 0x00003880x1A00, 0x3600, 0x00003890x1A00, 0x3600, 0x00003900x2E00, 0x2400, 0x00003910x2E00, 0x2400, 0x00003920x2E00, 0x2400, 0x00003930x2E00, 0x2400, 0x00003940x3800, 0xA00, 0x00003950x3800, 0xA00, 0x00003960x3800, 0xA00, 0x00003970x3800, 0xA00, 0x0000398-0x4000, 0x900, 0x0000399-0x4000, -0x91C, 0x0000400-0x3A37, -0x1A96, 0x0000401-0x305E, -0x29E9, 0x0000402-0x2298, -0x35D7, 0x0000403-0x1D55, -0x383F, 0x0000404-0x174D, -0x3AFF, 0x0000405-0x1208, -0x3D68, 0x00004060x0000, -0x4000, 0x00004070x1208, -0x3D68, 0x00004080x174D, -0x3AFF, 0x00004090x1D55, -0x383F, 0x00004100x2298, -0x35D7, 0x00004110x305E, -0x29E9, 0x00004120x3A37, -0x1A96, 0x00004130x4000, -0x91C, 0x00004140x4000, 0x900, 0x0000415-0x4000, 0x900, 0x0000416-0x4000, -0x91C, 0x0000417-0x3A37, -0x1A96, 0x0000418-0x305E, -0x29E9, 0x0000419-0x2298, -0x35D7, 0x0000420-0x1C64, -0x38AD, 0x0000421-0x183E, -0x3A91, 0x0000422-0x1208, -0x3D68, 0x00004230x0000, -0x4000, 0x00004240x1208, -0x3D68, 0x00004250x183E, -0x3A91, 0x00004260x1C64, -0x38AD, 0x00004270x2298, -0x35D7, 0x00004280x305E, -0x29E9, 0x00004290x3A37, -0x1A96, 0x00004300x4000, -0x91C, 0x00004310x4000, 0x900, 0x0000432-0x4000, 0x900, 0x0000433-0x4000, -0x91C, 0x0000434-0x3A37, -0x1A96, 0x0000435-0x305E, -0x29E9, 0x0000436-0x2298, -0x35D7, 0x0000437-0x1BD3, -0x38EF, 0x0000438-0x18CF, -0x3A50, 0x0000439-0x1208, -0x3D68, 0x00004400x0000, -0x4000, 0x00004410x1208, -0x3D68, 0x00004420x18CF, -0x3A50, 0x00004430x1BD3, -0x38EF, 0x00004440x2298, -0x35D7, 0x00004450x305E, -0x29E9, 0x00004460x3A37, -0x1A96, 0x00004470x4000, -0x91C, 0x00004480x4000, 0x900, 0x0000449end table450451private table Halfpipe_faceTable5452394530, 1, 2, 3, 54544, 5, 6, 7, 54558, 9, 10, 11, 545612, 13, 14, 15, 545716, 17, 18, 19, 545820, 21, 22, 23, 545924, 25, 26, 27, 546028, 45, 46, 29, 146129, 46, 47, 30, 146230, 47, 48, 31, 146331, 48, 49, 32, 146432, 49, 50, 33, 146533, 50, 51, 34, 246634, 51, 52, 35, 146735, 52, 53, 36, 146836, 53, 54, 37, 146937, 54, 55, 38, 147038, 55, 56, 39, 247139, 56, 57, 40, 147240, 57, 58, 41, 147341, 58, 59, 42, 147442, 59, 60, 43, 147543, 60, 61, 44, 147645, 62, 63, 46, 147746, 63, 64, 47, 047847, 64, 65, 48, 047948, 65, 66, 49, 048049, 66, 67, 50, 148150, 67, 68, 51, 248251, 68, 69, 52, 148352, 69, 70, 53, 048453, 70, 71, 54, 048554, 71, 72, 55, 148655, 72, 73, 56, 248756, 73, 74, 57, 148857, 74, 75, 58, 048958, 75, 76, 59, 049059, 76, 77, 60, 049160, 77, 78, 61, 1492end table493494private table Halfpipe_vertexTable549534496-0x4000, 0x900, 0x0000497-0x4000, -0x91C, 0x0000498-0x3A37, -0x1A96, 0x0000499-0x305E, -0x29E9, 0x0000500-0x2298, -0x35D7, 0x0000501-0x1BD3, -0x38EF, 0x0000502-0x18CF, -0x3A50, 0x0000503-0x1208, -0x3D68, 0x00005040x0000, -0x4000, 0x00005050x1208, -0x3D68, 0x00005060x18CF, -0x3A50, 0x00005070x1BD3, -0x38EF, 0x00005080x2298, -0x35D7, 0x00005090x305E, -0x29E9, 0x00005100x3A37, -0x1A96, 0x00005110x4000, -0x91C, 0x00005120x4000, 0x900, 0x0000513-0x4000, 0x900, 0x0000514-0x4000, -0x91C, 0x0000515-0x3A37, -0x1A96, 0x0000516-0x305E, -0x29E9, 0x0000517-0x2298, -0x35D7, 0x0000518-0x1A51, -0x39A0, 0x0000519-0x1A51, -0x39A0, 0x0000520-0x1208, -0x3D68, 0x00005210x0000, -0x4000, 0x00005220x1208, -0x3D68, 0x00005230x1A51, -0x39A0, 0x00005240x1A51, -0x39A0, 0x00005250x2298, -0x35D7, 0x00005260x305E, -0x29E9, 0x00005270x3A37, -0x1A96, 0x00005280x4000, -0x91C, 0x00005290x4000, 0x900, 0x0000530end table531532private table Halfpipe_faceTable6533165340, 17, 18, 1, 15351, 18, 19, 2, 05362, 19, 20, 3, 05373, 20, 21, 4, 05384, 21, 22, 5, 15395, 22, 23, 6, 25406, 23, 24, 7, 15417, 24, 25, 8, 05428, 25, 26, 9, 05439, 26, 27, 10, 154410, 27, 28, 11, 254511, 28, 29, 12, 154612, 29, 30, 13, 054713, 30, 31, 14, 054814, 31, 32, 15, 054915, 32, 33, 16, 1550end table551552553// ========================554// Function Definitions555// ========================556557private function Halfpipe_SetupVertices558temp1 = object[0].xpos559temp1 >>= 16560temp1 += 376561temp2 = object[0].ypos562temp2 >>= 16563564Get16x16TileInfo(temp0, temp1, temp2, TILEINFO_ANGLEA)565if temp0 == TILE_ENDMARKER566temp2 += 128567temp2 &= 0xFF80568object[0].iypos = temp2569end if570temp1 += 16571572temp3 = Halfpipe_worldRotate.y573temp3 += 0x40574temp3 &= 0x1FF575temp3 >>= 7576switch temp3577case 0578Get16x16TileInfo(temp0, temp1, temp2, TILEINFO_ANGLEA)579GetTableValue(Halfpipe_rotateOffset.x, temp0, Halfpipe_matTransformTable)580temp1 += 16581582Get16x16TileInfo(temp0, temp1, temp2, TILEINFO_ANGLEA)583GetTableValue(Halfpipe_rotateOffset.y, temp0, Halfpipe_matTransformTable)584temp1 += 16585586Get16x16TileInfo(temp0, temp1, temp2, TILEINFO_ANGLEA)587GetTableValue(Halfpipe_rotateOffset.z, temp0, Halfpipe_matTransformTable)588break589590case 1591Get16x16TileInfo(temp0, temp1, temp2, TILEINFO_ANGLEA)592GetTableValue(Halfpipe_rotateOffset.z, temp0, Halfpipe_matTransformTable)593temp1 += 16594595Get16x16TileInfo(temp0, temp1, temp2, TILEINFO_ANGLEA)596GetTableValue(Halfpipe_rotateOffset.y, temp0, Halfpipe_matTransformTable)597temp1 += 16598599Get16x16TileInfo(temp0, temp1, temp2, TILEINFO_ANGLEA)600GetTableValue(Halfpipe_rotateOffset.x, temp0, Halfpipe_matTransformTable)601break602603case 2604Get16x16TileInfo(temp0, temp1, temp2, TILEINFO_ANGLEA)605GetTableValue(Halfpipe_rotateOffset.x, temp0, Halfpipe_matTransformTable)606FlipSign(Halfpipe_rotateOffset.x)607temp1 += 16608609Get16x16TileInfo(temp0, temp1, temp2, TILEINFO_ANGLEA)610GetTableValue(Halfpipe_rotateOffset.y, temp0, Halfpipe_matTransformTable)611temp1 += 16612613Get16x16TileInfo(temp0, temp1, temp2, TILEINFO_ANGLEA)614GetTableValue(Halfpipe_rotateOffset.z, temp0, Halfpipe_matTransformTable)615FlipSign(Halfpipe_rotateOffset.z)616break617618case 3619Get16x16TileInfo(temp0, temp1, temp2, TILEINFO_ANGLEA)620GetTableValue(Halfpipe_rotateOffset.z, temp0, Halfpipe_matTransformTable)621FlipSign(Halfpipe_rotateOffset.z)622temp1 += 16623624Get16x16TileInfo(temp0, temp1, temp2, TILEINFO_ANGLEA)625GetTableValue(Halfpipe_rotateOffset.y, temp0, Halfpipe_matTransformTable)626temp1 += 16627628Get16x16TileInfo(temp0, temp1, temp2, TILEINFO_ANGLEA)629GetTableValue(Halfpipe_rotateOffset.x, temp0, Halfpipe_matTransformTable)630FlipSign(Halfpipe_rotateOffset.x)631break632633end switch634635temp0 = stage.curYBoundary2636temp0 <<= 16637638object[0].ypos += 0x80000639if object[0].ypos >= temp0640object[0].ypos -= temp0641end if642643object[0].localPos.z += 0x80000644if object[0].localPos.z >= temp0645object[0].localPos.z -= temp0646end if647648MatrixRotateXYZ(MAT_WORLD, Halfpipe_worldRotate.x, Halfpipe_worldRotate.y, Halfpipe_worldRotate.z)649MatrixTranslateXYZ(MAT_TEMP, Halfpipe_tempTranslate.x, Halfpipe_tempTranslate.y, Halfpipe_tempTranslate.z)650MatrixMultiply(MAT_WORLD, MAT_TEMP)651652temp0 = true653while temp0 == true654if object[arrayPos5].ypos < object[0].ypos655object[arrayPos5].priority = PRIORITY_ACTIVE656if stageObject[arrayPos5].shadowsEnabled == true657vertexBuffer[4094].x = stageObject[arrayPos5].localPos.x658vertexBuffer[4094].y = stageObject[arrayPos5].localPos.y659vertexBuffer[4094].z = 0660vertexBuffer[4095].x = stageObject[arrayPos5].localShadowPos.x661vertexBuffer[4095].y = stageObject[arrayPos5].localShadowPos.y662vertexBuffer[4095].z = 0663TransformVertices(MAT_WORLD, 0xFFE, 0x1000)664665stageObject[arrayPos5].localPos.z = object[0].localPos.z666stageObject[arrayPos5].worldPos.x = vertexBuffer[4094].x667stageObject[arrayPos5].worldPos.y = vertexBuffer[4094].y668stageObject[arrayPos5].worldPos.z = vertexBuffer[4094].z669stageObject[arrayPos5].worldShadowPos.x = vertexBuffer[4095].x670stageObject[arrayPos5].worldShadowPos.y = vertexBuffer[4095].y671stageObject[arrayPos5].worldShadowPos.z = vertexBuffer[4095].z672else673vertexBuffer[4095].x = stageObject[arrayPos5].localPos.x674vertexBuffer[4095].y = stageObject[arrayPos5].localPos.y675vertexBuffer[4095].z = 0676TransformVertices(MAT_WORLD, 0xFFF, 0x1000)677678stageObject[arrayPos5].localPos.z = object[0].localPos.z679stageObject[arrayPos5].worldPos.x = vertexBuffer[4095].x680stageObject[arrayPos5].worldPos.y = vertexBuffer[4095].y681stageObject[arrayPos5].worldPos.z = vertexBuffer[4095].z682end if683684arrayPos5++685else686temp0 = false687end if688loop689690temp2 = Halfpipe_vertexTableID691temp2 &= 7692GetTableValue(Halfpipe_vertexInfoTable, temp2, Halfpipe_vertexTablePtrs)693Halfpipe_vertexTableID++694695temp0 = 0696arrayPos0 = Halfpipe_vertexCount697GetTableValue(temp1, temp0, Halfpipe_vertexInfoTable)698temp0++699while temp1 > 0700GetTableValue(vertexBuffer[arrayPos0].x, temp0, Halfpipe_vertexInfoTable)701temp0++702GetTableValue(vertexBuffer[arrayPos0].y, temp0, Halfpipe_vertexInfoTable)703temp0++704GetTableValue(vertexBuffer[arrayPos0].z, temp0, Halfpipe_vertexInfoTable)705temp0++706arrayPos0++707temp1--708loop709710SetTableValue(Halfpipe_tempTranslate.x, Halfpipe_transformPos, Halfpipe_translateXTable)711SetTableValue(Halfpipe_tempTranslate.y, Halfpipe_transformPos, Halfpipe_translateYTable)712SetTableValue(Halfpipe_tempTranslate.z, Halfpipe_transformPos, Halfpipe_translateZTable)713SetTableValue(Halfpipe_worldRotate.x, Halfpipe_transformPos, Halfpipe_rotateXTable)714SetTableValue(Halfpipe_worldRotate.y, Halfpipe_transformPos, Halfpipe_rotateYTable)715SetTableValue(Halfpipe_worldRotate.z, Halfpipe_transformPos, Halfpipe_rotateZTable)716717switch temp2718case 0719case 1720case 2721case 3722case 4723case 7724GetTableValue(temp0, temp2, Halfpipe_vertexOffsetTable)725temp0 += Halfpipe_vertexCount726TransformVertices(MAT_WORLD, Halfpipe_vertexCount, temp0)727vertexBuffer[4095].x = 0728vertexBuffer[4095].y = 0729vertexBuffer[4095].z = 0x2000730TransformVertices(MAT_WORLD, 0xFFF, 0x1000)731732Halfpipe_tempTranslate.x = vertexBuffer[4095].x733Halfpipe_tempTranslate.y = vertexBuffer[4095].y734Halfpipe_tempTranslate.z = vertexBuffer[4095].z735Halfpipe_worldRotate.x += Halfpipe_rotateOffset.x736Halfpipe_worldRotate.y += Halfpipe_rotateOffset.y737Halfpipe_worldRotate.z += Halfpipe_rotateOffset.z738MatrixRotateXYZ(MAT_WORLD, Halfpipe_worldRotate.x, Halfpipe_worldRotate.y, Halfpipe_worldRotate.z)739MatrixTranslateXYZ(MAT_TEMP, Halfpipe_tempTranslate.x, Halfpipe_tempTranslate.y, Halfpipe_tempTranslate.z)740MatrixMultiply(MAT_WORLD, MAT_TEMP)741TransformVertices(MAT_WORLD, temp0, arrayPos0)742break743744case 5745GetTableValue(temp0, temp2, Halfpipe_vertexOffsetTable)746temp0 += Halfpipe_vertexCount747TransformVertices(MAT_WORLD, Halfpipe_vertexCount, temp0)748vertexBuffer[4094].x = 0749vertexBuffer[4094].y = 0750vertexBuffer[4094].z = 0xC00751vertexBuffer[4095].x = 0752vertexBuffer[4095].y = 0753vertexBuffer[4095].z = 0x2000754TransformVertices(MAT_WORLD, 0xFFE, 0x1000)755756Halfpipe_tempTranslate.x = vertexBuffer[4094].x757Halfpipe_tempTranslate.y = vertexBuffer[4094].y758Halfpipe_tempTranslate.z = vertexBuffer[4094].z759temp3 = Halfpipe_rotateOffset.x760temp3 *= 12761temp3 >>= 5762Halfpipe_worldRotate.x += temp3763temp3 = Halfpipe_rotateOffset.y764temp3 *= 12765temp3 >>= 5766Halfpipe_worldRotate.y += temp3767temp3 = Halfpipe_rotateOffset.z768temp3 *= 12769temp3 >>= 5770Halfpipe_worldRotate.z += temp3771MatrixRotateXYZ(MAT_WORLD, Halfpipe_worldRotate.x, Halfpipe_worldRotate.y, Halfpipe_worldRotate.z)772MatrixTranslateXYZ(MAT_TEMP, Halfpipe_tempTranslate.x, Halfpipe_tempTranslate.y, Halfpipe_tempTranslate.z)773MatrixMultiply(MAT_WORLD, MAT_TEMP)774temp1 = temp0775temp1 += 17776TransformVertices(MAT_WORLD, temp0, temp1)777778Halfpipe_tempTranslate.x = vertexBuffer[4095].x779Halfpipe_tempTranslate.y = vertexBuffer[4095].y780Halfpipe_tempTranslate.z = vertexBuffer[4095].z781GetTableValue(Halfpipe_worldRotate.x, Halfpipe_transformPos, Halfpipe_rotateXTable)782GetTableValue(Halfpipe_worldRotate.y, Halfpipe_transformPos, Halfpipe_rotateYTable)783GetTableValue(Halfpipe_worldRotate.z, Halfpipe_transformPos, Halfpipe_rotateZTable)784Halfpipe_worldRotate.x += Halfpipe_rotateOffset.x785Halfpipe_worldRotate.y += Halfpipe_rotateOffset.y786Halfpipe_worldRotate.z += Halfpipe_rotateOffset.z787MatrixRotateXYZ(MAT_WORLD, Halfpipe_worldRotate.x, Halfpipe_worldRotate.y, Halfpipe_worldRotate.z)788MatrixTranslateXYZ(MAT_TEMP, Halfpipe_tempTranslate.x, Halfpipe_tempTranslate.y, Halfpipe_tempTranslate.z)789MatrixMultiply(MAT_WORLD, MAT_TEMP)790TransformVertices(MAT_WORLD, temp1, arrayPos0)791break792793case 6794GetTableValue(temp0, temp2, Halfpipe_vertexOffsetTable)795temp0 += Halfpipe_vertexCount796TransformVertices(MAT_WORLD, Halfpipe_vertexCount, temp0)797798vertexBuffer[4094].x = 0799vertexBuffer[4094].y = 0800vertexBuffer[4094].z = 0x1400801vertexBuffer[4095].x = 0802vertexBuffer[4095].y = 0803vertexBuffer[4095].z = 0x2000804TransformVertices(MAT_WORLD, 0xFFE, 0x1000)805806Halfpipe_tempTranslate.x = vertexBuffer[4094].x807Halfpipe_tempTranslate.y = vertexBuffer[4094].y808Halfpipe_tempTranslate.z = vertexBuffer[4094].z809temp3 = Halfpipe_rotateOffset.x810temp3 *= 20811temp3 >>= 5812Halfpipe_worldRotate.x += temp3813temp3 = Halfpipe_rotateOffset.y814temp3 *= 20815temp3 >>= 5816Halfpipe_worldRotate.y += temp3817temp3 = Halfpipe_rotateOffset.z818temp3 *= 20819temp3 >>= 5820Halfpipe_worldRotate.z += temp3821MatrixRotateXYZ(MAT_WORLD, Halfpipe_worldRotate.x, Halfpipe_worldRotate.y, Halfpipe_worldRotate.z)822MatrixTranslateXYZ(MAT_TEMP, Halfpipe_tempTranslate.x, Halfpipe_tempTranslate.y, Halfpipe_tempTranslate.z)823MatrixMultiply(MAT_WORLD, MAT_TEMP)824temp1 = temp0825temp1 += 17826TransformVertices(MAT_WORLD, temp0, temp1)827828Halfpipe_tempTranslate.x = vertexBuffer[4095].x829Halfpipe_tempTranslate.y = vertexBuffer[4095].y830Halfpipe_tempTranslate.z = vertexBuffer[4095].z831GetTableValue(Halfpipe_worldRotate.x, Halfpipe_transformPos, Halfpipe_rotateXTable)832GetTableValue(Halfpipe_worldRotate.y, Halfpipe_transformPos, Halfpipe_rotateYTable)833GetTableValue(Halfpipe_worldRotate.z, Halfpipe_transformPos, Halfpipe_rotateZTable)834Halfpipe_worldRotate.x += Halfpipe_rotateOffset.x835Halfpipe_worldRotate.y += Halfpipe_rotateOffset.y836Halfpipe_worldRotate.z += Halfpipe_rotateOffset.z837MatrixRotateXYZ(MAT_WORLD, Halfpipe_worldRotate.x, Halfpipe_worldRotate.y, Halfpipe_worldRotate.z)838MatrixTranslateXYZ(MAT_TEMP, Halfpipe_tempTranslate.x, Halfpipe_tempTranslate.y, Halfpipe_tempTranslate.z)839MatrixMultiply(MAT_WORLD, MAT_TEMP)840TransformVertices(MAT_WORLD, temp1, arrayPos0)841break842843end switch844845Halfpipe_transformPos++846Halfpipe_transformPos %= 40847Halfpipe_vertexCount = arrayPos0848if Halfpipe_vertexCount >= Halfpipe_prevVertexCount849Halfpipe_vertexCount = 0850end if851end function852853854private function Halfpipe_SetupFaces855temp0 = 0856arrayPos0 = scene3D.faceCount857GetTableValue(temp1, temp0, Halfpipe_faceInfoTable)858temp0++859while temp1 > 0860GetTableValue(faceBuffer[arrayPos0].a, temp0, Halfpipe_faceInfoTable)861faceBuffer[arrayPos0].a += Halfpipe_vertexCount862temp0++863864GetTableValue(faceBuffer[arrayPos0].b, temp0, Halfpipe_faceInfoTable)865faceBuffer[arrayPos0].b += Halfpipe_vertexCount866temp0++867868GetTableValue(faceBuffer[arrayPos0].c, temp0, Halfpipe_faceInfoTable)869faceBuffer[arrayPos0].c += Halfpipe_vertexCount870temp0++871872GetTableValue(faceBuffer[arrayPos0].d, temp0, Halfpipe_faceInfoTable)873faceBuffer[arrayPos0].d += Halfpipe_vertexCount874temp0++875876GetTableValue(temp2, temp0, Halfpipe_faceInfoTable)877temp0++878879switch temp2880case 0881faceBuffer[arrayPos0].flag = FACE_FADED882faceBuffer[arrayPos0].color = SpecialSetup_StageColor1883break884885case 1886faceBuffer[arrayPos0].flag = FACE_FADED887faceBuffer[arrayPos0].color = SpecialSetup_StageColor2888break889890case 2891faceBuffer[arrayPos0].flag = FACE_FADED892faceBuffer[arrayPos0].color = 0xFFE0E000893break894895case 3896faceBuffer[arrayPos0].flag = FACE_FADED897faceBuffer[arrayPos0].color = 0xFFE0A020898break899900case 5901faceBuffer[arrayPos0].flag = FACE_TEXTURED_C902arrayPos1 = faceBuffer[arrayPos0].a903vertexBuffer[arrayPos1].u = 17904vertexBuffer[arrayPos1].v = 17905906arrayPos2 = Halfpipe_checkpointTexCount907arrayPos2 %= 7908if arrayPos2 == 0909arrayPos2 = Halfpipe_checkpointTexCount910arrayPos2 /= 7911SetTableValue(arrayPos1, arrayPos2, Halfpipe_checkpointFaceTable)912end if913914Halfpipe_checkpointTexCount++915916arrayPos1 = faceBuffer[arrayPos0].b917vertexBuffer[arrayPos1].u = 0x800918vertexBuffer[arrayPos1].v = 0x800919920arrayPos1 = faceBuffer[arrayPos0].c921vertexBuffer[arrayPos1].u = 16922vertexBuffer[arrayPos1].v = 16923break924925end switch926927arrayPos0++928scene3D.faceCount++929temp1--930loop931end function932933934// ========================935// Events936// ========================937938event ObjectUpdate939scene3D.vertexCount = Halfpipe_prevVertexCount940scene3D.faceCount = Halfpipe_faceCount941942// Yep, this check has absolutely no chance of failing943// This is likely a leftover from development, probably checking if a button was held down or something944// Anyway, this handles progressing forwards through the stage945if true == true946object.moveStep += object.moveSpeed947temp0 = object.moveSpeed948temp0 <<= 13949object.playerPos.z += temp0950if object.moveStep > 63951object.moveStep -= 64952CallFunction(Halfpipe_SetupVertices)953object.transformIDHalfpipe++954object.transformIDHalfpipe %= 40955object.nextTransformIDHalfpipe++956object.nextTransformIDHalfpipe %= 40957object.transformIDWorld++958object.transformIDWorld %= 40959object.nextTransformIDWorld++960object.nextTransformIDWorld %= 40961end if962end if963964// ------------------------965// HALFPIPE TRANSFORMATIONS966// ------------------------967968// Translation969970GetTableValue(object.halfpipeTranslation.x, object.transformIDHalfpipe, Halfpipe_translateXTable)971GetTableValue(temp0, object.nextTransformIDHalfpipe, Halfpipe_translateXTable)972temp0 -= object.halfpipeTranslation.x973temp0 *= object.moveStep974temp0 >>= 6975object.halfpipeTranslation.x += temp0976FlipSign(object.halfpipeTranslation.x)977978GetTableValue(object.halfpipeTranslation.y, object.transformIDHalfpipe, Halfpipe_translateYTable)979GetTableValue(temp0, object.nextTransformIDHalfpipe, Halfpipe_translateYTable)980temp0 -= object.halfpipeTranslation.y981temp0 *= object.moveStep982temp0 >>= 6983object.halfpipeTranslation.y += temp0984FlipSign(object.halfpipeTranslation.y)985986GetTableValue(object.halfpipeTranslation.z, object.transformIDHalfpipe, Halfpipe_translateZTable)987GetTableValue(temp0, object.nextTransformIDHalfpipe, Halfpipe_translateZTable)988temp0 -= object.halfpipeTranslation.z989temp0 *= object.moveStep990temp0 >>= 6991object.halfpipeTranslation.z += temp0992FlipSign(object.halfpipeTranslation.z)993994// Rotation995996GetTableValue(temp1, object.transformIDHalfpipe, Halfpipe_rotateXTable)997GetTableValue(temp0, object.nextTransformIDHalfpipe, Halfpipe_rotateXTable)998temp0 -= temp1999temp0 *= object.moveStep1000temp0 >>= 61001temp1 += temp01002temp1 <<= 11003if object.newHalfpipeRotation.x != temp11004temp0 = temp11005temp0 -= object.newHalfpipeRotation.x1006temp0 >>= 11007if temp0 == 01008if object.newHalfpipeRotation.x < temp11009object.newHalfpipeRotation.x++1010else1011object.newHalfpipeRotation.x--1012end if1013else1014object.newHalfpipeRotation.x += temp01015end if1016end if10171018GetTableValue(temp1, object.transformIDHalfpipe, Halfpipe_rotateYTable)1019GetTableValue(temp0, object.nextTransformIDHalfpipe, Halfpipe_rotateYTable)1020temp0 -= temp11021temp0 *= object.moveStep1022temp0 >>= 61023temp1 += temp01024temp1 <<= 11025if object.newHalfpipeRotation.y != temp11026temp0 = temp11027temp0 -= object.newHalfpipeRotation.y1028temp0 >>= 21029if temp0 == 01030if object.newHalfpipeRotation.y < temp11031object.newHalfpipeRotation.y++1032else1033object.newHalfpipeRotation.y--1034end if1035else1036object.newHalfpipeRotation.y += temp01037end if1038end if10391040GetTableValue(temp1, object.transformIDHalfpipe, Halfpipe_rotateZTable)1041GetTableValue(temp0, object.nextTransformIDHalfpipe, Halfpipe_rotateZTable)1042temp0 -= temp11043temp0 *= object.moveStep1044temp0 >>= 61045temp1 += temp01046temp1 <<= 11047if object.newHalfpipeRotation.z != temp11048temp0 = temp11049temp0 -= object.newHalfpipeRotation.z1050temp0 >>= 11051if temp0 == 01052if object.newHalfpipeRotation.z < temp11053object.newHalfpipeRotation.z++1054else1055object.newHalfpipeRotation.z--1056end if1057else1058object.newHalfpipeRotation.z += temp01059end if1060end if10611062object.halfpipeRotation.x = object.newHalfpipeRotation.x1063object.halfpipeRotation.y = object.newHalfpipeRotation.y1064object.halfpipeRotation.z = object.newHalfpipeRotation.z1065object.halfpipeRotation.x >>= 11066object.halfpipeRotation.y >>= 11067object.halfpipeRotation.z >>= 110681069// ------------------------1070// WORLD TRANSFORMATIONS1071// ------------------------10721073// Translation10741075GetTableValue(object.worldTranslation.x, object.transformIDWorld, Halfpipe_translateXTable)1076GetTableValue(temp0, object.nextTransformIDWorld, Halfpipe_translateXTable)1077temp0 -= object.worldTranslation.x1078temp0 *= object.moveStep1079temp0 >>= 61080object.worldTranslation.x += temp010811082GetTableValue(object.worldTranslation.y, object.transformIDWorld, Halfpipe_translateYTable)1083GetTableValue(temp0, object.nextTransformIDWorld, Halfpipe_translateYTable)1084temp0 -= object.worldTranslation.y1085temp0 *= object.moveStep1086temp0 >>= 61087object.worldTranslation.y += temp010881089GetTableValue(object.worldTranslation.z, object.transformIDWorld, Halfpipe_translateZTable)1090GetTableValue(temp0, object.nextTransformIDWorld, Halfpipe_translateZTable)1091temp0 -= object.worldTranslation.z1092temp0 *= object.moveStep1093temp0 >>= 61094object.worldTranslation.z += temp010951096// Rotation10971098GetTableValue(object.worldRotation.x, object.transformIDWorld, Halfpipe_rotateXTable)1099GetTableValue(temp0, object.nextTransformIDWorld, Halfpipe_rotateXTable)1100temp0 -= object.worldRotation.x1101temp0 *= object.moveStep1102temp0 >>= 61103object.worldRotation.x += temp011041105GetTableValue(object.worldRotation.y, object.transformIDWorld, Halfpipe_rotateYTable)1106GetTableValue(temp0, object.nextTransformIDWorld, Halfpipe_rotateYTable)1107temp0 -= object.worldRotation.y1108temp0 *= object.moveStep1109temp0 >>= 61110object.worldRotation.y += temp011111112GetTableValue(object.worldRotation.z, object.transformIDWorld, Halfpipe_rotateZTable)1113GetTableValue(temp0, object.nextTransformIDWorld, Halfpipe_rotateZTable)1114temp0 -= object.worldRotation.z1115temp0 *= object.moveStep1116temp0 >>= 61117object.worldRotation.z += temp01118end event111911201121event ObjectDraw1122MatrixTranslateXYZ(MAT_WORLD, object.halfpipeTranslation.x, object.halfpipeTranslation.y, object.halfpipeTranslation.z)1123MatrixRotateXYZ(MAT_VIEW, object.halfpipeRotation.x, object.halfpipeRotation.y, object.halfpipeRotation.z)1124MatrixInverse(MAT_VIEW)1125MatrixRotateXYZ(MAT_TEMP, -8, 0, 0)1126MatrixMultiply(MAT_VIEW, MAT_TEMP)11271128#platform: USE_STANDALONE1129// In Standalone, we're only looking at the main player's position11301131temp0 = player[2].xpos1132temp0 *= -0x401133temp0 >>= 911341135temp1 = player[2].ypos1136temp1 *= -0x601137temp1 >>= 91138temp1 -= 0x2001139#endplatform11401141#platform: USE_ORIGINS1142// In Origins, however, the routine was rearranged so that...11431144temp0 = player[2].xpos1145temp1 = player[2].ypos11461147// ...we can take the average between P1 and P2's positions in multiplayer1148if options.vsMode == true1149temp0 += player[3].xpos1150temp1 += player[3].ypos1151temp0 >>= 11152temp1 >>= 11153end if11541155temp0 *= -0x401156temp0 >>= 911571158temp1 *= -0x601159temp1 >>= 91160temp1 -= 0x2001161#endplatform11621163MatrixTranslateXYZ(MAT_TEMP, temp0, temp1, 0)1164MatrixMultiply(MAT_VIEW, MAT_TEMP)1165Draw3DScene()1166end event116711681169event ObjectStartup1170LoadSpriteSheet("Special/Objects.gif")11711172object[0].type = TypeName[Halfpipe]1173object[0].priority = PRIORITY_ACTIVE1174object[0].xpos = 0x1C000001175object[0].ypos = 01176object[0].playerPos.z = 01177object[0].localPos.z = 01178object[0].moveStep = 01179object[0].transformIDHalfpipe = 01180object[0].nextTransformIDHalfpipe = 11181object[0].transformIDWorld = 21182object[0].nextTransformIDWorld = 31183object[0].moveSpeed = 1711841185Halfpipe_vertexCount = 01186Halfpipe_vertexTableID = 01187Halfpipe_transformPos = 01188Halfpipe_prevVertexCount = 0x10001189Halfpipe_tempTranslate.x = 01190Halfpipe_tempTranslate.y = 01191Halfpipe_tempTranslate.z = 01192#platform: USE_DECOMP1193// Not in the original, probably should be though1194// This fixes the special stage warping bug1195Halfpipe_worldRotate.x = 01196Halfpipe_worldRotate.y = 01197Halfpipe_worldRotate.z = 011981199// (Origins doesn't fix this either, which is why Special Stages appear weird for a moment when restarting one)1200#endplatform12011202arrayPos5 = 321203SetTableValue(Halfpipe_vertexTable1, 0, Halfpipe_vertexTablePtrs)1204SetTableValue(Halfpipe_vertexTable1, 1, Halfpipe_vertexTablePtrs)1205SetTableValue(Halfpipe_vertexTable1, 2, Halfpipe_vertexTablePtrs)1206SetTableValue(Halfpipe_vertexTable1, 3, Halfpipe_vertexTablePtrs)1207SetTableValue(Halfpipe_vertexTable2, 4, Halfpipe_vertexTablePtrs)1208SetTableValue(Halfpipe_vertexTable3, 5, Halfpipe_vertexTablePtrs)1209SetTableValue(Halfpipe_vertexTable4, 6, Halfpipe_vertexTablePtrs)1210SetTableValue(Halfpipe_vertexTable5, 7, Halfpipe_vertexTablePtrs)1211Halfpipe_checkpointTexCount = 01212scene3D.faceCount = 012131214temp7 = 01215while temp7 < 41216Halfpipe_faceInfoTable = Halfpipe_faceTable11217CallFunction(Halfpipe_SetupFaces)1218CallFunction(Halfpipe_SetupVertices)12191220Halfpipe_faceInfoTable = Halfpipe_faceTable21221CallFunction(Halfpipe_SetupFaces)1222CallFunction(Halfpipe_SetupVertices)12231224Halfpipe_faceInfoTable = Halfpipe_faceTable21225CallFunction(Halfpipe_SetupFaces)1226CallFunction(Halfpipe_SetupVertices)12271228Halfpipe_faceInfoTable = Halfpipe_faceTable21229CallFunction(Halfpipe_SetupFaces)1230CallFunction(Halfpipe_SetupVertices)12311232Halfpipe_faceInfoTable = Halfpipe_faceTable31233CallFunction(Halfpipe_SetupFaces)1234CallFunction(Halfpipe_SetupVertices)12351236Halfpipe_faceInfoTable = Halfpipe_faceTable41237CallFunction(Halfpipe_SetupFaces)1238CallFunction(Halfpipe_SetupVertices)12391240Halfpipe_faceInfoTable = Halfpipe_faceTable51241CallFunction(Halfpipe_SetupFaces)1242CallFunction(Halfpipe_SetupVertices)12431244Halfpipe_faceInfoTable = Halfpipe_faceTable61245CallFunction(Halfpipe_SetupFaces)1246CallFunction(Halfpipe_SetupVertices)12471248temp7++1249loop12501251scene3D.vertexCount = Halfpipe_vertexCount1252Halfpipe_prevVertexCount = Halfpipe_vertexCount1253Halfpipe_faceCount = scene3D.faceCount1254Halfpipe_vertexCount = 01255scene3D.projectionX = 2161256scene3D.projectionY = 2161257scene3D.fogStrength = 0x501258scene3D.fogColor = 0x0000001259end event126012611262// ========================1263// Editor Events1264// ========================12651266event RSDKDraw1267DrawSprite(0)1268end event126912701271event RSDKLoad1272LoadSpriteSheet("Global/Display.gif")1273SpriteFrame(-16, -16, 32, 32, 1, 143)12741275SetVariableAlias(ALIAS_VAR_PROPVAL, "unused")1276end event127712781279