shithub: choc

Download patch

ref: 6a147d5ff759a9c2260719d2dcebe269e64b2e2d
parent: e93890502ea653c49f358dfb79008e47310c464c
author: James Haley <[email protected]>
date: Wed Sep 15 22:08:28 EDT 2010

Work on cheats and on teleportation effects.

Subversion-branch: /branches/strife-branch
Subversion-revision: 2091

--- a/src/strife/d_englsh.h
+++ b/src/strife/d_englsh.h
@@ -228,29 +228,29 @@
 #define AMSTR_GRIDON	"Grid ON"
 #define AMSTR_GRIDOFF	"Grid OFF"
 
-#define AMSTR_MARKEDSPOT	"Marked Spot"
-#define AMSTR_MARKSCLEARED	"All Marks Cleared"
+#define AMSTR_MARKEDSPOT        "Marked Spot"
+#define AMSTR_MARKSCLEARED      "All Marks Cleared"
 
 //
 //	ST_stuff.C
 //
 
-#define STSTR_MUS		"Music Change"
-#define STSTR_NOMUS		"IMPOSSIBLE SELECTION"
-#define STSTR_DQDON		"Degreelessness Mode On"
-#define STSTR_DQDOFF	"Degreelessness Mode Off"
+#define STSTR_MUS               "Music Change"
+#define STSTR_NOMUS             "IMPOSSIBLE SELECTION"
+#define STSTR_DQDON             "You're invincible!"   // [STRIFE]
+#define STSTR_DQDOFF            "You're a looney!"     // [STRIFE]
 
-#define STSTR_KFAADDED	"Very Happy Ammo Added"
-#define STSTR_FAADDED	"Ammo (no keys) Added"
+#define STSTR_KFAADDED          "Very Happy Ammo Added"
+#define STSTR_FAADDED           "Ammo (no keys) Added"
 
-#define STSTR_NCON		"No Clipping Mode ON"
-#define STSTR_NCOFF		"No Clipping Mode OFF"
+#define STSTR_NCON              "No Clipping Mode ON"
+#define STSTR_NCOFF             "No Clipping Mode OFF"
 
-#define STSTR_BEHOLD	"inVuln, Str, Inviso, Rad, Allmap, or Lite-amp"
-#define STSTR_BEHOLDX	"Power-up Toggled"
+#define STSTR_BEHOLD            "inVuln, Str, Inviso, Rad, Allmap, or Lite-amp"
+#define STSTR_BEHOLDX           "Power-up Toggled"
 
-#define STSTR_CHOPPERS	"... doesn't suck - GM"
-#define STSTR_CLEV		"Changing Level..."
+#define STSTR_CHOPPERS          "... doesn't suck - GM"
+#define STSTR_CLEV              "Changing Level..."
 
 //
 //	F_Finale.C
--- a/src/strife/g_game.c
+++ b/src/strife/g_game.c
@@ -1409,8 +1409,8 @@
 void G_RiftExitLevel(int map, int spot, angle_t angle)
 {
     gameaction = ga_completed;
-    // STRIFE-TODO: special handling for post-Sigil map changes
-    /*
+    
+    // special handling for post-Sigil map changes
     if(players[0].weaponowned[wp_sigil])
     {
         if(map == 3) // Front Base -> Abandoned Front Base
@@ -1418,10 +1418,11 @@
         if(map == 7) // Castle -> New Front Base
             map = 10;
     }
-    */
+
     // no rifting in deathmatch games
     if(deathmatch)
         spot = 0;
+
     riftangle = angle;
     riftdest  = spot;
     destmap   = map;
--- a/src/strife/g_game.h
+++ b/src/strife/g_game.h
@@ -31,8 +31,8 @@
 #include "doomdef.h"
 #include "d_event.h"
 #include "d_ticcmd.h"
+#include "tables.h"
 
-
 //
 // GAME
 //
@@ -65,10 +65,13 @@
 void G_TimeDemo (char* name);
 boolean G_CheckDemoStatus (void);
 
+void G_RiftExitLevel(int map, int spot, angle_t angle); // [STRIFE]
 void G_ExitLevel (int dest);
 //void G_SecretExitLevel (void);
 
 //void G_WorldDone (void);
+
+boolean G_RiftCheat(int riftSpotNum); // [STRIFE]
 
 // Read current data from inputs and build a player movement command.
 
--- a/src/strife/p_map.c
+++ b/src/strife/p_map.c
@@ -113,32 +113,37 @@
 //
 // PIT_StompThing
 //
+// [STRIFE] haleyjd 09/15/10: Modified so monsters can telestomp.
+//
 boolean PIT_StompThing (mobj_t* thing)
 {
     fixed_t	blockdist;
-		
+
     if (!(thing->flags & MF_SHOOTABLE) )
-	return true;
-		
+        return true;
+
     blockdist = thing->radius + tmthing->radius;
-    
+
     if ( abs(thing->x - tmx) >= blockdist
-	 || abs(thing->y - tmy) >= blockdist )
+        || abs(thing->y - tmy) >= blockdist )
     {
-	// didn't hit it
-	return true;
+        // didn't hit it
+        return true;
     }
-    
+
     // don't clip against self
     if (thing == tmthing)
-	return true;
-    
-    // monsters don't stomp things except on boss level
-    if ( !tmthing->player && gamemap != 30)
-	return false;	
-		
+        return true;
+
+    // [STRIFE] monsters DO stomp things, on all levels
+    // Basically, one thing involved must be a player.
+    // Monsters can telefrag players, and players can telefrag monsters, but
+    // monsters cannot telefrag other monsters.
+    if (!(tmthing->player || thing->player))
+        return false;	
+
     P_DamageMobj (thing, tmthing, tmthing, 10000);
-	
+
     return true;
 }
 
@@ -146,28 +151,27 @@
 //
 // P_TeleportMove
 //
-boolean
-P_TeleportMove
-( mobj_t*	thing,
-  fixed_t	x,
-  fixed_t	y )
+// [STRIFE]
+// haleyjd 09/15/10: Modified to set thing z position.
+//
+boolean P_TeleportMove(mobj_t*  thing, fixed_t  x, fixed_t  y)
 {
-    int			xl;
-    int			xh;
-    int			yl;
-    int			yh;
-    int			bx;
-    int			by;
+    int                 xl;
+    int                 xh;
+    int                 yl;
+    int                 yh;
+    int                 bx;
+    int                 by;
     
-    subsector_t*	newsubsec;
+    subsector_t*        newsubsec;
     
     // kill anything occupying the position
     tmthing = thing;
     tmflags = thing->flags;
-	
+
     tmx = x;
     tmy = y;
-	
+
     tmbbox[BOXTOP] = y + tmthing->radius;
     tmbbox[BOXBOTTOM] = y - tmthing->radius;
     tmbbox[BOXRIGHT] = x + tmthing->radius;
@@ -182,7 +186,7 @@
     // will adjust them.
     tmfloorz = tmdropoffz = newsubsec->sector->floorheight;
     tmceilingz = newsubsec->sector->ceilingheight;
-			
+
     validcount++;
     numspechit = 0;
     
@@ -193,9 +197,9 @@
     yh = (tmbbox[BOXTOP] - bmaporgy + MAXRADIUS)>>MAPBLOCKSHIFT;
 
     for (bx=xl ; bx<=xh ; bx++)
-	for (by=yl ; by<=yh ; by++)
-	    if (!P_BlockThingsIterator(bx,by,PIT_StompThing))
-		return false;
+        for (by=yl ; by<=yh ; by++)
+            if (!P_BlockThingsIterator(bx,by,PIT_StompThing))
+                return false;
     
     // the move is ok,
     // so link the thing into its new position
@@ -205,9 +209,10 @@
     thing->ceilingz = tmceilingz;	
     thing->x = x;
     thing->y = y;
+    thing->z = tmfloorz; // haleyjd 09/15/10: [STRIFE] Rogue added a z-set here
 
     P_SetThingPosition (thing);
-	
+
     return true;
 }
 
--- a/src/strife/st_stuff.c
+++ b/src/strife/st_stuff.c
@@ -267,14 +267,16 @@
 static int              st_fragscount;
 
 
-cheatseq_t cheat_mus = CHEAT("idmus", 2);
-cheatseq_t cheat_god = CHEAT("iddqd", 0);
-cheatseq_t cheat_ammo = CHEAT("idkfa", 0);
-cheatseq_t cheat_ammonokey = CHEAT("idfa", 0);
-cheatseq_t cheat_noclip = CHEAT("idspispopd", 0);
-cheatseq_t cheat_commercial_noclip = CHEAT("idclip", 0);
+cheatseq_t cheat_mus = CHEAT("spin", 2);       // [STRIFE]: idmus -> spin
+cheatseq_t cheat_god = CHEAT("omnipotent", 0); // [STRIFE]: iddqd -> omnipotent
+cheatseq_t cheat_ammo = CHEAT("idkfa", 0);     // STRIFE-TODO
+cheatseq_t cheat_ammonokey = CHEAT("idfa", 0); // STRIFE-TODO
+cheatseq_t cheat_noclip = CHEAT("elvis", 0);   // [STRIFE]: idclip -> elvis
+cheatseq_t cheat_clev = CHEAT("rift", 2);      // [STRIFE]: idclev -> rift
+cheatseq_t cheat_mypos = CHEAT("gps", 0);      // [STRIFE]: idmypos -> gps
+cheatseq_t cheat_scoot = CHEAT("scoot", 1);    // [STRIFE]: new cheat scoot
 
-cheatseq_t	cheat_powerup[7] =
+cheatseq_t	cheat_powerup[7] = // STRIFE-TODO
 {
     CHEAT("idbeholdv", 0),
     CHEAT("idbeholds", 0),
@@ -285,9 +287,7 @@
     CHEAT("idbehold", 0),
 };
 
-cheatseq_t cheat_choppers = CHEAT("idchoppers", 0);
-cheatseq_t cheat_clev = CHEAT("idclev", 2);
-cheatseq_t cheat_mypos = CHEAT("idmypos", 0);
+//cheatseq_t cheat_choppers = CHEAT("idchoppers", 0); [STRIFE] no such thing
 
 
 //
@@ -320,215 +320,266 @@
 boolean
 ST_Responder (event_t* ev)
 {
-  int		i;
-    
-  // Filter automap on/off.
-  if (ev->type == ev_keyup
-      && ((ev->data1 & 0xffff0000) == AM_MSGHEADER))
-  {
-    switch(ev->data1)
+    int         i;
+
+    // Filter automap on/off.
+    if (ev->type == ev_keyup
+        && ((ev->data1 & 0xffff0000) == AM_MSGHEADER))
     {
-      case AM_MSGENTERED:
-	st_gamestate = AutomapState;
-	st_firsttime = true;
-	break;
-	
-      case AM_MSGEXITED:
-	//	fprintf(stderr, "AM exited\n");
-	st_gamestate = FirstPersonState;
-	break;
+        switch(ev->data1)
+        {
+        case AM_MSGENTERED:
+            st_gamestate = AutomapState;
+            st_firsttime = true;
+            break;
+
+        case AM_MSGEXITED:
+            //	fprintf(stderr, "AM exited\n");
+            st_gamestate = FirstPersonState;
+            break;
+        }
     }
-  }
 
-  // if a user keypress...
-  else if (ev->type == ev_keydown)
-  {
-    if (!netgame && gameskill != sk_nightmare)
+    // STRIFE-TODO: this is branched on for handling key ups/key downs
+    // with regard to raising/lowering popups
+
+    // if a user keypress...
+    if(ev->type != ev_keydown)
+        return false;
+
+    //
+    // [STRIFE] Cheats which are allowed in netgames/demos:
+    //
+
+    // 'spin' cheat for changing music
+    if (cht_CheckCheat(&cheat_mus, ev->data2))
     {
-      // 'dqd' cheat for toggleable god mode
-      if (cht_CheckCheat(&cheat_god, ev->data2))
-      {
-	plyr->cheats ^= CF_GODMODE;
-	if (plyr->cheats & CF_GODMODE)
-	{
-	  if (plyr->mo)
-	    plyr->mo->health = 100;
-	  
-	  plyr->health = deh_god_mode_health;
-	  plyr->message = DEH_String(STSTR_DQDON);
-	}
-	else 
-	  plyr->message = DEH_String(STSTR_DQDOFF);
-      }
-      // 'fa' cheat for killer fucking arsenal
-      else if (cht_CheckCheat(&cheat_ammonokey, ev->data2))
-      {
-	plyr->armorpoints = deh_idfa_armor;
-	plyr->armortype = deh_idfa_armor_class;
-	
-	for (i=0;i<NUMWEAPONS;i++)
-	  plyr->weaponowned[i] = true;
-	
-	for (i=0;i<NUMAMMO;i++)
-	  plyr->ammo[i] = plyr->maxammo[i];
-	
-	plyr->message = DEH_String(STSTR_FAADDED);
-      }
-      // 'kfa' cheat for key full ammo
-      else if (cht_CheckCheat(&cheat_ammo, ev->data2))
-      {
-	plyr->armorpoints = deh_idkfa_armor;
-	plyr->armortype = deh_idkfa_armor_class;
-	
-	for (i=0;i<NUMWEAPONS;i++)
-	  plyr->weaponowned[i] = true;
-	
-	for (i=0;i<NUMAMMO;i++)
-	  plyr->ammo[i] = plyr->maxammo[i];
-	
-	for (i=0;i<NUMCARDS;i++)
-	  plyr->cards[i] = true;
-	
-	plyr->message = DEH_String(STSTR_KFAADDED);
-      }
-      // 'mus' cheat for changing music
-      else if (cht_CheckCheat(&cheat_mus, ev->data2))
-      {
-	
-	char	buf[3];
-	int		musnum;
-	
-	plyr->message = DEH_String(STSTR_MUS);
-	cht_GetParam(&cheat_mus, buf);
-	
-	if (gamemode == commercial)
-	{
-	  musnum = mus_logo + (buf[0]-'0')*10 + buf[1]-'0' - 1; // villsa [STRIFE] TODO - fix music
-	  
-	  if (((buf[0]-'0')*10 + buf[1]-'0') > 35)
-	    plyr->message = DEH_String(STSTR_NOMUS);
-	  else
-	    S_ChangeMusic(musnum, 1);
-	}
-	else
-	{
-	  musnum = mus_logo + (buf[0]-'1')*9 + (buf[1]-'1');    // villsa [STRIFE] TODO - fix music
-	  
-	  if (((buf[0]-'1')*9 + buf[1]-'1') > 31)
-	    plyr->message = DEH_String(STSTR_NOMUS);
-	  else
-	    S_ChangeMusic(musnum, 1);
-	}
-      }
-      else if ( (gamemission == doom 
-                 && cht_CheckCheat(&cheat_noclip, ev->data2))
-             || (gamemission != doom 
-                 && cht_CheckCheat(&cheat_commercial_noclip,ev->data2)))
-      {	
-        // Noclip cheat.
-        // For Doom 1, use the idspipsopd cheat; for all others, use
-        // idclip
+        char        buf[3];
+        int         musnum;
 
-	plyr->cheats ^= CF_NOCLIP;
-	
-	if (plyr->cheats & CF_NOCLIP)
-	  plyr->message = DEH_String(STSTR_NCON);
-	else
-	  plyr->message = DEH_String(STSTR_NCOFF);
-      }
-      // 'behold?' power-up cheats
-      for (i=0;i<6;i++)
-      {
-	if (cht_CheckCheat(&cheat_powerup[i], ev->data2))
-	{
-	  if (!plyr->powers[i])
-	    P_GivePower( plyr, i);
-	  else if (i!=pw_strength)
-	    plyr->powers[i] = 1;
-	  else
-	    plyr->powers[i] = 0;
-	  
-	  plyr->message = DEH_String(STSTR_BEHOLDX);
-	}
-      }
-      
-      // 'behold' power-up menu
-      if (cht_CheckCheat(&cheat_powerup[6], ev->data2))
-      {
-	plyr->message = DEH_String(STSTR_BEHOLD);
-      }
-      // 'choppers' invulnerability & chainsaw
-      else if (cht_CheckCheat(&cheat_choppers, ev->data2))
-      {
-          // villsa [STRIFE] unused
-	//plyr->weaponowned[wp_chainsaw] = true;
-	//plyr->powers[pw_invulnerability] = true;
-	plyr->message = DEH_String(STSTR_CHOPPERS);
-      }
-      // 'mypos' for player position
-      else if (cht_CheckCheat(&cheat_mypos, ev->data2))
-      {
-	static char	buf[ST_MSGWIDTH];
-	sprintf(buf, "ang=0x%x;x,y=(0x%x,0x%x)",
-		players[consoleplayer].mo->angle,
-		players[consoleplayer].mo->x,
-		players[consoleplayer].mo->y);
-	plyr->message = buf;
-      }
+        plyr->message = DEH_String(STSTR_MUS);
+        cht_GetParam(&cheat_mus, buf);
+
+        musnum = (buf[0] - '0') * 10 + buf[1] - '0';
+
+        if (((buf[0]-'0')*10 + buf[1]-'0') > 35)
+            plyr->message = DEH_String(STSTR_NOMUS);
+        else
+            S_ChangeMusic(musnum, 1);
     }
+    /*
+    // STRIFE-TODO: "dev" cheat - is this the "DOTS" cheat?
+    else if (cht_CheckCheat(&cheat_dev, ev->data2))
+    {
+        debugmode = !debugmode;
+        if (debugmode)
+            plyr->message = DEH_String("devparm ON");
+        else
+            plyr->message = DEH_String("devparm OFF");
+    }
+    */
+
+    // [STRIFE] Cheats below are not allowed in netgames or demos
+    if(netgame || !usergame)
+        return false;
+
+    if (cht_CheckCheat(&cheat_god, ev->data2))
+    {
+        // 'omnipotent' cheat for toggleable god mode
+        plyr->cheats ^= CF_GODMODE;
+        if (plyr->cheats & CF_GODMODE)
+        {
+            if (plyr->mo)
+                plyr->mo->health = 100;
+
+            plyr->health = deh_god_mode_health;
+            plyr->st_update = true; // [STRIFE]
+            plyr->message = DEH_String(STSTR_DQDON);
+        }
+        else 
+            plyr->message = DEH_String(STSTR_DQDOFF);
+    }
+    //
+    // STRIFE-TODO: IDFA, IDKFA equivs are unfinished
+    //
+    else if (cht_CheckCheat(&cheat_ammonokey, ev->data2))
+    {
+        // 'fa' cheat for killer fucking arsenal
+        plyr->armorpoints = deh_idfa_armor;
+        plyr->armortype = deh_idfa_armor_class;
+
+        for (i=0;i<NUMWEAPONS;i++)
+            plyr->weaponowned[i] = true;
+
+        for (i=0;i<NUMAMMO;i++)
+            plyr->ammo[i] = plyr->maxammo[i];
+
+        plyr->message = DEH_String(STSTR_FAADDED);
+    }
+    else if (cht_CheckCheat(&cheat_ammo, ev->data2))
+    {
+        // 'kfa' cheat for key full ammo
+        plyr->armorpoints = deh_idkfa_armor;
+        plyr->armortype = deh_idkfa_armor_class;
+
+        for (i=0;i<NUMWEAPONS;i++)
+            plyr->weaponowned[i] = true;
+
+        for (i=0;i<NUMAMMO;i++)
+            plyr->ammo[i] = plyr->maxammo[i];
+
+        for (i=0;i<NUMCARDS;i++)
+            plyr->cards[i] = true;
+
+        plyr->message = DEH_String(STSTR_KFAADDED);
+    }
+    else if (cht_CheckCheat(&cheat_noclip, ev->data2))
+    {
+        // [STRIFE] Verified unmodified, except no idspispopd shit:
+        // Noclip cheat - "ELVIS" (hah-hah :P )
+
+        plyr->cheats ^= CF_NOCLIP;
+
+        if (plyr->cheats & CF_NOCLIP)
+            plyr->message = DEH_String(STSTR_NCON);
+        else
+            plyr->message = DEH_String(STSTR_NCOFF);
+    }
+    //
+    // STRIFE-TODO: Stealth Cheat
+    //
+    /*
+    else if (cht_CheckCheat(&cheat_stealth, ev->data2))
+    {
+        plyr->cheats ^= 4;
+        if(plyr->cheats & 4)
+            plyr->message = DEH_String("STEALTH BOOTS ON");
+        else
+            plyr->message = DEH_String("STEALTH BOOTS OFF");
+    }
+    */
+
+    //
+    // STRIFE-TODO: Fix idbehold equivalent
+    //
+    for (i=0;i<6;i++)
+    {
+        // 'behold?' power-up cheats
+        if (cht_CheckCheat(&cheat_powerup[i], ev->data2))
+        {
+            if (!plyr->powers[i])
+                P_GivePower( plyr, i);
+            else if (i!=pw_strength)
+                plyr->powers[i] = 1;
+            else
+                plyr->powers[i] = 0;
+
+            plyr->message = DEH_String(STSTR_BEHOLDX);
+        }
+    }
+    // STRIFE-TODO:
+    if (cht_CheckCheat(&cheat_powerup[6], ev->data2))
+    {
+        // 'behold' power-up menu
+        plyr->message = DEH_String(STSTR_BEHOLD);
+    }
     
-    // 'clev' change-level cheat
-    if (!netgame && cht_CheckCheat(&cheat_clev, ev->data2))
+    //
+    // STRIFE-TODO: 
+    // * Give medical items cheat (what code???)
+    // * Ammo cheat
+    // * Stats cheat
+    // * Unknown power-giving cheat
+    /*
+    if(cht_CheckCheat(&cheat_meditems, ev->data2))
     {
-      char		buf[3];
-      int		epsd;
-      int		map;
-      
-      cht_GetParam(&cheat_clev, buf);
-      
-      if (gamemode == commercial)
-      {
-	epsd = 1;
-	map = (buf[0] - '0')*10 + buf[1] - '0';
-      }
-      else
-      {
-	epsd = buf[0] - '0';
-	map = buf[1] - '0';
-      }
+        P_GiveItemToPlayer(plyr, SPR_STMP, MT_INV_MED1);
+        P_GiveItemToPlayer(plyr, SPR_MDKT, MT_INV_MED2);
+        P_GiveItemToPlayer(plyr, SPR_FULL, MT_INV_MED3);
+        plyr->message = DEH_String("you got the stuff!");
+    }
+    if (cht_CheckCheat(&off_885E4, ev->data2))
+    {
+        if(!plyr->backpack)
+        {
+            for(i = 0; i < NUMAMMO; i++)
+                plyr->maxammo[i] = 2 * plyr->maxammo[i];
+            plyr->backpack = true;
+        }
+        for(i = 0; i < NUMAMMO; i++)
+            P_GiveAmmo(plyr, i, 1);
+        plyr->message = DEH_String("you got the stuff!");
+    }
+    if(cht_CheckCheat(&cheat_stats, ev->data2))
+    {
+        P_GiveItemToPlayer(plyr, SPR_TOKN, MT_TOKEN_STAMINA);
+        P_GiveItemToPlayer(plyr, SPR_TOKN, MT_TOKEN_NEW_ACCURACY);
+        plyr->message = DEH_String("you got the stuff!");
+    }
+    //
+    // UNKNOWN POWER GIVING CHEAT HERE...
+    //
+    */
+   
+    // STRIFE-TODO: weird isdemoversion check
 
-      // haleyjd 09/01/10: Removed Chex Quest stuff.
+    if (cht_CheckCheat(&cheat_mypos, ev->data2))
+    {
+        // [STRIFE] 'GPS' for player position
+        static char	buf[ST_MSGWIDTH];
+        sprintf(buf, "ang=0x%x;x,y=(0x%x,0x%x)",
+                players[consoleplayer].mo->angle,
+                players[consoleplayer].mo->x,
+                players[consoleplayer].mo->y);
+        plyr->message = buf;
+    }
+    
 
-      // Catch invalid maps.
-      if (epsd < 1)
-	return false;
+    // 'rift' change-level cheat
+    if (cht_CheckCheat(&cheat_clev, ev->data2))
+    {
+        char            buf[3];
+        int             map;
 
-      if (map < 1)
-	return false;
+        cht_GetParam(&cheat_clev, buf);
 
-      // Ohmygod - this is not going to work.
-      if ((gamemode == retail)
-	  && ((epsd > 4) || (map > 9)))
-	return false;
+        map = (buf[0] - '0') * 10 + buf[1] - '0';
 
-      if ((gamemode == registered)
-	  && ((epsd > 3) || (map > 9)))
-	return false;
+        // haleyjd 09/01/10: Removed Chex Quest stuff.
+        // haleyjd 09/15/10: Removed retail/registered/shareware stuff
 
-      if ((gamemode == shareware)
-	  && ((epsd > 1) || (map > 9)))
-	return false;
+        // Ohmygod - this is not going to work.
+        if (map <= 0 || map > 40)
+            return false;
 
-      if ((gamemode == commercial)
-	&& (( epsd > 1) || (map > 34)))
-	return false;
+        // So be it.
+        plyr->message = DEH_String(STSTR_CLEV);
+        G_RiftExitLevel(map, 0, plyr->mo->angle);
+    }
+    else if(cht_CheckCheat(&cheat_scoot, ev->data2))
+    {
+        char            buf[3];
+        int             spot;
+        
+        cht_GetParam(&cheat_scoot, buf);
 
-      // So be it.
-      plyr->message = DEH_String(STSTR_CLEV);
-      G_DeferedInitNew(gameskill, epsd, map);
-    }    
-  }
-  return false;
+        spot = buf[0] - '0';
+
+        // BUG: should be <= 9. Shouldn't do anything bad though...
+        if(spot <= 10) 
+        {
+            plyr->message = DEH_String("Spawning to spot");
+            G_RiftCheat(spot);
+        }
+    }
+
+    //
+    // STRIFE-TODO:
+    // * stonecold cheat
+    // * LEGO cheat
+    //
+
+    return false;
 }