mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-04-26 12:01:47 +00:00
Reset hub & map scopes on map load
This commit is contained in:
parent
cb8dddbedc
commit
6b94b9728e
2 changed files with 38 additions and 39 deletions
73
src/k_acs.c
73
src/k_acs.c
|
|
@ -34,35 +34,6 @@ ACSVM_Environment *ACS_GetEnvironment(void)
|
||||||
return ACSenv;
|
return ACSenv;
|
||||||
}
|
}
|
||||||
|
|
||||||
ACSVM_GlobalScope *ACS_GetGlobal(void)
|
|
||||||
{
|
|
||||||
return ACSVM_Environment_GetGlobalScope(ACSenv, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
ACSVM_HubScope *ACS_GetHub(void)
|
|
||||||
{
|
|
||||||
ACSVM_GlobalScope *global = ACS_GetGlobal();
|
|
||||||
|
|
||||||
if (global == NULL)
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ACSVM_GlobalScope_GetHubScope(global, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
ACSVM_MapScope *ACS_GetMap(void)
|
|
||||||
{
|
|
||||||
ACSVM_HubScope *hub = ACS_GetHub();
|
|
||||||
|
|
||||||
if (hub == NULL)
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ACSVM_HubScope_GetMapScope(hub, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ACS_EnvBadAlloc(ACSVM_Environment *env, char const *what)
|
static void ACS_EnvBadAlloc(ACSVM_Environment *env, char const *what)
|
||||||
{
|
{
|
||||||
(void)env;
|
(void)env;
|
||||||
|
|
@ -79,8 +50,7 @@ static void ACS_EnvConstruct(ACSVM_Environment *env)
|
||||||
{
|
{
|
||||||
ACSVM_GlobalScope *global = ACSVM_Environment_GetGlobalScope(env, 0);
|
ACSVM_GlobalScope *global = ACSVM_Environment_GetGlobalScope(env, 0);
|
||||||
|
|
||||||
// Activate global scope immediately,
|
// Activate global scope immediately, since we don't want it off.
|
||||||
// since we don't want it off.
|
|
||||||
ACSVM_GlobalScope_SetActive(global, true);
|
ACSVM_GlobalScope_SetActive(global, true);
|
||||||
|
|
||||||
// Add the data & function pointers
|
// Add the data & function pointers
|
||||||
|
|
@ -223,11 +193,24 @@ void ACS_Shutdown(void)
|
||||||
ACSenv = NULL;
|
ACSenv = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void ACS_ResetHub(ACSVM_GlobalScope *global)
|
||||||
|
{
|
||||||
|
ACSVM_HubScope *hub = ACSVM_GlobalScope_GetHubScope(global, 0);
|
||||||
|
ACSVM_GlobalScope_FreeHubScope(global, hub);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ACS_ResetMap(ACSVM_HubScope *hub)
|
||||||
|
{
|
||||||
|
ACSVM_MapScope *map = ACSVM_HubScope_GetMapScope(hub, 0);
|
||||||
|
ACSVM_HubScope_FreeMapScope(hub, map);
|
||||||
|
}
|
||||||
|
|
||||||
void ACS_LoadLevelScripts(size_t mapID)
|
void ACS_LoadLevelScripts(size_t mapID)
|
||||||
{
|
{
|
||||||
ACSVM_Environment *env = ACSenv;
|
ACSVM_Environment *env = ACSenv;
|
||||||
ACSVM_StringTable *strTab = ACSVM_Environment_GetStringTable(env);
|
ACSVM_StringTable *strTab = ACSVM_Environment_GetStringTable(env);
|
||||||
|
|
||||||
|
ACSVM_GlobalScope *global = NULL;
|
||||||
ACSVM_HubScope *hub = NULL;
|
ACSVM_HubScope *hub = NULL;
|
||||||
ACSVM_MapScope *map = NULL;
|
ACSVM_MapScope *map = NULL;
|
||||||
|
|
||||||
|
|
@ -235,18 +218,38 @@ void ACS_LoadLevelScripts(size_t mapID)
|
||||||
size_t modules_len = 0;
|
size_t modules_len = 0;
|
||||||
size_t modules_size = 4;
|
size_t modules_size = 4;
|
||||||
|
|
||||||
// No hub support. Simply always reset it.
|
global = ACSVM_Environment_GetGlobalScope(ACSenv, 0);
|
||||||
hub = ACS_GetHub();
|
|
||||||
|
// Just some notes on how Hexen's scopes work, if anyone
|
||||||
|
// intends to implement proper hub logic:
|
||||||
|
|
||||||
|
// The integer is an ID for which hub / map it is,
|
||||||
|
// and instead sets active according to which ones
|
||||||
|
// should run, since you can go between them.
|
||||||
|
|
||||||
|
// But I didn't intend on implementing these features,
|
||||||
|
// since hubs aren't planned for Ring Racers (although
|
||||||
|
// they might be useful for SRB2), and I intentionally
|
||||||
|
// avoided implementing global ACS (since Lua would be
|
||||||
|
// a better language to do that kind of code).
|
||||||
|
|
||||||
|
// Since we literally only are using map scope, we can
|
||||||
|
// just free everything between every level.
|
||||||
|
|
||||||
|
// Reset hub scope, even if we are not using it.
|
||||||
|
ACS_ResetHub(global);
|
||||||
|
hub = ACSVM_GlobalScope_GetHubScope(global, 0);
|
||||||
ACSVM_HubScope_SetActive(hub, true);
|
ACSVM_HubScope_SetActive(hub, true);
|
||||||
|
|
||||||
// Start up map scope.
|
// Start up new map scope.
|
||||||
|
ACS_ResetMap(hub);
|
||||||
map = ACSVM_HubScope_GetMapScope(hub, 0);
|
map = ACSVM_HubScope_GetMapScope(hub, 0);
|
||||||
ACSVM_MapScope_SetActive(map, true);
|
ACSVM_MapScope_SetActive(map, true);
|
||||||
|
|
||||||
// Allocate module list.
|
// Allocate module list.
|
||||||
modules = Z_Calloc(modules_size * sizeof(ACSVM_Module *), PU_STATIC, NULL);
|
modules = Z_Calloc(modules_size * sizeof(ACSVM_Module *), PU_STATIC, NULL);
|
||||||
|
|
||||||
// Insert BEHAVIOR lump.
|
// Insert BEHAVIOR lump into the list.
|
||||||
{
|
{
|
||||||
char const *str = mapheaderinfo[mapID]->lumpname;
|
char const *str = mapheaderinfo[mapID]->lumpname;
|
||||||
size_t len = strlen(str);
|
size_t len = strlen(str);
|
||||||
|
|
|
||||||
|
|
@ -34,10 +34,6 @@ typedef enum
|
||||||
|
|
||||||
ACSVM_Environment *ACS_GetEnvironment(void);
|
ACSVM_Environment *ACS_GetEnvironment(void);
|
||||||
|
|
||||||
ACSVM_GlobalScope *ACS_GetGlobal(void);
|
|
||||||
ACSVM_HubScope *ACS_GetHub(void);
|
|
||||||
ACSVM_MapScope *ACS_GetMap(void);
|
|
||||||
|
|
||||||
void ACS_Init(void);
|
void ACS_Init(void);
|
||||||
void ACS_Shutdown(void);
|
void ACS_Shutdown(void);
|
||||||
void ACS_LoadLevelScripts(size_t mapID);
|
void ACS_LoadLevelScripts(size_t mapID);
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue