Mortal Kombat Plus
Documentação gerada automaticamente com Doxygen
Carregando...
Procurando...
Nenhuma entrada encontrado
intro_demo_room.c
Ir para a documentação desse arquivo.
1#include <genesis.h>
2
3#include "intro_demo_room.h"
4#include "input_system.h"
5#include "typewriter_printer.h"
6#include "sprites.h"
7#include "stages.h"
8#include "audio.h"
9#include "gfx.h"
10#include "bio_textlines.h"
11#include "game_vars.h"
12
16void loadBioScreen(const BioData *data);
17void saida();
18void softClearPlane();
19
20void saida()
21{
22 SPR_clear();
23 PAL_fadeOut(0, 15, 5, FALSE);
24 PAL_fadeOut(16, 30, 5, FALSE);
25 PAL_setColors(0, palette_black, 64, DMA);
26 XGM2_stop();
27 SND_PCM4_stopPlay(SOUND_PCM_CH1);
28 SPR_reset();
29 gFrames = 0;
30 gRoom = TELA_START;
32}
33
35{
36 VDP_waitVSync();
37 SYS_disableInts();
38 VDP_clearPlane(BG_A, TRUE);
39 VDP_clearPlane(BG_B, TRUE);
40 VDP_setBackgroundColor(0); // Define preto
41 gInd_tileset = TILE_USER_INDEX;
42 SYS_enableInts();
43}
44
46{
47 bool sair = FALSE;
48
49 while (!sair)
50 {
52 gFrames++;
53
55
57
59
60 if (gFrames == 1300)
61 {
62 VDP_waitVSync();
63
64 switch (player[0].id) // preguiça de criar uma variável só pra isso
65 {
66 case JOHNNY_CAGE:
68 player[0].id = KANO;
69 break;
70 case KANO:
72 player[0].id = RAIDEN;
73 break;
74 case RAIDEN:
76 player[0].id = LIU_KANG;
77 break;
78 case LIU_KANG:
80 player[0].id = SUBZERO;
81 break;
82 case SUBZERO:
84 player[0].id = SCORPION;
85 break;
86 case SCORPION:
88 player[0].id = SONYA;
89 break;
90 case SONYA:
92 player[0].id = JOHNNY_CAGE;
93 break;
94 default:
95 break;
96 }
97 }
98
99 if (gFrames > 2100)
100 {
101 PAL_fadeOut(0, 15, 5, FALSE);
102 PAL_fadeOut(16, 30, 5, FALSE);
103 SPR_reset();
104 XGM2_stop();
106 gFrames = 0;
107 }
108
109 // start só funciona a partir da tela título do MK ...
110 if ((player[0].key_JOY_START_status > 0 || player[1].key_JOY_START_status > 0) && gFrames > 410)
111 {
112 sair = TRUE;
113 }
114
115 SPR_update(); // Atualização dos sprites na tela
116 SYS_doVBlankProcess();
117 }
118 saida();
119}
120
121// TELA BRAIN AT WORK
123{
124 if (gFrames == 1)
125 {
126 SYS_disableInts();
127 VDP_loadTileSet(baw_a.tileset, gInd_tileset, DMA);
128 VDP_setTileMapEx(BG_A, baw_a.tilemap, TILE_ATTR_FULL(PAL0, FALSE, FALSE, FALSE, gInd_tileset), 0, 0, 0, 0, 40, 28, DMA_QUEUE);
129 PAL_setPalette(PAL0, baw_a.palette->data, DMA);
130 gInd_tileset += baw_a.tileset->numTile;
131
132 VDP_loadTileSet(baw_b.tileset, gInd_tileset, DMA);
133 VDP_setTileMapEx(BG_B, baw_b.tilemap, TILE_ATTR_FULL(PAL1, FALSE, FALSE, FALSE, gInd_tileset), 0, 0, 0, 0, 40, 28, DMA_QUEUE);
134 PAL_setPalette(PAL1, baw_b.palette->data, DMA);
135 gInd_tileset += baw_b.tileset->numTile;
136
137 PAL_fadeIn(0, 15, baw_a.palette->data, 8, FALSE);
138 PAL_fadeIn(16, 30, baw_b.palette->data, 8, FALSE);
139 }
140
141 if (gFrames == 200)
142 {
143 PAL_fadeOut(0, 15, 5, FALSE);
144 PAL_fadeOut(16, 30, 5, FALSE);
145
147 }
148}
149
151{
152 // TELA MIDWAY
153 if (gFrames == 230)
154 {
156 XGM2_stop();
157 XGM2_playPCM(mus_midway, sizeof(mus_midway), SOUND_PCM_CH1_MSK);
158
159 VDP_loadTileSet(midway.tileset, gInd_tileset, DMA);
160 VDP_setTileMapEx(BG_A, midway.tilemap, TILE_ATTR_FULL(PAL0, FALSE, FALSE, FALSE, gInd_tileset), 0, 0, 0, 0, 40, 28, DMA_QUEUE);
161 PAL_setPalette(PAL0, midway.palette->data, DMA);
162 gInd_tileset += midway.tileset->numTile;
163 }
164
165 // TELA TITULO MK
166 if (gFrames == 370)
167 {
169
170 XGM2_stop();
171 XGM2_playPCM(mus_title, sizeof(mus_title), SOUND_PCM_CH1_MSK);
172
173 VDP_loadTileSet(mk_title.tileset, gInd_tileset, DMA);
174 VDP_setTileMapEx(BG_A, mk_title.tilemap, TILE_ATTR_FULL(PAL0, FALSE, FALSE, FALSE, gInd_tileset), 0, 0, 0, 0, 40, 28, DMA_QUEUE);
175 PAL_setPalette(PAL0, mk_title.palette->data, DMA);
176 gInd_tileset += mk_title.tileset->numTile;
177
178 // TODO: Refazer essa parte para usar mk_title_b
179 // VDP_loadTileSet(mk_title_b.tileset, gInd_tileset, DMA);
180 // VDP_setTileMapEx(BG_B, mk_title_b.tilemap, TILE_ATTR_FULL(PAL1, TRUE, FALSE, FALSE, gInd_tileset), 0, 0, 0, 0, 40, 28, DMA_QUEUE);
181 // PAL_setPalette(PAL1, mk_title_b.palette->data, DMA);
182 // gInd_tileset += mk_title_b.tileset->numTile;
183 }
184 gPodeMover = TRUE;
185}
186
187// TELA GORO LIVES
189{
190 if (gFrames == 700)
191 {
193
194 SND_PCM4_stopPlay(SOUND_PCM_CH1);
195 SND_PCM4_startPlay(mus_goro_lives, sizeof(mus_goro_lives), SOUND_PCM_CH1, FALSE);
196
197 VDP_loadTileSet(goro_lives.tileset, gInd_tileset, DMA);
198 VDP_setTileMapEx(BG_A, goro_lives.tilemap, TILE_ATTR_FULL(PAL0, FALSE, FALSE, FALSE, gInd_tileset),
199 0, 0, 0, 0, 40, 28, DMA_QUEUE);
200 PAL_setPalette(PAL0, goro_lives.palette->data, DMA);
201 gInd_tileset += goro_lives.tileset->numTile;
202 }
203
204 // TELA GORO E HISTORIA
205 if (gFrames == 855)
206 {
208
209 PAL_setColors(0, palette_black, 64, DMA);
210 VDP_loadTileSet(goro_a.tileset, gInd_tileset, DMA);
211 VDP_setTileMapEx(BG_A, goro_a.tilemap, TILE_ATTR_FULL(PAL0, FALSE, FALSE, FALSE, gInd_tileset), 0, 0, 0, 0, 40, 28, DMA_QUEUE);
212 PAL_setPalette(PAL0, goro_a.palette->data, DMA);
213 gInd_tileset += goro_a.tileset->numTile;
214
215 VDP_setTextPlane(BG_B);
216 VDP_loadFontData(font_a.tiles, font_a.numTile, CPU);
217 PAL_setPalette(PAL1, font_a_pal.data, DMA);
218 VDP_setTextPalette(PAL1);
219 }
220
221 if (gFrames == 930)
222 {
223 const BioData *goroBio = getFighterBio(GORO);
224 u16 sizeLine = (language == EN) ? goroBio->num_lines_br : goroBio->num_lines_en;
225
226 for (u16 i = 0; i < sizeLine; i++)
227 {
228 if (language == EN)
229 {
230 typewriterEffect(goroBio->lines_EN[i].text, goroBio->lines_EN[i].x, goroBio->lines_EN[i].y, 0, BG_B, PAL1);
231 }
232 else
233 {
234 typewriterEffect(goroBio->lines_BR[i].text, goroBio->lines_BR[i].x, goroBio->lines_BR[i].y, 0, BG_B, PAL1);
235 }
236 }
237 }
238
239 if (gFrames == 1280)
240 {
241 PAL_setColors(0, palette_black, 64, DMA);
242 SND_PCM4_stopPlay(SOUND_PCM_CH1);
243 }
244}
245
246void loadBioScreen(const BioData *data)
247{
249 PAL_fadeOut(0, 15, 5, FALSE);
250 PAL_fadeOut(16, 30, 5, FALSE);
251
252 VDP_loadTileSet(bio_b.tileset, gInd_tileset, DMA);
253 VDP_setTileMapEx(BG_A, bio_b.tilemap, TILE_ATTR_FULL(PAL0, FALSE, FALSE, FALSE, gInd_tileset),
254 0, 0, 0, 0, 40, 28, DMA_QUEUE);
255 PAL_setPalette(PAL0, bio_b.palette->data, DMA);
256 gInd_tileset += bio_b.tileset->numTile;
257
258 Sprite *bioAnimation = SPR_addSprite(data->bio, 112, 48, TILE_ATTR(PAL1, FALSE, FALSE, FALSE));
259 PAL_setPalette(PAL1, data->bio->palette->data, DMA);
260 SPR_setAnimationLoop(bioAnimation, FALSE);
261 SPR_setDepth(bioAnimation, 0);
262
263 u16 size_name = (VDP_getScreenWidth() / 2) - (data->name->w / 2);
264 Sprite *headName = SPR_addSprite(data->name, size_name, 16, TILE_ATTR(PAL2, FALSE, FALSE, FALSE));
265 PAL_setPalette(PAL2, data->name->palette->data, DMA);
266 SPR_setDepth(headName, 0);
267
268 // TODO: carregar a fonte apenas uma vez no início do jogo
269 VDP_setTextPlane(BG_B);
270 VDP_loadFontData(font_a.tiles, font_a.numTile, CPU);
271 PAL_setPalette(PAL3, font_a_pal.data, DMA);
272 VDP_setTextPalette(PAL3);
273
274 XGM2_playPCM(data->voice, data->voice_size, SOUND_PCM_CH2);
275
276 if(language == EN){
277
278 typewriterWriteAllLines(data->lines_EN, data->num_lines_en, BG_B, PAL3);
279 } else {
280 typewriterWriteAllLines(data->lines_BR, data->num_lines_br, BG_B, PAL3);
281 }
282
283 XGM2_play(mus_the_beginning);
284}
const BioData * getFighterBio(u16 fighterIndex)
GameLanguage language
Definição game_vars.c:22
Player player[2]
Definição game_vars.c:24
u8 gRoom
Definição game_vars.c:10
bool gPodeMover
Definição game_vars.c:9
u32 gFrames
Definição game_vars.c:16
u16 gInd_tileset
Definição game_vars.c:12
void inputSystem()
Definição input_system.c:4
void loadBioScreen(const BioData *data)
void loadMidwayTitleMKScreen()
void loadGoroLivesScreen()
void saida()
void loadBrainAtWorkScreen()
void softClearPlane()
void processIntro()
void typewriterEffect(const char *text, u16 x, u16 y, u16 delay, VDPPlane plane, u16 numPal)
void typewriterWriteAllLines(const TextLine *lines, u16 numLines, VDPPlane plane, u16 numPal)