Skip to content

Commit

Permalink
Merge pull request #155 from azamorapl/episodeinfo
Browse files Browse the repository at this point in the history
Read episodes from mapinfo
  • Loading branch information
atsb authored Jan 20, 2023
2 parents 7a92dcf + 7b53332 commit d4d0908
Show file tree
Hide file tree
Showing 6 changed files with 82 additions and 64 deletions.
Binary file modified doom64ex-plus.wad
Binary file not shown.
6 changes: 3 additions & 3 deletions src/engine/d_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -976,15 +976,15 @@ void D_DoomMain(void) {
// 3. PWAD dehacked patches in DEHACKED lumps.
DEH_ParseCommandLine();

I_Printf("M_Init: Init miscellaneous info.\n");
M_Init();

I_Printf("R_Init: Init DOOM refresh daemon.\n");
R_Init();

I_Printf("P_Init: Init Playloop state.\n");
P_Init();

I_Printf("M_Init: Init miscellaneous info.\n");
M_Init();

I_Printf("NET_Init: Init network subsystem.\n");
NET_Init();

Expand Down
7 changes: 7 additions & 0 deletions src/engine/doomstat.h
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,13 @@ typedef struct {
char pic[9];
} clusterdef_t;

typedef struct
{
int mapid;
char name[64];
char key;
} episodedef_t;

//-----------------------------
// Internal parameters, fixed.
// These are set by the engine, and not changed
Expand Down
93 changes: 32 additions & 61 deletions src/engine/m_menu.c
Original file line number Diff line number Diff line change
Expand Up @@ -613,29 +613,18 @@ void M_DrawStartNewNotify(void) {
//
//------------------------------------------------------------------------

int map = 1;
void M_ChooseMap(int choice);
void M_ChooseMapLost(int choice);

enum {
doom64,
lostlevels,
mapg_end
} mapselect_e;

menuitem_t MapMenu[] = {
{1,"DOOM 64",M_ChooseMap, 'd'},
{1,"Lost Levels",M_ChooseMapLost, 'l'},
};

menu_t MapSelectDef = {
mapg_end,
0,
false,
&MainDef,
MapMenu,
NULL,
NULL,
"Choose Campaign",
112,80,
doom64,
0,
false,
NULL,
-1,
Expand All @@ -652,7 +641,6 @@ menu_t MapSelectDef = {
//------------------------------------------------------------------------

void M_ChooseSkill(int choice);
void M_ChooseSkillLost(int choice);

enum {
killthings,
Expand All @@ -671,14 +659,6 @@ menuitem_t NewGameMenu[] = {
{1,"Hardcore!",M_ChooseSkill, 'h'},
};

menuitem_t NewGameMenuLost[] = {
{1,"Be Gentle!",M_ChooseSkillLost, 'b'},
{1,"Bring It On!",M_ChooseSkillLost, 'r'},
{1,"I Own Doom!",M_ChooseSkillLost, 'i'},
{1,"Watch Me Die!",M_ChooseSkillLost, 'w'},
{1,"Hardcore!",M_ChooseSkillLost, 'h'},
};

menu_t NewDef = {
newg_end,
false,
Expand All @@ -697,63 +677,33 @@ menu_t NewDef = {
NULL
};

menu_t NewDefLost = {
newg_end,
false,
&MainDef,
NewGameMenuLost,
NULL,
"Choose Your Skill...",
112,80,
toorough,
false,
NULL,
-1,
0,
1.0f,
NULL,
NULL
};

void M_NewGame(int choice) {
if (netgame && !demoplayback) {
M_StartControlPanel(true);
M_SetupNextMenu(&StartNewNotifyDef);
return;
}

M_SetupNextMenu(&MapSelectDef);
}

void M_ChooseMap(int choice) {
if (netgame && !demoplayback) {
M_StartControlPanel(true);
M_SetupNextMenu(&StartNewNotifyDef);
if (MapSelectDef.numitems > 0) {
M_SetupNextMenu(&MapSelectDef);
return;
}

M_SetupNextMenu(&NewDef);
}

void M_ChooseMapLost(int choice) {
void M_ChooseMap(int choice) {
if (netgame && !demoplayback) {
M_StartControlPanel(true);
M_SetupNextMenu(&StartNewNotifyDef);
return;
}

M_SetupNextMenu(&NewDefLost);
map = P_GetEpisode(choice)->mapid;
M_SetupNextMenu(&NewDef);
}

void M_ChooseSkill(int choice) {
G_DeferedInitNew(choice, 1);
M_ClearMenus();
dmemset(passwordData, 0xff, 16);
allowmenu = false;
}

void M_ChooseSkillLost(int choice) {
G_DeferedInitNew(choice, 34);
G_DeferedInitNew(choice, map);
M_ClearMenus();
dmemset(passwordData, 0xff, 16);
allowmenu = false;
Expand Down Expand Up @@ -5219,6 +5169,26 @@ void M_Ticker(void) {
}
}

void M_InitEpisodes() {
int episodes = P_GetNumEpisodes();
if (episodes <= 0) return;
menuitem_t* menus = NULL;
menus = Z_Realloc(menus, sizeof(menuitem_t) * episodes, PU_STATIC, 0);
for (int i = 0; i < episodes; i++)
{
episodedef_t* epi = P_GetEpisode(i);
menuitem_t menu;
menu.status = 1;
strcpy(menu.name, epi->name);
menu.routine = M_ChooseMap;
menu.alphaKey = epi->key;
dmemcpy(&menus[i], &menu, sizeof(menuitem_t));
}
MapSelectDef.menuitems = menus;
MapSelectDef.numitems = episodes;
NewDef.prevMenu = &MapSelectDef;
}

//
// M_Init
//
Expand Down Expand Up @@ -5258,6 +5228,7 @@ void M_Init(void) {
MainDef.y += 8;
NewDef.prevMenu = &MainDef;

M_InitEpisodes();
M_InitShiftXForm();
}

Expand Down
38 changes: 38 additions & 0 deletions src/engine/p_setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,8 @@ int nummapdef;
mapdef_t* mapdefs;
int numclusterdef;
clusterdef_t* clusterdefs;
int numepisodedef;
episodedef_t* episodedefs;

//
// [kex] cvars
Expand Down Expand Up @@ -1120,14 +1122,22 @@ static scdatatable_t clusterdatatable[] = {
{ NULL, 0, 0 }
};

static scdatatable_t episodedatatable[] = {
{ "NAME", (int64_t) & ((episodedef_t*)0)->name, 's'},
{ "KEY", (int64_t) & ((episodedef_t*)0)->key, 's'}
};

static void P_InitMapInfo(void) {
mapdef_t mapdef;
clusterdef_t cluster;
episodedef_t episode;

mapdefs = NULL;
clusterdefs = NULL;
episodedefs = NULL;
nummapdef = 0;
numclusterdef = 0;
numepisodedef = 0;

sc_parser.open("MAPINFO");

Expand Down Expand Up @@ -1293,6 +1303,24 @@ static void P_InitMapInfo(void) {
sizeof(clusterdef_t) * ++numclusterdef, PU_STATIC, 0);
dmemcpy(&clusterdefs[numclusterdef - 1], &cluster, sizeof(clusterdef_t));
}
else if (!dstricmp(sc_parser.token, "EPISODE")) {
dmemset(&episode, 0, sizeof(episodedef_t));

sc_parser.find(false);
episode.mapid = datoi(sc_parser.token);

sc_parser.compare("{");
while (sc_parser.readtokens()) {
sc_parser.find(false);
if (sc_parser.token[0] == '}') {
break;
}
sc_parser.setdata(&episode, episodedatatable);
}

episodedefs = Z_Realloc(episodedefs, sizeof(episodedef_t) * ++numepisodedef, PU_STATIC, 0);
dmemcpy(&episodedefs[numepisodedef - 1], &episode, sizeof(episodedef_t));
}
else {
sc_parser.error("P_InitMapInfo");
}
Expand All @@ -1302,6 +1330,7 @@ static void P_InitMapInfo(void) {

CON_DPrintf("%i map definitions\n", nummapdef);
CON_DPrintf("%i cluster definitions\n", numclusterdef);
CON_DPrintf("%i episode definitions\n", numepisodedef);
}

//
Expand Down Expand Up @@ -1343,6 +1372,15 @@ clusterdef_t* P_GetCluster(int map) {
return NULL;
}

int P_GetNumEpisodes(void)
{
return numepisodedef;
}

episodedef_t* P_GetEpisode(int episode) {
return &episodedefs[episode];
}

//
// P_InitSkyDef
//
Expand Down
2 changes: 2 additions & 0 deletions src/engine/p_setup.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ void P_RegisterCvars(void);
//
mapdef_t* P_GetMapInfo(int map);
clusterdef_t* P_GetCluster(int map);
episodedef_t* P_GetEpisode(int episode);
int P_GetNumEpisodes(void);

//
// [kex] sky definitions
Expand Down

0 comments on commit d4d0908

Please sign in to comment.