Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-Mania-Decompilation
Path: blob/master/SonicMania/Objects/Title/Title3DSprite.c
338 views
1
// ---------------------------------------------------------------------
2
// RSDK Project: Sonic Mania
3
// Object Description: Title3DSprite Object
4
// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges
5
// Decompiled by: Rubberduckycooly & RMGRich
6
// ---------------------------------------------------------------------
7
8
#include "Game.h"
9
10
ObjectTitle3DSprite *Title3DSprite;
11
12
void Title3DSprite_Update(void)
13
{
14
RSDK_THIS(Title3DSprite);
15
16
self->relativePos.x = (-((self->position.y >> 8) * RSDK.Sin1024(TitleBG->angle)) - (self->position.x >> 8) * RSDK.Cos1024(TitleBG->angle)) >> 10;
17
self->relativePos.y = (+((self->position.y >> 8) * RSDK.Cos1024(TitleBG->angle)) - (self->position.x >> 8) * RSDK.Sin1024(TitleBG->angle)) >> 10;
18
19
self->zdepth = self->relativePos.y;
20
}
21
22
void Title3DSprite_LateUpdate(void) {}
23
24
void Title3DSprite_StaticUpdate(void) {}
25
26
void Title3DSprite_Draw(void)
27
{
28
RSDK_THIS(Title3DSprite);
29
30
int32 depth = self->zdepth + Title3DSprite->baseDepth;
31
if (depth && depth >= 0x100) {
32
self->scale.x = MIN(0x18000 * Title3DSprite->islandSize / depth, 0x200);
33
self->scale.y = self->scale.x;
34
35
Vector2 drawPos;
36
drawPos.x = (Title3DSprite->islandSize * self->relativePos.x / depth + ScreenInfo->center.x) << 16;
37
drawPos.y = (Title3DSprite->islandSize * Title3DSprite->height / depth + 152) << 16;
38
RSDK.DrawSprite(&self->animator, &drawPos, true);
39
}
40
}
41
42
void Title3DSprite_Create(void *data)
43
{
44
RSDK_THIS(Title3DSprite);
45
46
if (!SceneInfo->inEditor) {
47
RSDK.SetSpriteAnimation(Title3DSprite->aniFrames, 5, &self->animator, true, self->frame);
48
self->position.x -= 0x2000000;
49
self->position.y -= 0x2000000;
50
self->active = ACTIVE_NORMAL;
51
self->visible = false;
52
self->drawGroup = 2;
53
self->drawFX = FX_NONE;
54
}
55
}
56
57
void Title3DSprite_StageLoad(void)
58
{
59
Title3DSprite->aniFrames = RSDK.LoadSpriteAnimation("Title/Background.bin", SCOPE_STAGE);
60
61
Title3DSprite->islandSize = 0x90;
62
Title3DSprite->height = 0x2800;
63
Title3DSprite->baseDepth = 0xA000;
64
}
65
66
#if GAME_INCLUDE_EDITOR
67
void Title3DSprite_EditorDraw(void)
68
{
69
RSDK_THIS(Title3DSprite);
70
71
RSDK.SetSpriteAnimation(Title3DSprite->aniFrames, 5, &self->animator, true, self->frame);
72
73
RSDK.DrawSprite(&self->animator, NULL, false);
74
}
75
76
void Title3DSprite_EditorLoad(void)
77
{
78
Title3DSprite->aniFrames = RSDK.LoadSpriteAnimation("Title/Background.bin", SCOPE_STAGE);
79
80
RSDK_ACTIVE_VAR(Title3DSprite, frame);
81
RSDK_ENUM_VAR("Mountain (Large)", TITLE3DSPRITE_MOUNTAIN_L);
82
RSDK_ENUM_VAR("Mountain (Medium)", TITLE3DSPRITE_MOUNTAIN_M);
83
RSDK_ENUM_VAR("Mountain (Small)", TITLE3DSPRITE_MOUNTAIN_S);
84
RSDK_ENUM_VAR("Tree", TITLE3DSPRITE_TREE);
85
RSDK_ENUM_VAR("Bush", TITLE3DSPRITE_BUSH);
86
}
87
#endif
88
89
void Title3DSprite_Serialize(void) { RSDK_EDITABLE_VAR(Title3DSprite, VAR_ENUM, frame); }
90
91