summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJames Haley2010-08-28 05:35:52 +0000
committerJames Haley2010-08-28 05:35:52 +0000
commitcbfc9c134032630b71ec2acf4abe552a7569640f (patch)
tree19901c7157213d392931624833b04ac8bfd1b303 /src
parent8f24f63be140a34c9ac19463832bed0e7fabba67 (diff)
downloadchocolate-doom-cbfc9c134032630b71ec2acf4abe552a7569640f.tar.gz
chocolate-doom-cbfc9c134032630b71ec2acf4abe552a7569640f.tar.bz2
chocolate-doom-cbfc9c134032630b71ec2acf4abe552a7569640f.zip
Added crossfade wipe and code to load XLATAB lump. Changes to the menu
system including working Sigil cursor, alignment changes, shortcut character changes, and removal of items from the options menu that Strife put elsewhere. Initial sweep for global lump name changes completed: AMMNUM%d -> PLMNUM%d, M_DOOM -> M_STRIFE, M_OPTTTL -> M_OPTION, STTMINUS -> STCFN045, et al. A dummy modified Strife IWAD must be loaded over DOOM.WAD at this point in order to run. Subversion-branch: /branches/strife-branch Subversion-revision: 1968
Diffstat (limited to 'src')
-rw-r--r--src/strife/am_map.c12
-rw-r--r--src/strife/d_main.c9
-rw-r--r--src/strife/f_wipe.c63
-rw-r--r--src/strife/f_wipe.h2
-rw-r--r--src/strife/m_menu.c123
-rw-r--r--src/strife/r_draw.c55
-rw-r--r--src/strife/r_draw.h1
-rw-r--r--src/strife/st_lib.c3
8 files changed, 132 insertions, 136 deletions
diff --git a/src/strife/am_map.c b/src/strife/am_map.c
index 89a5dffc..b1eaa216 100644
--- a/src/strife/am_map.c
+++ b/src/strife/am_map.c
@@ -491,7 +491,9 @@ void AM_initVariables(void)
}
//
-//
+// AM_loadPics
+//
+// haleyjd 08/27/10: [STRIFE] Changed marknums to PLMNUM%d
//
void AM_loadPics(void)
{
@@ -500,8 +502,8 @@ void AM_loadPics(void)
for (i=0;i<10;i++)
{
- sprintf(namebuf, DEH_String("AMMNUM%d"), i);
- marknums[i] = W_CacheLumpName(namebuf, PU_STATIC);
+ sprintf(namebuf, DEH_String("PLMNUM%d"), i);
+ marknums[i] = W_CacheLumpName(namebuf, PU_STATIC);
}
}
@@ -513,8 +515,8 @@ void AM_unloadPics(void)
for (i=0;i<10;i++)
{
- sprintf(namebuf, DEH_String("AMMNUM%d"), i);
- W_ReleaseLumpName(namebuf);
+ sprintf(namebuf, DEH_String("PLMNUM%d"), i); // haleyjd: Choco change.
+ W_ReleaseLumpName(namebuf);
}
}
diff --git a/src/strife/d_main.c b/src/strife/d_main.c
index 60021344..c888438a 100644
--- a/src/strife/d_main.c
+++ b/src/strife/d_main.c
@@ -343,8 +343,9 @@ void D_Display (void)
I_Sleep(1);
} while (tics < 3); // haleyjd 08/23/2010: [STRIFE] Changed from == 0 to < 3
+ // haleyjd 08/26/10: [STRIFE] Changed to use ColorXForm wipe.
wipestart = nowtime;
- done = wipe_ScreenWipe(wipe_Melt
+ done = wipe_ScreenWipe(wipe_ColorXForm
, 0, 0, SCREENWIDTH, SCREENHEIGHT, tics);
I_UpdateNoBlit ();
M_Drawer (); // menu is drawn even on top of wipes
@@ -1099,8 +1100,8 @@ static void D_Endoom(void)
return;
}
- // STRIFE-TODO: ENDOOM -> ENDSTRF
- endoom = W_CacheLumpName(DEH_String("ENDOOM"), PU_STATIC);
+ // haleyjd 08/27/10: [STRIFE] ENDOOM -> ENDSTRF
+ endoom = W_CacheLumpName(DEH_String("ENDSTRF"), PU_STATIC);
I_Endoom(endoom);
}
@@ -1567,7 +1568,7 @@ void D_DoomMain (void)
SetSaveGameDir(iwadfile);
// Check for -file in shareware
- if (modifiedgame)
+ if (0 /*modifiedgame*/) // TEST
{
// These are the lumps that will be checked in IWAD,
// if any one is not present, execution will be aborted.
diff --git a/src/strife/f_wipe.c b/src/strife/f_wipe.c
index efc678ca..4c496f38 100644
--- a/src/strife/f_wipe.c
+++ b/src/strife/f_wipe.c
@@ -33,6 +33,9 @@
#include "doomtype.h"
+#include "r_defs.h" // haleyjd [STRIFE]
+#include "r_draw.h"
+
#include "f_wipe.h"
//
@@ -69,6 +72,7 @@ wipe_shittyColMajorXform
}
+// haleyjd 08/26/10: [STRIFE] Verified unmodified.
int
wipe_initColorXForm
( int width,
@@ -79,52 +83,40 @@ wipe_initColorXForm
return 0;
}
+//
+// wipe_doColorXForm
+//
+// haleyjd 08/26/10: [STRIFE]
+// * Rogue modified the unused ColorXForm wipe in-place in order to implement
+// their distinctive crossfade wipe.
+//
int
wipe_doColorXForm
( int width,
int height,
int ticks )
{
- boolean changed;
- byte* w;
- byte* e;
- int newval;
-
- changed = false;
- w = wipe_scr;
- e = wipe_scr_end;
-
- while (w!=wipe_scr+width*height)
+ byte *cur_screen = wipe_scr;
+ byte *end_screen = wipe_scr_end;
+ int pix = width*height;
+ int i;
+ boolean changed = false;
+
+ for(i = pix; i > 0; i--)
{
- if (*w != *e)
- {
- if (*w > *e)
- {
- newval = *w - ticks;
- if (newval < *e)
- *w = *e;
- else
- *w = newval;
- changed = true;
- }
- else if (*w < *e)
- {
- newval = *w + ticks;
- if (newval > *e)
- *w = *e;
- else
- *w = newval;
- changed = true;
- }
- }
- w++;
- e++;
+ if(*cur_screen != *end_screen)
+ {
+ changed = true;
+ *cur_screen = xlatab[(*cur_screen << 8) + *end_screen];
+ }
+ ++cur_screen;
+ ++end_screen;
}
return !changed;
-
}
+// haleyjd 08/26/10: [STRIFE] Verified unmodified.
int
wipe_exitColorXForm
( int width,
@@ -235,6 +227,7 @@ wipe_exitMelt
return 0;
}
+// haleyjd 08/26/10: [STRIFE] Verified unmodified.
int
wipe_StartScreen
( int x,
@@ -247,6 +240,7 @@ wipe_StartScreen
return 0;
}
+// haleyjd 08/26/10: [STRIFE] Verified unmodified.
int
wipe_EndScreen
( int x,
@@ -260,6 +254,7 @@ wipe_EndScreen
return 0;
}
+// haleyjd 08/26/10: [STRIFE] Verified unmodified.
int
wipe_ScreenWipe
( int wipeno,
diff --git a/src/strife/f_wipe.h b/src/strife/f_wipe.h
index 9045be3f..3f2e73af 100644
--- a/src/strife/f_wipe.h
+++ b/src/strife/f_wipe.h
@@ -34,7 +34,7 @@
enum
{
- // simple gradual pixel change for 8-bit only
+ // [STRIFE]: ColorXForm reimplemented as a proper crossfade
wipe_ColorXForm,
// weird screen melt
diff --git a/src/strife/m_menu.c b/src/strife/m_menu.c
index a0d66dd4..ec0ae739 100644
--- a/src/strife/m_menu.c
+++ b/src/strife/m_menu.c
@@ -126,8 +126,9 @@ char saveOldString[SAVESTRINGSIZE];
boolean inhelpscreens;
boolean menuactive;
-#define SKULLXOFF -32
-#define LINEHEIGHT 16
+// haleyjd 08/27/10: [STRIFE] SKULLXOFF == -28, LINEHEIGHT == 19
+#define CURSORXOFF -28
+#define LINEHEIGHT 19
extern boolean sendpause;
char savegamestrings[10][SAVESTRINGSIZE];
@@ -167,13 +168,15 @@ typedef struct menu_s
short lastOn; // last item user was on in menu
} menu_t;
+// haleyjd 08/27/10: [STRIFE] skull* stuff changed to cursor* stuff
short itemOn; // menu item skull is on
-short skullAnimCounter; // skull animation counter
-short whichSkull; // which skull to draw
+short cursorAnimCounter; // skull animation counter
+short whichCursor; // which skull to draw
-// graphic name of skulls
-// warning: initializer-string for array of chars is too long
-char *skullName[2] = {"M_SKULL1","M_SKULL2"};
+// graphic name of cursors
+// haleyjd 08/27/10: [STRIFE] M_SKULL* -> M_CURS*
+char *cursorName[8] = {"M_CURS1", "M_CURS2", "M_CURS3", "M_CURS4",
+ "M_CURS5", "M_CURS6", "M_CURS7", "M_CURS8" };
// current menudef
menu_t* currentMenu;
@@ -255,7 +258,7 @@ menuitem_t MainMenu[]=
{1,"M_LOADG",M_LoadGame,'l'},
{1,"M_SAVEG",M_SaveGame,'s'},
// Another hickup with Special edition.
- {1,"M_RDTHIS",M_ReadThis,'r'},
+ {1,"M_RDTHIS",M_ReadThis,'h'}, // haleyjd 08/28/10: 'r' -> 'h'
{1,"M_QUITG",M_QuitDOOM,'q'}
};
@@ -265,7 +268,7 @@ menu_t MainDef =
NULL,
MainMenu,
M_DrawMainMenu,
- 97,64,
+ 97,45, // haleyjd 08/28/10: [STRIFE] changed y coord
0
};
@@ -315,21 +318,22 @@ enum
menuitem_t NewGameMenu[]=
{
- {1,"M_JKILL", M_ChooseSkill, 'i'},
- {1,"M_ROUGH", M_ChooseSkill, 'h'},
- {1,"M_HURT", M_ChooseSkill, 'h'},
- {1,"M_ULTRA", M_ChooseSkill, 'u'},
- {1,"M_NMARE", M_ChooseSkill, 'n'}
+ // haleyjd 08/28/10: [STRIFE] changed all shortcut letters
+ {1,"M_JKILL", M_ChooseSkill, 't'},
+ {1,"M_ROUGH", M_ChooseSkill, 'r'},
+ {1,"M_HURT", M_ChooseSkill, 'v'},
+ {1,"M_ULTRA", M_ChooseSkill, 'e'},
+ {1,"M_NMARE", M_ChooseSkill, 'b'}
};
menu_t NewDef =
{
- newg_end, // # of menu items
- &EpiDef, // previous menu
- NewGameMenu, // menuitem_t ->
- M_DrawNewGame, // drawing routine ->
+ newg_end, // # of menu items
+ &EpiDef, // previous menu - STRIFE-FIXME: should be MainDef
+ NewGameMenu, // menuitem_t ->
+ M_DrawNewGame, // drawing routine ->
48,63, // x,y
- hurtme // lastOn
+ toorough // lastOn - haleyjd [STRIFE]: default to skill 1
};
@@ -339,26 +343,20 @@ menu_t NewDef =
//
enum
{
+ // haleyjd 08/28/10: [STRIFE] Removed messages, mouse sens., detail.
endgame,
- messages,
- detail,
scrnsize,
option_empty1,
- mousesens,
- option_empty2,
soundvol,
opt_end
} options_e;
menuitem_t OptionsMenu[]=
{
+ // haleyjd 08/28/10: [STRIFE] Removed messages, mouse sens., detail.
{1,"M_ENDGAM", M_EndGame,'e'},
- {1,"M_MESSG", M_ChangeMessages,'m'},
- {1,"M_DETAIL", M_ChangeDetail,'g'},
{2,"M_SCRNSZ", M_SizeDisplay,'s'},
{-1,"",0,'\0'},
- {2,"M_MSENS", M_ChangeSensitivity,'m'},
- {-1,"",0,'\0'},
{1,"M_SVOL", M_Sound,'s'}
};
@@ -891,10 +889,12 @@ void M_MusicVol(int choice)
//
// M_DrawMainMenu
//
+// haleyjd 08/27/10: [STRIFE] Changed x coordinate; M_DOOM -> M_STRIFE
+//
void M_DrawMainMenu(void)
{
- V_DrawPatchDirect(94, 2,
- W_CacheLumpName(DEH_String("M_DOOM"), PU_CACHE));
+ V_DrawPatchDirect(84, 2,
+ W_CacheLumpName(DEH_String("M_STRIFE"), PU_CACHE));
}
@@ -903,6 +903,8 @@ void M_DrawMainMenu(void)
//
// M_NewGame
//
+// haleyjd 08/27/10: [STRIFE] Verified unmodified.
+//
void M_DrawNewGame(void)
{
V_DrawPatchDirect(96, 14, W_CacheLumpName(DEH_String("M_NEWG"), PU_CACHE));
@@ -991,19 +993,11 @@ char msgNames[2][9] = {"M_MSGOFF","M_MSGON"};
void M_DrawOptions(void)
{
- V_DrawPatchDirect(108, 15, W_CacheLumpName(DEH_String("M_OPTTTL"),
+ // haleyjd 08/27/10: [STRIFE] M_OPTTTL -> M_OPTION
+ V_DrawPatchDirect(108, 15, W_CacheLumpName(DEH_String("M_OPTION"),
PU_CACHE));
-
- V_DrawPatchDirect(OptionsDef.x + 175, OptionsDef.y + LINEHEIGHT * detail,
- W_CacheLumpName(DEH_String(detailNames[detailLevel]),
- PU_CACHE));
- V_DrawPatchDirect(OptionsDef.x + 120, OptionsDef.y + LINEHEIGHT * messages,
- W_CacheLumpName(DEH_String(msgNames[showMessages]),
- PU_CACHE));
-
- M_DrawThermo(OptionsDef.x, OptionsDef.y + LINEHEIGHT * (mousesens + 1),
- 10, mouseSensitivity);
+ // haleyjd 08/26/10: [STRIFE] Removed messages, sensitivity, detail.
M_DrawThermo(OptionsDef.x,OptionsDef.y+LINEHEIGHT*(scrnsize+1),
9,screenSize);
@@ -1949,10 +1943,11 @@ void M_Drawer (void)
}
- // DRAW SKULL
- V_DrawPatchDirect(x + SKULLXOFF, currentMenu->y - 5 + itemOn*LINEHEIGHT,
- W_CacheLumpName(DEH_String(skullName[whichSkull]),
- PU_CACHE));
+ // haleyjd 08/27/10: [STRIFE] Adjust to draw spinning Sigil
+ // DRAW SIGIL
+ V_DrawPatchDirect(x + CURSORXOFF, currentMenu->y - 5 + itemOn*LINEHEIGHT,
+ W_CacheLumpName(DEH_String(cursorName[whichCursor]),
+ PU_CACHE));
}
@@ -1983,12 +1978,14 @@ void M_SetupNextMenu(menu_t *menudef)
//
// M_Ticker
//
+// haleyjd 08/27/10: [STRIFE] Rewritten for Sigil cursor
+//
void M_Ticker (void)
{
- if (--skullAnimCounter <= 0)
+ if (--cursorAnimCounter <= 0)
{
- whichSkull ^= 1;
- skullAnimCounter = 8;
+ whichCursor = (whichCursor + 1) % 8;
+ cursorAnimCounter = 5;
}
}
@@ -1996,44 +1993,22 @@ void M_Ticker (void)
//
// M_Init
//
+// haleyjd 08/27/10: [STRIFE] Removed DOOM gamemode stuff
+//
void M_Init (void)
{
currentMenu = &MainDef;
menuactive = 0;
itemOn = currentMenu->lastOn;
- whichSkull = 0;
- skullAnimCounter = 10;
+ whichCursor = 0;
+ cursorAnimCounter = 10;
screenSize = screenblocks - 3;
messageToPrint = 0;
messageString = NULL;
- messageLastMenuActive = menuactive;
+ messageLastMenuActive = menuactive; // STRIFE-FIXME: assigns 0 here...
quickSaveSlot = -1;
// Here we could catch other version dependencies,
// like HELP1/2, and four episodes.
-
-
- switch ( gamemode )
- {
- case commercial:
- // Commercial has no "read this" entry.
- MainMenu[readthis] = MainMenu[quitdoom];
- MainDef.numitems--;
- MainDef.y += 8;
- NewDef.prevMenu = &MainDef;
- break;
- case shareware:
- // Episode 2 and 3 are handled,
- // branching to an ad screen.
- case registered:
- // We need to remove the fourth episode.
- EpiDef.numitems--;
- break;
- case retail:
- // We are fine.
- default:
- break;
- }
-
}
diff --git a/src/strife/r_draw.c b/src/strife/r_draw.c
index 1b6420d9..c491f6b3 100644
--- a/src/strife/r_draw.c
+++ b/src/strife/r_draw.c
@@ -526,7 +526,9 @@ void R_DrawTranslatedColumnLow (void)
}
-
+// haleyjd 08/26/10: [STRIFE] - Rogue's translucency lookup table
+// This is functionally equivalent to Raven's TINTTAB and BOOM's TRANMAPs.
+byte *xlatab;
//
// R_InitTranslationTables
@@ -535,28 +537,47 @@ void R_DrawTranslatedColumnLow (void)
// Assumes a given structure of the PLAYPAL.
// Could be read from a lump instead.
//
+// haleyjd 08/26/10: [STRIFE]
+// * Added loading of XLATAB
+//
void R_InitTranslationTables (void)
{
- int i;
-
+ int i;
+
+ // [STRIFE] Load xlatab. Here's how Rogue did it:
+ // v7 = W_CacheLumpName("XLATAB", PU_CACHE); // note potential cache bug...
+ // HIWORD(v8) = (Z_Malloc(131072, PU_STATIC, NULL) + 65535) >> 16;
+ // LOWORD(v8) = 0; // aligning to a 64K boundary, as if this is Wolf3D.
+ // xlatab = v8;
+ // memcpy(v8, v7, 65536);
+ // memcpy(v8+65536, v7+65536, 0); // 0 bytes, does nothing!
+ // As you can see, they copypasta'd id's unnecessary 64K boundary alignment
+ // from the colormap code, and then evidently at some point dropped the high
+ // side of the presumably 128KB lump (because it is redundant data), but
+ // just set the 2nd memset call's length to 0 bytes... Terrible. Since none
+ // of this accomplishes anything, and isn't strictly portable, all we need
+ // to do is this:
+ xlatab = W_CacheLumpName("XLATAB", PU_STATIC);
+
translationtables = Z_Malloc (256*3, PU_STATIC, 0);
-
+
+ // STRIFE-TODO: Strife has many more (and more varied) translations
// translate just the 16 green colors
for (i=0 ; i<256 ; i++)
{
- if (i >= 0x70 && i<= 0x7f)
- {
- // map green ramp to gray, brown, red
- translationtables[i] = 0x60 + (i&0xf);
- translationtables [i+256] = 0x40 + (i&0xf);
- translationtables [i+512] = 0x20 + (i&0xf);
- }
- else
- {
- // Keep all other colors as is.
- translationtables[i] = translationtables[i+256]
- = translationtables[i+512] = i;
- }
+ if (i >= 0x70 && i<= 0x7f)
+ {
+ // map green ramp to gray, brown, red
+ translationtables[i] = 0x60 + (i&0xf);
+ translationtables [i+256] = 0x40 + (i&0xf);
+ translationtables [i+512] = 0x20 + (i&0xf);
+ }
+ else
+ {
+ // Keep all other colors as is.
+ translationtables[i] = translationtables[i+256]
+ = translationtables[i+512] = i;
+ }
}
}
diff --git a/src/strife/r_draw.h b/src/strife/r_draw.h
index adaacd60..7070da2e 100644
--- a/src/strife/r_draw.h
+++ b/src/strife/r_draw.h
@@ -79,6 +79,7 @@ extern byte* ds_source;
extern byte* translationtables;
extern byte* dc_translation;
+extern byte* xlatab; // haleyjd 08/26/10: [STRIFE]
// Span blitting for rows, floor/ceiling.
diff --git a/src/strife/st_lib.c b/src/strife/st_lib.c
index c90540cb..e206b34c 100644
--- a/src/strife/st_lib.c
+++ b/src/strife/st_lib.c
@@ -58,7 +58,8 @@ patch_t* sttminus;
void STlib_init(void)
{
- sttminus = (patch_t *) W_CacheLumpName(DEH_String("STTMINUS"), PU_STATIC);
+ // haleyjd 08/28/10: [STRIFE] STTMINUS -> STCFN045
+ sttminus = (patch_t *) W_CacheLumpName(DEH_String("STCFN045"), PU_STATIC);
}