#include #include #include #include #include #include "gfx/main_gfx.h" #include "lib/vector.h" #include "lib/sprite.h" #include "lib/object.h" float scale = 3.0; int frameskip = 10; void log(char* msg){ dbg_sprintf(dbgout, "[TBP] %s\n", msg); } int main(void){ kb_key_t arrows; int max_width = LCD_WIDTH; int max_height = LCD_HEIGHT; int frame = 0; size_t i; Object* object; Object* player = new_Object(0, 0); Vector* objects = new_Vector(1, sizeof(Object), &free_Object); Vector* sprites = new_Vector(22, sizeof(Sprite), &free_Sprite); sprites->consume(sprites, new_Sprite(bm1_width, bm1_height, bm1_compressed)); sprites->consume(sprites, new_Sprite(bm2_width, bm2_height, bm2_compressed)); sprites->consume(sprites, new_Sprite(bm3_width, bm3_height, bm3_compressed)); sprites->consume(sprites, new_Sprite(bm4_width, bm4_height, bm4_compressed)); sprites->consume(sprites, new_Sprite(bm5_width, bm5_height, bm5_compressed)); sprites->consume(sprites, new_Sprite(bm6_width, bm6_height, bm6_compressed)); sprites->consume(sprites, new_Sprite(bm7_width, bm7_height, bm7_compressed)); sprites->consume(sprites, new_Sprite(bm8_width, bm8_height, bm8_compressed)); sprites->consume(sprites, new_Sprite(bm9_width, bm9_height, bm9_compressed)); sprites->consume(sprites, new_Sprite(bm10_width, bm10_height, bm10_compressed)); sprites->consume(sprites, new_Sprite(bm11_width, bm11_height, bm11_compressed)); sprites->consume(sprites, new_Sprite(bm12_width, bm12_height, bm12_compressed)); sprites->consume(sprites, new_Sprite(bm13_width, bm13_height, bm13_compressed)); sprites->consume(sprites, new_Sprite(bm14_width, bm14_height, bm14_compressed)); sprites->consume(sprites, new_Sprite(bm15_width, bm15_height, bm15_compressed)); sprites->consume(sprites, new_Sprite(bm16_width, bm16_height, bm16_compressed)); sprites->consume(sprites, new_Sprite(bm17_width, bm17_height, bm17_compressed)); sprites->consume(sprites, new_Sprite(bm18_width, bm18_height, bm18_compressed)); sprites->consume(sprites, new_Sprite(bm19_width, bm19_height, bm19_compressed)); sprites->consume(sprites, new_Sprite(bm20_width, bm20_height, bm20_compressed)); sprites->consume(sprites, new_Sprite(bm21_width, bm21_height, bm21_compressed)); sprites->consume(sprites, new_Sprite(bm22_width, bm22_height, bm22_compressed)); if(!objects->push(objects, player)){ log("Unable to add player to stack"); free_Vector(objects); free_Object(player); return 1; } free_Object(player); player = objects->get(objects, 0); player->sprite = sprites->get(sprites, 0); log("Get max sizes"); max_width -= player->sprite->data->width * scale; max_height -= player->sprite->data->height * scale; log("Set scale"); player->scale.x = scale; player->scale.y = scale; log("Start graphics"); gfx_Begin(); gfx_SetPalette(main_palette, sizeof_main_palette, 0); gfx_SetDrawBuffer(); log("Main loop"); do{ player->sprite = sprites->get(sprites, 0); kb_Scan(); arrows = kb_Data[7]; if(arrows & kb_Down){ if(player->y < max_height){ player->y++; if(frame > 2){ player->sprite = sprites->get(sprites, 2); }else{ player->sprite = sprites->get(sprites, 4); } } }else if(arrows & kb_Up){ if(player->y > 0){ player->y--; if(frame > 2){ player->sprite = sprites->get(sprites, 18); }else{ player->sprite = sprites->get(sprites, 20); } } } if(arrows & kb_Right){ if(player->x < max_width){ player->x++; if(frame > 2){ player->sprite = sprites->get(sprites, 10); }else{ player->sprite = sprites->get(sprites, 12); } } }else if(arrows & kb_Left){ if(player->x > 0){ player->x--; if(frame > 2){ player->sprite = sprites->get(sprites, 6); }else{ player->sprite = sprites->get(sprites, 8); } } } gfx_FillScreen(0); for(i = 0; i < objects->count(objects); i++){ object = objects->get(objects, i); object->draw(object); } gfx_BlitBuffer(); frame++; if(frame > frameskip){ frame = 0; } }while (! (kb_Data[6] & kb_Clear)); log("Freeing sprites stack"); free_Vector(sprites); player->sprite = NULL; log("Freeing objects stack"); free_Vector(objects); log("End graphics"); gfx_End(); log("Done"); return 0; }