forked from Tituya/AST3_C
nouveau mode speedrun + médailles
This commit is contained in:
parent
db9f1beca4
commit
fd6f92c084
Binary file not shown.
After Width: | Height: | Size: 274 B |
Binary file not shown.
After Width: | Height: | Size: 268 B |
Binary file not shown.
After Width: | Height: | Size: 253 B |
Binary file not shown.
After Width: | Height: | Size: 265 B |
Binary file not shown.
After Width: | Height: | Size: 8.0 KiB |
|
@ -0,0 +1,2 @@
|
|||
char start_menu();
|
||||
char speed_menu(int *id_level);
|
|
@ -0,0 +1 @@
|
|||
void check_medal(unsigned int frame_level, int id_level);
|
|
@ -83,3 +83,5 @@ LDFLAGS_CG += -Wl,-Map=build-cg/map
|
|||
# font named "hexa.png", you might write:
|
||||
#
|
||||
# FONT.hexa.png = charset:print grid.size:3x5 grid.padding:1
|
||||
|
||||
IMG.speedrun.png = profile:p4
|
||||
|
|
|
@ -12,7 +12,7 @@ extern bopti_image_t img_player; //player
|
|||
extern bopti_image_t img_end; //end of level
|
||||
extern bopti_image_t img_key1; //key 1
|
||||
extern bopti_image_t img_keyblock; //block link to the key1
|
||||
extern bopti_image_t img_blackout; //key 1
|
||||
extern bopti_image_t img_blackout; //blackout
|
||||
|
||||
void draw_player(int x, int y)
|
||||
{
|
||||
|
|
63
src/main.c
63
src/main.c
|
@ -7,6 +7,8 @@
|
|||
#include "setlevel.h"
|
||||
#include "drawlevel.h"
|
||||
#include "collide.h"
|
||||
#include "menu.h"
|
||||
#include "times.h"
|
||||
#include "define.h"
|
||||
|
||||
#define ACCELERATION 0.2
|
||||
|
@ -18,7 +20,7 @@ int callback(volatile int *frame_elapsed)
|
|||
return TIMER_CONTINUE;
|
||||
}
|
||||
|
||||
int main(void)
|
||||
void game(int *id_level, char mode)
|
||||
{
|
||||
volatile int frame_elapsed = 1;
|
||||
int timer = timer_setup(TIMER_ANY, 1000000/FPS, callback, &frame_elapsed);
|
||||
|
@ -32,7 +34,6 @@ int main(void)
|
|||
char gravity = 0; //0 down 1 up
|
||||
char check = 0;
|
||||
char blackout = 0;
|
||||
int id_level = 1;
|
||||
int start_x;
|
||||
int start_y;
|
||||
|
||||
|
@ -45,7 +46,7 @@ int main(void)
|
|||
float vspd = 1.0;
|
||||
int vert_spd = 1;
|
||||
|
||||
set_level(id_level, level, &start_x, &start_y, &gravity, check_coin, &appear, &disappear);
|
||||
set_level(*id_level, level, &start_x, &start_y, &gravity, check_coin, &appear, &disappear);
|
||||
player_x = start_x;
|
||||
player_y = start_y;
|
||||
draw_level(level);
|
||||
|
@ -60,13 +61,14 @@ int main(void)
|
|||
{
|
||||
draw_level(level);
|
||||
if(blackout) draw_blackout(player_x, player_y);
|
||||
draw_player(player_x,player_y);
|
||||
draw_timer(frame);
|
||||
draw_player(player_x,player_y);
|
||||
if(!mode) draw_timer(frame);
|
||||
else draw_timer(framelevel);
|
||||
|
||||
if(id_level==1)
|
||||
if(*id_level==1)
|
||||
{
|
||||
dprint(85,180,C_RGB(245,245,0),"SHIFT");
|
||||
dprint(167,19,C_RGB(110,110,110),"Ne touchez pas ces blocs !");
|
||||
dprint(167,19,C_RGB(110,110,110),"Ne touchez pas ces blocs !");
|
||||
dprint(162,160,C_RGB(110,110,110),"Les clefs agissent");
|
||||
dprint(162,173,C_RGB(110,110,110),"sur certains blocs");
|
||||
dprint(315,115,C_RGB(110,110,110),"Bravo !");
|
||||
|
@ -156,15 +158,20 @@ int main(void)
|
|||
vspd = 1;
|
||||
player_x = start_x;
|
||||
player_y = start_y;
|
||||
set_level(id_level, level, &start_x, &start_y, &gravity, check_coin, &appear, &disappear);
|
||||
if(mode) check_coin = 0;
|
||||
set_level(*id_level, level, &start_x, &start_y, &gravity, check_coin, &appear, &disappear);
|
||||
blackout = 0;
|
||||
framelevel = 0;
|
||||
}
|
||||
if(collide_end(player_x, player_y, level, gravity))
|
||||
{
|
||||
id_level++;
|
||||
if(!mode) *id_level+=1;
|
||||
if(mode)
|
||||
{
|
||||
break;
|
||||
}
|
||||
check_coin = 0;
|
||||
set_level(id_level, level, &start_x, &start_y, &gravity, check_coin, &appear, &disappear);
|
||||
set_level(*id_level, level, &start_x, &start_y, &gravity, check_coin, &appear, &disappear);
|
||||
player_x = start_x;
|
||||
player_y = start_y;
|
||||
blackout = 0;
|
||||
|
@ -270,7 +277,7 @@ int main(void)
|
|||
dtext(32, Y_POS, C_BLACK, "CONTINUE");
|
||||
dtext(32, Y_POS + 12, C_BLACK, "EXIT GAME");
|
||||
dtext(16, Y_POS + (selected * 12), C_BLACK, ">");
|
||||
dprint(32, Y_POS + 36, C_RGB(83,255,0), "LEVEL : %d", id_level);
|
||||
dprint(32, Y_POS + 36, C_RGB(83,255,0), "LEVEL : %d", *id_level);
|
||||
dprint(32, Y_POS + 48, C_RGB(255,178,0), "COIN : %d", coin);
|
||||
dupdate();
|
||||
if (keydown_any(KEY_SHIFT, KEY_EXE, 0))
|
||||
|
@ -291,5 +298,39 @@ int main(void)
|
|||
}
|
||||
}
|
||||
timer_stop(timer);
|
||||
if(mode)
|
||||
{
|
||||
dclear(C_WHITE);
|
||||
dprint_opt(198, 112, C_WHITE, C_BLACK, DTEXT_LEFT, DTEXT_TOP, "%u.%02u",(framelevel)/FPS, (framelevel)%FPS);
|
||||
check_medal(framelevel, *id_level);
|
||||
dupdate();
|
||||
getkey();
|
||||
if(!speed_menu(id_level))
|
||||
{
|
||||
mode = 1;
|
||||
game(id_level, mode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
char mode = 0;
|
||||
int valeur = start_menu();
|
||||
if(!valeur) //normal game
|
||||
{
|
||||
int id_level = 1;
|
||||
mode = 0;
|
||||
game(&id_level, mode);
|
||||
}
|
||||
else if(valeur==1)
|
||||
{
|
||||
int id_level = 1;
|
||||
if(!speed_menu(&id_level))
|
||||
{
|
||||
mode = 1;
|
||||
game(&id_level, mode);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,82 @@
|
|||
#include "drawlevel.h"
|
||||
#include <gint/display.h>
|
||||
#include <gint/keyboard.h>
|
||||
#include "setlevel.h"
|
||||
|
||||
char start_menu()
|
||||
{
|
||||
char menu_loop = 1;
|
||||
char selection = 0;
|
||||
int Y_POS = 90;
|
||||
while(menu_loop)
|
||||
{
|
||||
clearevents();
|
||||
dclear(C_WHITE);
|
||||
selection += keydown(KEY_DOWN) - keydown(KEY_UP);
|
||||
if (selection == 2) selection = 0;
|
||||
else if (selection == -1) selection = 1;
|
||||
dtext(32, Y_POS, C_BLACK, "PLAY");
|
||||
dtext(32, Y_POS + 12, C_BLACK, "SPEEDRUN MODE");
|
||||
dtext(16, Y_POS + (selection * 12), C_BLACK, ">");
|
||||
dupdate();
|
||||
if (keydown_any(KEY_SHIFT, KEY_EXE, 0))
|
||||
{
|
||||
switch (selection)
|
||||
{
|
||||
case 0:
|
||||
return selection;
|
||||
break;
|
||||
case 1:
|
||||
return selection;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(keydown_any(KEY_EXIT, KEY_MENU, 0)) return -1;
|
||||
while (keydown_any(KEY_UP, KEY_DOWN, 0)) clearevents();
|
||||
}
|
||||
return selection;
|
||||
}
|
||||
|
||||
char speed_menu(int *id_level)
|
||||
{
|
||||
|
||||
char level[351];
|
||||
char gravity = 0; //0 down 1 up
|
||||
int start_x;
|
||||
int start_y;
|
||||
char check_coin = 0;
|
||||
int appear = 10;
|
||||
int disappear = 13;
|
||||
|
||||
char menu_loop = 1;
|
||||
char check = 1;
|
||||
extern bopti_image_t img_speedrun;
|
||||
|
||||
while(menu_loop)
|
||||
{
|
||||
clearevents();
|
||||
dclear(C_WHITE);
|
||||
*id_level += keydown(KEY_RIGHT) - keydown(KEY_LEFT);
|
||||
if (*id_level == 11) *id_level = 1;
|
||||
else if (*id_level == 0) *id_level = 10;
|
||||
set_level(*id_level, level, &start_x, &start_y, &gravity, check_coin, &appear, &disappear);
|
||||
draw_level(level);
|
||||
dimage(0,0,&img_speedrun);
|
||||
dtext(340, 214, C_GREEN, "< PLAY >");
|
||||
dtext(190, 45, C_BLACK, "Time : ");
|
||||
dprint(80,20,C_BLACK,"Level : %d",*id_level);
|
||||
dupdate();
|
||||
if (keydown_any(KEY_SHIFT, KEY_EXE, 0))
|
||||
{
|
||||
if(!check)
|
||||
{
|
||||
del_level(level);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
else check = 0;
|
||||
if(keydown_any(KEY_EXIT, KEY_MENU, 0)) return 1;
|
||||
while (keydown_any(KEY_RIGHT, KEY_LEFT, 0)) clearevents();
|
||||
}
|
||||
return 0;
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
#include "times.h"
|
||||
#include "define.h"
|
||||
#include <gint/display.h>
|
||||
|
||||
extern bopti_image_t img_bronze;
|
||||
extern bopti_image_t img_argent;
|
||||
extern bopti_image_t img_or;
|
||||
extern bopti_image_t img_createur;
|
||||
|
||||
void check_medal(unsigned int frame_level, int id_level)
|
||||
{
|
||||
switch(id_level)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
unsigned int time = 6;
|
||||
unsigned int time2 = 5;
|
||||
if(frame_level/FPS < time || (frame_level/FPS <= time && frame_level%FPS <= time2)) dimage(380,8,&img_createur);
|
||||
if(frame_level/FPS < time*1.05 || (frame_level/FPS <= time*1.05 && frame_level%FPS <= time2*1.05)) dimage(360,8,&img_or);
|
||||
if(frame_level/FPS < time*1.2 || (frame_level/FPS <= time*1.2 && frame_level%FPS <= time2*1.2)) dimage(340,8,&img_argent);
|
||||
if(frame_level/FPS < time*1.5|| (frame_level/FPS <= time*1.5 && frame_level%FPS <= time2*1.5)) dimage(320,8,&img_bronze);
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
break;
|
||||
case 3:
|
||||
break;
|
||||
case 4:
|
||||
break;
|
||||
case 5:
|
||||
break;
|
||||
case 6:
|
||||
break;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue