Path: blob/master/SonicMania/Objects/Cutscene/CutsceneHBH.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: CutsceneHBH Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89ObjectCutsceneHBH *CutsceneHBH;1011void CutsceneHBH_Update(void)12{13RSDK_THIS(CutsceneHBH);1415if (self->oscillate)16self->position.y += RSDK.Sin256(4 * (self->curAngle + self->angleOffset)) << 7;1718if (self->noGlobalTimer)19self->curAngle = (self->curAngle + 1) & 0x7FFF;20else21self->curAngle = Zone->timer;2223StateMachine_Run(self->state);2425RSDK.ProcessAnimation(&self->mainAnimator);26RSDK.ProcessAnimation(&self->fxAnimator);27}2829void CutsceneHBH_LateUpdate(void) {}3031void CutsceneHBH_StaticUpdate(void) {}3233void CutsceneHBH_Draw(void)34{35RSDK_THIS(CutsceneHBH);3637if (self->useCustomPalettes)38CutsceneHBH_SetupPalettes();3940RSDK.DrawSprite(&self->fxAnimator, NULL, false);41RSDK.DrawSprite(&self->mainAnimator, NULL, false);4243if (self->useCustomPalettes)44CutsceneHBH_RestorePalette();45}4647void CutsceneHBH_Create(void *data)48{49RSDK_THIS(CutsceneHBH);5051self->active = ACTIVE_BOUNDS;52self->drawGroup = Zone->objectDrawGroup[1];53self->visible = !self->hiddenAtStart;54self->aniFrames = 0;55self->startPos = self->position;56self->drawFX = FX_FLIP;57self->updateRange.x = 0x800000;58self->updateRange.y = 0x800000;59self->angleOffset = RSDK.Rand(0, 256);6061CutsceneHBH_LoadSprites();62CutsceneHBH_SetupColors();6364if (RSDK.CheckSceneFolder("MSZ"))65self->noGlobalTimer = true;66else67self->useCustomPalettes = true;68}6970void CutsceneHBH_StageLoad(void) { CutsceneHBH_StorePalette(); }7172// Bug Details:73// any graphical bugs from 1.04 onwards (such as Heavy Shinobi's shoes not having the right colours)74// are due to these colour tables not being updated for plus, they're copies of the heavies' respective stage palettes for pre-plus75// so the changes that were applied when encore mode palettes & etc were applied are not accounted for76// example: in the case of heavy shinobi's shoes, they now occupy the indices at the end now, which are all 0x000000 in these tables77// this results in the shoes having shades of black instead of orange as intended7879void CutsceneHBH_SetupColors(void)80{81RSDK_THIS(CutsceneHBH);82switch (self->characterID) {83case HBH_GUNNER: {84self->colorSet = 0;85color tempPal[0x80] = { 0x200020, 0x400040, 0x500050, 0x700070, 0x880088, 0xB000B0, 0xC800C8, 0xF000F0, 0x300040, 0x480070, 0x5000A0,860x4828F0, 0x3850F0, 0x5898F0, 0x98C8F0, 0xD8E8F0, 0x080078, 0x1000C0, 0x0028F0, 0x0040F0, 0x00A8F0, 0x40F0F0,870xC8F0F0, 0xF0F0F0, 0x280068, 0x280098, 0x3010D0, 0x2830F0, 0x1880F0, 0x48B8F0, 0x98E0F0, 0xD0F0F0, 0xA80810,880xE04830, 0xF08840, 0xF0B850, 0xF0D860, 0xF0E870, 0xF0F090, 0x300060, 0x480068, 0x580070, 0x700078, 0x880880,890xB00880, 0xD81870, 0xF030F0, 0xF048F0, 0x082888, 0x1848D0, 0x2070E0, 0x3890F0, 0x50B0F0, 0x68C8F0, 0x90D8F0,900xC8E8F0, 0x200060, 0x280068, 0x300080, 0x4008A0, 0x080010, 0x100038, 0x100068, 0x080878, 0x003820, 0x005840,910x008040, 0x00A058, 0x08C080, 0x30F0B8, 0x081828, 0x182850, 0x204078, 0x3868A8, 0x0080B8, 0x10A0E8, 0xE8F040,920xE8F098, 0x78E8F0, 0x78F0F0, 0x100038, 0x181038, 0x181048, 0x182868, 0x204090, 0x4878B0, 0x58A8D0, 0x78D0E0,930x200038, 0x400038, 0x881038, 0xC03010, 0xC86020, 0xC08038, 0xE00058, 0xE89850, 0x100060, 0x280070, 0x400088,940x5800C8, 0x8810C8, 0xC830C8, 0x98F068, 0xA8F070, 0x100848, 0x101048, 0x102050, 0x102858, 0x180838, 0x201038,950x282038, 0x302838, 0x0070E0, 0x00A0C0, 0x80D810, 0x28C010, 0xF04040, 0xF05050, 0x48A0E8, 0x60B0F0, 0x380028,960x580030, 0x780830, 0x981830, 0xB83030, 0x000000, 0x000000, 0xFFFFFF };97memcpy(self->colors, tempPal, sizeof(self->colors));98break;99}100101case HBH_SHINOBI: {102self->colorSet = 1;103color tempPal[0x80] = { 0x000000, 0x083048, 0x005848, 0x107858, 0x309060, 0x50A868, 0x68B868, 0x80D068, 0xA8E088, 0xC8E8A0, 0x481878,1040x6020B0, 0x9830C0, 0xC050E8, 0xF080F0, 0xF0A8F0, 0x506870, 0x607080, 0x887868, 0xA09078, 0xB8B090, 0xD0D0A8,1050xE0E0C0, 0xF0F0D8, 0x602030, 0x781818, 0x983810, 0xB05010, 0xC07818, 0xD89840, 0xF0C078, 0xF0E0B8, 0x282060,1060x500880, 0x880090, 0xB80888, 0xD80848, 0xE83850, 0xE86880, 0x000000, 0x284058, 0x385078, 0x5068A0, 0x6878B0,1070x8890C0, 0xA0A8D8, 0xB8C0E0, 0x000000, 0x204888, 0x4070C0, 0x5898D0, 0x78B8E0, 0xA0D8F0, 0xB8F0F0, 0xD8F0F0,1080xF0F0F0, 0x081840, 0x103058, 0x305870, 0x487080, 0x589088, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,1090x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,1100x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,1110x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,1120x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,1130x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,1140x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xFFFFFF };115memcpy(self->colors, tempPal, sizeof(self->colors));116break;117}118119case HBH_MYSTIC:120case HBH_ROGUE_FANG:121case HBH_ROGUE_BEAN:122case HBH_ROGUE_BARK: {123self->colorSet = 2;124color tempPal[0x80] = { 0x200000, 0x300010, 0x400030, 0x600038, 0x800030, 0x901038, 0xA81038, 0xB82020, 0xB83828, 0xC04020, 0xC85020,1250xD06020, 0xD88020, 0xE0A028, 0xE0C030, 0xE8D038, 0x004000, 0x086000, 0x087800, 0x209000, 0x38A800, 0x60C000,1260x80E008, 0xE0E0A0, 0x780080, 0xA00880, 0xC018A0, 0xE040C0, 0xE068D0, 0xE0A0E0, 0x000000, 0x000000, 0x201030,1270x182050, 0x203880, 0x2850A0, 0x2878B8, 0x30B8F0, 0x60E8F0, 0x88F0F0, 0xB0F0F0, 0x402000, 0x603000, 0x804000,1280xA05000, 0xC06000, 0xD07810, 0x3060A0, 0x1090D8, 0x3098E8, 0x58A0E8, 0x78A0F0, 0x98A8F0, 0xB8B0F0, 0xD0C0F0,1290xF0D8F0, 0xF0F0F0, 0x801860, 0x982070, 0xA83070, 0xB83868, 0xD05068, 0x000000, 0x000000, 0xD86858, 0xE88858,1300xE8B060, 0xF0D860, 0xF0E878, 0xF0F0A8, 0x505828, 0x587028, 0x788030, 0x909030, 0xA89038, 0xC0A040, 0x180080,1310x5000A8, 0x6000D8, 0x8820F0, 0x000000, 0x000080, 0x0038C0, 0x0068F0, 0x1888F0, 0x30A0F0, 0x68D0F0, 0xF0F000,1320xF0B000, 0x182050, 0x2828A8, 0x4038D0, 0x5848E8, 0x8868F0, 0xB8B0F0, 0x80E008, 0xFF00FF, 0xFF00FF, 0xFF00FF,1330xFF00FF, 0xFF00FF, 0xFF00FF, 0xFF00FF, 0xFF00FF, 0xFF00FF, 0xFF00FF, 0xFF00FF, 0xFF00FF, 0xFF00FF, 0xFF00FF,1340xFF00FF, 0xFF00FF, 0xFF00FF, 0xFF00FF, 0xFF00FF, 0xFF00FF, 0xFF00FF, 0xFF00FF, 0xFF00FF, 0xFF00FF, 0xFF00FF,1350xFF00FF, 0xFF00FF, 0xFF00FF, 0xFF00FF, 0xFF00FF, 0xFF00FF, 0xFFFFFF };136memcpy(self->colors, tempPal, sizeof(self->colors));137break;138}139140case HBH_RIDER:141case HBH_KING:142case HBH_KINGTMZ2: {143self->colorSet = 3;144color tempPal[0x80] = { 0x000000, 0x202020, 0x202040, 0x302070, 0x4020A0, 0x4030B0, 0x4040C0, 0x6060D1, 0x8080E0, 0x90A0E0, 0xA0C0E0,1450xB0D0E0, 0xC0E0E0, 0x783810, 0xA06040, 0xC07020, 0x203060, 0x204080, 0x2050A0, 0x2060C0, 0x3080C0, 0x40A0C0,1460x50C0D0, 0x60E0E0, 0x205060, 0x206040, 0x308060, 0x40A080, 0x60C0A0, 0x80E0C0, 0x404000, 0xE0E000, 0x302060,1470x402080, 0x4030A0, 0x4040C0, 0x7030D0, 0xA020E0, 0xC060E0, 0xE0A0E0, 0xD0C0E0, 0x202030, 0x302040, 0x302050,1480x402060, 0x303070, 0x000000, 0x000000, 0x501010, 0x800000, 0xB00000, 0xE00000, 0xE04000, 0xE08000, 0xE09000,1490xE0A000, 0xE0C070, 0xE0E0E0, 0xA00000, 0xE00000, 0xE06000, 0xE0A000, 0xE0E000, 0x000000, 0x606080, 0x8080A0,1500xA0A0C0, 0xB0B0D0, 0xC0C0E0, 0x202020, 0x301818, 0x381810, 0x482010, 0x482810, 0x584008, 0x806010, 0x907828,1510xB89848, 0xD8C070, 0xE0E0C0, 0x202020, 0x383040, 0x484868, 0x587090, 0x80A0B0, 0x98C0C8, 0xB0D8D8, 0xC8E8E0,1520x402040, 0x582040, 0x802060, 0xA020A0, 0xE14FB1, 0xE02080, 0xE080C0, 0xE0A0E0, 0xE00000, 0xE06000, 0xE0A000,1530xE0E000, 0x202040, 0x302060, 0x402080, 0x503070, 0x604080, 0x8050A0, 0xA060C0, 0xB080D0, 0xC0A0E0, 0xD0C0E0,1540xE0E0E0, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000,1550x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0xFFFFFF };156memcpy(self->colors, tempPal, sizeof(self->colors));157break;158}159160case HBH_KINGDAMAGED:161case HBH_PILE: {162self->colorSet = 4;163color tempPal[0x80] = { 0x883801, 0xB86801, 0xE09060, 0xF0B090, 0xA06040, 0xE08008, 0xE0A008, 0xE0C070, 0x085848, 0x107858, 0x309060,1640x50A868, 0x68B868, 0x80D068, 0xA8E088, 0xC8E8A0, 0x400101, 0x900101, 0xE00101, 0xE04830, 0xF08840, 0xF0D860,1650xF0E870, 0xF0F090, 0x302060, 0x402080, 0x4030A0, 0x7030D0, 0xA020E0, 0xC060E0, 0xE0A0E0, 0x013048, 0xA09078,1660xB8B090, 0xD0D0A8, 0xF0F0D8, 0x2850A0, 0x2878B8, 0x30B8F0, 0x60E8F0, 0x603001, 0x804001, 0xA05001, 0x584008,1670x806010, 0x907828, 0xB89848, 0x082888, 0x1848D0, 0x2070E0, 0x3890F0, 0x50B0F0, 0x68C8F0, 0xC8E8F0, 0xC06001,1680xD07810, 0xE0A028, 0xE8B048, 0xE0C030, 0xE8D038, 0xD8C070, 0xE0E0C0, 0x301801, 0x482001, 0x704008, 0xB07008,1690xD09818, 0xE0C020, 0xF0E060, 0x380118, 0x580120, 0x800110, 0xA80101, 0xC02001, 0xE85820, 0x000000, 0x000000,1700x000000, 0x000000, 0x000000, 0x400168, 0x700178, 0x900188, 0xB80188, 0xF00198, 0xF060B0, 0xF0A0C8, 0xB00801,1710xD82001, 0xF03001, 0xF06818, 0xF0D050, 0xF0E888, 0xF0F0E8, 0xC8D0F0, 0xD0F0F0, 0x181001, 0x301808, 0x502010,1720x803018, 0xB05030, 0xD08850, 0xE8B858, 0xF0D898, 0x480808, 0x701001, 0xA82008, 0xD03808, 0xE86818, 0xF0A020,1730xF0D068, 0xF0E0B8, 0x100828, 0x180840, 0x201050, 0x281068, 0x381880, 0x682098, 0x803098, 0xB038A8, 0xC858B8,1740x500120, 0x800120, 0xB80110, 0xE01001, 0xB8A0E0, 0xC0B8E8, 0xFFFFFF };175memcpy(self->colors, tempPal, sizeof(self->colors));176break;177}178179default: break;180}181}182183void CutsceneHBH_SetupPalettes(void)184{185RSDK_THIS(CutsceneHBH);186187for (int32 c = 0; c < 0x80; ++c) RSDK.SetPaletteEntry(0, c + 0x80, self->colors[c]);188}189void CutsceneHBH_StorePalette(void)190{191for (int32 c = 0; c < 0x80; ++c) CutsceneHBH->paletteColors[c] = RSDK.GetPaletteEntry(0, c + 0x80);192}193void CutsceneHBH_RestorePalette(void)194{195for (int32 c = 0; c < 0x80; ++c) RSDK.SetPaletteEntry(0, c + 0x80, CutsceneHBH->paletteColors[c]);196}197198void CutsceneHBH_LoadSprites(void)199{200RSDK_THIS(CutsceneHBH);201202switch (self->characterID) {203case HBH_GUNNER:204if (!self->aniFrames)205self->aniFrames = RSDK.LoadSpriteAnimation("SPZ1/Boss.bin", SCOPE_STAGE);206207RSDK.SetSpriteAnimation(self->aniFrames, 5, &self->mainAnimator, true, 0);208RSDK.SetSpriteAnimation(-1, 0, &self->fxAnimator, true, 0);209break;210211case HBH_SHINOBI:212if (!self->aniFrames)213self->aniFrames = RSDK.LoadSpriteAnimation("PSZ2/Shinobi.bin", SCOPE_STAGE);214215RSDK.SetSpriteAnimation(self->aniFrames, 0, &self->mainAnimator, true, 0);216RSDK.SetSpriteAnimation(self->aniFrames, 5, &self->fxAnimator, true, 0);217break;218219case HBH_MYSTIC:220if (!self->aniFrames)221self->aniFrames = RSDK.LoadSpriteAnimation("MSZ/HeavyMystic.bin", SCOPE_STAGE);222223RSDK.SetSpriteAnimation(self->aniFrames, 0, &self->mainAnimator, true, 0);224RSDK.SetSpriteAnimation(-1, 0, &self->fxAnimator, true, 0);225break;226227case HBH_RIDER:228if (!self->aniFrames)229self->aniFrames = RSDK.LoadSpriteAnimation("LRZ3/HeavyRider.bin", SCOPE_STAGE);230231RSDK.SetSpriteAnimation(self->aniFrames, 3, &self->mainAnimator, true, 0);232RSDK.SetSpriteAnimation(-1, 0, &self->fxAnimator, true, 0);233break;234235case HBH_KING:236if (!self->aniFrames)237self->aniFrames = RSDK.LoadSpriteAnimation("LRZ3/HeavyKing.bin", SCOPE_STAGE);238239RSDK.SetSpriteAnimation(self->aniFrames, 7, &self->mainAnimator, true, 0);240RSDK.SetSpriteAnimation(self->aniFrames, 16, &self->fxAnimator, true, 0);241break;242243case HBH_ROGUE_FANG:244if (!self->aniFrames)245self->aniFrames = RSDK.LoadSpriteAnimation("MSZ/Rogues.bin", SCOPE_STAGE);246247RSDK.SetSpriteAnimation(self->aniFrames, 0, &self->mainAnimator, true, 0);248RSDK.SetSpriteAnimation(-1, 0, &self->fxAnimator, true, 0);249break;250251case HBH_ROGUE_BEAN:252if (!self->aniFrames)253self->aniFrames = RSDK.LoadSpriteAnimation("MSZ/Rogues.bin", SCOPE_STAGE);254255RSDK.SetSpriteAnimation(self->aniFrames, 5, &self->mainAnimator, true, 0);256RSDK.SetSpriteAnimation(-1, 0, &self->fxAnimator, true, 0);257break;258259case HBH_ROGUE_BARK:260if (!self->aniFrames)261self->aniFrames = RSDK.LoadSpriteAnimation("MSZ/Rogues.bin", SCOPE_STAGE);262263RSDK.SetSpriteAnimation(self->aniFrames, 12, &self->mainAnimator, true, 0);264RSDK.SetSpriteAnimation(-1, 0, &self->fxAnimator, true, 0);265break;266267case HBH_KINGDAMAGED:268if (!self->aniFrames)269self->aniFrames = RSDK.LoadSpriteAnimation("Cutscene/DamagedKing.bin", SCOPE_STAGE);270271RSDK.SetSpriteAnimation(self->aniFrames, 0, &self->mainAnimator, true, 0);272RSDK.SetSpriteAnimation(self->aniFrames, 1, &self->fxAnimator, true, 0);273break;274275case HBH_PILE:276if (!self->aniFrames)277self->aniFrames = RSDK.LoadSpriteAnimation("Cutscene/HBHPile.bin", SCOPE_STAGE);278279RSDK.SetSpriteAnimation(self->aniFrames, 0, &self->mainAnimator, true, 0);280RSDK.SetSpriteAnimation(-1, 0, &self->fxAnimator, true, 0);281break;282283case HBH_KINGTMZ2:284if (!self->aniFrames)285self->aniFrames = RSDK.LoadSpriteAnimation("Cutscene/KingTMZ2.bin", SCOPE_STAGE);286287RSDK.SetSpriteAnimation(self->aniFrames, 0, &self->mainAnimator, true, 0);288RSDK.SetSpriteAnimation(-1, 0, &self->fxAnimator, true, 0);289break;290291default: break;292}293}294295EntityCutsceneHBH *CutsceneHBH_GetEntity(uint8 charID)296{297EntityCutsceneHBH *hbh = NULL;298299foreach_all(CutsceneHBH, cutsceneHBH)300{301if (cutsceneHBH->characterID == charID)302hbh = cutsceneHBH;303}304305return hbh;306}307308void CutsceneHBH_ShinobiJumpSetup(void)309{310EntityCutsceneHBH *hbh = CutsceneHBH_GetEntity(HBH_SHINOBI);311312if (hbh) {313RSDK.SetSpriteAnimation(hbh->aniFrames, 3, &hbh->mainAnimator, true, 0);314315hbh->velocity.x = 0x10000;316hbh->velocity.y = -0x60000;317hbh->direction ^= FLIP_X;318hbh->drawGroup = Zone->objectDrawGroup[1] + 2;319hbh->state = CutsceneHBH_State_ShinobiJump;320321EntityFXTrail *trail = CREATE_ENTITY(FXTrail, hbh, hbh->position.x, hbh->position.y);322trail->animatorPtr = &hbh->mainAnimator;323}324}325326void CutsceneHBH_ShinobiBounceSetup(void)327{328EntityCutsceneHBH *hbh = CutsceneHBH_GetEntity(HBH_SHINOBI);329330if (hbh) {331RSDK.SetSpriteAnimation(hbh->aniFrames, 1, &hbh->mainAnimator, true, 0);332RSDK.SetSpriteAnimation(-1, 0, &hbh->fxAnimator, true, 0);333334hbh->state = CutsceneHBH_State_ShinobiBounce;335}336}337338void CutsceneHBH_RiderSetup(void)339{340EntityCutsceneHBH *hbh = CutsceneHBH_GetEntity(HBH_RIDER);341342if (hbh) {343RSDK.SetSpriteAnimation(hbh->aniFrames, 0, &hbh->mainAnimator, true, 0);344RSDK.SetSpriteAnimation(-1, 0, &hbh->fxAnimator, true, 0);345346hbh->timer = 0;347hbh->originPos.x = hbh->position.x;348hbh->originPos.y = hbh->position.y;349hbh->velocity.x = 0x30000;350hbh->state = CutsceneHBH_State_RiderMove;351}352}353354void CutsceneHBH_KingSetup(void)355{356EntityCutsceneHBH *hbh = CutsceneHBH_GetEntity(HBH_KING);357358if (hbh) {359RSDK.SetSpriteAnimation(hbh->aniFrames, 0, &hbh->mainAnimator, true, 0);360RSDK.SetSpriteAnimation(hbh->aniFrames, 9, &hbh->fxAnimator, true, 0);361}362}363364void CutsceneHBH_KingTMZ2Setup(void)365{366EntityCutsceneHBH *hbh = CutsceneHBH_GetEntity(HBH_KINGTMZ2);367368if (hbh) {369RSDK.SetSpriteAnimation(hbh->aniFrames, 1, &hbh->mainAnimator, true, 0);370371hbh->timer = 0;372hbh->velocity.x = 0;373hbh->velocity.y = 0;374hbh->state = CutsceneHBH_State_KingTMZ2_Fall;375}376}377378void CutsceneHBH_State_GunnerExit(void)379{380RSDK_THIS(CutsceneHBH);381382self->velocity.y -= 0x2000;383self->position.y += self->velocity.y;384385if (!RSDK.CheckOnScreen(self, NULL))386destroyEntity(self);387}388389void CutsceneHBH_State_ShinobiBounce(void)390{391RSDK_THIS(CutsceneHBH);392393if (self->timer <= 0) {394self->velocity.y += 0x2000;395self->position.y += self->velocity.y;396397if (RSDK.ObjectTileCollision(self, Zone->collisionLayers, CMODE_FLOOR, 0, 0, 0x2E0000, true)) {398RSDK.SetSpriteAnimation(self->aniFrames, 1, &self->mainAnimator, true, 0);399self->velocity.y = -0x20000;400self->timer = 3;401}402}403else {404self->timer--;405}406407foreach_active(PhantomRuby, phantomRuby)408{409if (phantomRuby->velocity.y >= 0 && phantomRuby->position.y > self->position.y - 0x200000) {410phantomRuby->velocity.y = -(5 * abs(self->velocity.y) >> 1);411}412}413}414415void CutsceneHBH_State_ShinobiJump(void)416{417RSDK_THIS(CutsceneHBH);418419self->velocity.y += 0x4000;420self->position.x += self->velocity.x;421self->position.y += self->velocity.y;422423if (!RSDK.CheckOnScreen(self, NULL))424destroyEntity(self);425}426427void CutsceneHBH_State_MysticExit(void)428{429RSDK_THIS(CutsceneHBH);430431self->velocity.x += 0x4000;432self->position.x += self->velocity.x;433434if (!RSDK.CheckOnScreen(self, NULL))435destroyEntity(self);436}437438void CutsceneHBH_State_RiderMove(void)439{440RSDK_THIS(CutsceneHBH);441442self->position.x += self->velocity.x;443444if (!self->timer) {445if (self->velocity.x < 0x30000)446self->velocity.x += 0x4000;447448if (self->direction == FLIP_NONE) {449if (self->position.x - self->originPos.x > 0x300000) {450self->timer = 1;451RSDK.SetSpriteAnimation(self->aniFrames, 2, &self->mainAnimator, true, 0);452}453454RSDK.ObjectTileGrip(self, Zone->collisionLayers, CMODE_FLOOR, 0, 0, 0x300000, 8);455}456else {457if (self->mainAnimator.frameID == self->mainAnimator.frameCount - 1) {458self->direction = FLIP_NONE;459RSDK.SetSpriteAnimation(self->aniFrames, 0, &self->mainAnimator, true, 0);460}461462RSDK.ObjectTileGrip(self, Zone->collisionLayers, CMODE_FLOOR, 0, 0, 0x300000, 8);463}464}465else {466if (self->velocity.x > -0x30000)467self->velocity.x -= 0x4000;468469if (self->direction != FLIP_X) {470if (self->mainAnimator.frameID == self->mainAnimator.frameCount - 1) {471self->direction = FLIP_X;472RSDK.SetSpriteAnimation(self->aniFrames, 0, &self->mainAnimator, true, 0);473}474475RSDK.ObjectTileGrip(self, Zone->collisionLayers, CMODE_FLOOR, 0, 0, 0x300000, 8);476}477else {478if (self->position.x - self->originPos.x < -0x300000) {479self->timer = 0;480RSDK.SetSpriteAnimation(self->aniFrames, 2, &self->mainAnimator, true, 0);481}482483RSDK.ObjectTileGrip(self, Zone->collisionLayers, CMODE_FLOOR, 0, 0, 0x300000, 8);484}485}486}487488void CutsceneHBH_State_RiderExit(void)489{490RSDK_THIS(CutsceneHBH);491492self->position.x += self->velocity.x;493494if (self->velocity.x < 0x60000)495self->velocity.x += 0x4000;496497if (self->direction == FLIP_X && self->mainAnimator.frameID == self->mainAnimator.frameCount - 1) {498self->direction = FLIP_NONE;499RSDK.SetSpriteAnimation(self->aniFrames, 0, &self->mainAnimator, true, 0);500}501502RSDK.ObjectTileGrip(self, Zone->collisionLayers, CMODE_FLOOR, 0, 0, 0x300000, 8);503504if (!RSDK.CheckOnScreen(self, NULL))505destroyEntity(self);506}507508void CutsceneHBH_State_KingExit(void)509{510RSDK_THIS(CutsceneHBH);511512if (++self->timer == 16) {513RSDK.SetSpriteAnimation(self->aniFrames, 3, &self->mainAnimator, true, 0);514}515else if (self->timer > 16 && self->mainAnimator.frameID > 4) {516self->velocity.x = 0x28000;517self->velocity.y = -0x60000;518self->state = CutsceneHBH_State_KingFall;519RSDK.SetSpriteAnimation(-1, 0, &self->fxAnimator, true, 0);520}521}522523void CutsceneHBH_State_KingFall(void)524{525RSDK_THIS(CutsceneHBH);526527self->velocity.y += 0x3800;528self->position.x += self->velocity.x;529self->position.y += self->velocity.y;530531if (!RSDK.CheckOnScreen(self, NULL))532destroyEntity(self);533}534535void CutsceneHBH_State_KingTMZ2_Fall(void)536{537RSDK_THIS(CutsceneHBH);538539self->velocity.y += 0x3800;540self->position.x += self->velocity.x;541self->position.y += self->velocity.y;542543if (RSDK.ObjectTileCollision(self, Zone->collisionLayers, CMODE_FLOOR, self->collisionPlane, 0, 0x2C0000, true)) {544RSDK.SetSpriteAnimation(self->aniFrames, 2, &self->mainAnimator, true, 0);545546self->velocity.y = 0;547self->state = CutsceneHBH_State_KingTMZ2_Land;548Camera_ShakeScreen(0, 0, 4);549}550}551552void CutsceneHBH_State_KingTMZ2_Land(void)553{554RSDK_THIS(CutsceneHBH);555556if (self->mainAnimator.frameID != self->mainAnimator.frameCount - 1) {557RSDK.SetSpriteAnimation(self->aniFrames, 0, &self->mainAnimator, true, 0);558self->state = StateMachine_None;559}560}561562#if GAME_INCLUDE_EDITOR563void CutsceneHBH_EditorDraw(void)564{565RSDK_THIS(CutsceneHBH);566567RSDK.SetSpriteAnimation(CutsceneHBH->aniFrames, self->characterID, &self->mainAnimator, true, 0);568RSDK.DrawSprite(&self->mainAnimator, NULL, false);569}570571void CutsceneHBH_EditorLoad(void)572{573CutsceneHBH->aniFrames = RSDK.LoadSpriteAnimation("Editor/CutsceneHBH.bin", SCOPE_STAGE);574575RSDK_ACTIVE_VAR(CutsceneHBH, direction);576RSDK_ENUM_VAR("No Flip", FLIP_NONE);577RSDK_ENUM_VAR("Flipped", FLIP_X);578579RSDK_ACTIVE_VAR(CutsceneHBH, characterID);580RSDK_ENUM_VAR("Gunner", HBH_GUNNER);581RSDK_ENUM_VAR("Shinobi", HBH_SHINOBI);582RSDK_ENUM_VAR("Magician", HBH_MYSTIC);583RSDK_ENUM_VAR("Rider", HBH_RIDER);584RSDK_ENUM_VAR("King", HBH_KING);585RSDK_ENUM_VAR("Fang", HBH_ROGUE_FANG);586RSDK_ENUM_VAR("Bean", HBH_ROGUE_BEAN);587RSDK_ENUM_VAR("Bark", HBH_ROGUE_BARK);588RSDK_ENUM_VAR("King (Damaged)", HBH_KINGDAMAGED);589RSDK_ENUM_VAR("Pile", HBH_PILE);590RSDK_ENUM_VAR("King (TMZ2)", HBH_KINGTMZ2);591}592#endif593594void CutsceneHBH_Serialize(void)595{596RSDK_EDITABLE_VAR(CutsceneHBH, VAR_UINT8, direction);597RSDK_EDITABLE_VAR(CutsceneHBH, VAR_UINT8, characterID);598RSDK_EDITABLE_VAR(CutsceneHBH, VAR_BOOL, oscillate);599RSDK_EDITABLE_VAR(CutsceneHBH, VAR_BOOL, hiddenAtStart);600}601602603