diff --git a/polymer/eduke32/Makefile b/polymer/eduke32/Makefile
index db1146974..42cfd6d2c 100644
--- a/polymer/eduke32/Makefile
+++ b/polymer/eduke32/Makefile
@@ -230,7 +230,7 @@ MAPSTER32_TARGET:=$(MAPSTER32)$(EXESUFFIX)
COMMON_OBJS=rev
COMMON_EDITOR_OBJS=m32common m32def m32exec m32vars rev
-DUKE3D_OBJS=game global actors gamedef gameexec gamevars player premap sector anim animsounds common config demo input menus namesdyn net savegame rts osdfuncs osdcmds grpscan sounds soundsdyn
+DUKE3D_OBJS=game global actors gamedef gameexec gamevars player premap sector anim animsounds common config demo input menus namesdyn net savegame rts osdfuncs osdcmds grpscan sounds soundsdyn cheats
DUKE3D_EDITOR_OBJS=astub common grpscan sounds_mapster32
ifneq ($(USE_LIBVPX),0)
diff --git a/polymer/eduke32/Makefile.deps b/polymer/eduke32/Makefile.deps
index 7d5f88799..b37e33997 100644
--- a/polymer/eduke32/Makefile.deps
+++ b/polymer/eduke32/Makefile.deps
@@ -40,6 +40,7 @@ $(DUKE3D_OBJ)/game.$o: $(DUKE3D_SRC)/game.c $(game_defs_dep) $(MACT_ROOT)/scripl
$(DUKE3D_OBJ)/actors.$o: $(DUKE3D_SRC)/actors.c $(duke3d_h)
$(DUKE3D_OBJ)/anim.$o: $(DUKE3D_SRC)/anim.c $(duke3d_h) $(DUKE3D_SRC)/input.h $(MACT_ROOT)/animlib.h $(DUKE3D_SRC)/animvpx.h $(DUKE3D_SRC)/animsounds.h
$(DUKE3D_OBJ)/animsounds.$o: $(DUKE3D_SRC)/animsounds.c $(DUKE3D_SRC)/animsounds.h
+$(DUKE3D_OBJ)/cheats.$o: $(DUKE3D_SRC)/cheats.c
$(DUKE3D_OBJ)/demo.$o: $(DUKE3D_SRC)/demo.c $(duke3d_h) $(DUKE3D_SRC)/input.h
$(DUKE3D_OBJ)/gamedef.$o: $(DUKE3D_SRC)/gamedef.c $(duke3d_h) $(gamedef_h) $(DUKE3D_SRC)/savegame.h
$(DUKE3D_OBJ)/gameexec.$o: $(DUKE3D_SRC)/gameexec.c $(DUKE3D_SRC)/gamestructures.c $(duke3d_h) $(gamedef_h)
diff --git a/polymer/eduke32/Makefile.msvc b/polymer/eduke32/Makefile.msvc
index 476eae4db..867f7fe5b 100644
--- a/polymer/eduke32/Makefile.msvc
+++ b/polymer/eduke32/Makefile.msvc
@@ -195,6 +195,7 @@ DUKE3D_OBJS=$(DUKE3D_OBJ)\game.$o \
$(DUKE3D_OBJ)\anim.$o \
$(DUKE3D_OBJ)\animsounds.$o \
$(DUKE3D_OBJ)\animvpx.$o \
+ $(DUKE3D_OBJ)\cheats.$o \
$(DUKE3D_OBJ)\common.$o \
$(DUKE3D_OBJ)\demo.$o \
$(DUKE3D_OBJ)\gamedef.$o \
diff --git a/polymer/eduke32/eduke32.vcxproj b/polymer/eduke32/eduke32.vcxproj
index c459fa16e..4916d639d 100644
--- a/polymer/eduke32/eduke32.vcxproj
+++ b/polymer/eduke32/eduke32.vcxproj
@@ -173,6 +173,7 @@
+
@@ -304,6 +305,7 @@
+
@@ -347,7 +349,6 @@
-
diff --git a/polymer/eduke32/eduke32.vcxproj.filters b/polymer/eduke32/eduke32.vcxproj.filters
index 3d0f6bf17..e70ad1fdf 100644
--- a/polymer/eduke32/eduke32.vcxproj.filters
+++ b/polymer/eduke32/eduke32.vcxproj.filters
@@ -507,7 +507,12 @@
eduke32\headers
-
+
+ eduke32\headers
+
+
+ eduke32\headers
+
@@ -681,9 +686,6 @@
eduke32\source
-
- eduke32\source
-
jaudiolib\source
@@ -894,6 +896,9 @@
build\source
+
+ eduke32\source
+
diff --git a/polymer/eduke32/source/actors.c b/polymer/eduke32/source/actors.c
index e050987fc..8c2db0e0f 100644
--- a/polymer/eduke32/source/actors.c
+++ b/polymer/eduke32/source/actors.c
@@ -1,6 +1,6 @@
//-------------------------------------------------------------------------
/*
-Copyright (C) 2010 EDuke32 developers and contributors
+Copyright (C) 2016 EDuke32 developers and contributors
This file is part of EDuke32.
@@ -23,9 +23,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#define actors_c_
#include "duke3d.h"
-#include "actors.h"
-#include "gamedef.h"
-#include "gameexec.h"
#if KRANDDEBUG
# define ACTOR_STATIC
diff --git a/polymer/eduke32/source/cheats.c b/polymer/eduke32/source/cheats.c
new file mode 100644
index 000000000..e3c660027
--- /dev/null
+++ b/polymer/eduke32/source/cheats.c
@@ -0,0 +1,681 @@
+//-------------------------------------------------------------------------
+/*
+Copyright (C) 2016 EDuke32 developers and contributors
+
+This file is part of EDuke32.
+
+EDuke32 is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License version 2
+as published by the Free Software Foundation.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*/
+//-------------------------------------------------------------------------
+
+#include "duke3d.h"
+#include "osdcmds.h"
+#include "cheats.h"
+
+// KEEPINSYNC game.h: enum cheatindex_t
+char CheatStrings [][MAXCHEATLEN] =
+{
+ "cornholio", // 0
+ "stuff", // 1
+ "scotty###", // 2
+ "coords", // 3
+ "view", // 4
+ "time", // 5
+ "unlock", // 6
+ "cashman", // 7
+ "items", // 8
+ "rate", // 9
+ "skill#", // 10
+ "beta", // 11
+ "hyper", // 12
+ "monsters", // 13
+ "", // 14
+ "", // 15
+ "todd", // 16
+ "showmap", // 17
+ "kroz", // 18
+ "allen", // 19
+ "clip", // 20
+ "weapons", // 21
+ "inventory", // 22
+ "keys", // 23
+ "debug", // 24
+ "", // 25
+ "cgs", // 26
+};
+
+const uint32_t CheatFunctionFlags [] =
+{
+ 1 << CHEATFUNC_GOD,
+ 1 << CHEATFUNC_GIVEEVERYTHING,
+ 1 << CHEATFUNC_WARP,
+ 1 << CHEATFUNC_COORDS,
+ 1 << CHEATFUNC_VIEW,
+ 0,
+ 1 << CHEATFUNC_UNLOCK,
+ 1 << CHEATFUNC_CASHMAN,
+ 1 << CHEATFUNC_GIVEALLITEMS,
+ 1 << CHEATFUNC_FRAMERATE,
+ 1 << CHEATFUNC_SKILL,
+ 1 << CHEATFUNC_QUOTEBETA,
+ 1 << CHEATFUNC_HYPER,
+ 1 << CHEATFUNC_MONSTERS,
+ 0,
+ 0,
+ 1 << CHEATFUNC_QUOTETODD,
+ 1 << CHEATFUNC_SHOWMAP,
+ 1 << CHEATFUNC_GOD,
+ 1 << CHEATFUNC_QUOTEALLEN,
+ 1 << CHEATFUNC_CLIP,
+ 1 << CHEATFUNC_GIVEWEAPONS,
+ 1 << CHEATFUNC_GIVEINVENTORY,
+ 1 << CHEATFUNC_GIVEKEYS,
+ 1 << CHEATFUNC_DEBUG,
+ 0,
+ (1 << CHEATFUNC_GOD) | (1 << CHEATFUNC_GIVEEVERYTHING),
+};
+
+// KEEPINSYNC game.h: enum CheatCodeFunctions
+// KEEPINSYNC menus.c: MenuEntry_t ME_CheatCodes[]
+const uint8_t CheatFunctionIDs [] =
+{
+ CHEAT_CASHMAN,
+ CHEAT_CORNHOLIO,
+ CHEAT_STUFF,
+ CHEAT_WEAPONS,
+ CHEAT_ITEMS,
+ CHEAT_INVENTORY,
+ CHEAT_KEYS,
+ CHEAT_HYPER,
+ CHEAT_VIEW,
+ CHEAT_SHOWMAP,
+ CHEAT_UNLOCK,
+ CHEAT_CLIP,
+ CHEAT_SCOTTY,
+ CHEAT_SKILL,
+ CHEAT_MONSTERS,
+ CHEAT_RATE,
+ CHEAT_BETA,
+ CHEAT_TODD,
+ CHEAT_ALLEN,
+ CHEAT_COORDS,
+ CHEAT_DEBUG,
+};
+
+char const * const g_NAMMattCheatQuote = "Matt Saettler. matts@saettler.com";
+
+void G_SetupCheats(void)
+{
+ // KEEPINSYNC: NAM_WW2GI_CHEATS
+ if (WW2GI)
+ {
+#if 0
+ // WWII GI's original cheat prefix temporarily disabled because W conflicts with WSAD movement
+ CheatKeys[0] = CheatKeys[1] = sc_W;
+#else
+ CheatKeys[0] = sc_G;
+ CheatKeys[1] = sc_I;
+#endif
+
+ Bstrcpy(CheatStrings[0], "2god");
+ Bstrcpy(CheatStrings[1], "2blood");
+ Bstrcpy(CheatStrings[2], "2level###");
+ Bstrcpy(CheatStrings[3], "2coords");
+ Bstrcpy(CheatStrings[4], "2view");
+ Bstrcpy(CheatStrings[5], "");
+ Bstrcpy(CheatStrings[7], "");
+ Bstrcpy(CheatStrings[8], "");
+ Bstrcpy(CheatStrings[9], "2rate");
+ Bstrcpy(CheatStrings[10], "2skill");
+ Bstrcpy(CheatStrings[11], "");
+ Bstrcpy(CheatStrings[12], "");
+ Bstrcpy(CheatStrings[13], "");
+ Bstrcpy(CheatStrings[16], "2matt");
+ Bstrcpy(CheatStrings[17], "2showmap");
+ Bstrcpy(CheatStrings[18], "2ryan");
+ Bstrcpy(CheatStrings[19], "");
+ Bstrcpy(CheatStrings[20], "2clip");
+ Bstrcpy(CheatStrings[21], "2weapons");
+ Bstrcpy(CheatStrings[22], "2inventory");
+ Bstrcpy(CheatStrings[23], "");
+ Bstrcpy(CheatStrings[24], "2debug");
+ Bstrcpy(CheatStrings[26], "2cgs");
+
+ Bstrcpy(GametypeNames[0], "GI Match (Spawn)");
+ Bstrcpy(GametypeNames[2], "GI Match (No Spawn)");
+}
+ else if (NAM)
+ {
+ CheatKeys[0] = sc_N;
+ CheatKeys[1] = sc_V;
+
+ Bstrcpy(CheatStrings[0], "acaleb");
+ Bstrcpy(CheatStrings[1], "ablood");
+ Bstrcpy(CheatStrings[2], "alevel###");
+ Bstrcpy(CheatStrings[3], "acoords");
+ Bstrcpy(CheatStrings[4], "aview");
+ Bstrcpy(CheatStrings[5], "");
+ Bstrcpy(CheatStrings[7], "");
+ Bstrcpy(CheatStrings[8], "");
+ Bstrcpy(CheatStrings[9], "arate");
+ Bstrcpy(CheatStrings[10], "askill");
+ Bstrcpy(CheatStrings[11], "");
+ Bstrcpy(CheatStrings[12], "ahyper");
+ Bstrcpy(CheatStrings[13], "");
+ Bstrcpy(CheatStrings[16], "amatt");
+ Bstrcpy(CheatStrings[17], "ashowmap");
+ Bstrcpy(CheatStrings[18], "agod");
+ Bstrcpy(CheatStrings[19], "");
+ Bstrcpy(CheatStrings[20], "aclip");
+ Bstrcpy(CheatStrings[21], "aweapons");
+ Bstrcpy(CheatStrings[22], "ainventory");
+ Bstrcpy(CheatStrings[23], "");
+ Bstrcpy(CheatStrings[24], "adebug");
+ Bstrcpy(CheatStrings[26], "acgs");
+
+ Bstrcpy(GametypeNames[0], "GruntMatch (Spawn)");
+ Bstrcpy(GametypeNames[2], "GruntMatch (No Spawn)");
+ }
+}
+
+
+static void doinvcheat(int32_t invidx, int32_t defaultnum, int32_t event)
+{
+ defaultnum = VM_OnEventWithReturn(event, g_player[myconnectindex].ps->i, myconnectindex, defaultnum);
+ if (defaultnum >= 0)
+ g_player[myconnectindex].ps->inv_amount[invidx] = defaultnum;
+}
+
+static void G_CheatGetInv(void)
+{
+ doinvcheat(GET_STEROIDS, 400, EVENT_CHEATGETSTEROIDS);
+ doinvcheat(GET_HEATS, 1200, EVENT_CHEATGETHEAT);
+ doinvcheat(GET_BOOTS, 200, EVENT_CHEATGETBOOT);
+ doinvcheat(GET_SHIELD, 100, EVENT_CHEATGETSHIELD);
+ doinvcheat(GET_SCUBA, 6400, EVENT_CHEATGETSCUBA);
+ doinvcheat(GET_HOLODUKE, 2400, EVENT_CHEATGETHOLODUKE);
+ doinvcheat(GET_JETPACK, 1600, EVENT_CHEATGETJETPACK);
+ doinvcheat(GET_FIRSTAID, g_player[myconnectindex].ps->max_player_health, EVENT_CHEATGETFIRSTAID);
+}
+
+static void end_cheat(void)
+{
+ g_player[myconnectindex].ps->cheat_phase = 0;
+ KB_FlushKeyboardQueue();
+}
+
+static int32_t cheatbuflen;
+static int8_t cheatbuf[MAXCHEATLEN];
+
+void G_DoCheats(void)
+{
+ int32_t ch, i, j, k=0, weapon;
+ static int32_t vol1inited=0;
+ char consolecheat = 0; // JBF 20030914
+
+ if (osdcmd_cheatsinfo_stat.cheatnum != -1)
+ {
+ if (ud.player_skill == 4)
+ {
+ P_DoQuote(QUOTE_CHEATS_DISABLED, g_player[myconnectindex].ps);
+ osdcmd_cheatsinfo_stat.cheatnum = -1;
+ return;
+ }
+
+ // JBF 20030914
+ k = osdcmd_cheatsinfo_stat.cheatnum;
+ osdcmd_cheatsinfo_stat.cheatnum = -1;
+ consolecheat = 1;
+ }
+
+ if (VOLUMEONE && !vol1inited)
+ {
+ // change "scotty###" to "scotty##"
+ uint32_t const warpend = Bstrlen(CheatStrings[2]);
+ if (strcmp(&CheatStrings[2][warpend-3], "###") == 0)
+ CheatStrings[2][warpend-1] = '\0';
+
+ Bstrcpy(CheatStrings[6], "");
+ vol1inited = 1;
+ }
+
+ if (consolecheat && numplayers < 2 && ud.recstat == 0)
+ goto FOUNDCHEAT;
+
+ if (g_player[myconnectindex].ps->gm & (MODE_TYPE|MODE_MENU))
+ return;
+
+ if (g_player[myconnectindex].ps->cheat_phase == 1)
+ {
+ while (KB_KeyWaiting())
+ {
+ ch = Btolower(KB_GetCh());
+
+ if (!((ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9')))
+ {
+ g_player[myconnectindex].ps->cheat_phase = 0;
+ // P_DoQuote(QUOTE_46,g_player[myconnectindex].ps);
+ return;
+ }
+
+ cheatbuf[cheatbuflen++] = (int8_t) ch;
+ // This assertion is not obvious, but it should hold because of the
+ // cheat string matching logic below.
+ Bassert(cheatbuflen < (signed)sizeof(cheatbuf));
+ cheatbuf[cheatbuflen] = 0;
+ // KB_ClearKeysDown();
+
+ for (k=0; k < NUMCHEATCODES; k++)
+ {
+ for (j = 0; j= '0' && ch <= '9'))
+ {
+ if (CheatStrings[k][j+1] == 0) goto FOUNDCHEAT;
+ if (j == cheatbuflen-1) return;
+ }
+ else break;
+ }
+ }
+
+ g_player[myconnectindex].ps->cheat_phase = 0;
+ return;
+
+ FOUNDCHEAT:
+
+ i = VM_OnEventWithReturn(EVENT_ACTIVATECHEAT, g_player[myconnectindex].ps->i, myconnectindex, k);
+ if (k != CHEAT_COMEGETSOME) // Users are not allowed to interfere with TX's debugging cheat.
+ k = i;
+
+ {
+ switch (k)
+ {
+ case CHEAT_WEAPONS:
+ j = 0;
+
+ if (VOLUMEONE)
+ j = 6;
+
+ for (weapon = PISTOL_WEAPON; weapon < MAX_WEAPONS-j; weapon++)
+ {
+ P_AddAmmo(weapon, g_player[myconnectindex].ps, g_player[myconnectindex].ps->max_ammo_amount[weapon]);
+ g_player[myconnectindex].ps->gotweapon |= (1<got_access = 7;
+ KB_FlushKeyboardQueue();
+ P_DoQuote(QUOTE_CHEAT_ALL_KEYS, g_player[myconnectindex].ps);
+ end_cheat();
+ return;
+
+ case CHEAT_DEBUG:
+ g_Debug = 1-g_Debug;
+
+ G_DumpDebugInfo();
+ Bsprintf(tempbuf, "Gamevars dumped to log");
+ G_AddUserQuote(tempbuf);
+ Bsprintf(tempbuf, "Map dumped to debug.map");
+ G_AddUserQuote(tempbuf);
+ end_cheat();
+ break;
+
+ case CHEAT_CLIP:
+ ud.noclip = !ud.noclip;
+ P_DoQuote(QUOTE_CHEAT_NOCLIP-!ud.noclip, g_player[myconnectindex].ps);
+ end_cheat();
+ return;
+
+ case CHEAT_RESERVED2:
+ g_player[myconnectindex].ps->player_par = 0;
+ g_player[myconnectindex].ps->gm = MODE_EOL;
+ end_cheat();
+ return;
+
+ case CHEAT_ALLEN:
+ P_DoQuote(QUOTE_CHEAT_ALLEN, g_player[myconnectindex].ps);
+ g_player[myconnectindex].ps->cheat_phase = 0;
+ KB_ClearKeyDown(sc_N);
+ return;
+
+ case CHEAT_CORNHOLIO:
+ case CHEAT_KROZ:
+ case CHEAT_COMEGETSOME:
+ {
+ const int32_t pi = g_player[myconnectindex].ps->i;
+
+ ud.god = 1-ud.god;
+
+ if (ud.god)
+ {
+ pus = 1;
+ pub = 1;
+ sprite[pi].cstat = 257;
+
+ actor[pi].t_data[0] = 0;
+ actor[pi].t_data[1] = 0;
+ actor[pi].t_data[2] = 0;
+ actor[pi].t_data[3] = 0;
+ actor[pi].t_data[4] = 0;
+ actor[pi].t_data[5] = 0;
+
+ sprite[pi].hitag = 0;
+ sprite[pi].lotag = 0;
+ sprite[pi].pal = g_player[myconnectindex].ps->palookup;
+
+ if (k != CHEAT_COMEGETSOME)
+ {
+ P_DoQuote(QUOTE_CHEAT_GODMODE_ON, g_player[myconnectindex].ps);
+ }
+ else
+ {
+ Bstrcpy(ScriptQuotes[QUOTE_RESERVED4], "Come Get Some!");
+
+ S_PlaySound(DUKE_GETWEAPON2);
+ P_DoQuote(QUOTE_RESERVED4, g_player[myconnectindex].ps);
+ G_CheatGetInv();
+
+ for (weapon = PISTOL_WEAPON; weapon < MAX_WEAPONS; weapon++)
+ g_player[myconnectindex].ps->gotweapon |= (1<max_ammo_amount[weapon]);
+
+ g_player[myconnectindex].ps->got_access = 7;
+ }
+ }
+ else
+ {
+ sprite[pi].extra = g_player[myconnectindex].ps->max_player_health;
+ actor[pi].extra = -1;
+ g_player[myconnectindex].ps->last_extra = g_player[myconnectindex].ps->max_player_health;
+ P_DoQuote(QUOTE_CHEAT_GODMODE_OFF, g_player[myconnectindex].ps);
+ }
+
+ sprite[pi].extra = g_player[myconnectindex].ps->max_player_health;
+ actor[pi].extra = 0;
+
+ if (k != CHEAT_COMEGETSOME)
+ g_player[myconnectindex].ps->dead_flag = 0;
+
+ end_cheat();
+ return;
+ }
+
+ case CHEAT_STUFF:
+ j = 0;
+
+ if (VOLUMEONE)
+ j = 6;
+
+ for (weapon = PISTOL_WEAPON; weapon < MAX_WEAPONS-j; weapon++)
+ g_player[myconnectindex].ps->gotweapon |= (1<max_ammo_amount[weapon]);
+
+ G_CheatGetInv();
+ g_player[myconnectindex].ps->got_access = 7;
+ P_DoQuote(QUOTE_CHEAT_EVERYTHING, g_player[myconnectindex].ps);
+
+ // P_DoQuote(QUOTE_21,g_player[myconnectindex].ps);
+ g_player[myconnectindex].ps->inven_icon = ICON_FIRSTAID;
+
+ end_cheat();
+ return;
+
+ case CHEAT_SCOTTY:
+ case CHEAT_SKILL:
+ if (k == CHEAT_SCOTTY)
+ {
+ i = Bstrlen(CheatStrings[k])-3+VOLUMEONE;
+ if (!consolecheat)
+ {
+ // JBF 20030914
+ int16_t volnume, levnume;
+ if (VOLUMEALL)
+ {
+ volnume = cheatbuf[i] - '0';
+ levnume = (cheatbuf[i+1] - '0')*10+(cheatbuf[i+2]-'0');
+ }
+ else
+ {
+ volnume = cheatbuf[i] - '0';
+ levnume = cheatbuf[i+1] - '0';
+ }
+
+ volnume--;
+ levnume--;
+
+ if ((VOLUMEONE && volnume > 0) || volnume > g_numVolumes-1 ||
+ levnume >= MAXLEVELS || MapInfo[volnume *MAXLEVELS+levnume].filename == NULL)
+ {
+ end_cheat();
+ return;
+ }
+
+ ud.m_volume_number = ud.volume_number = volnume;
+ ud.m_level_number = ud.level_number = levnume;
+ }
+ else
+ {
+ // JBF 20030914
+ ud.m_volume_number = ud.volume_number = osdcmd_cheatsinfo_stat.volume;
+ ud.m_level_number = ud.level_number = osdcmd_cheatsinfo_stat.level;
+ }
+ }
+ else
+ {
+ if (!consolecheat)
+ {
+ i = Bstrlen(CheatStrings[k])-1;
+ ud.m_player_skill = ud.player_skill = cheatbuf[i] - '1';
+ }
+ else
+ {
+ ud.m_player_skill = ud.player_skill = osdcmd_cheatsinfo_stat.volume;
+ }
+ }
+ /*if (numplayers > 1 && g_netServer)
+ Net_NewGame(ud.m_volume_number,ud.m_level_number);
+ else*/ g_player[myconnectindex].ps->gm |= MODE_RESTART;
+
+ end_cheat();
+ return;
+
+ case CHEAT_COORDS:
+#ifdef USE_OPENGL
+ if (++ud.coords >= 3) ud.coords = 0;
+#else
+ if (++ud.coords >= 2) ud.coords = 0;
+#endif
+ end_cheat();
+ return;
+
+ case CHEAT_VIEW:
+ if (g_player[myconnectindex].ps->over_shoulder_on)
+ g_player[myconnectindex].ps->over_shoulder_on = 0;
+ else
+ {
+ g_player[myconnectindex].ps->over_shoulder_on = 1;
+ CAMERADIST = 0;
+ CAMERACLOCK = totalclock;
+ }
+ // P_DoQuote(QUOTE_CHEATS_DISABLED,g_player[myconnectindex].ps);
+ end_cheat();
+ return;
+
+ case CHEAT_TIME:
+ // P_DoQuote(QUOTE_21,g_player[myconnectindex].ps);
+ end_cheat();
+ return;
+
+ case CHEAT_UNLOCK:
+ if (VOLUMEONE) return;
+
+ for (i=numsectors-1; i>=0; i--) //Unlock
+ {
+ j = sector[i].lotag;
+ if (j == -1 || j == 32767) continue;
+ if ((j & 0x7fff) > 2)
+ {
+ if (j&(0xffff-16384))
+ sector[i].lotag &= (0xffff-16384);
+ G_OperateSectors(i, g_player[myconnectindex].ps->i);
+ }
+ }
+ G_OperateForceFields(g_player[myconnectindex].ps->i, -1);
+
+ P_DoQuote(QUOTE_CHEAT_UNLOCK, g_player[myconnectindex].ps);
+ end_cheat();
+ return;
+
+ case CHEAT_CASHMAN:
+ ud.cashman = 1-ud.cashman;
+ KB_ClearKeyDown(sc_N);
+ g_player[myconnectindex].ps->cheat_phase = 0;
+ return;
+
+ case CHEAT_ITEMS:
+ G_CheatGetInv();
+ g_player[myconnectindex].ps->got_access = 7;
+ P_DoQuote(QUOTE_CHEAT_EVERYTHING, g_player[myconnectindex].ps);
+ end_cheat();
+ return;
+
+ case CHEAT_SHOWMAP: // SHOW ALL OF THE MAP TOGGLE;
+ ud.showallmap = !ud.showallmap;
+
+ for (i=0; i<(MAXSECTORS>>3); i++)
+ show2dsector[i] = ud.showallmap*255;
+
+ P_DoQuote(ud.showallmap ? QUOTE_SHOW_MAP_ON : QUOTE_SHOW_MAP_OFF,
+ g_player[myconnectindex].ps);
+
+ end_cheat();
+ return;
+
+ case CHEAT_TODD:
+ if (NAM)
+ {
+ Bstrcpy(ScriptQuotes[QUOTE_RESERVED4], g_NAMMattCheatQuote);
+ P_DoQuote(QUOTE_RESERVED4, g_player[myconnectindex].ps);
+ }
+ else
+ {
+ P_DoQuote(QUOTE_CHEAT_TODD, g_player[myconnectindex].ps);
+ }
+
+ end_cheat();
+ return;
+
+ case CHEAT_RATE:
+ if (ud.tickrate++ > 2)
+ ud.tickrate = 0;
+
+ end_cheat();
+ return;
+
+ case CHEAT_BETA:
+ P_DoQuote(QUOTE_CHEAT_BETA, g_player[myconnectindex].ps);
+ KB_ClearKeyDown(sc_H);
+ end_cheat();
+ return;
+
+ case CHEAT_HYPER:
+ g_player[myconnectindex].ps->inv_amount[GET_STEROIDS] = 399;
+ g_player[myconnectindex].ps->inv_amount[GET_HEATS] = 1200;
+ P_DoQuote(QUOTE_CHEAT_STEROIDS, g_player[myconnectindex].ps);
+ end_cheat();
+ return;
+
+ case CHEAT_MONSTERS:
+ {
+ const char *s [] ={ "On", "Off", "On (2)" };
+
+ if (++g_noEnemies == 3)
+ g_noEnemies = 0;
+
+ Bsprintf(ScriptQuotes[QUOTE_RESERVED4], "Monsters: %s", s[g_noEnemies]);
+ P_DoQuote(QUOTE_RESERVED4, g_player[myconnectindex].ps);
+
+ end_cheat();
+ return;
+ }
+
+ case CHEAT_RESERVED:
+ case CHEAT_RESERVED3:
+ ud.eog = 1;
+ g_player[myconnectindex].ps->player_par = 0;
+ g_player[myconnectindex].ps->gm |= MODE_EOL;
+ KB_FlushKeyboardQueue();
+ return;
+
+ default:
+ end_cheat();
+ return;
+ }
+ }
+ }
+ }
+ else
+ {
+ if (KB_KeyPressed((uint8_t) CheatKeys[0]))
+ {
+ if (g_player[myconnectindex].ps->cheat_phase >= 0 && numplayers < 2 && ud.recstat == 0)
+ {
+ if (CheatKeys[0] == CheatKeys[1])
+ KB_ClearKeyDown((uint8_t) CheatKeys[0]);
+ g_player[myconnectindex].ps->cheat_phase = -1;
+ }
+ }
+
+ if (KB_KeyPressed((uint8_t) CheatKeys[1]))
+ {
+ if (g_player[myconnectindex].ps->cheat_phase == -1)
+ {
+ if (ud.player_skill == 4)
+ {
+ P_DoQuote(QUOTE_CHEATS_DISABLED, g_player[myconnectindex].ps);
+ g_player[myconnectindex].ps->cheat_phase = 0;
+ }
+ else
+ {
+ g_player[myconnectindex].ps->cheat_phase = 1;
+ // P_DoQuote(QUOTE_25,g_player[myconnectindex].ps);
+ cheatbuflen = 0;
+ }
+ KB_FlushKeyboardQueue();
+ }
+ else if (g_player[myconnectindex].ps->cheat_phase != 0)
+ {
+ g_player[myconnectindex].ps->cheat_phase = 0;
+ KB_ClearKeyDown((uint8_t) CheatKeys[0]);
+ KB_ClearKeyDown((uint8_t) CheatKeys[1]);
+ }
+ }
+ }
+}
diff --git a/polymer/eduke32/source/cheats.h b/polymer/eduke32/source/cheats.h
new file mode 100644
index 000000000..32e9d1bbd
--- /dev/null
+++ b/polymer/eduke32/source/cheats.h
@@ -0,0 +1,91 @@
+//-------------------------------------------------------------------------
+/*
+Copyright (C) 2016 EDuke32 developers and contributors
+
+This file is part of EDuke32.
+
+EDuke32 is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License version 2
+as published by the Free Software Foundation.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+*/
+//-------------------------------------------------------------------------
+
+#pragma once
+
+extern void G_DoCheats(void);
+extern void G_SetupCheats(void);
+
+extern char CheatStrings [][MAXCHEATLEN];
+extern char const * const g_NAMMattCheatQuote;
+
+// Cheats
+// KEEPINSYNC game.c: char CheatStrings[][]
+enum cheatindex_t
+{
+ CHEAT_CORNHOLIO, // 0
+ CHEAT_STUFF,
+ CHEAT_SCOTTY,
+ CHEAT_COORDS,
+ CHEAT_VIEW,
+ CHEAT_TIME, // 5
+ CHEAT_UNLOCK,
+ CHEAT_CASHMAN,
+ CHEAT_ITEMS,
+ CHEAT_RATE,
+ CHEAT_SKILL, // 10
+ CHEAT_BETA,
+ CHEAT_HYPER,
+ CHEAT_MONSTERS,
+ CHEAT_RESERVED,
+ CHEAT_RESERVED2, // 15
+ CHEAT_TODD,
+ CHEAT_SHOWMAP,
+ CHEAT_KROZ,
+ CHEAT_ALLEN,
+ CHEAT_CLIP, // 20
+ CHEAT_WEAPONS,
+ CHEAT_INVENTORY,
+ CHEAT_KEYS,
+ CHEAT_DEBUG,
+ CHEAT_RESERVED3, // 25
+ CHEAT_COMEGETSOME,
+ NUMCHEATS,
+};
+
+// KEEPINSYNC game.c: uint8_t CheatFunctionIDs[]
+// KEEPINSYNC menus.c: MenuEntry_t ME_CheatCodes[]
+enum CheatCodeFunctions
+{
+ CHEATFUNC_CASHMAN,
+ CHEATFUNC_GOD,
+ CHEATFUNC_GIVEEVERYTHING,
+ CHEATFUNC_GIVEWEAPONS,
+ CHEATFUNC_GIVEALLITEMS,
+ CHEATFUNC_GIVEINVENTORY,
+ CHEATFUNC_GIVEKEYS,
+ CHEATFUNC_HYPER,
+ CHEATFUNC_VIEW,
+ CHEATFUNC_SHOWMAP,
+ CHEATFUNC_UNLOCK,
+ CHEATFUNC_CLIP,
+ CHEATFUNC_WARP,
+ CHEATFUNC_SKILL,
+ CHEATFUNC_MONSTERS,
+ CHEATFUNC_FRAMERATE,
+ CHEATFUNC_QUOTEBETA,
+ CHEATFUNC_QUOTETODD,
+ CHEATFUNC_QUOTEALLEN,
+ CHEATFUNC_COORDS,
+ CHEATFUNC_DEBUG,
+ NUMCHEATFUNCS,
+};
diff --git a/polymer/eduke32/source/duke3d.h b/polymer/eduke32/source/duke3d.h
index 4ee753369..644fc73ee 100644
--- a/polymer/eduke32/source/duke3d.h
+++ b/polymer/eduke32/source/duke3d.h
@@ -1,6 +1,6 @@
//-------------------------------------------------------------------------
/*
-Copyright (C) 2010 EDuke32 developers and contributors
+Copyright (C) 2016 EDuke32 developers and contributors
This file is part of EDuke32.
diff --git a/polymer/eduke32/source/game.c b/polymer/eduke32/source/game.c
index 4d1f50cb0..744945f7b 100644
--- a/polymer/eduke32/source/game.c
+++ b/polymer/eduke32/source/game.c
@@ -1,6 +1,6 @@
//-------------------------------------------------------------------------
/*
-Copyright (C) 2010 EDuke32 developers and contributors
+Copyright (C) 2016 EDuke32 developers and contributors
This file is part of EDuke32.
@@ -23,44 +23,19 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#define game_c_
#include "duke3d.h"
-
-#include "baselayer.h"
+#include "compat.h"
#include "renderlayer.h"
-
-#include "scriplib.h"
-#include "file_lib.h"
-#include "gamedefs.h"
-#include "keyboard.h"
-#include "mouse.h" // JBF 20030809
-#include "joystick.h"
-#include "function.h"
-#include "control.h"
-#include "fx_man.h"
-#include "sounds.h"
-#include "config.h"
-#include "osd.h"
#include "osdfuncs.h"
#include "osdcmds.h"
-#include "scriptfile.h"
-#include "grpscan.h"
-#include "gamedef.h"
-#include "kplib.h"
#include "crc32.h"
-#include "hightile.h"
-#include "control.h"
-#include "lz4.h"
#include "net.h"
-#include "premap.h"
-#include "gameexec.h"
#include "menus.h"
#include "savegame.h"
#include "anim.h"
#include "demo.h"
-#include "common.h"
-#include "common_game.h"
#include "input.h"
-#include "compat.h"
#include "colmatch.h"
+#include "cheats.h"
#ifdef __ANDROID__
#include "android.h"
@@ -83,9 +58,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#endif
#ifdef _WIN32
-# include "winlayer.h"
# define WIN32_LEAN_AND_MEAN
-# include
# include
# define UPDATEINTERVAL 604800 // 1w
# include "winbits.h"
@@ -123,7 +96,7 @@ char boardfilename[BMAX_PATH] = {0}, currentboardfilename[BMAX_PATH] = {0};
int32_t voting = -1;
int32_t vote_map = -1, vote_episode = -1;
-static int32_t g_Debug = 0;
+int32_t g_Debug = 0;
static int32_t g_noLogoAnim = 0;
static int32_t g_noLogo = 0;
@@ -4932,7 +4905,7 @@ void G_DrawRooms(int32_t snum, int32_t smoothratio)
}
}
-static void G_DumpDebugInfo(void)
+void G_DumpDebugInfo(void)
{
#if !defined LUNATIC
int32_t i,j,x;
@@ -8100,588 +8073,6 @@ skip:
#endif
}
-
-// KEEPINSYNC game.h: enum cheatindex_t
-char CheatStrings[][MAXCHEATLEN] =
-{
- "cornholio", // 0
- "stuff", // 1
- "scotty###", // 2
- "coords", // 3
- "view", // 4
- "time", // 5
- "unlock", // 6
- "cashman", // 7
- "items", // 8
- "rate", // 9
- "skill#", // 10
- "beta", // 11
- "hyper", // 12
- "monsters", // 13
- "", // 14
- "", // 15
- "todd", // 16
- "showmap", // 17
- "kroz", // 18
- "allen", // 19
- "clip", // 20
- "weapons", // 21
- "inventory", // 22
- "keys", // 23
- "debug", // 24
- "", // 25
- "cgs", // 26
-};
-
-const uint32_t CheatFunctionFlags[] =
-{
- 1 << CHEATFUNC_GOD,
- 1 << CHEATFUNC_GIVEEVERYTHING,
- 1 << CHEATFUNC_WARP,
- 1 << CHEATFUNC_COORDS,
- 1 << CHEATFUNC_VIEW,
- 0,
- 1 << CHEATFUNC_UNLOCK,
- 1 << CHEATFUNC_CASHMAN,
- 1 << CHEATFUNC_GIVEALLITEMS,
- 1 << CHEATFUNC_FRAMERATE,
- 1 << CHEATFUNC_SKILL,
- 1 << CHEATFUNC_QUOTEBETA,
- 1 << CHEATFUNC_HYPER,
- 1 << CHEATFUNC_MONSTERS,
- 0,
- 0,
- 1 << CHEATFUNC_QUOTETODD,
- 1 << CHEATFUNC_SHOWMAP,
- 1 << CHEATFUNC_GOD,
- 1 << CHEATFUNC_QUOTEALLEN,
- 1 << CHEATFUNC_CLIP,
- 1 << CHEATFUNC_GIVEWEAPONS,
- 1 << CHEATFUNC_GIVEINVENTORY,
- 1 << CHEATFUNC_GIVEKEYS,
- 1 << CHEATFUNC_DEBUG,
- 0,
- (1 << CHEATFUNC_GOD) | (1 << CHEATFUNC_GIVEEVERYTHING),
-};
-
-// KEEPINSYNC game.h: enum CheatCodeFunctions
-// KEEPINSYNC menus.c: MenuEntry_t ME_CheatCodes[]
-const uint8_t CheatFunctionIDs[] =
-{
- CHEAT_CASHMAN,
- CHEAT_CORNHOLIO,
- CHEAT_STUFF,
- CHEAT_WEAPONS,
- CHEAT_ITEMS,
- CHEAT_INVENTORY,
- CHEAT_KEYS,
- CHEAT_HYPER,
- CHEAT_VIEW,
- CHEAT_SHOWMAP,
- CHEAT_UNLOCK,
- CHEAT_CLIP,
- CHEAT_SCOTTY,
- CHEAT_SKILL,
- CHEAT_MONSTERS,
- CHEAT_RATE,
- CHEAT_BETA,
- CHEAT_TODD,
- CHEAT_ALLEN,
- CHEAT_COORDS,
- CHEAT_DEBUG,
-};
-
-char const * const g_NAMMattCheatQuote = "Matt Saettler. matts@saettler.com";
-
-static void doinvcheat(int32_t invidx, int32_t defaultnum, int32_t event)
-{
- defaultnum = VM_OnEventWithReturn(event, g_player[myconnectindex].ps->i, myconnectindex, defaultnum);
- if (defaultnum >= 0)
- g_player[myconnectindex].ps->inv_amount[invidx] = defaultnum;
-}
-
-static void G_CheatGetInv(void)
-{
- doinvcheat(GET_STEROIDS, 400, EVENT_CHEATGETSTEROIDS);
- doinvcheat(GET_HEATS, 1200, EVENT_CHEATGETHEAT);
- doinvcheat(GET_BOOTS, 200, EVENT_CHEATGETBOOT);
- doinvcheat(GET_SHIELD, 100, EVENT_CHEATGETSHIELD);
- doinvcheat(GET_SCUBA, 6400, EVENT_CHEATGETSCUBA);
- doinvcheat(GET_HOLODUKE, 2400, EVENT_CHEATGETHOLODUKE);
- doinvcheat(GET_JETPACK, 1600, EVENT_CHEATGETJETPACK);
- doinvcheat(GET_FIRSTAID, g_player[myconnectindex].ps->max_player_health, EVENT_CHEATGETFIRSTAID);
-}
-
-static void end_cheat(void)
-{
- g_player[myconnectindex].ps->cheat_phase = 0;
- KB_FlushKeyboardQueue();
-}
-
-static int32_t cheatbuflen;
-static int8_t cheatbuf[MAXCHEATLEN];
-
-GAME_STATIC void G_DoCheats(void)
-{
- int32_t ch, i, j, k=0, weapon;
- static int32_t vol1inited=0;
- char consolecheat = 0; // JBF 20030914
-
- if (osdcmd_cheatsinfo_stat.cheatnum != -1)
- {
- if (ud.player_skill == 4)
- {
- P_DoQuote(QUOTE_CHEATS_DISABLED,g_player[myconnectindex].ps);
- osdcmd_cheatsinfo_stat.cheatnum = -1;
- return;
- }
-
- // JBF 20030914
- k = osdcmd_cheatsinfo_stat.cheatnum;
- osdcmd_cheatsinfo_stat.cheatnum = -1;
- consolecheat = 1;
- }
-
- if (VOLUMEONE && !vol1inited)
- {
- // change "scotty###" to "scotty##"
- uint32_t const warpend = Bstrlen(CheatStrings[2]);
- if (strcmp(&CheatStrings[2][warpend-3], "###") == 0)
- CheatStrings[2][warpend-1] = '\0';
-
- Bstrcpy(CheatStrings[6],"");
- vol1inited = 1;
- }
-
- if (consolecheat && numplayers < 2 && ud.recstat == 0)
- goto FOUNDCHEAT;
-
- if (g_player[myconnectindex].ps->gm & (MODE_TYPE|MODE_MENU))
- return;
-
- if (g_player[myconnectindex].ps->cheat_phase == 1)
- {
- while (KB_KeyWaiting())
- {
- ch = Btolower(KB_GetCh());
-
- if (!((ch >= 'a' && ch <= 'z') || (ch >= '0' && ch <= '9')))
- {
- g_player[myconnectindex].ps->cheat_phase = 0;
-// P_DoQuote(QUOTE_46,g_player[myconnectindex].ps);
- return;
- }
-
- cheatbuf[cheatbuflen++] = (int8_t)ch;
- // This assertion is not obvious, but it should hold because of the
- // cheat string matching logic below.
- Bassert(cheatbuflen < (signed)sizeof(cheatbuf));
- cheatbuf[cheatbuflen] = 0;
-// KB_ClearKeysDown();
-
- for (k=0; k < NUMCHEATCODES; k++)
- {
- for (j = 0; j= '0' && ch <= '9'))
- {
- if (CheatStrings[k][j+1] == 0) goto FOUNDCHEAT;
- if (j == cheatbuflen-1) return;
- }
- else break;
- }
- }
-
- g_player[myconnectindex].ps->cheat_phase = 0;
- return;
-
-FOUNDCHEAT:
-
- i = VM_OnEventWithReturn(EVENT_ACTIVATECHEAT, g_player[myconnectindex].ps->i, myconnectindex, k);
- if (k != CHEAT_COMEGETSOME) // Users are not allowed to interfere with TX's debugging cheat.
- k = i;
-
- {
- switch (k)
- {
- case CHEAT_WEAPONS:
- j = 0;
-
- if (VOLUMEONE)
- j = 6;
-
- for (weapon = PISTOL_WEAPON; weapon < MAX_WEAPONS-j; weapon++)
- {
- P_AddAmmo(weapon, g_player[myconnectindex].ps, g_player[myconnectindex].ps->max_ammo_amount[weapon]);
- g_player[myconnectindex].ps->gotweapon |= (1<got_access = 7;
- KB_FlushKeyboardQueue();
- P_DoQuote(QUOTE_CHEAT_ALL_KEYS, g_player[myconnectindex].ps);
- end_cheat();
- return;
-
- case CHEAT_DEBUG:
- g_Debug = 1-g_Debug;
-
- G_DumpDebugInfo();
- Bsprintf(tempbuf,"Gamevars dumped to log");
- G_AddUserQuote(tempbuf);
- Bsprintf(tempbuf,"Map dumped to debug.map");
- G_AddUserQuote(tempbuf);
- end_cheat();
- break;
-
- case CHEAT_CLIP:
- ud.noclip = !ud.noclip;
- P_DoQuote(QUOTE_CHEAT_NOCLIP-!ud.noclip, g_player[myconnectindex].ps);
- end_cheat();
- return;
-
- case CHEAT_RESERVED2:
- g_player[myconnectindex].ps->player_par = 0;
- g_player[myconnectindex].ps->gm = MODE_EOL;
- end_cheat();
- return;
-
- case CHEAT_ALLEN:
- P_DoQuote(QUOTE_CHEAT_ALLEN,g_player[myconnectindex].ps);
- g_player[myconnectindex].ps->cheat_phase = 0;
- KB_ClearKeyDown(sc_N);
- return;
-
- case CHEAT_CORNHOLIO:
- case CHEAT_KROZ:
- case CHEAT_COMEGETSOME:
- {
- const int32_t pi = g_player[myconnectindex].ps->i;
-
- ud.god = 1-ud.god;
-
- if (ud.god)
- {
- pus = 1;
- pub = 1;
- sprite[pi].cstat = 257;
-
- actor[pi].t_data[0] = 0;
- actor[pi].t_data[1] = 0;
- actor[pi].t_data[2] = 0;
- actor[pi].t_data[3] = 0;
- actor[pi].t_data[4] = 0;
- actor[pi].t_data[5] = 0;
-
- sprite[pi].hitag = 0;
- sprite[pi].lotag = 0;
- sprite[pi].pal = g_player[myconnectindex].ps->palookup;
-
- if (k != CHEAT_COMEGETSOME)
- {
- P_DoQuote(QUOTE_CHEAT_GODMODE_ON, g_player[myconnectindex].ps);
- }
- else
- {
- Bstrcpy(ScriptQuotes[QUOTE_RESERVED4],"Come Get Some!");
-
- S_PlaySound(DUKE_GETWEAPON2);
- P_DoQuote(QUOTE_RESERVED4, g_player[myconnectindex].ps);
- G_CheatGetInv();
-
- for (weapon = PISTOL_WEAPON; weapon < MAX_WEAPONS; weapon++)
- g_player[myconnectindex].ps->gotweapon |= (1<max_ammo_amount[weapon]);
-
- g_player[myconnectindex].ps->got_access = 7;
- }
- }
- else
- {
- sprite[pi].extra = g_player[myconnectindex].ps->max_player_health;
- actor[pi].extra = -1;
- g_player[myconnectindex].ps->last_extra = g_player[myconnectindex].ps->max_player_health;
- P_DoQuote(QUOTE_CHEAT_GODMODE_OFF, g_player[myconnectindex].ps);
- }
-
- sprite[pi].extra = g_player[myconnectindex].ps->max_player_health;
- actor[pi].extra = 0;
-
- if (k != CHEAT_COMEGETSOME)
- g_player[myconnectindex].ps->dead_flag = 0;
-
- end_cheat();
- return;
- }
-
- case CHEAT_STUFF:
- j = 0;
-
- if (VOLUMEONE)
- j = 6;
-
- for (weapon = PISTOL_WEAPON; weapon < MAX_WEAPONS-j; weapon++)
- g_player[myconnectindex].ps->gotweapon |= (1<max_ammo_amount[weapon]);
-
- G_CheatGetInv();
- g_player[myconnectindex].ps->got_access = 7;
- P_DoQuote(QUOTE_CHEAT_EVERYTHING, g_player[myconnectindex].ps);
-
-// P_DoQuote(QUOTE_21,g_player[myconnectindex].ps);
- g_player[myconnectindex].ps->inven_icon = ICON_FIRSTAID;
-
- end_cheat();
- return;
-
- case CHEAT_SCOTTY:
- case CHEAT_SKILL:
- if (k == CHEAT_SCOTTY)
- {
- i = Bstrlen(CheatStrings[k])-3+VOLUMEONE;
- if (!consolecheat)
- {
- // JBF 20030914
- int16_t volnume,levnume;
- if (VOLUMEALL)
- {
- volnume = cheatbuf[i] - '0';
- levnume = (cheatbuf[i+1] - '0')*10+(cheatbuf[i+2]-'0');
- }
- else
- {
- volnume = cheatbuf[i] - '0';
- levnume = cheatbuf[i+1] - '0';
- }
-
- volnume--;
- levnume--;
-
- if ((VOLUMEONE && volnume > 0) || volnume > g_numVolumes-1 ||
- levnume >= MAXLEVELS || MapInfo[volnume *MAXLEVELS+levnume].filename == NULL)
- {
- end_cheat();
- return;
- }
-
- ud.m_volume_number = ud.volume_number = volnume;
- ud.m_level_number = ud.level_number = levnume;
- }
- else
- {
- // JBF 20030914
- ud.m_volume_number = ud.volume_number = osdcmd_cheatsinfo_stat.volume;
- ud.m_level_number = ud.level_number = osdcmd_cheatsinfo_stat.level;
- }
- }
- else
- {
- if (!consolecheat)
- {
- i = Bstrlen(CheatStrings[k])-1;
- ud.m_player_skill = ud.player_skill = cheatbuf[i] - '1';
- }
- else
- {
- ud.m_player_skill = ud.player_skill = osdcmd_cheatsinfo_stat.volume;
- }
- }
- /*if (numplayers > 1 && g_netServer)
- Net_NewGame(ud.m_volume_number,ud.m_level_number);
- else*/ g_player[myconnectindex].ps->gm |= MODE_RESTART;
-
- end_cheat();
- return;
-
- case CHEAT_COORDS:
-#ifdef USE_OPENGL
- if (++ud.coords >= 3) ud.coords = 0;
-#else
- if (++ud.coords >= 2) ud.coords = 0;
-#endif
- end_cheat();
- return;
-
- case CHEAT_VIEW:
- if (g_player[myconnectindex].ps->over_shoulder_on)
- g_player[myconnectindex].ps->over_shoulder_on = 0;
- else
- {
- g_player[myconnectindex].ps->over_shoulder_on = 1;
- CAMERADIST = 0;
- CAMERACLOCK = totalclock;
- }
-// P_DoQuote(QUOTE_CHEATS_DISABLED,g_player[myconnectindex].ps);
- end_cheat();
- return;
-
- case CHEAT_TIME:
-// P_DoQuote(QUOTE_21,g_player[myconnectindex].ps);
- end_cheat();
- return;
-
- case CHEAT_UNLOCK:
- if (VOLUMEONE) return;
-
- for (i=numsectors-1; i>=0; i--) //Unlock
- {
- j = sector[i].lotag;
- if (j == -1 || j == 32767) continue;
- if ((j & 0x7fff) > 2)
- {
- if (j&(0xffff-16384))
- sector[i].lotag &= (0xffff-16384);
- G_OperateSectors(i,g_player[myconnectindex].ps->i);
- }
- }
- G_OperateForceFields(g_player[myconnectindex].ps->i,-1);
-
- P_DoQuote(QUOTE_CHEAT_UNLOCK,g_player[myconnectindex].ps);
- end_cheat();
- return;
-
- case CHEAT_CASHMAN:
- ud.cashman = 1-ud.cashman;
- KB_ClearKeyDown(sc_N);
- g_player[myconnectindex].ps->cheat_phase = 0;
- return;
-
- case CHEAT_ITEMS:
- G_CheatGetInv();
- g_player[myconnectindex].ps->got_access = 7;
- P_DoQuote(QUOTE_CHEAT_EVERYTHING,g_player[myconnectindex].ps);
- end_cheat();
- return;
-
- case CHEAT_SHOWMAP: // SHOW ALL OF THE MAP TOGGLE;
- ud.showallmap = !ud.showallmap;
-
- for (i=0; i<(MAXSECTORS>>3); i++)
- show2dsector[i] = ud.showallmap*255;
-
- P_DoQuote(ud.showallmap ? QUOTE_SHOW_MAP_ON : QUOTE_SHOW_MAP_OFF,
- g_player[myconnectindex].ps);
-
- end_cheat();
- return;
-
- case CHEAT_TODD:
- if (NAM)
- {
- Bstrcpy(ScriptQuotes[QUOTE_RESERVED4], g_NAMMattCheatQuote);
- P_DoQuote(QUOTE_RESERVED4,g_player[myconnectindex].ps);
- }
- else
- {
- P_DoQuote(QUOTE_CHEAT_TODD,g_player[myconnectindex].ps);
- }
-
- end_cheat();
- return;
-
- case CHEAT_RATE:
- if (ud.tickrate++ > 2)
- ud.tickrate = 0;
-
- end_cheat();
- return;
-
- case CHEAT_BETA:
- P_DoQuote(QUOTE_CHEAT_BETA,g_player[myconnectindex].ps);
- KB_ClearKeyDown(sc_H);
- end_cheat();
- return;
-
- case CHEAT_HYPER:
- g_player[myconnectindex].ps->inv_amount[GET_STEROIDS] = 399;
- g_player[myconnectindex].ps->inv_amount[GET_HEATS] = 1200;
- P_DoQuote(QUOTE_CHEAT_STEROIDS,g_player[myconnectindex].ps);
- end_cheat();
- return;
-
- case CHEAT_MONSTERS:
- {
- const char *s[] = { "On", "Off", "On (2)" };
-
- if (++g_noEnemies == 3)
- g_noEnemies = 0;
-
- Bsprintf(ScriptQuotes[QUOTE_RESERVED4], "Monsters: %s", s[g_noEnemies]);
- P_DoQuote(QUOTE_RESERVED4,g_player[myconnectindex].ps);
-
- end_cheat();
- return;
- }
-
- case CHEAT_RESERVED:
- case CHEAT_RESERVED3:
- ud.eog = 1;
- g_player[myconnectindex].ps->player_par = 0;
- g_player[myconnectindex].ps->gm |= MODE_EOL;
- KB_FlushKeyboardQueue();
- return;
-
- default:
- end_cheat();
- return;
- }
- }
- }
- }
- else
- {
- if (KB_KeyPressed((uint8_t)CheatKeys[0]))
- {
- if (g_player[myconnectindex].ps->cheat_phase >= 0 && numplayers < 2 && ud.recstat == 0)
- {
- if (CheatKeys[0] == CheatKeys[1])
- KB_ClearKeyDown((uint8_t)CheatKeys[0]);
- g_player[myconnectindex].ps->cheat_phase = -1;
- }
- }
-
- if (KB_KeyPressed((uint8_t)CheatKeys[1]))
- {
- if (g_player[myconnectindex].ps->cheat_phase == -1)
- {
- if (ud.player_skill == 4)
- {
- P_DoQuote(QUOTE_CHEATS_DISABLED,g_player[myconnectindex].ps);
- g_player[myconnectindex].ps->cheat_phase = 0;
- }
- else
- {
- g_player[myconnectindex].ps->cheat_phase = 1;
- // P_DoQuote(QUOTE_25,g_player[myconnectindex].ps);
- cheatbuflen = 0;
- }
- KB_FlushKeyboardQueue();
- }
- else if (g_player[myconnectindex].ps->cheat_phase != 0)
- {
- g_player[myconnectindex].ps->cheat_phase = 0;
- KB_ClearKeyDown((uint8_t)CheatKeys[0]);
- KB_ClearKeyDown((uint8_t)CheatKeys[1]);
- }
- }
- }
-}
-
void G_SetViewportShrink(int32_t dir)
{
if (ud.screen_size == 8 && dir!=0 && (dir>0)==(int32_t)ud.statusbarmode)
@@ -11595,76 +10986,7 @@ int32_t app_main(int32_t argc, char const * const * argv)
G_LoadGroups(!g_noAutoLoad && !ud.config.NoAutoLoad);
// flushlogwindow = 1;
- // KEEPINSYNC: NAM_WW2GI_CHEATS
- if (WW2GI)
- {
-#if 0
- // WWII GI's original cheat prefix temporarily disabled because W conflicts with WSAD movement
- CheatKeys[0] = CheatKeys[1] = sc_W;
-#else
- CheatKeys[0] = sc_G;
- CheatKeys[1] = sc_I;
-#endif
-
- Bstrcpy(CheatStrings[0], "2god");
- Bstrcpy(CheatStrings[1], "2blood");
- Bstrcpy(CheatStrings[2], "2level###");
- Bstrcpy(CheatStrings[3], "2coords");
- Bstrcpy(CheatStrings[4], "2view");
- Bstrcpy(CheatStrings[5], "");
- Bstrcpy(CheatStrings[7], "");
- Bstrcpy(CheatStrings[8], "");
- Bstrcpy(CheatStrings[9], "2rate");
- Bstrcpy(CheatStrings[10], "2skill");
- Bstrcpy(CheatStrings[11], "");
- Bstrcpy(CheatStrings[12], "");
- Bstrcpy(CheatStrings[13], "");
- Bstrcpy(CheatStrings[16], "2matt");
- Bstrcpy(CheatStrings[17], "2showmap");
- Bstrcpy(CheatStrings[18], "2ryan");
- Bstrcpy(CheatStrings[19], "");
- Bstrcpy(CheatStrings[20], "2clip");
- Bstrcpy(CheatStrings[21], "2weapons");
- Bstrcpy(CheatStrings[22], "2inventory");
- Bstrcpy(CheatStrings[23], "");
- Bstrcpy(CheatStrings[24], "2debug");
- Bstrcpy(CheatStrings[26], "2cgs");
-
- Bstrcpy(GametypeNames[0],"GI Match (Spawn)");
- Bstrcpy(GametypeNames[2],"GI Match (No Spawn)");
- }
- else if (NAM)
- {
- CheatKeys[0] = sc_N;
- CheatKeys[1] = sc_V;
-
- Bstrcpy(CheatStrings[0], "acaleb");
- Bstrcpy(CheatStrings[1], "ablood");
- Bstrcpy(CheatStrings[2], "alevel###");
- Bstrcpy(CheatStrings[3], "acoords");
- Bstrcpy(CheatStrings[4], "aview");
- Bstrcpy(CheatStrings[5], "");
- Bstrcpy(CheatStrings[7], "");
- Bstrcpy(CheatStrings[8], "");
- Bstrcpy(CheatStrings[9], "arate");
- Bstrcpy(CheatStrings[10], "askill");
- Bstrcpy(CheatStrings[11], "");
- Bstrcpy(CheatStrings[12], "ahyper");
- Bstrcpy(CheatStrings[13], "");
- Bstrcpy(CheatStrings[16], "amatt");
- Bstrcpy(CheatStrings[17], "ashowmap");
- Bstrcpy(CheatStrings[18], "agod");
- Bstrcpy(CheatStrings[19], "");
- Bstrcpy(CheatStrings[20], "aclip");
- Bstrcpy(CheatStrings[21], "aweapons");
- Bstrcpy(CheatStrings[22], "ainventory");
- Bstrcpy(CheatStrings[23], "");
- Bstrcpy(CheatStrings[24], "adebug");
- Bstrcpy(CheatStrings[26], "acgs");
-
- Bstrcpy(GametypeNames[0],"GruntMatch (Spawn)");
- Bstrcpy(GametypeNames[2],"GruntMatch (No Spawn)");
- }
+ G_SetupCheats();
if (!usecwd)
G_CleanupSearchPaths();
diff --git a/polymer/eduke32/source/game.h b/polymer/eduke32/source/game.h
index ef3c0c97d..4891f9947 100644
--- a/polymer/eduke32/source/game.h
+++ b/polymer/eduke32/source/game.h
@@ -23,7 +23,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#ifndef game_h_
#define game_h_
-#include "premap.h"
+#include "premap.h" // XXX
#ifdef __cplusplus
extern "C" {
@@ -263,9 +263,6 @@ extern const char *s_buildDate;
extern const char *g_rtsNamePtr;
-extern char CheatStrings[][MAXCHEATLEN];
-extern char const * const g_NAMMattCheatQuote;
-
extern char boardfilename[BMAX_PATH], currentboardfilename[BMAX_PATH];
extern char boardfilename[BMAX_PATH];
@@ -283,6 +280,7 @@ extern int32_t althud_numberpal;
extern int32_t althud_numbertile;
extern int32_t althud_shadows;
+extern int32_t g_Debug;
extern int32_t g_Shareware;
#if !defined LUNATIC
extern int32_t g_cameraClock;
@@ -345,6 +343,7 @@ void A_SpawnRandomGlass(int32_t i,int32_t wallnum,int32_t n);
void A_SpawnWallGlass(int32_t i,int32_t wallnum,int32_t n);
void G_AddUserQuote(const char *daquote);
void G_BackToMenu(void);
+void G_DumpDebugInfo(void);
const char* G_PrintYourTime(void);
const char* G_PrintParTime(void);
@@ -516,68 +515,6 @@ enum {
// left: ST 32767, 65534, 65535
};
-// Cheats
-// KEEPINSYNC game.c: char CheatStrings[][]
-enum cheatindex_t
-{
- CHEAT_CORNHOLIO, // 0
- CHEAT_STUFF,
- CHEAT_SCOTTY,
- CHEAT_COORDS,
- CHEAT_VIEW,
- CHEAT_TIME, // 5
- CHEAT_UNLOCK,
- CHEAT_CASHMAN,
- CHEAT_ITEMS,
- CHEAT_RATE,
- CHEAT_SKILL, // 10
- CHEAT_BETA,
- CHEAT_HYPER,
- CHEAT_MONSTERS,
- CHEAT_RESERVED,
- CHEAT_RESERVED2, // 15
- CHEAT_TODD,
- CHEAT_SHOWMAP,
- CHEAT_KROZ,
- CHEAT_ALLEN,
- CHEAT_CLIP, // 20
- CHEAT_WEAPONS,
- CHEAT_INVENTORY,
- CHEAT_KEYS,
- CHEAT_DEBUG,
- CHEAT_RESERVED3, // 25
- CHEAT_COMEGETSOME,
- NUMCHEATS,
-};
-
-// KEEPINSYNC game.c: uint8_t CheatFunctionIDs[]
-// KEEPINSYNC menus.c: MenuEntry_t ME_CheatCodes[]
-enum CheatCodeFunctions
-{
- CHEATFUNC_CASHMAN,
- CHEATFUNC_GOD,
- CHEATFUNC_GIVEEVERYTHING,
- CHEATFUNC_GIVEWEAPONS,
- CHEATFUNC_GIVEALLITEMS,
- CHEATFUNC_GIVEINVENTORY,
- CHEATFUNC_GIVEKEYS,
- CHEATFUNC_HYPER,
- CHEATFUNC_VIEW,
- CHEATFUNC_SHOWMAP,
- CHEATFUNC_UNLOCK,
- CHEATFUNC_CLIP,
- CHEATFUNC_WARP,
- CHEATFUNC_SKILL,
- CHEATFUNC_MONSTERS,
- CHEATFUNC_FRAMERATE,
- CHEATFUNC_QUOTEBETA,
- CHEATFUNC_QUOTETODD,
- CHEATFUNC_QUOTEALLEN,
- CHEATFUNC_COORDS,
- CHEATFUNC_DEBUG,
- NUMCHEATFUNCS,
-};
-
# define G_ModDirSnprintf(buf, size, basename, ...) \
( \
diff --git a/polymer/eduke32/source/gameexec.c b/polymer/eduke32/source/gameexec.c
index b3531305c..574830a21 100644
--- a/polymer/eduke32/source/gameexec.c
+++ b/polymer/eduke32/source/gameexec.c
@@ -20,22 +20,14 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
//-------------------------------------------------------------------------
-#include "compat.h"
-
-#include
-#include
-#include // sqrt
-
-#include "build.h"
#include "duke3d.h"
-#include "gamedef.h"
-#include "gameexec.h"
+#include
+#include // sqrt
+
#include "scriplib.h"
#include "savegame.h"
-#include "premap.h"
#include "osdcmds.h"
-#include "osd.h"
#include "menus.h"
#include "input.h"
#include "anim.h"
diff --git a/polymer/eduke32/source/gamevars.c b/polymer/eduke32/source/gamevars.c
index 82b3b6cc4..12c84e6d7 100644
--- a/polymer/eduke32/source/gamevars.c
+++ b/polymer/eduke32/source/gamevars.c
@@ -1,6 +1,6 @@
//-------------------------------------------------------------------------
/*
-Copyright (C) 2010 EDuke32 developers and contributors
+Copyright (C) 2016 EDuke32 developers and contributors
This file is part of EDuke32.
@@ -21,11 +21,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
//-------------------------------------------------------------------------
#include "duke3d.h"
-#include "common_game.h"
-#include "gamevars.h"
-#include "gamedef.h"
-#include "osd.h"
-#include "savegame.h"
#include "menus.h"
#define gamevars_c_
diff --git a/polymer/eduke32/source/menus.c b/polymer/eduke32/source/menus.c
index f1408e419..f87b60a1d 100644
--- a/polymer/eduke32/source/menus.c
+++ b/polymer/eduke32/source/menus.c
@@ -1,6 +1,6 @@
//-------------------------------------------------------------------------
/*
-Copyright (C) 2010 EDuke32 developers and contributors
+Copyright (C) 2016 EDuke32 developers and contributors
This file is part of EDuke32.
@@ -20,23 +20,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
//-------------------------------------------------------------------------
-#include "compat.h"
#include "duke3d.h"
-#include "renderlayer.h"
-#include "net.h"
-#include "player.h"
-#include "mouse.h"
-#include "joystick.h"
-#include "osd.h"
#include "osdcmds.h"
-#include "gamedef.h"
-#include "gameexec.h"
#include "savegame.h"
-#include "premap.h"
#include "demo.h"
#include "xxhash.h"
-#include "common.h"
-#include "common_game.h"
#include "input.h"
#include "menus.h"
diff --git a/polymer/eduke32/source/player.c b/polymer/eduke32/source/player.c
index 8a6b5b0d8..b3b72e703 100644
--- a/polymer/eduke32/source/player.c
+++ b/polymer/eduke32/source/player.c
@@ -21,9 +21,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
//-------------------------------------------------------------------------
#include "duke3d.h"
-#include "common_game.h"
-#include "osd.h"
-#include "player.h"
#include "demo.h"
#include "enet/enet.h"
diff --git a/polymer/eduke32/source/premap.c b/polymer/eduke32/source/premap.c
index b03cd2b89..22b322807 100644
--- a/polymer/eduke32/source/premap.c
+++ b/polymer/eduke32/source/premap.c
@@ -1,6 +1,6 @@
//-------------------------------------------------------------------------
/*
-Copyright (C) 2010 EDuke32 developers and contributors
+Copyright (C) 2016 EDuke32 developers and contributors
This file is part of EDuke32.
@@ -21,14 +21,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
//-------------------------------------------------------------------------
#include "duke3d.h"
-#include "game.h"
-#include "common_game.h"
-#include "osd.h"
-#include "gamedef.h"
-#include "premap.h"
-#include "sounds.h"
-#include "fx_man.h"
-#include "gameexec.h"
#include "anim.h"
#include "menus.h"
#include "demo.h"
diff --git a/polymer/eduke32/source/sector.c b/polymer/eduke32/source/sector.c
index 1d6d33ae1..576ac0262 100644
--- a/polymer/eduke32/source/sector.c
+++ b/polymer/eduke32/source/sector.c
@@ -23,12 +23,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#define sector_c_
#include "duke3d.h"
-#include "sector.h"
-#include "gamedef.h"
-#include "gameexec.h"
-#include "premap.h"
-#include "osd.h"
-#include "common_game.h"
#include "input.h"
// PRIMITIVE
diff --git a/polymer/eduke32/source/sounds.c b/polymer/eduke32/source/sounds.c
index efe62177c..7ebc5f7b5 100644
--- a/polymer/eduke32/source/sounds.c
+++ b/polymer/eduke32/source/sounds.c
@@ -1,6 +1,6 @@
//-------------------------------------------------------------------------
/*
-Copyright (C) 2010 EDuke32 developers and contributors
+Copyright (C) 2016 EDuke32 developers and contributors
This file is part of EDuke32.
@@ -27,20 +27,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#define __STDC_LIMIT_MACROS
#endif
-#include
-#include
-
-#include "fx_man.h"
-#include "music.h"
#include "duke3d.h"
-#include "osd.h"
-#include "sounds.h"
-
-#include "common_game.h"
-
-#ifdef _WIN32
-#include "winlayer.h"
-#endif
+#include "renderlayer.h" // for win_gethwnd()
#define DQSIZE 128