Path: blob/master/SonicMania/Objects/UFO/UFO_Decoration.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: UFO_Decoration Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89ObjectUFO_Decoration *UFO_Decoration;1011void UFO_Decoration_Update(void)12{13RSDK_THIS(UFO_Decoration);1415if (RSDK.CheckOnScreen(self, NULL)) {16self->scale.x += (self->size - self->scale.x) >> 3;17self->active = ACTIVE_NORMAL;18}19else {20self->scale.x = 0x000;21self->active = ACTIVE_BOUNDS;22}2324if (self->type > UFO_DECOR_PILLAR2)25RSDK.ProcessAnimation(&self->animator);26}2728void UFO_Decoration_LateUpdate(void)29{30RSDK_THIS(UFO_Decoration);3132int32 x = self->position.x;33int32 y = self->height;34int32 z = self->position.y;3536Matrix *m = &UFO_Camera->matWorld;3738self->zdepth = m->values[2][1] * (y >> 16) + m->values[2][2] * (z >> 16) + m->values[2][0] * (x >> 16) + m->values[2][3];3940if (self->zdepth >= 0x4000) {41int32 depth = (int32)((m->values[0][3] << 8) + (m->values[0][2] * (z >> 8) & 0xFFFFFF00) + (m->values[0][0] * (x >> 8) & 0xFFFFFF00)42+ (m->values[0][1] * (y >> 8) & 0xFFFFFF00))43/ self->zdepth;44self->visible = abs(depth) < 0x100;45}46}4748void UFO_Decoration_StaticUpdate(void) {}4950void UFO_Decoration_Draw(void)51{52RSDK_THIS(UFO_Decoration);5354if (self->zdepth >= 0x4000) {55RSDK.Prepare3DScene(UFO_Decoration->sceneIndex);5657RSDK.MatrixScaleXYZ(&self->matTransform, self->scale.x, self->size, self->scale.x);58RSDK.MatrixTranslateXYZ(&self->matTransform, self->position.x, self->height, self->position.y, 0);5960RSDK.MatrixRotateY(&self->matNormal, self->angle);61RSDK.MatrixMultiply(&self->matWorld, &self->matNormal, &self->matTransform);62RSDK.MatrixMultiply(&self->matWorld, &self->matWorld, &UFO_Camera->matWorld);6364if (UFO_Camera->isSS7)65RSDK.MatrixMultiply(&self->matNormal, &self->matNormal, &UFO_Camera->matTemp);66else67RSDK.MatrixMultiply(&self->matNormal, &self->matNormal, &UFO_Camera->matView);6869if (self->type <= UFO_DECOR_PILLAR2)70RSDK.AddModelTo3DScene(UFO_Decoration->modelIndices[self->type], UFO_Decoration->sceneIndex, UFO_Decoration->drawType, &self->matWorld,71&self->matNormal, 0xFFFFFF);72else73RSDK.AddMeshFrameTo3DScene(UFO_Decoration->modelIndices[self->type], UFO_Decoration->sceneIndex, &self->animator,74UFO_Decoration->drawType, &self->matWorld, &self->matNormal, 0xFFFFFF);7576RSDK.Draw3DScene(UFO_Decoration->sceneIndex);77}78}7980void UFO_Decoration_Create(void *data)81{82RSDK_THIS(UFO_Decoration);8384if (!SceneInfo->inEditor) {85if (!self->size)86self->size = 0x400;8788self->visible = true;89self->drawGroup = 4;90self->active = ACTIVE_BOUNDS;91self->updateRange.x = 0x4000000;92self->updateRange.y = 0x4000000;9394if (self->type == UFO_DECOR_BIRD)95self->height = 0x600000;9697RSDK.SetModelAnimation(UFO_Decoration->modelIndices[self->type], &self->animator, 96, 0, true, 0);98}99}100101void UFO_Decoration_StageLoad(void)102{103UFO_Decoration->modelIndices[UFO_DECOR_TREE] = RSDK.LoadMesh("Decoration/Tree.bin", SCOPE_STAGE);104UFO_Decoration->modelIndices[UFO_DECOR_FLOWER1] = RSDK.LoadMesh("Decoration/Flower1.bin", SCOPE_STAGE);105UFO_Decoration->modelIndices[UFO_DECOR_FLOWER2] = RSDK.LoadMesh("Decoration/Flower2.bin", SCOPE_STAGE);106UFO_Decoration->modelIndices[UFO_DECOR_FLOWER3] = RSDK.LoadMesh("Decoration/Flower3.bin", SCOPE_STAGE);107UFO_Decoration->modelIndices[UFO_DECOR_PILLAR1] = RSDK.LoadMesh("Decoration/Pillar1.bin", SCOPE_STAGE);108UFO_Decoration->modelIndices[UFO_DECOR_PILLAR2] = RSDK.LoadMesh("Decoration/Pillar2.bin", SCOPE_STAGE);109UFO_Decoration->modelIndices[UFO_DECOR_BIRD] = RSDK.LoadMesh("Decoration/Bird.bin", SCOPE_STAGE);110UFO_Decoration->modelIndices[UFO_DECOR_FISH] = RSDK.LoadMesh("Decoration/Fish.bin", SCOPE_STAGE);111112UFO_Decoration->sceneIndex = RSDK.Create3DScene("View:Special", 4096, SCOPE_STAGE);113114UFO_Decoration->drawType = S3D_SOLIDCOLOR_SHADED_BLENDED_SCREEN;115}116117#if GAME_INCLUDE_EDITOR118void UFO_Decoration_EditorDraw(void) {}119120void UFO_Decoration_EditorLoad(void)121{122123RSDK_ACTIVE_VAR(UFO_Decoration, type);124RSDK_ENUM_VAR("Tree", UFO_DECOR_TREE);125RSDK_ENUM_VAR("Flower 1", UFO_DECOR_FLOWER1);126RSDK_ENUM_VAR("Flower 2", UFO_DECOR_FLOWER2);127RSDK_ENUM_VAR("Flower 3", UFO_DECOR_FLOWER3);128RSDK_ENUM_VAR("Pillar 1", UFO_DECOR_PILLAR1);129RSDK_ENUM_VAR("Pillar 2", UFO_DECOR_PILLAR2);130RSDK_ENUM_VAR("Bird", UFO_DECOR_BIRD);131RSDK_ENUM_VAR("Fish", UFO_DECOR_FISH);132}133#endif134135void UFO_Decoration_Serialize(void)136{137RSDK_EDITABLE_VAR(UFO_Decoration, VAR_ENUM, type);138RSDK_EDITABLE_VAR(UFO_Decoration, VAR_ENUM, angle);139RSDK_EDITABLE_VAR(UFO_Decoration, VAR_ENUM, size);140}141142143