Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
rubberduckycooly
GitHub Repository: rubberduckycooly/Sonic-1-2-2013-Decompilation
Path: blob/main/RSDKv4/NativeObjects/MenuBG.cpp
817 views
1
#include "RetroEngine.hpp"
2
3
void MenuBG_Create(void *objPtr)
4
{
5
RSDK_THIS(MenuBG);
6
self->textureID = LoadTexture("Data/Game/Menu/BG1.png", TEXFMT_RGBA5551);
7
self->bgCircle1 = LoadMesh("Data/Game/Models/BGCircle1.bin", -1);
8
self->bgCircle2 = LoadMesh("Data/Game/Models/BGCircle2.bin", -1);
9
self->bgLines = LoadMesh("Data/Game/Models/BGLines.bin", -1);
10
SetMeshAnimation(self->bgLines, &self->animator, 0, 40, 0.0);
11
self->animator.loopAnimation = true;
12
self->fadeR = -96;
13
self->fadeG = -64;
14
self->fadeB = -8;
15
self->isFading = true;
16
SetMeshVertexColors(self->bgCircle1, 0xE0, 0xD0, 0xC0, 0xFF);
17
SetMeshVertexColors(self->bgCircle2, 0xE0, 0xD0, 0xC0, 0xFF);
18
SetMeshVertexColors(self->bgLines, 0xE0, 0, 0, 0xFF);
19
self->Ztrans1 = -32.0;
20
self->Ztrans2 = -64.0;
21
self->ZtransRender = -128.0;
22
}
23
void MenuBG_Main(void *objPtr)
24
{
25
RSDK_THIS(MenuBG);
26
if (self->isFading) {
27
SetRenderBlendMode(RENDER_BLEND_NONE);
28
self->fadeTimer += Engine.deltaTime;
29
if (self->fadeTimer > 1.5)
30
self->isFading = false;
31
32
if (self->fadeR < 0xF8)
33
self->fadeR += 8;
34
35
if (self->fadeG < 0xF8)
36
self->fadeG += 8;
37
38
if (self->fadeB < 0xF8)
39
self->fadeB += 8;
40
41
if (self->alpha < 0x100)
42
self->alpha += 0x10;
43
44
self->Ztrans1 = ((160.0 - self->Ztrans1) / (16.0 * Engine.deltaTime * 60.0)) + self->Ztrans1;
45
self->Ztrans2 = ((160.0 - self->Ztrans2) / (18.0 * Engine.deltaTime * 60.0)) + self->Ztrans2;
46
self->ZtransRender = ((160.0 - self->ZtransRender) / (Engine.deltaTime * 60.0 * 20.0)) + self->ZtransRender;
47
RenderRect(-SCREEN_CENTERX_F, SCREEN_CENTERY_F, 160.0, SCREEN_XSIZE_F, SCREEN_YSIZE_F, self->fadeR, self->fadeG, self->fadeB, 255);
48
SetRenderBlendMode(RENDER_BLEND_ALPHA);
49
SetRenderVertexColor(224, 208, 192);
50
RenderImage(-64.0, 0.0, 160.0, 0.45, 0.45, 256.0, 256.0, 512.0, 512.0, 0.0, 0.0, self->alpha, self->textureID);
51
SetRenderVertexColor(255, 255, 255);
52
SetRenderBlendMode(RENDER_BLEND_NONE);
53
self->circle1Rot = self->circle1Rot - Engine.deltaTime;
54
if (self->circle1Rot < -M_PI_2)
55
self->circle1Rot += M_PI_2;
56
self->circle2Rot += Engine.deltaTime;
57
if (self->circle2Rot > M_PI_2)
58
self->circle2Rot -= M_PI_2;
59
NewRenderState();
60
MatrixRotateZF(&self->circle1, self->circle1Rot);
61
MatrixTranslateXYZF(&self->matrixTemp, 120.0, 94.0, self->Ztrans1);
62
MatrixMultiplyF(&self->circle1, &self->matrixTemp);
63
SetRenderMatrix(&self->circle1);
64
RenderMesh(self->bgCircle1, MESH_COLORS, false);
65
66
MatrixRotateZF(&self->circle2, self->circle2Rot);
67
MatrixTranslateXYZF(&self->matrixTemp, 4.0, 150.0, self->Ztrans2);
68
MatrixMultiplyF(&self->circle2, &self->matrixTemp);
69
SetRenderMatrix(&self->circle2);
70
RenderMesh(self->bgCircle2, MESH_COLORS, false);
71
72
MatrixTranslateXYZF(&self->renderMatrix, 0.0, 0.0, self->ZtransRender);
73
}
74
else {
75
SetRenderBlendMode(RENDER_BLEND_NONE);
76
RenderRect(-SCREEN_CENTERX_F, SCREEN_CENTERY_F, 160.0, SCREEN_XSIZE_F, SCREEN_YSIZE_F, 248, 248, 248, 255);
77
SetRenderBlendMode(RENDER_BLEND_ALPHA);
78
SetRenderVertexColor(0xE0, 0xD0, 0xC0);
79
RenderImage(-64.0, 0.0, 160.0, 0.45, 0.45, 256.0, 256.0, 512.0, 512.0, 0.0, 0.0, 255, self->textureID);
80
SetRenderVertexColor(0xFF, 0xFF, 0xFF);
81
SetRenderBlendMode(RENDER_BLEND_NONE);
82
self->circle1Rot -= Engine.deltaTime;
83
if (self->circle1Rot < -M_PI_2)
84
self->circle1Rot += M_PI_2;
85
self->circle2Rot += Engine.deltaTime;
86
if (self->circle2Rot > M_PI_2)
87
self->circle2Rot -= M_PI_2;
88
NewRenderState();
89
MatrixRotateZF(&self->circle1, self->circle1Rot);
90
MatrixTranslateXYZF(&self->matrixTemp, 120.0, 94.0, 160.0);
91
MatrixMultiplyF(&self->circle1, &self->matrixTemp);
92
SetRenderMatrix(&self->circle1);
93
RenderMesh(self->bgCircle1, MESH_COLORS, false);
94
95
MatrixRotateZF(&self->circle2, self->circle2Rot);
96
MatrixTranslateXYZF(&self->matrixTemp, 4.0, 150.0, 160.0);
97
MatrixMultiplyF(&self->circle2, &self->matrixTemp);
98
SetRenderMatrix(&self->circle2);
99
RenderMesh(self->bgCircle2, MESH_COLORS, false);
100
101
MatrixTranslateXYZF(&self->renderMatrix, 0.0, 0.0, 160.0);
102
}
103
SetRenderMatrix(&self->renderMatrix);
104
self->animator.animationSpeed = 8.0 * Engine.deltaTime;
105
AnimateMesh(self->bgLines, &self->animator);
106
RenderMesh(self->bgLines, MESH_COLORS, false);
107
SetRenderMatrix(NULL);
108
}
109
110