From: John Tsiombikas Date: Sat, 1 Oct 2022 22:51:14 +0000 (+0300) Subject: foo X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=gbajam22;a=commitdiff_plain;h=21d9c58231cf7e1bdd95574e579c9c99a4cd1e9c foo --- diff --git a/src/gamescr.c b/src/gamescr.c index 290873d..6449914 100644 --- a/src/gamescr.c +++ b/src/gamescr.c @@ -113,6 +113,7 @@ static void draw(void) struct cell *cell; xgl_load_identity(); + xgl_translate(0, 0, 0x100000); xgl_rotate_x(player.phi); xgl_rotate_y(player.theta); xgl_translate(player.x, 0, player.y); diff --git a/src/level.c b/src/level.c index d174ba6..b62c737 100644 --- a/src/level.c +++ b/src/level.c @@ -2,6 +2,7 @@ #include "debug.h" #include "level.h" #include "player.h" +#include "xgl.h" struct level *init_level(const char *descstr) { @@ -80,29 +81,37 @@ void free_level(struct level *lvl) struct {int dx, dy;} visoffs[8][32] = { /* dir 0 */ - {{-2,-4}, {2,-4}, {-1,-4}, {1,-4}, {0,-4}, {-1,-3}, {1,-3}, {0,-3}, {-1,-2}, - {1,-2}, {0,-2}, {0,-1}, {0,0}}, + {{-4,-4}, {4,-4}, {-3,-4}, {3,-4}, {-2,-4}, {2,-4}, {-3,-3}, {3,-3}, {-1,-4}, + {1,-4}, {0,-4}, {-2,-3}, {2,-3}, {-1,-3}, {1,-3}, {0,-3}, {-2,-2}, {2,-2}, + {-1,-2}, {1,-2}, {0,-2}, {-1,-1}, {1,-1}, {0,-1}, {0,0}}, /* dir 1 */ - {{4,-4}, {3,-4}, {4,-3}, {2,-4}, {4,-2}, {3,-3}, {2,-3}, {3,-2}, {1,-3}, - {3,-1}, {2,-2}, {1,-2}, {2,-1}, {1,-1}, {0,0}}, + {{4,-4}, {3,-4}, {4,-3}, {2,-4}, {4,-2}, {3,-3}, {1,-4}, {4,-1}, {0,-4}, + {4,0}, {2,-3}, {3,-2}, {1,-3}, {3,-1}, {0,-3}, {3,0}, {2,-2}, {1,-2}, + {2,-1}, {0,-2}, {2,0}, {1,-1}, {0,-1}, {1,0}, {0,0}}, /* dir 2 */ - {{4,-2}, {4,2}, {4,-1}, {4,1}, {4,0}, {3,-1}, {3,1}, {3,0}, {2,-1}, {2,1}, - {2,0}, {1,0}, {0,0}}, + {{4,-4}, {4,4}, {4,-3}, {4,3}, {4,-2}, {4,2}, {3,-3}, {3,3}, {4,-1}, {4,1}, + {4,0}, {3,-2}, {3,2}, {3,-1}, {3,1}, {3,0}, {2,-2}, {2,2}, {2,-1}, {2,1}, + {2,0}, {1,-1}, {1,1}, {1,0}, {0,0}}, /* dir 3 */ - {{4,4}, {4,3}, {3,4}, {4,2}, {2,4}, {3,3}, {3,2}, {2,3}, {3,1}, {1,3}, - {2,2}, {2,1}, {1,2}, {1,1}, {0,0}}, + {{4,4}, {4,3}, {3,4}, {4,2}, {2,4}, {3,3}, {4,1}, {1,4}, {4,0}, {0,4}, + {3,2}, {2,3}, {3,1}, {1,3}, {3,0}, {0,3}, {2,2}, {2,1}, {1,2}, {2,0}, + {0,2}, {1,1}, {1,0}, {0,1}, {0,0}}, /* dir 4 */ - {{-2,4}, {2,4}, {-1,4}, {1,4}, {0,4}, {-1,3}, {1,3}, {0,3}, {-1,2}, {1,2}, - {0,2}, {0,1}, {0,0}}, + {{-4,4}, {4,4}, {-3,4}, {3,4}, {-2,4}, {2,4}, {-3,3}, {3,3}, {-1,4}, {1,4}, + {0,4}, {-2,3}, {2,3}, {-1,3}, {1,3}, {0,3}, {-2,2}, {2,2}, {-1,2}, {1,2}, + {0,2}, {-1,1}, {1,1}, {0,1}, {0,0}}, /* dir 5 */ - {{-4,4}, {-4,3}, {-3,4}, {-4,2}, {-2,4}, {-3,3}, {-3,2}, {-2,3}, {-3,1}, - {-1,3}, {-2,2}, {-2,1}, {-1,2}, {-1,1}, {0,0}}, + {{-4,4}, {-4,3}, {-3,4}, {-4,2}, {-2,4}, {-3,3}, {-4,1}, {-1,4}, {-4,0}, + {0,4}, {-3,2}, {-2,3}, {-3,1}, {-1,3}, {-3,0}, {0,3}, {-2,2}, {-2,1}, + {-1,2}, {-2,0}, {0,2}, {-1,1}, {-1,0}, {0,1}, {0,0}}, /* dir 6 */ - {{-4,-2}, {-4,2}, {-4,-1}, {-4,1}, {-4,0}, {-3,-1}, {-3,1}, {-3,0}, {-2,-1}, - {-2,1}, {-2,0}, {-1,0}, {0,0}}, + {{-4,-4}, {-4,4}, {-4,-3}, {-4,3}, {-4,-2}, {-4,2}, {-3,-3}, {-3,3}, {-4,-1}, + {-4,1}, {-4,0}, {-3,-2}, {-3,2}, {-3,-1}, {-3,1}, {-3,0}, {-2,-2}, {-2,2}, + {-2,-1}, {-2,1}, {-2,0}, {-1,-1}, {-1,1}, {-1,0}, {0,0}}, /* dir 7 */ - {{-4,-4}, {-3,-4}, {-4,-3}, {-2,-4}, {-4,-2}, {-3,-3}, {-2,-3}, {-3,-2}, - {-1,-3}, {-3,-1}, {-2,-2}, {-1,-2}, {-2,-1}, {-1,-1}, {0,0}} + {{-4,-4}, {-3,-4}, {-4,-3}, {-2,-4}, {-4,-2}, {-3,-3}, {-1,-4}, {-4,-1}, + {0,-4}, {-4,0}, {-2,-3}, {-3,-2}, {-1,-3}, {-3,-1}, {0,-3}, {-3,0}, {-2,-2}, + {-1,-2}, {-2,-1}, {0,-2}, {-2,0}, {-1,-1}, {0,-1}, {-1,0}, {0,0}} }; void upd_vis(struct level *lvl, struct player *p) @@ -110,12 +119,20 @@ void upd_vis(struct level *lvl, struct player *p) int dir, idx; int x, y; struct cell *cptr; + int32_t theta; pos_to_cell(lvl, p->x, p->y, &p->cx, &p->cy); lvl->numvis = 0; idx = -1; - dir = 0; /* TODO use p->theta */ + theta = p->theta + X_2PI / 16; + if(theta >= X_2PI) theta -= X_2PI; + dir = 7 - (theta << 3) / X_2PI; /* p->theta is always [0, 2pi) */ + dbg_drawstr(0, 0, "dir: %d", dir); + if(dir < 0 || dir >= 8) { + panic(get_pc(), "dir: %d\ntheta: %d.%d (%d)\n", dir, p->theta >> 16, + p->theta & 0xffff, p->theta); + } do { idx++; x = p->cx + visoffs[dir][idx].dx; diff --git a/src/player.c b/src/player.c index d025799..ebaef3e 100644 --- a/src/player.c +++ b/src/player.c @@ -14,11 +14,11 @@ void player_input(struct player *p, uint16_t bnstate) } if(bnstate & KEY_LEFT) { p->theta += 0x800; - if(p->theta > X_2PI) p->theta -= X_2PI; + if(p->theta >= X_2PI) p->theta -= X_2PI; } if(bnstate & KEY_RIGHT) { p->theta -= 0x800; - if(p->theta < X_2PI) p->theta += X_2PI; + if(p->theta < 0) p->theta += X_2PI; } if(bnstate & KEY_A) { p->y += 0x2000; diff --git a/tools/vistab.c b/tools/vistab.c index 6341238..cd5d080 100644 --- a/tools/vistab.c +++ b/tools/vistab.c @@ -4,7 +4,7 @@ #define NUM_DIRS 8 #define MAX_DIST 4 -#define FOV 60 +#define FOV 92 struct cell { int dx, dy;