diff --git a/TODO b/TODO index df16cfa..0439358 100644 --- a/TODO +++ b/TODO @@ -21,6 +21,7 @@ fixed version. + Optimizied key and door models; game runs at full speed +- Optimize bullets ? They seem to cause some lag - Add lighting/shininess/antialiasing/you-name-it effects to make things nicer diff --git a/bullet.c b/bullet.c index 88593b6..cbc79b9 100644 --- a/bullet.c +++ b/bullet.c @@ -23,7 +23,13 @@ game_obj* newBullet(game_obj* list, float x, float y, float z, float angle) bul->data[BULLET_ZDIR] = my_cos(bul->data[BULLET_ANGLE]); #endif - /* collision system movement vector */ + /* collision data */ + bul->box.min.x = (float)(bul->data[BULLET_X] - 5); + bul->box.min.y = (float)(bul->data[BULLET_Y] - 5); + bul->box.min.z = (float)(bul->data[BULLET_Z] - 5); + bul->box.max.x = (float)(bul->data[BULLET_X] + 5); + bul->box.max.y = (float)(bul->data[BULLET_Y] + 5); + bul->box.max.z = (float)(bul->data[BULLET_Z] + 5); bul->box.move.x = (float)10*bul->data[BULLET_XDIR]; bul->box.move.y = (float)0; bul->box.move.z = (float)10*bul->data[BULLET_ZDIR]; @@ -41,14 +47,10 @@ void bulletTick(game_obj* bul) bul->data[BULLET_X] += 20 * bul->data[BULLET_XDIR] * dtime; bul->data[BULLET_Z] += 20 * bul->data[BULLET_ZDIR] * dtime; - - /* bullet collision box */ - bul->box.min.x = (float)(bul->data[BULLET_X] - 5); - bul->box.min.y = (float)(bul->data[BULLET_Y] - 5); - bul->box.min.z = (float)(bul->data[BULLET_Z] - 5); - bul->box.max.x = (float)(bul->data[BULLET_X] + 5); - bul->box.max.y = (float)(bul->data[BULLET_Y] + 5); - bul->box.max.z = (float)(bul->data[BULLET_Z] + 5); + bul->box.min.x += 20 * bul->data[BULLET_XDIR] * dtime; + bul->box.max.x += 20 * bul->data[BULLET_XDIR] * dtime; + bul->box.min.z += 20 * bul->data[BULLET_ZDIR] * dtime; + bul->box.max.z += 20 * bul->data[BULLET_ZDIR] * dtime; if((bul->data[BULLET_TIMER] -= 3*dtime) < 0.0) if(!bul->data[BULLET_EXPLODED]) @@ -65,9 +67,8 @@ void bulletCollide(game_obj* a, game_obj* b) void bulletDraw(game_obj* bul) { - glTranslatef((GLfloat)bul->data[BULLET_X]/10.0f, (GLfloat)bul->data[BULLET_Y]/10.0f, - (GLfloat)bul->data[BULLET_Z]/10.0f); - glScalef(0.1f, 0.1f, 0.1f); - glRotatef(bul->data[BULLET_ANGLE], 0.0f, 1.0f, 0.0f); - drawModelWithGL(bulletModel); + glTranslatef((GLfloat)bul->data[BULLET_X]/10.0f, (GLfloat)bul->data[BULLET_Y]/10.0f, + (GLfloat)bul->data[BULLET_Z]/10.0f); + glRotatef(bul->data[BULLET_ANGLE], 0.0f, 1.0f, 0.0f); + drawModelWithGL(bulletModel); } diff --git a/clown3d-DS.elf b/clown3d-DS.elf index 0e58360..96053d5 100644 Binary files a/clown3d-DS.elf and b/clown3d-DS.elf differ diff --git a/clown3d-DS.nds b/clown3d-DS.nds index f071486..3b7af1c 100644 Binary files a/clown3d-DS.nds and b/clown3d-DS.nds differ diff --git a/headers.h b/headers.h index 4f8704f..c740039 100644 --- a/headers.h +++ b/headers.h @@ -145,8 +145,8 @@ enum typedef struct { int* vertnum; /* array of vertex numbers */ - int point_count; /* triangle or quad ? the DS has to know ! */ - void* next; /* pointer to next face */ + int point_count; /* triangle or quad ? the DS has to know ! */ + void* next; /* pointer to next face */ } face; /* Vertex */ @@ -161,7 +161,7 @@ typedef struct { float color[3]; /* group color */ face* faces; /* faces linked list */ - void* next; /* next group */ + void* next; /* next group */ } model_group; /* Model */ @@ -254,6 +254,11 @@ extern void initFunction(void *va); extern void tickFunction(void *va); extern void drawFunction(void* va); extern void collisionFunction(void* va, void* vb); + +extern void gc_push(game_obj* ptr); +extern void gc_collect(void); +extern void gc_stop(void); + #endif diff --git a/mem-check.c b/mem-check.c index 97a9ebc..d4616d1 100644 --- a/mem-check.c +++ b/mem-check.c @@ -1,5 +1,6 @@ #include +#include size_t tot = 0; diff --git a/model-data.c b/model-data.c index c874d46..25b2d98 100644 --- a/model-data.c +++ b/model-data.c @@ -7,14 +7,14 @@ char bullet_model[] = "newgroup \ color 255 255 0 \ -vertex -1 -0.5 0.5 \ -vertex -1 0.5 0.5 \ -vertex 1 -0.5 0.5 \ -vertex 1 0.5 0.5 \ -vertex 1 -0.5 -0.5 \ -vertex 1 0.5 -0.5 \ -vertex -1 -0.5 -0.5 \ -vertex -1 0.5 -0.5 \ +vertex -.1 -.05 .05 \ +vertex -.1 .05 .05 \ +vertex .1 -.05 .05 \ +vertex .1 .05 .05 \ +vertex .1 -.05 -.05 \ +vertex .1 .05 -.05 \ +vertex -.1 -.05 -.05 \ +vertex -.1 .05 -.05 \ face 1 2 4 3 \ face 3 4 6 5 \ face 5 6 8 7 \ diff --git a/model-load.c b/model-load.c index 1c670f3..5784e9a 100644 --- a/model-load.c +++ b/model-load.c @@ -8,6 +8,7 @@ #include #include #include +#include /* fabs */ #include "headers.h" /* On the DS, loadModel() is slow. diff --git a/player.c b/player.c index fd66a90..55b6232 100644 --- a/player.c +++ b/player.c @@ -83,8 +83,8 @@ void playerTick(game_obj* player) #ifdef PC_TARGET shoot = keystate[SDLK_s]; jump = keystate[SDLK_z]; - left = keystate[SDLK_RIGHT]; - right = keystate[SDLK_LEFT]; + left = keystate[SDLK_LEFT]; + right = keystate[SDLK_RIGHT]; down = keystate[SDLK_DOWN]; up = keystate[SDLK_UP]; #else @@ -94,8 +94,8 @@ void playerTick(game_obj* player) u16 keys = keysHeld(); shoot = (keys & KEY_A); jump = (keys & KEY_B); - left = (keys & KEY_RIGHT); - right = (keys & KEY_LEFT); + left = (keys & KEY_LEFT); + right = (keys & KEY_RIGHT); down = (keys & KEY_DOWN); up = (keys & KEY_UP); #endif @@ -112,17 +112,17 @@ void playerTick(game_obj* player) if(shoot && player->data[PLAYER_BULLET_TIMER] <= 0.1f) { player->data[PLAYER_BULLET_TIMER] = 25.0; - newBullet(player, player->data[PLAYER_X] + player->data[PLAYER_DIRX] * 10, + newBullet(player, player->data[PLAYER_X] + player->data[PLAYER_DIRX] * 15, player->data[PLAYER_Y], - player->data[PLAYER_Z] + player->data[PLAYER_DIRZ] * 10, + player->data[PLAYER_Z] + player->data[PLAYER_DIRZ] * 15, player->data[PLAYER_ANGLE]); } if(left) - player->data[PLAYER_ANGLE] -= 9.0 * dtime; + player->data[PLAYER_ANGLE] += 9.0 * dtime; if(right) - player->data[PLAYER_ANGLE] += 9.0 * dtime; + player->data[PLAYER_ANGLE] -= 9.0 * dtime; if(up) { player->data[PLAYER_MOVEX] = 7.5 * @@ -132,9 +132,9 @@ void playerTick(game_obj* player) } if(down) { - player->data[PLAYER_MOVEX] = -7 * + player->data[PLAYER_MOVEX] = -7.5 * player->data[PLAYER_DIRX] * dtime; - player->data[PLAYER_MOVEZ] = -7 * + player->data[PLAYER_MOVEZ] = -7.5 * player->data[PLAYER_DIRZ] * dtime; } diff --git a/string-read.c b/string-read.c index f0a1bb5..9922a2c 100644 --- a/string-read.c +++ b/string-read.c @@ -1,5 +1,7 @@ /* read tokens from text data stored in ROM */ +#include + char str[1024]; int i; float f;