crashtest-r0ket/firmware/l0dable/nick_invaders.c

88 lines
1.6 KiB
C

/* nick_invaders.c
*
* By NiciDieNase
* r0ket@nicidienase.de
*
* Known Bugs:
* - Ignores Font-Setting
* - might look odd with really short or really long nicknames
*
*/
#include <sysinit.h>
#include <string.h>
#include "basic/basic.h"
#include "lcd/render.h"
#include "lcd/display.h"
#include "usetable.h"
#include "lcd/fonts.h"
#include "lcd/fonts/invaders.h"
#include "lcd/fonts/invaders.c"
void ram(void)
{
bool step = true;
const int minX = 10;
const int minY = 10;
const int maxX = 50;
const int maxY = 30;
const int space = 15;
const int delaytime = 150;
int x = minX;
int y = minY;
int u = 0;
int dir = 0;
int dx,dy;
dx=DoString(0,0,nickname);
dx=(RESX-dx)/2;
if(dx<0)
dx=0;
dy=40;
while(1){
lcdFill(0);
font = &Font_Invaders;
// Draw UFO
DoChar(-15+u,1,'U');
u+=2;
if(u > 1337) u=0;
//Draw Invaders
DoChar(x,y,step?'a':'A');
DoChar(x+space,y,step?'b':'B');
DoChar(x+2*space,y,step?'c':'C');
switch (dir){
// move left
case 0:
x++;
if(x == maxX) dir++;
break;
// move down on right end
case 1:
y++;
dir++;
if(y == maxY) y=minY;
break;
// move left
case 2:
x--;
if(x==minX) dir++;
break;
// move down on left end
case 3:
y++;
dir++;
if(y == maxY) y=minY;
break;
}
dir %= 4;
font = NULL;
DoString(dx,dy,nickname);
lcdDisplay();
if(getInputRaw()!=BTN_NONE) return;
step = !step;
delayms_queue_plus(delaytime,0);
}
}