Skip to content

Commit

Permalink
Added special end of Space animation
Browse files Browse the repository at this point in the history
  • Loading branch information
SimonLarsen committed Mar 26, 2016
1 parent acd8f99 commit 56b95e4
Show file tree
Hide file tree
Showing 13 changed files with 149 additions and 70 deletions.
1 change: 1 addition & 0 deletions Makefile
Expand Up @@ -128,6 +128,7 @@ sounds:
java -jar jar/MMLGB.jar data/sounds/sfx_time_pickup.mml data/sounds/sfx_time_pickup.h
java -jar jar/MMLGB.jar data/sounds/sfx_warp_end.mml data/sounds/sfx_warp_end.h
java -jar jar/MMLGB.jar data/sounds/sfx_warp_start.mml data/sounds/sfx_warp_start.h
java -jar jar/MMLGB.jar data/sounds/sfx_save_cat.mml data/sounds/sfx_save_cat.h

.PHONY: tobu.gb
tobu.gb:
Expand Down
2 changes: 2 additions & 0 deletions data/mml/level_clear.mml
@@ -0,0 +1,2 @@
A t235 @wd2 @ve0 v7 o4 g+32 v4 ^32 v7a+32 v4 ^32 v7>c32 v4 ^32 v7d+32 v4 ^32 v7g32 v4 ^32 v7a+32 v4 ^32 v7>@ve-6 f1 L r1
B @wd2 @ve0 v4 o4 r16g+32 v2 ^32 v4a+32 v2 ^32 v4>c32 v2 ^32 v4d+32 v2 ^32 v4g32 v2 ^32 v4a+32 v2 ^32 v4> @po1 @ve-6 f1 L r1
8 changes: 8 additions & 0 deletions data/sounds/sfx_save_cat.mml
@@ -0,0 +1,8 @@
A r=6 l=1 v14 @wd2 o6 f>e<a+r=19
A o7 @wd0 v12 l=2
A br>cr<a+r v6 br>cr<a+r v3 br>v2 a+rbr>cr<v1 a+rb

D l=2 v15 o3 a+ o7 b o5 br=16 @ve-1 l=4
D v14 o5 b>a v12 b=14
D v8 aa+ v4 b=14
D v3 aa+ v1 b=14
20 changes: 10 additions & 10 deletions data/sprite/sprites.h
Expand Up @@ -63,10 +63,6 @@ const unsigned char sprites_data[] = {
59, 60, 12, 15, 31, 31, 123, 103, 254, 129, 94, 97, 53, 59, 14, 14,
112, 112, 236, 156, 250, 6, 125, 131, 246, 206, 120, 248, 176, 112, 188, 124,
54, 250, 127, 241, 255, 225, 253, 227, 174, 178, 154, 150, 20, 28, 8, 8,
0, 0, 15, 15, 31, 31, 55, 56, 63, 48, 120, 103, 247, 200, 214, 233,
122, 101, 123, 100, 123, 100, 108, 115, 63, 56, 30, 29, 7, 7, 3, 3,
192, 192, 224, 224, 120, 184, 252, 28, 54, 206, 222, 38, 222, 38, 94, 166,
107, 151, 239, 19, 30, 230, 252, 12, 236, 28, 248, 248, 240, 240, 0, 0,
0, 0, 56, 56, 116, 76, 103, 95, 76, 127, 56, 63, 19, 28, 23, 24,
31, 16, 31, 19, 31, 16, 11, 12, 7, 7, 0, 0, 0, 0, 0, 0,
0, 0, 28, 28, 58, 38, 226, 254, 50, 254, 28, 252, 200, 56, 232, 24,
Expand Down Expand Up @@ -99,13 +95,17 @@ const unsigned char sprites_data[] = {
4, 59, 56, 68, 93, 99, 91, 100, 35, 60, 27, 28, 4, 7, 3, 3,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 1, 16, 0,
0, 0, 32, 64, 16, 96, 0, 48, 0, 0, 8, 16, 1, 26, 0, 3,
0, 0, 15, 15, 31, 31, 55, 56, 63, 48, 120, 103, 247, 200, 214, 233,
122, 101, 123, 100, 123, 100, 108, 115, 63, 56, 30, 29, 7, 7, 3, 3,
192, 192, 224, 224, 120, 184, 252, 28, 54, 206, 222, 38, 222, 38, 94, 166,
107, 151, 239, 19, 30, 230, 252, 12, 236, 28, 248, 248, 240, 240, 0, 0,
3, 3, 7, 4, 15, 8, 15, 8, 11, 12, 8, 15, 6, 5, 2, 3,
1, 1, 0, 0, 12, 12, 23, 31, 32, 63, 36, 59, 87, 121, 127, 93,
192, 192, 160, 96, 144, 112, 144, 112, 16, 240, 16, 240, 32, 224, 64, 192,
128, 128, 128, 128, 192, 192, 70, 198, 69, 199, 45, 235, 30, 250, 246, 26,
123, 76, 63, 63, 38, 63, 31, 31, 7, 7, 5, 7, 3, 3, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
196, 188, 232, 56, 120, 200, 192, 240, 208, 240, 112, 112, 176, 176, 128, 128,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};

Expand Down
Binary file modified data/sprite/sprites.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
20 changes: 19 additions & 1 deletion fade.c
Expand Up @@ -9,10 +9,28 @@ const UINT8 fadePals[] = {
0x00U // 00000000
};

const UINT8 spriteFadePals[] = {
0xD0U, // 11010000
0x80U, // 10000000
0x40U, // 01000000
0x00U // 00000000
};

void fadeToWhite(UBYTE delay) {
UINT8 i, j;
for(i = 1U; i != 4U; ++i) {
BGP_REG = fadePals[i];
BGP_REG = spriteFadePals[i];
for(j = 0U; j != delay; ++j) {
snd_update();
wait_vbl_done();
}
}
}

void fadeSpritesToWhite(UBYTE delay) {
UINT8 i, j;
for(i = 1U; i != 4U; ++i) {
OBP0_REG = fadePals[i];
for(j = 0U; j != delay; ++j) {
snd_update();
wait_vbl_done();
Expand Down
1 change: 1 addition & 0 deletions fade.h
Expand Up @@ -3,5 +3,6 @@

void fadeToWhite(UBYTE delay);
void fadeFromWhite(UBYTE delay);
void fadeSpritesToWhite(UBYTE delay);

#endif
146 changes: 94 additions & 52 deletions game.c
Expand Up @@ -67,10 +67,10 @@ const UBYTE entity_sprites[10] = {
11*4, // E_BIRD
15*4, // E_GHOST
// Powerups
22*4, // E_CLOCK
21*4, // E_CLOCK
// Special
21*4, // E_PORTAL
28*4 // E_CLOUD
29*4, // E_PORTAL
27*4 // E_CLOUD
};

const UBYTE spawn_levels[4][3][8] = {
Expand Down Expand Up @@ -436,18 +436,18 @@ void updateHUD() {
}

// Blips
setSprite(168U-(blip_bar >> 3), 136U, 100U, OBJ_PAL0);
setSprite(176U-(blip_bar >> 3), 136U, 102U, OBJ_PAL0);
setSprite(168U-(blip_bar >> 3), 136U, 96U, OBJ_PAL0);
setSprite(176U-(blip_bar >> 3), 136U, 98U, OBJ_PAL0);

// Progress bar
frame = 104U + ((player_skin-1U) << 2U);
frame = 100U + ((player_skin-1U) << 2U);
progressbar = 118U - (progress << 1U) / 3U;
setSprite(152U, progressbar, frame, OBJ_PAL0);
setSprite(160U, progressbar, frame+2U, OBJ_PAL0);

// Set last progress flag
if(last_progress) {
setSprite(153U, 119U - (last_progress << 1U) / 3U, 96U, OBJ_PAL0);
setSprite(153U, 119U - (last_progress << 1U) / 3U, 92U, OBJ_PAL0);
}

// Low on time marker
Expand Down Expand Up @@ -543,7 +543,7 @@ void updateEntities() {
if(player_y < entity_y[i]) ydist = entity_y[i] - player_y;
else ydist = player_y - entity_y[i];

if(xdist < 38U && ydist < 38U) {
if(xdist < 24U && ydist < 24U) {
if(xdist > 3U) {
if(player_x < entity_x[i]) player_x += 3U;
else player_x -= 3U;
Expand Down Expand Up @@ -584,12 +584,19 @@ void updateEntities() {
break;

case E_PORTAL:
if(entity_dir[i] == LEFT) {
setSprite(entity_x[i]-16U, entity_y[i], frame, OBJ_PAL0);
setSprite(entity_x[i]-8U, entity_y[i], frame+2U, OBJ_PAL0);
if(level == 3U && player_skin == 1U) {
setSprite(entity_x[i]-16U, entity_y[i]-24U, 120U, OBJ_PAL0);
setSprite(entity_x[i]-8U, entity_y[i]-24U, 122U, OBJ_PAL0);
setSprite(entity_x[i]-16U, entity_y[i]-8U, 124U, OBJ_PAL0);
setSprite(entity_x[i]-8U, entity_y[i]-8U, 126U, OBJ_PAL0);
} else {
setSprite(entity_x[i]-8U, entity_y[i], frame, OBJ_PAL0 | FLIP_X);
setSprite(entity_x[i]-16U, entity_y[i], frame+2U, OBJ_PAL0 | FLIP_X);
if(entity_dir[i] == LEFT) {
setSprite(entity_x[i]-16U, entity_y[i], frame, OBJ_PAL0);
setSprite(entity_x[i]-8U, entity_y[i], frame+2U, OBJ_PAL0);
} else {
setSprite(entity_x[i]-8U, entity_y[i], frame, OBJ_PAL0 | FLIP_X);
setSprite(entity_x[i]-16U, entity_y[i], frame+2U, OBJ_PAL0 | FLIP_X);
}
}
break;

Expand Down Expand Up @@ -827,6 +834,39 @@ void intoPortalAnimation() {
wait_vbl_done();
}
stopMusic();

fadeToWhite(10U);
wait_sound_done();
}

void saveCatAnimation() {
playSound(SFX_SAVE_CAT);

player_y++;

for(ticks = 0U; ticks != 180U; ++ticks) {
if(ticks == 24U) BGP_REG = 0x90U;
else if(ticks == 48U) BGP_REG = 0x40U;
else if(ticks == 72U) BGP_REG = 0x00U;

if((ticks & 15U) == 15U) player_y++;

setSprite(player_x-16U, player_y, 4U, OBJ_PAL0);
setSprite(player_x-8U, player_y, 6U, OBJ_PAL0);

setSprite(player_x-16U, player_y-24U, 120U, OBJ_PAL0);
setSprite(player_x-8U, player_y-24U, 122U, OBJ_PAL0);
setSprite(player_x-16U, player_y-8U, 124U, OBJ_PAL0);
setSprite(player_x-8U, player_y-8U, 126U, OBJ_PAL0);

clearRemainingSprites();
snd_update();
wait_vbl_done();
}

fadeSpritesToWhite(8U);

stopMusic();
}

void deathAnimation() {
Expand Down Expand Up @@ -877,6 +917,38 @@ void deathAnimation() {
}
}

void addScore() {
UBYTE i, j, score;
UBYTE *data;

ENABLE_RAM_MBC1;
SWITCH_RAM_MBC1(0);

score = TOTAL_SCORE;

data = &ram_data[(level - 1U) << 4];
for(i = 0U; i != 5U; ++i) {
if(score > data[(i << 1) + 1U]
|| (score == data[(i << 1) + 1U] && elapsed_time < data[i << 1])) {
break;
}
}

if(i < 5U) {
for(j = 4U; j != i; --j) {
data[j << 1] = data[(j - 1U) << 1];
data[(j << 1) + 1U] = data[((j - 1U) << 1) + 1U];
}
data[i << 1] = elapsed_time;
data[(i << 1) + 1U] = score;

last_highscore_level = level;
last_highscore_slot = i;
}

DISABLE_RAM_MBC1;
}

void enterGame() {
first_load = 1U;
ingame_start:
Expand Down Expand Up @@ -943,9 +1015,17 @@ void enterGame() {
if(progress > last_progress) {
last_progress = progress;
}

clearRemainingSprites();
fadeToWhite(10U);
wait_sound_done();
}
else if(scene_state == INGAME_COMPLETED) {
intoPortalAnimation();
if(level == 3U && player_skin == 1U) {
saveCatAnimation();
} else {
intoPortalAnimation();
}
addScore();

gamestate = GAMESTATE_WINSCREEN;
Expand All @@ -967,43 +1047,5 @@ void enterGame() {
gamestate = GAMESTATE_SELECT;
}

clearRemainingSprites();
if(scene_state != INGAME_QUIT) {
fadeToWhite(10U);
wait_sound_done();
}

if(gamestate == GAMESTATE_INGAME) goto ingame_start;
}

void addScore() {
UBYTE i, j, score;
UBYTE *data;

ENABLE_RAM_MBC1;
SWITCH_RAM_MBC1(0);

score = TOTAL_SCORE;

data = &ram_data[(level - 1U) << 4];
for(i = 0U; i != 5U; ++i) {
if(score > data[(i << 1) + 1U]
|| (score == data[(i << 1) + 1U] && elapsed_time < data[i << 1])) {
break;
}
}

if(i < 5U) {
for(j = 4U; j != i; --j) {
data[j << 1] = data[(j - 1U) << 1];
data[(j << 1) + 1U] = data[((j - 1U) << 1) + 1U];
}
data[i << 1] = elapsed_time;
data[(i << 1) + 1U] = score;

last_highscore_level = level;
last_highscore_slot = i;
}

DISABLE_RAM_MBC1;
}
3 changes: 2 additions & 1 deletion game.h
Expand Up @@ -15,11 +15,12 @@ UBYTE spawnEntity(UBYTE type, UBYTE x, UBYTE y, UBYTE dir);
void clearEntities();
void initSpawns();
void updateSpawns();
void enterGame();
void introAnimation();
void intoPortalAnimation();
void saveCatAnimation();
void deathAnimation();
void addScore();
void enterGame();

#define SCRLMGN 84U

Expand Down
8 changes: 4 additions & 4 deletions pause.c
Expand Up @@ -105,11 +105,11 @@ UBYTE enterPause() {
}

// Draw selection markers
setSprite(pause_marker_x1[pause_selection], pause_marker_y[pause_selection], 104U, OBJ_PAL0);
setSprite(pause_marker_x1[pause_selection]+8U, pause_marker_y[pause_selection], 106U, OBJ_PAL0);
setSprite(pause_marker_x1[pause_selection], pause_marker_y[pause_selection], 100U, OBJ_PAL0);
setSprite(pause_marker_x1[pause_selection]+8U, pause_marker_y[pause_selection], 102U, OBJ_PAL0);

setSprite(pause_marker_x2[pause_selection], pause_marker_y[pause_selection], 108U, OBJ_PAL0);
setSprite(pause_marker_x2[pause_selection]+8U, pause_marker_y[pause_selection], 110U, OBJ_PAL0);
setSprite(pause_marker_x2[pause_selection], pause_marker_y[pause_selection], 104U, OBJ_PAL0);
setSprite(pause_marker_x2[pause_selection]+8U, pause_marker_y[pause_selection], 106U, OBJ_PAL0);

clearRemainingSprites();
snd_update();
Expand Down
8 changes: 6 additions & 2 deletions sound.c
Expand Up @@ -27,6 +27,7 @@ extern UBYTE sfx_time_low_data;
extern UBYTE sfx_time_pickup_data;
extern UBYTE sfx_warp_end_data;
extern UBYTE sfx_warp_start_data;
extern UBYTE sfx_save_cat_data;

UBYTE snd_active1, snd_active4;
UBYTE snd_priority1, snd_priority4;
Expand All @@ -46,7 +47,7 @@ UBYTE snd_vib_pos1;
UBYTE snd_noise_step;
UBYTE snd_po1;

const UBYTE sfx_priority[20] = {
const UBYTE sfx_priority[21] = {
8U, // SFX_BUMP
8U, // SFX_BUMP_ALIEN
8U, // SFX_CAT_DISABLE
Expand All @@ -66,7 +67,8 @@ const UBYTE sfx_priority[20] = {
9U, // SFX_TIME_LOW
9U, // SFX_TIME_PICKUP
8U, // SFX_WARP_END
8U // SFX_WARP_START
8U, // SFX_WARP_START
8U // SFX_SAVE_CAT
};

void snd_init() {
Expand Down Expand Up @@ -129,6 +131,8 @@ void playSound(UBYTE id) {
data = &sfx_warp_end_data; break;
case SFX_WARP_START:
data = &sfx_warp_start_data; break;
case SFX_SAVE_CAT:
data = &sfx_save_cat_data; break;
}

data1 = data + ((UWORD*)data)[CHN1_OFFSET];
Expand Down
1 change: 1 addition & 0 deletions sound.h
Expand Up @@ -30,5 +30,6 @@ void snd_update4();
#define SFX_TIME_PICKUP 17U
#define SFX_WARP_END 18U
#define SFX_WARP_START 19U
#define SFX_SAVE_CAT 20U

#endif
1 change: 1 addition & 0 deletions sound_data.c
Expand Up @@ -20,3 +20,4 @@
#include "data/sounds/sfx_time_pickup.h"
#include "data/sounds/sfx_warp_end.h"
#include "data/sounds/sfx_warp_start.h"
#include "data/sounds/sfx_save_cat.h"

0 comments on commit 56b95e4

Please sign in to comment.