|
@@ -2,39 +2,67 @@
|
|
|
#include <graphx.h>
|
|
|
#include <keypadc.h>
|
|
|
#include <debug.h>
|
|
|
+#include <compression.h>
|
|
|
|
|
|
#include "gfx/main_gfx.h"
|
|
|
#include "lib/vector.h"
|
|
|
-#include "object.h"
|
|
|
+#include "lib/sprite.h"
|
|
|
+#include "lib/object.h"
|
|
|
|
|
|
float scale = 3.0;
|
|
|
int frameskip = 10;
|
|
|
|
|
|
-int max_width = LCD_WIDTH;
|
|
|
-int max_height = LCD_HEIGHT;
|
|
|
-kb_key_t arrows;
|
|
|
-int frame = 0;
|
|
|
-Object* player;
|
|
|
|
|
|
void log(char* msg){
|
|
|
dbg_sprintf(dbgout, "[TBP] %s\n", msg);
|
|
|
}
|
|
|
|
|
|
int main(void){
|
|
|
- log("New Object");
|
|
|
- player = new_Object(0, 0);
|
|
|
- log("Get max sizes");
|
|
|
+ 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(bm3->height > bm5->height){
|
|
|
- max_height -= bm3->height * scale;
|
|
|
- }else{
|
|
|
- max_height -= bm5->height * scale;
|
|
|
- }
|
|
|
- if(bm11->width > bm13->width){
|
|
|
- max_width -= bm11->width * scale;
|
|
|
- }else{
|
|
|
- max_width -= bm13->width * scale;
|
|
|
+ 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;
|
|
@@ -48,7 +76,7 @@ int main(void){
|
|
|
|
|
|
log("Main loop");
|
|
|
do{
|
|
|
- player->sprite = bm1;
|
|
|
+ player->sprite = sprites->get(sprites, 0);
|
|
|
kb_Scan();
|
|
|
arrows = kb_Data[7];
|
|
|
|
|
@@ -56,18 +84,18 @@ int main(void){
|
|
|
if(player->y < max_height){
|
|
|
player->y++;
|
|
|
if(frame > 2){
|
|
|
- player->sprite = bm3;
|
|
|
+ player->sprite = sprites->get(sprites, 2);
|
|
|
}else{
|
|
|
- player->sprite = bm5;
|
|
|
+ player->sprite = sprites->get(sprites, 4);
|
|
|
}
|
|
|
}
|
|
|
}else if(arrows & kb_Up){
|
|
|
if(player->y > 0){
|
|
|
player->y--;
|
|
|
if(frame > 2){
|
|
|
- player->sprite = bm19;
|
|
|
+ player->sprite = sprites->get(sprites, 18);
|
|
|
}else{
|
|
|
- player->sprite = bm21;
|
|
|
+ player->sprite = sprites->get(sprites, 20);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -75,30 +103,39 @@ int main(void){
|
|
|
if(player->x < max_width){
|
|
|
player->x++;
|
|
|
if(frame > 2){
|
|
|
- player->sprite = bm11;
|
|
|
+ player->sprite = sprites->get(sprites, 10);
|
|
|
}else{
|
|
|
- player->sprite = bm13;
|
|
|
+ player->sprite = sprites->get(sprites, 12);
|
|
|
}
|
|
|
}
|
|
|
}else if(arrows & kb_Left){
|
|
|
if(player->x > 0){
|
|
|
player->x--;
|
|
|
if(frame > 2){
|
|
|
- player->sprite = bm7;
|
|
|
+ player->sprite = sprites->get(sprites, 6);
|
|
|
}else{
|
|
|
- player->sprite = bm9;
|
|
|
+ player->sprite = sprites->get(sprites, 8);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
gfx_FillScreen(0);
|
|
|
- player->draw(player);
|
|
|
+ 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));
|
|
|
- player->free(player);
|
|
|
+ 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;
|
|
|
}
|