Path: blob/master/RSDKv5/RSDK/Graphics/Legacy/AnimationLegacy.cpp
1163 views
12RSDK::Legacy::AnimationFile RSDK::Legacy::animationFileList[LEGACY_ANIFILE_COUNT];3int32 RSDK::Legacy::animationFileCount = 0;45RSDK::Legacy::SpriteFrame RSDK::Legacy::scriptFrames[LEGACY_SPRITEFRAME_COUNT];6int32 RSDK::Legacy::scriptFrameCount = 0;78RSDK::Legacy::SpriteFrame RSDK::Legacy::animFrames[LEGACY_SPRITEFRAME_COUNT];9int32 RSDK::Legacy::animFrameCount = 0;10RSDK::Legacy::SpriteAnimation RSDK::Legacy::animationList[LEGACY_ANIMATION_COUNT];11int32 RSDK::Legacy::animationCount = 0;12RSDK::Legacy::Hitbox RSDK::Legacy::hitboxList[LEGACY_HITBOX_COUNT];13int32 RSDK::Legacy::hitboxCount = 0;1415void RSDK::Legacy::LoadAnimationFile(char *filePath)16{17FileInfo info;18InitFileInfo(&info);1920if (LoadFile(&info, filePath, FMODE_RB)) {21uint8 sheetIDs[24];22sheetIDs[0] = 0;2324uint8 sheetCount = ReadInt8(&info);2526for (int32 s = 0; s < sheetCount; ++s) {27char sheetPath[0x21];28ReadString(&info, sheetPath);29sheetIDs[s] = AddGraphicsFile(sheetPath);30}3132AnimationFile *animFile = &animationFileList[animationFileCount];33animFile->animCount = ReadInt8(&info);34animFile->aniListOffset = animationCount;3536for (int32 a = 0; a < animFile->animCount; ++a) {37SpriteAnimation *anim = &animationList[animationCount++];38anim->frameListOffset = animFrameCount;3940ReadString(&info, anim->name);41anim->frameCount = ReadInt8(&info);42anim->speed = ReadInt8(&info);43anim->loopPoint = ReadInt8(&info);44anim->rotationStyle = ReadInt8(&info);4546for (int32 f = 0; f < anim->frameCount; ++f) {47SpriteFrame *frame = &animFrames[animFrameCount++];48frame->sheetID = sheetIDs[ReadInt8(&info)];49frame->hitboxID = ReadInt8(&info);50frame->sprX = ReadInt8(&info);51frame->sprY = ReadInt8(&info);52frame->width = ReadInt8(&info);53frame->height = ReadInt8(&info);54frame->pivotX = (int8)ReadInt8(&info);55frame->pivotY = (int8)ReadInt8(&info);56}5758// 90 Degree (Extra rotation Frames) rotation59if (anim->rotationStyle == ROTSTYLE_STATICFRAMES)60anim->frameCount >>= 1;61}6263animFile->hitboxListOffset = hitboxCount;64int32 hbCount = ReadInt8(&info);65for (int32 h = 0; h < hbCount; ++h) {66Hitbox *hitbox = &hitboxList[hitboxCount++];67for (int32 d = 0; d < LEGACY_HITBOX_DIR_COUNT; ++d) {68hitbox->left[d] = ReadInt8(&info);69hitbox->top[d] = ReadInt8(&info);70hitbox->right[d] = ReadInt8(&info);71hitbox->bottom[d] = ReadInt8(&info);72}73}7475CloseFile(&info);76}77}78void RSDK::Legacy::ClearAnimationData()79{80for (int32 f = 0; f < LEGACY_SPRITEFRAME_COUNT; ++f) MEM_ZERO(scriptFrames[f]);81for (int32 f = 0; f < LEGACY_SPRITEFRAME_COUNT; ++f) MEM_ZERO(animFrames[f]);82for (int32 h = 0; h < LEGACY_HITBOX_COUNT; ++h) MEM_ZERO(hitboxList[h]);83for (int32 a = 0; a < LEGACY_ANIMATION_COUNT; ++a) MEM_ZERO(animationList[a]);84for (int32 a = 0; a < LEGACY_ANIFILE_COUNT; ++a) MEM_ZERO(animationFileList[a]);8586scriptFrameCount = 0;87animFrameCount = 0;88animationCount = 0;89animationFileCount = 0;90hitboxCount = 0;91}9293RSDK::Legacy::AnimationFile *RSDK::Legacy::AddAnimationFile(char *filePath)94{95char path[0x80];96StrCopy(path, "Data/Animations/");97StrAdd(path, filePath);9899for (int32 a = 0; a < LEGACY_ANIFILE_COUNT; ++a) {100if (StrLength(animationFileList[a].fileName) <= 0) {101StrCopy(animationFileList[a].fileName, filePath);102LoadAnimationFile(path);103++animationFileCount;104return &animationFileList[a];105}106107if (StrComp(animationFileList[a].fileName, filePath))108return &animationFileList[a];109}110111return NULL;112}113114void RSDK::Legacy::v3::ProcessObjectAnimation(void *objScr, void *ent)115{116Legacy::v3::ObjectScript *objectScript = (Legacy::v3::ObjectScript *)objScr;117Legacy::v3::Entity *entity = (Legacy::v3::Entity *)ent;118Legacy::SpriteAnimation *sprAnim = &Legacy::animationList[objectScript->animFile->aniListOffset + entity->animation];119120if (entity->animationSpeed <= 0) {121entity->animationTimer += sprAnim->speed;122}123else {124if (entity->animationSpeed > 0xF0)125entity->animationSpeed = 0xF0;126entity->animationTimer += entity->animationSpeed;127}128129if (entity->animation != entity->prevAnimation) {130entity->prevAnimation = entity->animation;131entity->frame = 0;132entity->animationTimer = 0;133entity->animationSpeed = 0;134}135136if (entity->animationTimer >= 0xF0) {137entity->animationTimer -= 0xF0;138++entity->frame;139}140141if (entity->frame >= sprAnim->frameCount)142entity->frame = sprAnim->loopPoint;143}144145void RSDK::Legacy::v4::ProcessObjectAnimation(void *objScr, void *ent)146{147Legacy::v4::ObjectScript *objectScript = (Legacy::v4::ObjectScript *)objScr;148Legacy::v4::Entity *entity = (Legacy::v4::Entity *)ent;149Legacy::SpriteAnimation *sprAnim = &Legacy::animationList[objectScript->animFile->aniListOffset + entity->animation];150151if (entity->animationSpeed <= 0) {152entity->animationTimer += sprAnim->speed;153}154else {155if (entity->animationSpeed > 0xF0)156entity->animationSpeed = 0xF0;157entity->animationTimer += entity->animationSpeed;158}159160if (entity->animation != entity->prevAnimation) {161entity->prevAnimation = entity->animation;162entity->frame = 0;163entity->animationTimer = 0;164entity->animationSpeed = 0;165}166167if (entity->animationTimer >= 0xF0) {168entity->animationTimer -= 0xF0;169++entity->frame;170}171172if (entity->frame >= sprAnim->frameCount)173entity->frame = sprAnim->loopPoint;174}175176