Skip to content

Commit

Permalink
Added pause menu functionality. Missing anim.
Browse files Browse the repository at this point in the history
  • Loading branch information
SimonLarsen committed Jan 30, 2016
1 parent 680b484 commit 826575a
Show file tree
Hide file tree
Showing 11 changed files with 240 additions and 57 deletions.
7 changes: 6 additions & 1 deletion Makefile
Expand Up @@ -3,7 +3,7 @@ CFLAGS=-Wl-j

default: backgrounds sprites tobu.gb

backgrounds: logos_backgrounds intro_backgrounds title_backgrounds select_backgrounds ingame_backgrounds winscreen_backgrounds highscore_backgrounds unlocked_backgrounds jukebox_backgrounds
backgrounds: logos_backgrounds intro_backgrounds title_backgrounds select_backgrounds ingame_backgrounds pause_backgrounds winscreen_backgrounds highscore_backgrounds unlocked_backgrounds jukebox_backgrounds

.PHONY: logos_backgrounds
logos_backgrounds:
Expand Down Expand Up @@ -32,6 +32,10 @@ ingame_backgrounds:
imgtogb --map -O 34 --rle data/bg/background3.png data/bg/background3.h
imgtogb --map -O 34 --rle data/bg/background4.png data/bg/background4.h

.PHONY: pause_backgrounds
pause_backgrounds:
imgtogb --map --rle -O 38 data/bg/pause_bg.png data/bg/pause_bg.h

.PHONY: winscreen_backgrounds
winscreen_backgrounds:
imgtogb --map -O 40 --rle data/bg/win_base.png data/bg/win_base.h
Expand Down Expand Up @@ -112,6 +116,7 @@ tobu.gb:
$(CC) $(CFLAGS) -c arrow.c
$(CC) $(CFLAGS) -c logos.c -Wf-bo1
$(CC) $(CFLAGS) -c game.c -Wf-bo1
$(CC) $(CFLAGS) -c pause.c -Wf-bo1
$(CC) $(CFLAGS) -c select.c -Wf-bo2
$(CC) $(CFLAGS) -c highscore.c -Wf-bo2
$(CC) $(CFLAGS) -c unlocked.c -Wf-bo2
Expand Down
68 changes: 68 additions & 0 deletions data/bg/pause_bg.h
@@ -0,0 +1,68 @@
#ifndef PAUSE_BG_MAP_H
#define PAUSE_BG_MAP_H

#define pause_bg_data_length 48
const unsigned char pause_bg_data[] = {
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255,
0, 255, 0, 255, 0, 223, 0, 143, 0, 223, 0, 255, 0, 255, 0, 255,
0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 251, 0, 255, 0, 255,
0, 255, 4, 251, 16, 227, 66, 129, 0, 192, 66, 129, 8, 147, 0, 251,
0, 255, 0, 255, 0, 254, 2, 252, 0, 252, 8, 240, 32, 192, 0, 224,
0, 255, 0, 255, 0, 127, 64, 63, 0, 63, 16, 15, 4, 3, 0, 7,
8, 240, 0, 240, 0, 240, 18, 225, 0, 231, 0, 255, 0, 255, 0, 255,
16, 15, 0, 15, 0, 15, 72, 135, 0, 231, 0, 255, 0, 255, 0, 255,
0, 255, 0, 255, 0, 254, 2, 252, 0, 252, 8, 240, 32, 192, 255, 255,
2, 0, 255, 0, 255, 0, 127, 64, 63, 0, 63, 16, 15, 4, 3, 255,
255, 2, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255,
255, 3, 0, 255, 0, 255, 0, 223, 0, 143, 0, 223, 0, 255, 0, 255,
255, 3, 8, 240, 0, 240, 0, 240, 18, 225, 0, 231, 0, 255, 0, 255,
255, 3, 16, 15, 0, 15, 0, 15, 72, 135, 0, 231, 0, 255, 0, 255,
255, 3, 195, 0, 129, 0, 0, 9, 129, 0, 195, 0, 255, 0, 231, 0,
195, 0, 129, 0, 129, 0, 195, 0, 231, 0, 255, 0, 255, 0, 255, 0,
255, 0, 231, 0, 231, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0,
255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 60, 0, 126, 0,
255, 0, 255, 0, 255, 0, 255, 0, 126, 0, 60, 0, 0, 3, 24, 0,
60, 0, 126, 0, 126, 0, 60, 0, 24, 0, 0, 9, 24, 0, 24, 0,
0, 33, 124, 124, 2, 102, 102, 4, 0, 0, 10, 126, 126, 2, 96, 96,
2, 124, 124, 2, 0, 0, 10, 60, 60, 2, 102, 102, 2, 120, 120, 2,
0, 0, 10, 102, 102, 6, 0, 0, 10, 98, 98, 2, 118, 118, 2, 126,
126, 2, 124, 124, 2, 102, 102, 4, 0, 0, 10, 96, 96, 4, 126, 126,
2, 0, 0, 10, 30, 30, 2, 102, 102, 2, 60, 60, 2, 0, 0, 10,
102, 102, 4, 60, 60, 2, 0, 0, 10, 126, 126, 2, 106, 106, 2, 98,
98, 2, 0, 0, 12, 124, 124, 2, 102, 102, 8, 124, 124, 2, 0, 0,
4, 60, 60, 2, 102, 102, 4, 126, 126, 4, 102, 102, 2, 0, 0, 4,
60, 60, 2, 102, 102, 2, 120, 120, 2, 30, 30, 2, 102, 102, 2, 60,
60, 2, 0, 0, 4, 102, 102, 4, 126, 126, 4, 102, 102, 4, 0, 0,
4, 60, 60, 2, 102, 102, 2, 96, 96, 4, 102, 102, 2, 60, 60, 2,
0, 0, 4, 60, 60, 2, 102, 102, 8, 60, 60, 2, 0, 0, 4, 102,
102, 10, 60, 60, 2, 0, 0, 4, 102, 102, 2, 118, 118, 2, 126, 126,
4, 110, 110, 2, 102, 102, 2, 0, 0, 4, 126, 126, 2, 24, 24, 10,
0, 0, 4, 126, 126, 2, 96, 96, 2, 124, 124, 2, 96, 96, 4, 126,
126, 2, 0, 0, 4, 124, 124, 2, 102, 102, 4, 124, 124, 2, 102, 102,
4, 0, 0, 12, 60, 60, 2, 102, 102, 4, 0, 0, 10, 24, 24, 6,
0, 0, 10, 126, 126, 2, 24, 24, 4, 102, 102, 2, 108, 108, 2, 62,
62, 2, 0, 0, 10, 24, 24, 6, 0, 0, 10
};

#define pause_bg_tiles_width 20
#define pause_bg_tiles_height 18
#define pause_bg_offset 38
const unsigned char pause_bg_tiles[] = {
38, 39, 38, 38, 22, 40, 38, 38, 2, 41, 38, 38, 6, 39, 38, 38,
17, 42, 43, 38, 38, 4, 40, 38, 38, 2, 42, 43, 38, 38, 2, 39,
38, 38, 6, 44, 45, 38, 38, 3, 41, 38, 38, 3, 44, 45, 38, 38,
4, 40, 38, 38, 20, 42, 43, 38, 38, 12, 40, 38, 38, 5, 44, 45,
38, 38, 2, 39, 38, 38, 4, 42, 43, 38, 38, 5, 41, 38, 38, 12,
44, 45, 38, 38, 2, 39, 38, 38, 29, 42, 43, 38, 38, 2, 40, 38,
38, 4, 46, 47, 48, 48, 5, 49, 48, 48, 3, 50, 51, 48, 48, 7,
52, 53, 54, 55, 56, 57, 58, 59, 59, 6, 58, 57, 56, 55, 54, 53,
52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 61, 59, 58,
57, 56, 55, 54, 53, 54, 55, 56, 57, 58, 59, 59, 2, 65, 66, 67,
68, 69, 66, 59, 59, 2, 58, 57, 56, 55, 54, 55, 56, 70, 71, 72,
73, 59, 74, 75, 76, 77, 78, 79, 80, 59, 59, 4, 56, 55, 56, 57,
58, 59, 59, 5, 81, 63, 82, 83, 59, 59, 5, 58, 57, 56, 57, 58,
59, 59, 6, 84, 68, 85, 85, 2, 59, 59, 6, 58, 57, 58, 59, 59,
18, 58
};

#endif
Binary file added data/bg/pause_bg.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
93 changes: 51 additions & 42 deletions game.c
Expand Up @@ -9,6 +9,7 @@
#include "highscore.h"
#include "sound.h"
#include "mmlgb/driver/music.h"
#include "pause.h"

// Maps
#include "data/bg/hud.h"
Expand Down Expand Up @@ -182,6 +183,25 @@ void initGame() {
enable_interrupts();
}

void restoreGame() {
disable_interrupts();
DISPLAY_OFF;

setIngameBackground(level);

set_bkg_data(hud_offset, hud_data_length, hud_data);
set_bkg_data(clock_offset, clock_data_length, clock_data);
set_win_tiles(0U, 0U, hud_tiles_width, hud_tiles_height, hud_tiles);
move_bkg(0U, 112U-progress);

SHOW_BKG;
SHOW_WIN;
SHOW_SPRITES;

DISPLAY_ON;
enable_interrupts();
}

UBYTE *getSkinData() {
if(player_skin == 1U) return skin1_data;
else if(player_skin == 2U) return skin2_data;
Expand All @@ -192,17 +212,6 @@ UBYTE *getSkinData() {
void updateInput() {
updateJoystate();

if(CLICKED(J_START)) {
paused = paused ^ 1U;
if(paused) {
BGP_REG = 0xF9U; // 11111001
} else {
BGP_REG = 0xE4U; // 11100100
}
}

if(paused) return;

if(ISDOWN(J_LEFT) && !dashing) {
player_x -= MOVE_SPEED;
player_xdir = LEFT;
Expand Down Expand Up @@ -385,7 +394,9 @@ void updatePlayer() {
if(!dashes && (ticks & 4U)) palette = OBJ_PAL1;

// Dash marker
setSprite(player_x-12U, player_y-9U, 24U+(dashes << 1), palette);
if(show_dashcounter) {
setSprite(player_x-12U, player_y-9U, 24U+(dashes << 1), palette);
}

if(player_xdir == LEFT) {
setSprite(player_x-16U, player_y, frame, palette);
Expand Down Expand Up @@ -834,43 +845,41 @@ void enterGame() {

while(scene_state == INGAME_ACTIVE) {
updateInput();
if(paused) {
if(CLICKED(J_SELECT)) {
scene_state = INGAME_QUIT;
}
} else {
ticks++;
timer++;

// Update timing
if(timer == 60U) {
timer = 0U;
elapsed_time++;
remaining_time--;
updateHUDTime();

if(remaining_time == 0U) {
scene_state = INGAME_DEAD;
}
}
if(CLICKED(J_START)) {
scene_state = enterPause();
restoreGame();
}

updatePlayer();
updateHUD();
ticks++;
timer++;

updateEntities();
updateSpawns();
// Update timing
if(timer == 60U) {
timer = 0U;
elapsed_time++;
remaining_time--;
updateHUDTime();

// Scroll screen
scrolled += scroll_y;
if(scrolled >= scrolled_length[level-1U]) {
scrolled -= scrolled_length[level-1U];
if(progress < 112U) progress++;
move_bkg(0U, 112U-progress);
if(remaining_time == 0U) {
scene_state = INGAME_DEAD;
}
}

clearRemainingSprites();
updatePlayer();
updateHUD();

updateEntities();
updateSpawns();

// Scroll screen
scrolled += scroll_y;
if(scrolled >= scrolled_length[level-1U]) {
scrolled -= scrolled_length[level-1U];
if(progress < 112U) progress++;
move_bkg(0U, 112U-progress);
}

clearRemainingSprites();
snd_update();
wait_vbl_done();
}
Expand Down
4 changes: 1 addition & 3 deletions game.h
Expand Up @@ -2,6 +2,7 @@
#define GAME_H

void initGame();
void restoreGame();
UBYTE *getSkinData();
void updateInput();
void updatePlayer();
Expand All @@ -19,9 +20,6 @@ void intoPortalAnimation();
void deathAnimation();
void addScore();

#define MAPW 10U
#define MAPH 16U

#define SCRLMGN 84U

#define NO_LAST_SPAWN 255U
Expand Down
1 change: 1 addition & 0 deletions gamestate.c
Expand Up @@ -20,6 +20,7 @@ UBYTE player_x, player_y;
UBYTE cat_x, cat_y;

UBYTE player_skin;
UBYTE show_dashcounter;

const UBYTE level_names[7][6] = {
{22U, 25U, 13U, 21U, 15U, 14U}, // "LOCKED"
Expand Down
22 changes: 12 additions & 10 deletions gamestate.h
Expand Up @@ -29,21 +29,23 @@ extern UBYTE player_x, player_y;
extern UBYTE cat_x, cat_y;

extern UBYTE player_skin;
extern UBYTE show_dashcounter;

#define CLICKED(x) ((joystate & x) && (joystate & x) != (oldjoystate & x))
#define RELEASED(x) (!(joystate & x) && (joystate & x) != (oldjoystate & x))
#define ISDOWN(x) (joystate & (x))

#define GAMESTATE_LOGOS 0U
#define GAMESTATE_INTRO 1U
#define GAMESTATE_TITLE 2U
#define GAMESTATE_SELECT 3U
#define GAMESTATE_INGAME 4U
#define GAMESTATE_WINSCREEN 5U
#define GAMESTATE_HIGHSCORE 6U
#define GAMESTATE_JUKEBOX 7U
#define GAMESTATE_UNLOCKED 8U
#define GAMESTATE_ENDING 9U
#define GAMESTATE_LOGOS 0U
#define GAMESTATE_INTRO 1U
#define GAMESTATE_TITLE 2U
#define GAMESTATE_SELECT 3U
#define GAMESTATE_INGAME 4U
#define GAMESTATE_PAUSE 5U
#define GAMESTATE_WINSCREEN 6U
#define GAMESTATE_HIGHSCORE 7U
#define GAMESTATE_JUKEBOX 8U
#define GAMESTATE_UNLOCKED 9U
#define GAMESTATE_ENDING 10U

#define UNLOCKED_CLOUDS 1U
#define UNLOCKED_SPACE 2U
Expand Down
6 changes: 5 additions & 1 deletion main.c
Expand Up @@ -42,13 +42,17 @@ void initRAM() {
for(i = 0U; i != 8U; ++i) {
ram_data[RAM_SIG_ADDR + i] = RAM_SIG[i];
}

ram_data[64U] = 1U;
}

// Load values from ram
for(levels_completed = 0U; levels_completed != 4U; ++levels_completed) {
if(ram_data[levels_completed << 4] == 0U) break;
}

show_dashcounter = ram_data[64U];

DISABLE_RAM_MBC1;
}

Expand All @@ -65,7 +69,7 @@ void main() {
unlocked_bits = 0U;
player_skin = 1U;

gamestate = GAMESTATE_LOGOS;
gamestate = GAMESTATE_SELECT;

SWITCH_16_8_MODE_MBC1;
add_TIM(updateMusic);
Expand Down

0 comments on commit 826575a

Please sign in to comment.