mirror of
https://github.com/ZDoom/raze-gles.git
synced 2025-01-12 11:10:39 +00:00
- made the game interfaces classes instead of function pointer lists because that is far better at error catching.
- fixed: Blood's monster flag is a 'have_monsters', not 'nomonsters' flag. As a result none were spawned.
This commit is contained in:
parent
d7e7c516a0
commit
3c7151810f
12 changed files with 91 additions and 72 deletions
|
@ -1229,10 +1229,10 @@ static int32_t check_filename_casing(void)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int app_main()
|
int GameInterface::app_main()
|
||||||
{
|
{
|
||||||
memcpy(&gGameOptions, &gSingleGameOptions, sizeof(GAMEOPTIONS));
|
memcpy(&gGameOptions, &gSingleGameOptions, sizeof(GAMEOPTIONS));
|
||||||
gGameOptions.nMonsterSettings = userConfig.nomonsters;
|
gGameOptions.nMonsterSettings = !userConfig.nomonsters;
|
||||||
bQuickStart = userConfig.nologo;
|
bQuickStart = userConfig.nologo;
|
||||||
ParseOptions();
|
ParseOptions();
|
||||||
|
|
||||||
|
@ -2139,19 +2139,10 @@ void sndPlaySpecialMusicOrNothing(int nMusic)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extern void faketimerhandler();
|
|
||||||
extern int app_main();
|
|
||||||
bool validate_hud(int layout);
|
|
||||||
void set_hud_layout(int layout);
|
|
||||||
void set_hud_scale(int scale);
|
|
||||||
int32_t GetTime();
|
|
||||||
|
|
||||||
GameInterface Interface = {
|
::GameInterface* CreateInterface()
|
||||||
faketimerhandler,
|
{
|
||||||
app_main,
|
return new GameInterface;
|
||||||
validate_hud,
|
}
|
||||||
set_hud_layout,
|
|
||||||
set_hud_scale,
|
|
||||||
};
|
|
||||||
|
|
||||||
END_BLD_NS
|
END_BLD_NS
|
||||||
|
|
|
@ -83,4 +83,13 @@ bool fileExistsRFF(int id, const char* ext);
|
||||||
int sndTryPlaySpecialMusic(int nMusic);
|
int sndTryPlaySpecialMusic(int nMusic);
|
||||||
void sndPlaySpecialMusicOrNothing(int nMusic);
|
void sndPlaySpecialMusicOrNothing(int nMusic);
|
||||||
|
|
||||||
|
struct GameInterface : ::GameInterface
|
||||||
|
{
|
||||||
|
void faketimerhandler() override;
|
||||||
|
int app_main() override;
|
||||||
|
bool validate_hud(int) override;
|
||||||
|
void set_hud_layout(int size) override;
|
||||||
|
void set_hud_scale(int size) override;
|
||||||
|
};
|
||||||
|
|
||||||
END_BLD_NS
|
END_BLD_NS
|
||||||
|
|
|
@ -84,12 +84,12 @@ int32_t mouseyaxismode = -1;
|
||||||
// This is mainly here to account for the different implementation between Blood and the other games
|
// This is mainly here to account for the different implementation between Blood and the other games
|
||||||
// and to allow unified handling and the same value range in the CVAR code.
|
// and to allow unified handling and the same value range in the CVAR code.
|
||||||
// Unlike EDuke's version, NBlood's was actually fine, it just had a too small value range to be chosen as the unified version.
|
// Unlike EDuke's version, NBlood's was actually fine, it just had a too small value range to be chosen as the unified version.
|
||||||
bool validate_hud(int layout)
|
bool GameInterface::validate_hud(int layout)
|
||||||
{
|
{
|
||||||
return layout > 3 && layout != 8; // 8 is the status bar overlay which NBlood did not implement.
|
return layout > 3 && layout != 8; // 8 is the status bar overlay which NBlood did not implement.
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_hud_layout(int layout)
|
void GameInterface::set_hud_layout(int layout)
|
||||||
{
|
{
|
||||||
static const uint8_t screen_size_vals[] = { 7, 7, 7, 7, 6, 5, 4, 3, 3, 2, 1, 0 };
|
static const uint8_t screen_size_vals[] = { 7, 7, 7, 7, 6, 5, 4, 3, 3, 2, 1, 0 };
|
||||||
|
|
||||||
|
@ -99,7 +99,7 @@ void set_hud_layout(int layout)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_hud_scale(int scale)
|
void GameInterface::set_hud_scale(int scale)
|
||||||
{
|
{
|
||||||
// Not implemented, only needed as a placeholder. Maybe implement it after all? The hud is a bit large at its default size.
|
// Not implemented, only needed as a placeholder. Maybe implement it after all? The hud is a bit large at its default size.
|
||||||
}
|
}
|
||||||
|
|
|
@ -1392,6 +1392,11 @@ void faketimerhandler(void)
|
||||||
// enet_host_service(gNetMode == NETWORK_SERVER ? gNetENetServer : gNetENetClient, NULL, 0);
|
// enet_host_service(gNetMode == NETWORK_SERVER ? gNetENetServer : gNetENetClient, NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GameInterface::faketimerhandler()
|
||||||
|
{
|
||||||
|
::Blood::faketimerhandler();
|
||||||
|
}
|
||||||
|
|
||||||
void netPlayerQuit(int nPlayer)
|
void netPlayerQuit(int nPlayer)
|
||||||
{
|
{
|
||||||
char buffer[128];
|
char buffer[128];
|
||||||
|
|
|
@ -228,13 +228,15 @@ int32_t baselayer_init();
|
||||||
|
|
||||||
struct GameInterface
|
struct GameInterface
|
||||||
{
|
{
|
||||||
void (*faketimerhandler)();
|
virtual ~GameInterface() {}
|
||||||
int (*app_main)();
|
virtual void faketimerhandler() {} // This is a remnant of older versions, but Blood backend has not updated yet.
|
||||||
bool (*validate_hud)(int);
|
virtual int app_main() = 0;
|
||||||
void (*set_hud_layout)(int size);
|
virtual bool validate_hud(int) = 0;
|
||||||
void (*set_hud_scale)(int size);
|
virtual void set_hud_layout(int size) = 0;
|
||||||
|
virtual void set_hud_scale(int size) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern GameInterface* gi;
|
extern GameInterface* gi;
|
||||||
|
|
||||||
#endif // baselayer_h_
|
#endif // baselayer_h_
|
||||||
|
|
||||||
|
|
|
@ -301,46 +301,46 @@ void UserConfig::ProcessOptions()
|
||||||
|
|
||||||
namespace Duke
|
namespace Duke
|
||||||
{
|
{
|
||||||
extern GameInterface Interface;
|
::GameInterface* CreateInterface();
|
||||||
}
|
}
|
||||||
namespace Redneck
|
namespace Redneck
|
||||||
{
|
{
|
||||||
extern GameInterface Interface;
|
::GameInterface* CreateInterface();
|
||||||
}
|
}
|
||||||
namespace Blood
|
namespace Blood
|
||||||
{
|
{
|
||||||
extern GameInterface Interface;
|
::GameInterface* CreateInterface();
|
||||||
}
|
}
|
||||||
namespace ShadowWarrior
|
namespace ShadowWarrior
|
||||||
{
|
{
|
||||||
extern GameInterface Interface;
|
::GameInterface* CreateInterface();
|
||||||
}
|
}
|
||||||
|
|
||||||
void CheckFrontend(int flags)
|
void CheckFrontend(int flags)
|
||||||
{
|
{
|
||||||
if (flags & GAMEFLAG_BLOOD)
|
if (flags & GAMEFLAG_BLOOD)
|
||||||
{
|
{
|
||||||
gi = &Blood::Interface;
|
gi = Blood::CreateInterface();
|
||||||
globalShadeDiv = 62;
|
globalShadeDiv = 62;
|
||||||
}
|
}
|
||||||
else if (flags & GAMEFLAG_RR)
|
else if (flags & GAMEFLAG_RR)
|
||||||
{
|
{
|
||||||
gi = &Redneck::Interface;
|
gi = Redneck::CreateInterface();
|
||||||
globalShadeDiv = 30;
|
globalShadeDiv = 30;
|
||||||
}
|
}
|
||||||
else if (flags & GAMEFLAG_FURY)
|
else if (flags & GAMEFLAG_FURY)
|
||||||
{
|
{
|
||||||
gi = &Duke::Interface;
|
gi = Duke::CreateInterface();
|
||||||
globalShadeDiv = 26; // This is different from all other games which need a value two less than the amount of shades.
|
globalShadeDiv = 26; // This is different from all other games which need a value two less than the amount of shades.
|
||||||
}
|
}
|
||||||
else if (flags & GAMEFLAG_SW)
|
else if (flags & GAMEFLAG_SW)
|
||||||
{
|
{
|
||||||
gi = &ShadowWarrior::Interface;
|
gi = ShadowWarrior::CreateInterface();
|
||||||
globalShadeDiv = 30;
|
globalShadeDiv = 30;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
gi = &Duke::Interface;
|
gi = Duke::CreateInterface();
|
||||||
globalShadeDiv = 30;
|
globalShadeDiv = 30;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -144,6 +144,15 @@ static inline int32_t G_DefaultActorHealth(int spriteNum)
|
||||||
return G_HaveActor(spriteNum) ? g_tile[spriteNum].execPtr[0] : 0;
|
return G_HaveActor(spriteNum) ? g_tile[spriteNum].execPtr[0] : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct GameInterface : ::GameInterface
|
||||||
|
{
|
||||||
|
int app_main() override;
|
||||||
|
bool validate_hud(int) override;
|
||||||
|
void set_hud_layout(int size) override;
|
||||||
|
void set_hud_scale(int size) override;
|
||||||
|
};
|
||||||
|
|
||||||
END_DUKE_NS
|
END_DUKE_NS
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -4454,7 +4454,7 @@ void G_PrintCurrentMusic(void)
|
||||||
|
|
||||||
// Trying to sanitize the mess of options and the mess of variables the mess was stored in. (Did I say this was a total mess before...? >) )
|
// Trying to sanitize the mess of options and the mess of variables the mess was stored in. (Did I say this was a total mess before...? >) )
|
||||||
// Hopefully this is more comprehensible, at least it neatly stores everything useful in a single linear value...
|
// Hopefully this is more comprehensible, at least it neatly stores everything useful in a single linear value...
|
||||||
bool validate_hud(int layout)
|
bool GameInterface::validate_hud(int layout)
|
||||||
{
|
{
|
||||||
if (layout <= 6) // Status bar with border
|
if (layout <= 6) // Status bar with border
|
||||||
{
|
{
|
||||||
|
@ -4483,7 +4483,7 @@ bool validate_hud(int layout)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_hud_layout(int layout)
|
void GameInterface::set_hud_layout(int layout)
|
||||||
{
|
{
|
||||||
static const uint8_t screen_size_vals[] = { 60, 54, 48, 40, 32, 24, 16, 8, 8, 4, 4, 0 };
|
static const uint8_t screen_size_vals[] = { 60, 54, 48, 40, 32, 24, 16, 8, 8, 4, 4, 0 };
|
||||||
if (validate_hud(layout))
|
if (validate_hud(layout))
|
||||||
|
@ -4495,7 +4495,7 @@ void set_hud_layout(int layout)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_hud_scale(int scale)
|
void GameInterface::set_hud_scale(int scale)
|
||||||
{
|
{
|
||||||
G_UpdateScreenArea();
|
G_UpdateScreenArea();
|
||||||
}
|
}
|
||||||
|
@ -6125,7 +6125,7 @@ void G_MaybeAllocPlayer(int32_t pnum)
|
||||||
EDUKE32_STATIC_ASSERT(sizeof(actor_t)%4 == 0);
|
EDUKE32_STATIC_ASSERT(sizeof(actor_t)%4 == 0);
|
||||||
EDUKE32_STATIC_ASSERT(sizeof(DukePlayer_t)%4 == 0);
|
EDUKE32_STATIC_ASSERT(sizeof(DukePlayer_t)%4 == 0);
|
||||||
|
|
||||||
int app_main()
|
int GameInterface::app_main()
|
||||||
{
|
{
|
||||||
g_skillCnt = 4;
|
g_skillCnt = 4;
|
||||||
ud.multimode = 1;
|
ud.multimode = 1;
|
||||||
|
@ -6908,14 +6908,9 @@ void A_SpawnRandomGlass(int spriteNum, int wallNum, int glassCnt)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern void faketimerhandler();
|
::GameInterface* CreateInterface()
|
||||||
|
{
|
||||||
GameInterface Interface = {
|
return new GameInterface;
|
||||||
faketimerhandler,
|
}
|
||||||
app_main,
|
|
||||||
validate_hud,
|
|
||||||
set_hud_layout,
|
|
||||||
set_hud_scale,
|
|
||||||
};
|
|
||||||
|
|
||||||
END_DUKE_NS
|
END_DUKE_NS
|
||||||
|
|
|
@ -148,6 +148,15 @@ static inline int32_t G_DefaultActorHealth(int spriteNum)
|
||||||
return G_HaveActor(spriteNum) ? g_tile[spriteNum].execPtr[0] : 0;
|
return G_HaveActor(spriteNum) ? g_tile[spriteNum].execPtr[0] : 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct GameInterface : ::GameInterface
|
||||||
|
{
|
||||||
|
int app_main() override;
|
||||||
|
bool validate_hud(int) override;
|
||||||
|
void set_hud_layout(int size) override;
|
||||||
|
void set_hud_scale(int size) override;
|
||||||
|
};
|
||||||
|
|
||||||
END_RR_NS
|
END_RR_NS
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -5975,7 +5975,7 @@ void G_PrintCurrentMusic(void)
|
||||||
|
|
||||||
// Trying to sanitize the mess of options and the mess of variables the mess was stored in. (Did I say this was a total mess before...? >) )
|
// Trying to sanitize the mess of options and the mess of variables the mess was stored in. (Did I say this was a total mess before...? >) )
|
||||||
// Hopefully this is more comprehensible, at least it neatly stores everything useful in a single linear value...
|
// Hopefully this is more comprehensible, at least it neatly stores everything useful in a single linear value...
|
||||||
bool validate_hud(int layout)
|
bool GameInterface::validate_hud(int layout)
|
||||||
{
|
{
|
||||||
if (layout <= (RR? 5: 6)) // Status bar with border
|
if (layout <= (RR? 5: 6)) // Status bar with border
|
||||||
{
|
{
|
||||||
|
@ -6004,7 +6004,7 @@ bool validate_hud(int layout)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_hud_layout(int layout)
|
void GameInterface::set_hud_layout(int layout)
|
||||||
{
|
{
|
||||||
static const uint8_t screen_size_vals[] = { 60, 54, 48, 40, 32, 24, 16, 8, 8, 4, 4, 0 };
|
static const uint8_t screen_size_vals[] = { 60, 54, 48, 40, 32, 24, 16, 8, 8, 4, 4, 0 };
|
||||||
static const uint8_t screen_size_vals_rr[] = { 56, 48, 40, 32, 24, 16, 12, 8, 8, 4, 4, 0 };
|
static const uint8_t screen_size_vals_rr[] = { 56, 48, 40, 32, 24, 16, 12, 8, 8, 4, 4, 0 };
|
||||||
|
@ -6017,7 +6017,7 @@ void set_hud_layout(int layout)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void set_hud_scale(int scale)
|
void GameInterface::set_hud_scale(int scale)
|
||||||
{
|
{
|
||||||
G_UpdateScreenArea();
|
G_UpdateScreenArea();
|
||||||
}
|
}
|
||||||
|
@ -7532,7 +7532,7 @@ void G_MaybeAllocPlayer(int32_t pnum)
|
||||||
EDUKE32_STATIC_ASSERT(sizeof(actor_t)%4 == 0);
|
EDUKE32_STATIC_ASSERT(sizeof(actor_t)%4 == 0);
|
||||||
EDUKE32_STATIC_ASSERT(sizeof(DukePlayer_t)%4 == 0);
|
EDUKE32_STATIC_ASSERT(sizeof(DukePlayer_t)%4 == 0);
|
||||||
|
|
||||||
int app_main()
|
int GameInterface::app_main()
|
||||||
{
|
{
|
||||||
playing_rr = 1;
|
playing_rr = 1;
|
||||||
g_skillCnt = 4;
|
g_skillCnt = 4;
|
||||||
|
@ -8388,16 +8388,9 @@ void A_SpawnRandomGlass(int spriteNum, int wallNum, int glassCnt)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
::GameInterface* CreateInterface()
|
||||||
|
{
|
||||||
|
return new GameInterface;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
extern void faketimerhandler();
|
|
||||||
extern int app_main();
|
|
||||||
|
|
||||||
GameInterface Interface = {
|
|
||||||
faketimerhandler,
|
|
||||||
app_main,
|
|
||||||
validate_hud,
|
|
||||||
set_hud_layout,
|
|
||||||
set_hud_scale,
|
|
||||||
};
|
|
||||||
END_RR_NS
|
END_RR_NS
|
||||||
|
|
|
@ -3288,7 +3288,7 @@ void CommandLineHelp(char const * const * argv)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int32_t app_main()
|
int32_t GameInterface::app_main()
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int stat, nexti;
|
int stat, nexti;
|
||||||
|
@ -5029,18 +5029,15 @@ saveable_module saveable_build =
|
||||||
NUM_SAVEABLE_ITEMS(saveable_build_data)
|
NUM_SAVEABLE_ITEMS(saveable_build_data)
|
||||||
};
|
};
|
||||||
|
|
||||||
extern void faketimerhandler();
|
/*extern*/ bool GameInterface::validate_hud(int requested_size) { return requested_size; }
|
||||||
extern int app_main();
|
/*extern*/ void GameInterface::set_hud_layout(int requested_size) { /* the relevant setting is gs.BorderNum */}
|
||||||
/*extern*/ bool validate_hud(int requested_size) { return requested_size; }
|
/*extern*/ void GameInterface::set_hud_scale(int requested_size) { /* the relevant setting is gs.BorderNum */ }
|
||||||
/*extern*/ void set_hud(int requested_size) { /* the relevant setting is gs.BorderNum */}
|
|
||||||
|
::GameInterface* CreateInterface()
|
||||||
|
{
|
||||||
|
return new GameInterface;
|
||||||
|
}
|
||||||
|
|
||||||
GameInterface Interface = {
|
|
||||||
faketimerhandler,
|
|
||||||
app_main,
|
|
||||||
validate_hud,
|
|
||||||
set_hud,
|
|
||||||
set_hud,
|
|
||||||
};
|
|
||||||
|
|
||||||
// vim:ts=4:sw=4:expandtab:
|
// vim:ts=4:sw=4:expandtab:
|
||||||
END_SW_NS
|
END_SW_NS
|
||||||
|
|
|
@ -2374,6 +2374,15 @@ int COVERinsertsprite(short sectnum, short statnum); //returns (short)spritenu
|
||||||
|
|
||||||
void AudioUpdate(void); // stupid
|
void AudioUpdate(void); // stupid
|
||||||
|
|
||||||
|
struct GameInterface : ::GameInterface
|
||||||
|
{
|
||||||
|
int app_main() override;
|
||||||
|
bool validate_hud(int) override;
|
||||||
|
void set_hud_layout(int size) override;
|
||||||
|
void set_hud_scale(int size) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
END_SW_NS
|
END_SW_NS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue