168 lines
2.3 KiB
C
Executable File
168 lines
2.3 KiB
C
Executable File
#include "keyboard.h"
|
|
#include "mario.h"
|
|
#include "score.h"
|
|
#include <gint/keyboard.h>
|
|
#include <gint/display.h>
|
|
#include <gint/timer.h>
|
|
#include <gint/clock.h>
|
|
#include "config.h"
|
|
|
|
mkey_t keys[6]={0};
|
|
|
|
|
|
|
|
static int konami[]={KEY_UP,KEY_UP,KEY_DOWN,KEY_DOWN,KEY_LEFT,KEY_RIGHT,KEY_LEFT,KEY_RIGHT,KEY_ALPHA,KEY_SHIFT};
|
|
|
|
void keyboard_clear()
|
|
{
|
|
for (int i=0; i<6; i++)
|
|
keys[i]=0;
|
|
clearevents();
|
|
}
|
|
|
|
int menu_pause() // 1 exit, 0 continue
|
|
{
|
|
extern image_t img_menu_pause;
|
|
extern image_t img_select_arrow;
|
|
|
|
clearevents();
|
|
|
|
int choice=0;
|
|
|
|
int x=64-img_menu_pause.width/2;
|
|
int y=32-img_menu_pause.height/2;
|
|
for (int i=0; i<6; i++)
|
|
keys[i]=0;
|
|
while (1)
|
|
{
|
|
dimage(x,y,&img_menu_pause);
|
|
dimage(x+2, y+2+7*choice, &img_select_arrow);
|
|
|
|
dupdate();
|
|
switch (getkey_custom())
|
|
{
|
|
case KEY_EXIT:
|
|
return 0;
|
|
|
|
case KEY_MENU:
|
|
return 1;
|
|
|
|
case KEY_OPTN:
|
|
choice=2;
|
|
|
|
case KEY_EXE:
|
|
if (choice==2)
|
|
configmenu();
|
|
return choice & 1;
|
|
|
|
case KEY_UP:
|
|
if (choice>0)
|
|
choice--;
|
|
break;
|
|
|
|
case KEY_DOWN:
|
|
if (choice<2)
|
|
choice++;
|
|
break;
|
|
|
|
case KEY_F1:
|
|
|
|
for (int a=0; a<10; a++)
|
|
{
|
|
key_event_t e=pollevent();
|
|
if (e.type==KEYEV_DOWN)
|
|
{
|
|
if (e.key!=konami[a])
|
|
break;
|
|
}
|
|
if (keydown(KEY_EXIT))
|
|
break;
|
|
if (a==10) // Cheat code
|
|
{
|
|
mario_bigger();
|
|
mario_has_bullets=1;
|
|
lifes=50;
|
|
extern image_t img_dev;
|
|
dimage(0,0,&img_dev);
|
|
dupdate();
|
|
sleep_ms(3,1000);
|
|
return 0;
|
|
}
|
|
else
|
|
e=pollevent();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void update_keyboard()
|
|
{
|
|
key_event_t e;
|
|
e=pollevent();
|
|
int menu=0;
|
|
for (int i=0; i<6; i++)
|
|
if (keys[i]==2) keys[i]=1;
|
|
while(e.type!=KEYEV_NONE)
|
|
{
|
|
mkey_t k = MK_NONE;
|
|
|
|
if(e.key==KEY_LEFT)
|
|
k=MK_LEFT;
|
|
if(e.key==KEY_RIGHT)
|
|
k=MK_RIGHT;
|
|
|
|
if(e.key==KEY_SHIFT)
|
|
k=MK_JUMP1;
|
|
if(e.key==KEY_UP)
|
|
k=MK_JUMP2;
|
|
|
|
if(e.key==KEY_DOWN)
|
|
k=MK_LITTLE;
|
|
|
|
if(e.key==KEY_ALPHA)
|
|
k=MK_RUN;
|
|
|
|
if(keydown(KEY_EXIT))
|
|
menu=1;
|
|
|
|
|
|
|
|
if (k!=MK_NONE)
|
|
{
|
|
if (e.type==KEYEV_DOWN)
|
|
{
|
|
keys[k]=2;
|
|
}
|
|
if (e.type==KEYEV_UP)
|
|
{
|
|
keys[k]=0;
|
|
}
|
|
}
|
|
e=pollevent();
|
|
}
|
|
if (menu)
|
|
{
|
|
int t=menu_pause();
|
|
if (t==1)
|
|
finish_level=-1;
|
|
return;
|
|
}
|
|
}
|
|
|
|
int getkey_custom()
|
|
{
|
|
key_event_t e;
|
|
|
|
for (int i=0; i<6; i++)
|
|
keys[i]=0;
|
|
|
|
clearevents();
|
|
while (1)
|
|
{
|
|
e=pollevent();
|
|
if (e.type==KEYEV_DOWN)
|
|
return e.key;
|
|
else
|
|
sleep();
|
|
}
|
|
} |