Fix a very nasty bug
This commit is contained in:
parent
abd68ce0ae
commit
dae47de5f9
4 changed files with 24 additions and 18 deletions
11
TODO.txt
11
TODO.txt
|
@ -38,10 +38,6 @@ fuck issue trackers :D
|
||||||
|
|
||||||
=========== BUGS =================
|
=========== BUGS =================
|
||||||
|
|
||||||
- on arduinos for some reason straight triangles (floor, walls, ...) on map
|
|
||||||
don't fucking display, they seem to not be added at all, but maybe it's
|
|
||||||
something with the "instability" due to low memory... HOWEVER on ringo (enough
|
|
||||||
mem) it does the same thing, is some kinda shitbug
|
|
||||||
- replay loading BUG! somehow map2 replay was saves with hash 05ef0ab1 instead
|
- replay loading BUG! somehow map2 replay was saves with hash 05ef0ab1 instead
|
||||||
of correct 3c5ba5dd once, WTF, check where hash gets modified
|
of correct 3c5ba5dd once, WTF, check where hash gets modified
|
||||||
|
|
||||||
|
@ -84,6 +80,13 @@ fuck issue trackers :D
|
||||||
theory they should (enough block space to load): try to set the exact same
|
theory they should (enough block space to load): try to set the exact same
|
||||||
settings on PC and see if the maps load or what. IT'S BCS BUILDING THE MAP
|
settings on PC and see if the maps load or what. IT'S BCS BUILDING THE MAP
|
||||||
TEMPORARILY REQUIRES MORE BLOCKS
|
TEMPORARILY REQUIRES MORE BLOCKS
|
||||||
|
- on arduinos for some reason straight triangles (floor, walls, ...) on map
|
||||||
|
don't fucking display, they seem to not be added at all, but maybe it's
|
||||||
|
something with the "instability" due to low memory... HOWEVER on ringo (enough
|
||||||
|
mem) it does the same thing, is some kinda shitbug; LOOKS LIKE CULLING MOST
|
||||||
|
LIKELY; it's condition in renderer:824, most likely either a bug in
|
||||||
|
LooksConvex or CoversTri; lmao, had to change char to int in triangle winding,
|
||||||
|
char signedness is unspecified :D
|
||||||
- should drifting make a sound? NO NEED
|
- should drifting make a sound? NO NEED
|
||||||
- menu: key repeat?
|
- menu: key repeat?
|
||||||
- replay validation? maybe yes?
|
- replay validation? maybe yes?
|
||||||
|
|
|
@ -14,8 +14,8 @@
|
||||||
#define LCR_SETTING_MUSIC 0
|
#define LCR_SETTING_MUSIC 0
|
||||||
#define LCR_SETTING_GHOST_MAX_SAMPLES 0
|
#define LCR_SETTING_GHOST_MAX_SAMPLES 0
|
||||||
#define LCR_SETTING_MAP_MAX_BLOCKS 512
|
#define LCR_SETTING_MAP_MAX_BLOCKS 512
|
||||||
#define LCR_SETTING_MAX_MAP_VERTICES 800
|
#define LCR_SETTING_MAX_MAP_VERTICES 1024
|
||||||
#define LCR_SETTING_MAX_MAP_TRIANGLES 900
|
#define LCR_SETTING_MAX_MAP_TRIANGLES 1500
|
||||||
#define LCR_SETTING_REPLAY_MAX_SIZE 0
|
#define LCR_SETTING_REPLAY_MAX_SIZE 0
|
||||||
#define LCR_SETTING_CAR_SHADOW 0
|
#define LCR_SETTING_CAR_SHADOW 0
|
||||||
#define LCR_SETTING_PARTICLES 0
|
#define LCR_SETTING_PARTICLES 0
|
||||||
|
@ -23,9 +23,10 @@
|
||||||
#define LCR_SETTING_LOD_DISTANCE 100
|
#define LCR_SETTING_LOD_DISTANCE 100
|
||||||
#define LCR_SETTING_CAR_ANIMATION_SUBDIVIDE 0
|
#define LCR_SETTING_CAR_ANIMATION_SUBDIVIDE 0
|
||||||
#define LCR_SETTING_FPS 25
|
#define LCR_SETTING_FPS 25
|
||||||
#define LCR_SETTING_TEXTURE_SUBSAMPLE 8
|
#define LCR_SETTING_TEXTURE_SUBSAMPLE 4
|
||||||
#define LCR_SETTING_ENABLE_DATA_FILE 0
|
#define LCR_SETTING_ENABLE_DATA_FILE 0
|
||||||
#define LCR_SETTING_ONLY_SMALL_MAPS 1
|
#define LCR_SETTING_ONLY_SMALL_MAPS 1
|
||||||
|
#define S3L_PERSPECTIVE_CORRECTION 0
|
||||||
|
|
||||||
#include "game.h"
|
#include "game.h"
|
||||||
|
|
||||||
|
@ -48,12 +49,12 @@ uint8_t LCR_keyPressed(uint8_t key)
|
||||||
{
|
{
|
||||||
#define b(button) (mp.buttons.timeHeld(button) > 0)
|
#define b(button) (mp.buttons.timeHeld(button) > 0)
|
||||||
|
|
||||||
case LCR_KEY_UP: return arrows & 0x04; break;
|
case LCR_KEY_UP: return (arrows & 0x04) | b(BTN_2); break;
|
||||||
case LCR_KEY_DOWN: return arrows & 0x08; break;
|
case LCR_KEY_DOWN: return (arrows & 0x08) | b(BTN_8) | b(BTN_5); break;
|
||||||
case LCR_KEY_RIGHT: return arrows & 0x01; break;
|
case LCR_KEY_RIGHT: return (arrows & 0x01) | b(BTN_6); break;
|
||||||
case LCR_KEY_LEFT: return arrows & 0x02; break;
|
case LCR_KEY_LEFT: return (arrows & 0x02) | b(BTN_4); break;
|
||||||
case LCR_KEY_A: return b(BTN_A); break;
|
case LCR_KEY_A: return b(BTN_A) | b(BTN_HASHTAG); break;
|
||||||
case LCR_KEY_B: return b(BTN_B); break;
|
case LCR_KEY_B: return b(BTN_B) | b(BTN_ASTERISK); break;
|
||||||
default: return 0; break;
|
default: return 0; break;
|
||||||
|
|
||||||
#undef b
|
#undef b
|
||||||
|
|
|
@ -112,7 +112,8 @@ int _LCR_strCmp(const char *s1, const char *s2)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
char _LCR_triangleWinding(int x0, int y0, int x1, int y1, int x2, int y2)
|
int _LCR_triangleWinding(int_least32_t x0, int_least32_t y0, int_least32_t x1,
|
||||||
|
int_least32_t y1, int_least32_t x2, int_least32_t y2)
|
||||||
{
|
{
|
||||||
x0 = (y1 - y0) * (x2 - x1) - (x1 - x0) * (y2 - y1);
|
x0 = (y1 - y0) * (x2 - x1) - (x1 - x0) * (y2 - y1);
|
||||||
return x0 != 0 ? (x0 > 0 ? 1 : -1) : 0;
|
return x0 != 0 ? (x0 > 0 ? 1 : -1) : 0;
|
||||||
|
|
|
@ -297,7 +297,7 @@ int _LCR_rendererQuadLooksConvex(S3L_Unit quad[8])
|
||||||
r = (3 * r) / 32;
|
r = (3 * r) / 32;
|
||||||
|
|
||||||
for (int i = 0; i < 8; i += 2)
|
for (int i = 0; i < 8; i += 2)
|
||||||
if (S3L_abs(cx - quad[i]) <= r && S3L_abs(cy - quad[i + 1]) <= r)
|
if ((S3L_abs(cx - quad[i]) <= r) && (S3L_abs(cy - quad[i + 1]) <= r))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -688,7 +688,7 @@ int _LCR_rendererQuadCoversTri(const S3L_Unit quad[8], const S3L_Unit tri[6])
|
||||||
|
|
||||||
for (int k = 0; k < 3; ++k) // for each subtriangle side
|
for (int k = 0; k < 3; ++k) // for each subtriangle side
|
||||||
{
|
{
|
||||||
char w =
|
int w =
|
||||||
_LCR_triangleWinding(
|
_LCR_triangleWinding(
|
||||||
quad[(2 * (j + (k + 1) % 3)) % 8],
|
quad[(2 * (j + (k + 1) % 3)) % 8],
|
||||||
quad[(2 * (j + ((k + 1) % 3))) % 8 + 1],
|
quad[(2 * (j + ((k + 1) % 3))) % 8 + 1],
|
||||||
|
@ -924,8 +924,8 @@ void _LCR_cullHiddenMapTris(void)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (int j = 0; j < 3; ++j)
|
for (int j = 0; j < 3; ++j)
|
||||||
LCR_renderer.mapVerts[3 * i + j] =
|
LCR_renderer.mapVerts[3 * i + j] = LCR_renderer.mapVerts[
|
||||||
LCR_renderer.mapVerts[(LCR_renderer.mapModel.vertexCount - 1) * 3 + j];
|
(LCR_renderer.mapModel.vertexCount - 1) * 3 + j];
|
||||||
|
|
||||||
for (int j = 0; j < LCR_renderer.mapModel.triangleCount * 3; ++j)
|
for (int j = 0; j < LCR_renderer.mapModel.triangleCount * 3; ++j)
|
||||||
if (LCR_renderer.mapTris[j] == LCR_renderer.mapModel.vertexCount - 1)
|
if (LCR_renderer.mapTris[j] == LCR_renderer.mapModel.vertexCount - 1)
|
||||||
|
@ -1037,6 +1037,7 @@ uint8_t _LCR_buildMapModel(void)
|
||||||
blockShapeBytes,&blockShapeByteCount);
|
blockShapeBytes,&blockShapeByteCount);
|
||||||
|
|
||||||
// When nearing limit, cull (can't be inside the loop sadly, trust me).
|
// When nearing limit, cull (can't be inside the loop sadly, trust me).
|
||||||
|
|
||||||
if (
|
if (
|
||||||
LCR_renderer.mapModel.vertexCount >= LCR_SETTING_MAX_MAP_VERTICES - 16 ||
|
LCR_renderer.mapModel.vertexCount >= LCR_SETTING_MAX_MAP_VERTICES - 16 ||
|
||||||
LCR_renderer.mapModel.triangleCount >= LCR_SETTING_MAX_MAP_TRIANGLES - 16)
|
LCR_renderer.mapModel.triangleCount >= LCR_SETTING_MAX_MAP_TRIANGLES - 16)
|
||||||
|
|
Loading…
Reference in a new issue