Start on profiles menu (does nothing and softlocks)

This commit is contained in:
SinnamonLat 2022-02-15 01:28:57 +01:00
parent 1789dd1255
commit 8c53108d17
6 changed files with 105 additions and 25 deletions

View file

@ -19,6 +19,7 @@
#include "command.h"
#include "doomstat.h" // MAXSPLITSCREENPLAYERS
#include "g_demo.h" //menudemo_t
#include "k_profiles.h" // profile data & functions
// flags for items in the menu
// menu handle (what we do when key is pressed
@ -219,6 +220,9 @@ typedef enum
mopt_manual,
} mopt_e;
extern menuitem_t OPTIONS_Profiles[];
extern menu_t OPTIONS_ProfilesDef;
extern menuitem_t OPTIONS_Video[];
extern menu_t OPTIONS_VideoDef;
@ -619,8 +623,10 @@ void M_OptionsChangeBGColour(INT16 newcolour); // changes the background colour
void M_HandleItemToggles(INT32 choice); // For item toggling
void M_EraseData(INT32 choice); // For data erasing
// video modes menu (resolution)
// profile selection menu
void M_HandleProfileSelect(INT32 ch);
// video modes menu (resolution)
void M_VideoModeMenu(INT32 choice);
void M_HandleVideoModes(INT32 ch);
@ -758,6 +764,7 @@ void M_DrawPlaybackMenu(void);
void M_DrawOptionsMovingButton(void); // for sick transitions...
void M_DrawOptions(void);
void M_DrawGenericOptions(void);
void M_DrawProfileSelect(void);
void M_DrawVideoModes(void);
void M_DrawItemToggles(void);

View file

@ -367,8 +367,8 @@ menu_t PLAY_MP_RoomSelectDef = {
menuitem_t OPTIONS_Main[] =
{
{IT_STRING | IT_TRANSTEXT, "Profile Setup", "Remap keys & buttons to your likings.",
NULL, NULL, 0, 0},
{IT_STRING | IT_SUBMENU, "Profile Setup", "Remap keys & buttons to your likings.",
NULL, &OPTIONS_ProfilesDef, 0, 0},
{IT_STRING | IT_SUBMENU, "Video Options", "Change video settings such as the resolution.",
NULL, &OPTIONS_VideoDef, 0, 0},
@ -408,6 +408,28 @@ menu_t OPTIONS_MainDef = {
M_OptionsInputs
};
// profiles menu
// profile select
menuitem_t OPTIONS_Profiles[] = {
{IT_KEYHANDLER | IT_NOTHING, NULL, "Select a Profile.",
NULL, M_HandleProfileSelect, 0, 0}, // dummy menuitem for the control func
};
menu_t OPTIONS_ProfilesDef = {
sizeof (OPTIONS_Profiles) / sizeof (menuitem_t),
&OPTIONS_MainDef,
0,
OPTIONS_Profiles,
32, 80,
SKINCOLOR_ULTRAMARINE, 0,
2, 10,
M_DrawProfileSelect,
M_OptionsTick,
NULL,
NULL,
NULL,
};
// video options menu...
// options menu
menuitem_t OPTIONS_Video[] =

View file

@ -2011,6 +2011,40 @@ void M_DrawGenericOptions(void)
}
}
// Draws profile selection
void M_DrawProfileSelect(void)
{
INT32 i;
patch_t *card = W_CachePatchName("PR_CARD", PU_CACHE);
INT32 x = 160;
INT32 y = 75 + menutransition.tics*16;
M_DrawOptionsCogs();
M_DrawMenuTooltips();
M_DrawOptionsMovingButton();
for (i=0; i < MAXPROFILES; i++)
{
profile_t *p = PR_GetProfile(i);
UINT8 *colormap = R_GetTranslationColormap(TC_DEFAULT, SKINCOLOR_BLACK, GTC_CACHE);
char pname[PROFILENAMELEN+1] = "EMPTY";
if (p != NULL)
{
colormap = R_GetTranslationColormap(TC_DEFAULT, p->color, GTC_CACHE);
strcpy(pname, p->profilename);
}
V_DrawFixedPatch(x*FRACUNIT, y*FRACUNIT, FRACUNIT, 0, card, colormap);
V_DrawCenteredGamemodeString(x, y+18, 0, 0, pname);
CONS_Printf("pname %s\n", pname);
x += 96;
}
}
// Draw the video modes list, a-la-Quake
void M_DrawVideoModes(void)
{

View file

@ -3264,6 +3264,10 @@ void M_VideoModeMenu(INT32 choice)
M_SetupNextMenu(&OPTIONS_VideoModesDef, false);
}
void M_HandleProfileSelect(INT32 ch)
{
(void) ch;
}
// special menuitem key handler for video mode list
void M_HandleVideoModes(INT32 ch)

View file

@ -19,20 +19,20 @@ static UINT8 numprofiles = 0; // # of loaded profiles
profile_t PR_MakeProfile(const char *prname, const char *pname, const UINT16 col, const char *fname, UINT16 fcol, INT32 controlarray[num_gamecontrols][MAXINPUTMAPPING])
{
profile_t new;
new.version = PROFILEVER;
strcpy(new.profilename, prname);
strcpy(new.playername, pname);
new.color = col;
strcpy(new.follower, fname);
new.followercolor = fcol;
// Copy from gamecontrol directly as we'll be setting controls up directly in the profile.
memcpy(new.controls, controlarray, sizeof(new.controls));
memcpy(new.controls, controlarray, sizeof(new.controls));
return new;
}
@ -40,10 +40,10 @@ profile_t PR_MakeProfileFromPlayer(const char *prname, const char *pname, const
{
// Generate profile using the player's gamecontrol, as we set them directly when making profiles from menus.
profile_t new = PR_MakeProfile(prname, pname, col, fname, fcol, gamecontrol[pnum]);
// Player bound cvars:
new.kickstartaccel = cv_kickstartaccel[pnum].value;
return new;
}
@ -53,35 +53,43 @@ boolean PR_AddProfile(profile_t p)
{
memcpy(&profilesList[numprofiles], &p, sizeof(profile_t));
numprofiles++;
CONS_Printf("Profile '%s' added\n", p.profilename);
return true;
}
else
return false;
}
profile_t* PR_GetProfile(INT32 num)
{
if (num < numprofiles)
return &profilesList[num];
else
return NULL;
}
void PR_SaveProfiles(void)
{
FILE *f = NULL;
f = fopen(PROFILESFILE, "w");
if (f != NULL)
{
fwrite(profilesList, sizeof(profile_t), MAXPROFILES, f);
fclose(f);
}
}
}
void PR_LoadProfiles(void)
{
//FILE *f = NULL;
profile_t dprofile = PR_MakeProfile(PROFILEDEFAULTNAME, PROFILEDEFAULTPNAME, PROFILEDEFAULTCOLOR, PROFILEDEFAULTFOLLOWER, PROFILEDEFAULTFOLLOWERCOLOR, gamecontroldefault);
PR_AddProfile(dprofile);
/*f = fopen(PROFILESFILE, "r");
if (f != NULL)
{
fread(&profilesList[1], sizeof(profile_t)*(MAXPROFILES), MAXPROFILES, f);

View file

@ -26,7 +26,7 @@
#define SKINNAMESIZE 16
#define PROFILENAMELEN 6
#define PROFILEVER 0
#define PROFILEVER 1
#define MAXPROFILES 16
#define PROFILESFILE "kartprofiles.cfg"
@ -40,25 +40,26 @@
// Man I wish I had more than 16 friends!!
// profile_t definition (WIP)
typedef struct profile_s
typedef struct profile_s
{
// Versionning
UINT8 version; // Version of the profile, this can be useful for backwards compatibility reading if we ever update the profile structure/format after release.
// A version of 0 can easily be checked to identify an unitialized profile.
// Profile header
char profilename[PROFILENAMELEN+1]; // Profile name (not to be confused with player name)
// Player data
char playername[MAXPLAYERNAME+1]; // Player name
UINT16 color; // Default player coloUr. ...But for consistency we'll name it color.
char follower[SKINNAMESIZE+1]; // Follower
UINT16 followercolor; // Follower color
// Player-specific consvars.
// @TODO: List all of those
boolean kickstartaccel; // cv_kickstartaccel
// Finally, control data itself
INT32 controls[num_gamecontrols][MAXINPUTMAPPING]; // Lists of all the controls, defined the same way as default inputs in g_input.c
} profile_t;
@ -81,6 +82,10 @@ profile_t PR_MakeProfileFromPlayer(const char *prname, const char *pname, const
// Returns true if succesful, false if not.
boolean PR_AddProfile(profile_t p);
// PR_GetProfile(INT32 num)
// Returns a pointer to the profile you're asking for or NULL if the profile is uninitialized.
profile_t* PR_GetProfile(INT32 num);
// PR_SaveProfiles(void)
// Saves all the profiles in profiles.cfg
// This does not save profilesList[0] since that's always going to be the default profile.
@ -88,7 +93,7 @@ void PR_SaveProfiles(void);
// PR_LoadProfiles(void)
// Loads all the profiles saved in profiles.cfg.
// This also loads
// This also loads
void PR_LoadProfiles(void);