Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
44f9b92
Bugfix
pouar Jun 19, 2020
8543ee8
fix GL_LEGACY
fgsfdsfgs Jul 27, 2020
488892e
Update exoquant.c
MartinPham Aug 5, 2020
85d0108
Update mario_actions_airborne.c
ineedhelpbad Aug 13, 2020
91b038d
BUGFIX: Camera invert #373
ineedhelpbad Aug 13, 2020
3479803
add barebones SDL1.2 backends
fgsfdsfgs Aug 15, 2020
3407f2d
Merge pull request #400 from ineedhelpbad/patch-1
fgsfdsfgs Aug 15, 2020
ca3f83c
Merge pull request #399 from ineedhelpbad/nightly
fgsfdsfgs Aug 15, 2020
a8cda7d
fix controller_sdl2
fgsfdsfgs Aug 15, 2020
417d59e
Merge pull request #395 from MartinPham/patch-4
fgsfdsfgs Aug 15, 2020
dfd1a08
add --poolsize arg for modifying main pool size
fgsfdsfgs Aug 28, 2020
840eadb
change GL_LEGACY to only use GL1.1 (1.2?) features
fgsfdsfgs Aug 28, 2020
468887a
Check for zero rumble setting before allowing rumble
theofficialgman Aug 29, 2020
da20f79
GL_LEGACY: this should've been GL_REPLACE all along
fgsfdsfgs Aug 29, 2020
68a141e
Merge pull request #350 from pouar/fix-snufit
fgsfdsfgs Aug 30, 2020
b897f30
Merge pull request #411 from theofficialgman/master
fgsfdsfgs Aug 30, 2020
420d82c
fix spaces
fgsfdsfgs Aug 30, 2020
4c1809a
Merge remote-tracking branch 'origin/master' into nightly
fgsfdsfgs Aug 30, 2020
dd0e86d
add rudimentary SDL1 controller backend
fgsfdsfgs Aug 30, 2020
0414287
Fix Yoshi dialog error that has bothered me for 24 years.
russellwpatterson Sep 4, 2020
544f2e7
Merge pull request #414 from rwpcpe/master
fgsfdsfgs Sep 4, 2020
fb22013
add --syncframes to override vblank count detection
fgsfdsfgs Sep 7, 2020
921ffd3
option menu changes
AloXado320 Sep 7, 2020
dcc16ea
fix 60fps patch (thanks SpacingBat3)
fgsfdsfgs Sep 7, 2020
f722b31
undo naming for now
AloXado320 Sep 8, 2020
857b7a6
BUGFIX: Cannon open not saving
ineedhelpbad Sep 10, 2020
75bed24
Improve bettercam's collision detection and avoidance
Sep 20, 2020
47fca44
Increase bettercam's precision
Sep 23, 2020
7af6e30
Make bettercam/puppycam respect NO_CAM_COLLISION
Sep 26, 2020
12e088f
Merge pull request #431 from djoslin0/to-upstream
fgsfdsfgs Sep 29, 2020
5b66d3f
Merge pull request #421 from ineedhelpbad/Text-save-cannon-fix
fgsfdsfgs Sep 29, 2020
5aea6db
Merge pull request #419 from AloXado320/optchanges
fgsfdsfgs Sep 29, 2020
b8b6b36
give a bit more memory to the web version by default
fgsfdsfgs Oct 1, 2020
5c21494
fix crash with dynamic surfaces?
fgsfdsfgs Oct 1, 2020
18dc3e2
Bugfix: Discord Integration crashes
s4Ys369 Oct 3, 2020
c1ed30a
Revert "fix crash with dynamic surfaces?"
fgsfdsfgs Oct 3, 2020
3908ff3
Prevent crash in vanish cap switch course
Oct 11, 2020
2cf9964
Merge pull request #439 from djoslin0/to-upstream
fgsfdsfgs Oct 11, 2020
68e6e60
new timing scheme which should eliminate speedups
fgsfdsfgs Nov 2, 2020
191db46
fix 60fps patch
fgsfdsfgs Nov 2, 2020
70b2814
actually use the sys_sleep function
fgsfdsfgs Nov 2, 2020
84a3e6e
make options menu arrows static
fgsfdsfgs Nov 2, 2020
e2b2309
Added draw distance settings
Mode8fx Nov 26, 2020
38d6c1f
Fixed fish bug
Mode8fx Nov 26, 2020
b71d7d9
Fixed previous bug fix
Mode8fx Nov 26, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 27 additions & 13 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -58,11 +58,11 @@ NO_LDIV ?= 0

# Renderers: GL, GL_LEGACY, D3D11, D3D12
RENDER_API ?= GL
# Window managers: SDL2, DXGI (forced if D3D11 or D3D12 in RENDER_API)
# Window managers: SDL1, SDL2, DXGI (forced if D3D11 or D3D12 in RENDER_API)
WINDOW_API ?= SDL2
# Audio backends: SDL2
# Audio backends: SDL1, SDL2
AUDIO_API ?= SDL2
# Controller backends (can have multiple, space separated): SDL2
# Controller backends (can have multiple, space separated): SDL2, SDL1
CONTROLLER_API ?= SDL2

# Misc settings for EXTERNAL_DATA
Expand Down Expand Up @@ -481,7 +481,9 @@ SDLCONFIG := $(CROSS)sdl2-config
BACKEND_CFLAGS := -DRAPI_$(RENDER_API)=1 -DWAPI_$(WINDOW_API)=1 -DAAPI_$(AUDIO_API)=1
# can have multiple controller APIs
BACKEND_CFLAGS += $(foreach capi,$(CONTROLLER_API),-DCAPI_$(capi)=1)
BACKEND_LDFLAGS :=
BACKEND_LDFLAG0S :=

SDL1_USED := 0
SDL2_USED := 0

# for now, it's either SDL+GL or DXGI+DirectX, so choose based on WAPI
Expand All @@ -492,7 +494,7 @@ ifeq ($(WINDOW_API),DXGI)
endif
BACKEND_LDFLAGS += -ld3dcompiler -ldxgi -ldxguid
BACKEND_LDFLAGS += -lsetupapi -ldinput8 -luser32 -lgdi32 -limm32 -lole32 -loleaut32 -lshell32 -lwinmm -lversion -luuid -static
else ifeq ($(WINDOW_API),SDL2)
else ifeq ($(findstring SDL,$(WINDOW_API)),SDL)
ifeq ($(WINDOWS_BUILD),1)
BACKEND_LDFLAGS += -lglew32 -lglu32 -lopengl32
else ifeq ($(TARGET_RPI),1)
Expand All @@ -502,20 +504,32 @@ else ifeq ($(WINDOW_API),SDL2)
else
BACKEND_LDFLAGS += -lGL
endif
SDL_USED := 2
endif

ifeq ($(AUDIO_API),SDL2)
SDL_USED := 2
ifneq (,$(findstring SDL2,$(AUDIO_API)$(WINDOW_API)$(CONTROLLER_API)))
SDL2_USED := 1
endif

ifneq (,$(findstring SDL1,$(AUDIO_API)$(WINDOW_API)$(CONTROLLER_API)))
SDL1_USED := 1
endif

ifneq (,$(findstring SDL,$(CONTROLLER_API)))
SDL_USED := 2
ifeq ($(SDL1_USED)$(SDL2_USED),11)
$(error Cannot link both SDL1 and SDL2 at the same time)
endif

# SDL can be used by different systems, so we consolidate all of that shit into this
ifeq ($(SDL_USED),2)
BACKEND_CFLAGS += -DHAVE_SDL2=1 `$(SDLCONFIG) --cflags`

ifeq ($(SDL2_USED),1)
SDLCONFIG := $(CROSS)sdl2-config
BACKEND_CFLAGS += -DHAVE_SDL2=1
else ifeq ($(SDL1_USED),1)
SDLCONFIG := $(CROSS)sdl-config
BACKEND_CFLAGS += -DHAVE_SDL1=1
endif

ifneq ($(SDL1_USED)$(SDL2_USED),00)
BACKEND_CFLAGS += `$(SDLCONFIG) --cflags`
ifeq ($(WINDOWS_BUILD),1)
BACKEND_LDFLAGS += `$(SDLCONFIG) --static-libs` -lsetupapi -luser32 -limm32 -lole32 -loleaut32 -lshell32 -lwinmm -lversion
else
Expand Down Expand Up @@ -606,7 +620,7 @@ endif
ASFLAGS := -I include -I $(BUILD_DIR) $(VERSION_ASFLAGS)

ifeq ($(TARGET_WEB),1)
LDFLAGS := -lm -lGL -lSDL2 -no-pie -s TOTAL_MEMORY=20MB -g4 --source-map-base http://localhost:8080/ -s "EXTRA_EXPORTED_RUNTIME_METHODS=['callMain']"
LDFLAGS := -lm -lGL -lSDL2 -no-pie -s TOTAL_MEMORY=64MB -g4 --source-map-base http://localhost:8080/ -s "EXTRA_EXPORTED_RUNTIME_METHODS=['callMain']"

else ifeq ($(WINDOWS_BUILD),1)
LDFLAGS := $(BITS) -march=$(TARGET_ARCH) -Llib -lpthread $(BACKEND_LDFLAGS) -static
Expand Down
28 changes: 14 additions & 14 deletions enhancements/60fps_ex.patch
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ index 802d97a..1b0d677 100644

/** A node that allows an object to specify a different culling radius than the
diff --git a/src/engine/surface_collision.c b/src/engine/surface_collision.c
index 5b6775f..2c11e25 100644
index 1da535b..49a5c03 100644
--- a/src/engine/surface_collision.c
+++ b/src/engine/surface_collision.c
@@ -8,6 +8,7 @@
Expand Down Expand Up @@ -1890,23 +1890,14 @@ index 0467495..fa4eb33 100644

using namespace Microsoft::WRL; // For ComPtr
diff --git a/src/pc/gfx/gfx_sdl2.c b/src/pc/gfx/gfx_sdl2.c
index 25c9f06..a6461ae 100644
index 0108ca9..28d56ac 100644
--- a/src/pc/gfx/gfx_sdl2.c
+++ b/src/pc/gfx/gfx_sdl2.c
@@ -53,7 +53,7 @@ static void (*kb_all_keys_up)(void) = NULL;
// whether to use timer for frame control
static bool use_timer = true;
// time between consequtive game frames
-static const int frame_time = 1000 / FRAMERATE;
+static const int frame_time = 1000 / (2 * FRAMERATE);

const SDL_Scancode windows_scancode_table[] = {
/* 0 1 2 3 4 5 6 7 */
@@ -142,7 +142,11 @@ static inline void gfx_sdl_set_vsync(const bool enabled) {
@@ -150,7 +150,11 @@ static inline void gfx_sdl_set_vsync(const bool enabled) {
if (enabled) {
// try to detect refresh rate
SDL_GL_SetSwapInterval(1);
- const int vblanks = test_vsync();
- const int vblanks = gCLIOpts.SyncFrames ? (int)gCLIOpts.SyncFrames : test_vsync();
+ int vblanks = test_vsync();
+ if (vblanks & 1)
+ vblanks = 0; // not divisible by 60, fuck that
Expand All @@ -1915,8 +1906,17 @@ index 25c9f06..a6461ae 100644
if (vblanks) {
printf("determined swap interval: %d\n", vblanks);
SDL_GL_SetSwapInterval(vblanks);
@@ -233,7 +237,7 @@ static void gfx_sdl_init(const char *window_title) {
gfx_sdl_set_fullscreen();

perf_freq = SDL_GetPerformanceFrequency();
- frame_time = perf_freq / FRAMERATE;
+ frame_time = perf_freq / (2 * FRAMERATE);

for (size_t i = 0; i < sizeof(windows_scancode_table) / sizeof(SDL_Scancode); i++) {
inverted_scancode_table[windows_scancode_table[i]] = i;
diff --git a/src/pc/pc_main.c b/src/pc/pc_main.c
index ed6ee74..63679ad 100644
index 923e7ea..4fe6161 100644
--- a/src/pc/pc_main.c
+++ b/src/pc/pc_main.c
@@ -83,6 +83,25 @@ void send_display_list(struct SPTask *spTask) {
Expand Down
5 changes: 4 additions & 1 deletion include/text_options_strings.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@

// Markers

#define TEXT_OPT_HIGHLIGHT _("O")
#define TEXT_OPT_L_HIGHLIGHT _(">")
#define TEXT_OPT_R_HIGHLIGHT _("<")
#define TEXT_OPT_UNBOUND _("NONE")

// Language specific strings
Expand Down Expand Up @@ -55,6 +56,7 @@
#define TEXT_OPT_AUTO _("AUTO")
#define TEXT_OPT_HUD _("HUD")
#define TEXT_OPT_THREEPT _("THREE POINT")
#define TEXT_OPT_DRAWDIST _("DRAW DISTANCE")
#define TEXT_OPT_APPLY _("APPLY")
#define TEXT_OPT_RESETWND _("RESET WINDOW")

Expand Down Expand Up @@ -119,6 +121,7 @@
#define TEXT_OPT_AUTO _("Auto")
#define TEXT_OPT_HUD _("HUD")
#define TEXT_OPT_THREEPT _("Three-point")
#define TEXT_OPT_DRAWDIST _("Draw Distance")
#define TEXT_OPT_APPLY _("Apply")
#define TEXT_OPT_RESETWND _("Reset Window")

Expand Down
5 changes: 4 additions & 1 deletion src/engine/behavior_script.c
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@
#include "game/object_list_processor.h"
#include "graph_node.h"
#include "surface_collision.h"
#ifndef NODRAWINGDISTANCE
#include "pc/configfile.h"
#endif

// Macros for retrieving arguments from behavior scripts.
#define BHV_CMD_GET_1ST_U8(index) (u8)((gCurBhvCommand[index] >> 24) & 0xFF) // unused
Expand Down Expand Up @@ -999,7 +1002,7 @@ void cur_obj_update(void) {
if (!(objFlags & OBJ_FLAG_ACTIVE_FROM_AFAR)) {
// If the object has a render distance, check if it should be shown.
#ifndef NODRAWINGDISTANCE
if (distanceFromMario > gCurrentObject->oDrawingDistance) {
if (distanceFromMario > gCurrentObject->oDrawingDistance * configDrawDistance / 100.0f) {
// Out of render distance, hide the object.
gCurrentObject->header.gfx.node.flags &= ~GRAPH_RENDER_ACTIVE;
gCurrentObject->activeFlags |= ACTIVE_FLAG_FAR_AWAY;
Expand Down
17 changes: 12 additions & 5 deletions src/engine/surface_collision.c
Original file line number Diff line number Diff line change
Expand Up @@ -851,7 +851,11 @@ void find_surface_on_ray_list(struct SurfaceNode *list, Vec3f orig, Vec3f dir, f
// Reject surface if out of vertical bounds
if (list->surface->lowerY > top || list->surface->upperY < bottom)
continue;


// Reject no-cam collision surfaces
if (gCheckingSurfaceCollisionsForCamera && (list->surface->flags & SURFACE_FLAG_NO_CAM_COLLISION))
continue;

// Check intersection between the ray and this surface
if ((hit = ray_surface_intersect(orig, dir, dir_length, list->surface, chk_hit_pos, &length)) != 0)
{
Expand Down Expand Up @@ -919,13 +923,16 @@ void find_surface_on_ray(Vec3f orig, Vec3f dir, struct Surface **hit_surface, Ve
find_surface_on_ray_cell(cellX, cellZ, orig, normalized_dir, dir_length, hit_surface, hit_pos, &max_length);
return;
}


// increase collision checking precision (normally 1)
f32 precision = gCheckingSurfaceCollisionsForCamera ? 3 : 1;

// Get cells we cross using DDA
if (absx(dir[0]) >= absx(dir[2]))
step = absx(dir[0]) / CELL_SIZE;
step = precision * absx(dir[0]) / CELL_SIZE;
else
step = absx(dir[2]) / CELL_SIZE;
step = precision * absx(dir[2]) / CELL_SIZE;

dx = dir[0] / step / CELL_SIZE;
dz = dir[2] / step / CELL_SIZE;

Expand Down
5 changes: 4 additions & 1 deletion src/engine/surface_load.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@
#include "game/mario.h"
#include "game/object_list_processor.h"
#include "surface_load.h"
#ifndef NODRAWINGDISTANCE
#include "pc/configfile.h"
#endif

s32 unused8038BE90;

Expand Down Expand Up @@ -786,7 +789,7 @@ void load_object_collision_model(void) {
}

#ifndef NODRAWINGDISTANCE
if (marioDist < gCurrentObject->oDrawingDistance) {
if (marioDist < gCurrentObject->oDrawingDistance * configDrawDistance / 100.0f) {
#endif
gCurrentObject->header.gfx.node.flags |= GRAPH_RENDER_ACTIVE;
#ifndef NODRAWINGDISTANCE
Expand Down
6 changes: 5 additions & 1 deletion src/game/behaviors/bub.inc.c
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
#ifndef NODRAWINGDISTANCE
#include "pc/configfile.h"
#endif

// bub.c.inc

// NOTE: These first set of functions spawn a school of bub depending on objF4's
Expand All @@ -9,7 +13,7 @@ void bub_spawner_act_0(void) {
s32 i;
s32 sp18 = o->oBirdChirpChirpUnkF4;
#ifndef NODRAWINGDISTANCE
if (o->oDistanceToMario < 1500.0f) {
if (o->oDistanceToMario < 15 * configDrawDistance) {
#endif
for (i = 0; i < sp18; i++)
spawn_object(o, MODEL_BUB, bhvBub);
Expand Down
8 changes: 6 additions & 2 deletions src/game/behaviors/chain_chomp.inc.c
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
#ifndef NODRAWINGDISTANCE
#include "pc/configfile.h"
#endif


/**
* Behavior for bhvChainChomp, bhvChainChompChainPart, bhvWoodenPost, and bhvChainChompGate.
Expand Down Expand Up @@ -54,7 +58,7 @@ static void chain_chomp_act_uninitialized(void) {
s32 i;

#ifndef NODRAWINGDISTANCE
if (o->oDistanceToMario < 3000.0f) {
if (o->oDistanceToMario < 30 * configDrawDistance) {
#endif
segments = mem_pool_alloc(gObjectMemoryPool, 5 * sizeof(struct ChainSegment));
if (segments != NULL) {
Expand Down Expand Up @@ -364,7 +368,7 @@ static void chain_chomp_act_move(void) {

// Unload chain if mario is far enough
#ifndef NODRAWINGDISTANCE
if (o->oChainChompReleaseStatus == CHAIN_CHOMP_NOT_RELEASED && o->oDistanceToMario > 4000.0f) {
if (o->oChainChompReleaseStatus == CHAIN_CHOMP_NOT_RELEASED && o->oDistanceToMario > 40 * configDrawDistance) {
o->oAction = CHAIN_CHOMP_ACT_UNLOAD_CHAIN;
o->oForwardVel = o->oVelY = 0.0f;
} else {
Expand Down
8 changes: 8 additions & 0 deletions src/game/behaviors/checkerboard_platform.inc.c
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,14 @@ struct Struct8032F754 D_8032F754[] = { { 145, { 0.7f, 1.5f, 0.7f }, 7.0f },
{ 235, { 1.2f, 2.0f, 1.2f }, 11.6f } };

void bhv_checkerboard_elevator_group_init(void) {
// Added to prevent a crash in the vanish cap stage
cur_obj_hide();
// Here's the theory: Since it is only valid for a few frames, I believe
// the model gets deallocated after removal. Since changing the camera
// precision makes the camera end up in a slightly different spot, it
// could be trying to render the object when `precision` is set to 3 but
// not to 1.

s32 sp3C;
s32 sp38;
s32 sp34;
Expand Down
8 changes: 6 additions & 2 deletions src/game/behaviors/cloud.inc.c
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
#ifndef NODRAWINGDISTANCE
#include "pc/configfile.h"
#endif


/**
* Behavior for bhvCloud and bhvCloudPart.
Expand Down Expand Up @@ -48,7 +52,7 @@ static void cloud_act_spawn_parts(void) {
*/
static void cloud_act_fwoosh_hidden(void) {
#ifndef NODRAWINGDISTANCE
if (o->oDistanceToMario < 2000.0f) {
if (o->oDistanceToMario < 20 * configDrawDistance) {
#endif
cur_obj_unhide();
o->oAction = CLOUD_ACT_SPAWN_PARTS;
Expand All @@ -63,7 +67,7 @@ static void cloud_act_fwoosh_hidden(void) {
*/
static void cloud_fwoosh_update(void) {
#ifndef NODRAWINGDISTANCE
if (o->oDistanceToMario > 2500.0f) {
if (o->oDistanceToMario > 25 * configDrawDistance) {
o->oAction = CLOUD_ACT_UNLOAD;
} else {
#endif
Expand Down
8 changes: 6 additions & 2 deletions src/game/behaviors/coin.inc.c
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
#ifndef NODRAWINGDISTANCE
#include "pc/configfile.h"
#endif

// coin.c.inc

struct ObjectHitbox sYellowCoinHitbox = {
Expand Down Expand Up @@ -185,7 +189,7 @@ void bhv_coin_formation_loop(void) {
switch (o->oAction) {
case 0:
#ifndef NODRAWINGDISTANCE
if (o->oDistanceToMario < 2000.0f) {
if (o->oDistanceToMario < 20 * configDrawDistance) {
#endif
for (bitIndex = 0; bitIndex < 8; bitIndex++) {
if (!(o->oCoinUnkF4 & (1 << bitIndex)))
Expand All @@ -198,7 +202,7 @@ void bhv_coin_formation_loop(void) {
break;
case 1:
#ifndef NODRAWINGDISTANCE
if (o->oDistanceToMario > 2100.0f)
if (o->oDistanceToMario > 21 * configDrawDistance)
o->oAction++;
#endif
break;
Expand Down
6 changes: 5 additions & 1 deletion src/game/behaviors/enemy_lakitu.inc.c
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
#ifndef NODRAWINGDISTANCE
#include "pc/configfile.h"
#endif


/**
* Behavior for bhvEnemyLakitu.
Expand Down Expand Up @@ -25,7 +29,7 @@ static struct ObjectHitbox sEnemyLakituHitbox = {
*/
static void enemy_lakitu_act_uninitialized(void) {
#ifndef NODRAWINGDISTANCE
if (o->oDistanceToMario < 2000.0f) {
if (o->oDistanceToMario < 20 * configDrawDistance) {
#endif
spawn_object_relative_with_scale(CLOUD_BP_LAKITU_CLOUD, 0, 0, 0, 2.0f, o, MODEL_MIST, bhvCloud);

Expand Down
8 changes: 6 additions & 2 deletions src/game/behaviors/fish.inc.c
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
#ifndef NODRAWINGDISTANCE
#include "pc/configfile.h"
#endif

/**
* @file fish.inc.c
* Implements behaviour and spawning for fish located in the Secret Aquarium and other levels.
Expand Down Expand Up @@ -43,7 +47,7 @@ void fish_act_spawn(void) {
* Fish moves at random with a max-range of 700.0f.
*/
#ifndef NODRAWINGDISTANCE
if (o->oDistanceToMario < minDistToMario || gCurrLevelNum == LEVEL_SA) {
if (o->oDistanceToMario < minDistToMario * configDrawDistance / 100 || gCurrLevelNum == LEVEL_SA) {
#endif
for (i = 0; i < schoolQuantity; i++) {
fishObject = spawn_object(o, model, bhvFish);
Expand All @@ -64,7 +68,7 @@ void fish_act_spawn(void) {
void fish_act_respawn(void) {
#ifndef NODRAWINGDISTANCE
if (gCurrLevelNum != LEVEL_SA) {
if (gMarioObject->oPosY - o->oPosY > 2000.0f) {
if (gMarioObject->oPosY - o->oPosY > 20 * configDrawDistance) {
o->oAction = FISH_ACT_RESPAWN;
}
}
Expand Down
Loading