DEADSOFTWARE

game: added console variables for random item respawn
[d2df-sdl.git] / src / game / g_game.pas
index 9f399b6546609ef1568a5bf6f957e0f1f98d6f46..a35e2cba976e5c6c121c4d043cad3a8a169ca802 100644 (file)
@@ -33,6 +33,7 @@ type
     WarmupTime: Word;
     SpawnInvul: Word;
     ItemRespawnTime: Word;
+    ItemRespawnRandom: Word;
     RulezRespawnTime: Word;
     RulezRespawnRandom: Word;
     MaxLives: Byte;
@@ -198,6 +199,10 @@ const
   GAME_OPTION_ALLOWDROPFLAG     = 2048;
   GAME_OPTION_THROWFLAG         = 4096;
   GAME_OPTION_RULEZRANDOM       = 8192;
+  GAME_OPTION_ITEMALLRANDOM     = 16384;
+  GAME_OPTION_ITEMHELPRANDOM    = 32768;
+  GAME_OPTION_ITEMAMMORANDOM    = 65536;
+  GAME_OPTION_ITEMWEAPONRANDOM  = 131072;
 
   STATE_NONE        = 0;
   STATE_MENU        = 1;
@@ -4499,6 +4504,10 @@ begin
   gGameSettings.Options := gGameSettings.Options + GAME_OPTION_TEAMHITPROJECTILE;
   gGameSettings.Options := gGameSettings.Options + GAME_OPTION_TEAMHITTRACE;
   gGameSettings.Options := gGameSettings.Options + GAME_OPTION_RULEZRANDOM;
+  gGameSettings.Options := gGameSettings.Options + GAME_OPTION_ITEMALLRANDOM;
+  gGameSettings.Options := gGameSettings.Options + GAME_OPTION_ITEMHELPRANDOM;
+  gGameSettings.Options := gGameSettings.Options + GAME_OPTION_ITEMAMMORANDOM;
+  gGameSettings.Options := gGameSettings.Options + GAME_OPTION_ITEMWEAPONRANDOM;
   gSwitchGameMode := GM_SINGLE;
 
   gLMSRespawn := LMS_RESPAWN_NONE;
@@ -5615,6 +5624,22 @@ begin
   begin
     ParseGameFlag(GAME_OPTION_TEAMHITPROJECTILE, I_MSG_FRIENDLY_PROJECT_TRACE_OFF, I_MSG_FRIENDLY_PROJECT_TRACE_ON);
   end
+  else if cmd = 'g_items_all_respawn_random' then
+  begin
+    ParseGameFlag(GAME_OPTION_ITEMALLRANDOM, I_MSG_ITEM_ALL_RANDOM_OFF, I_MSG_ITEM_ALL_RANDOM_ON, False);
+  end
+  else if cmd = 'g_items_help_respawn_random' then
+  begin
+    ParseGameFlag(GAME_OPTION_ITEMHELPRANDOM, I_MSG_ITEM_HELP_RANDOM_OFF, I_MSG_ITEM_HELP_RANDOM_ON, False);
+  end
+  else if cmd = 'g_items_ammo_respawn_random' then
+  begin
+    ParseGameFlag(GAME_OPTION_ITEMAMMORANDOM, I_MSG_ITEM_AMMO_RANDOM_OFF, I_MSG_ITEM_AMMO_RANDOM_ON, False);
+  end
+  else if cmd = 'g_items_weapon_respawn_random' then
+  begin
+    ParseGameFlag(GAME_OPTION_ITEMWEAPONRANDOM, I_MSG_ITEM_WEAPON_RANDOM_OFF, I_MSG_ITEM_WEAPON_RANDOM_ON);
+  end
   else if cmd = 'g_powerup_randomize_respawn' then
   begin
     ParseGameFlag(GAME_OPTION_RULEZRANDOM, I_MSG_RULEZ_RANDOM_OFF, I_MSG_RULEZ_RANDOM_ON, False);
@@ -5715,6 +5740,21 @@ begin
     g_Console_Add(Format('%s %d', [cmd, Integer(gsItemRespawnTime)]));
     if g_Game_IsServer then g_Console_Add(_lc[I_MSG_ONMAPCHANGE]);
   end
+  else if cmd = 'g_item_time_random' then
+  begin
+    if Length(P) > 1 then
+    begin
+      gsItemRespawnRandom := nclamp(StrToIntDef(P[1], gsItemRespawnRandom), 0, $FFFF);
+      if g_Game_IsServer then
+      begin
+        gGameSettings.ItemRespawnRandom := gsItemRespawnRandom;
+        if g_Game_IsNet then MH_SEND_GameSettings;
+      end;
+    end;
+
+    g_Console_Add(Format('%s %d', [cmd, Integer(gsItemRespawnRandom)]));
+    if g_Game_IsServer then g_Console_Add(_lc[I_MSG_ONMAPCHANGE]);
+  end
   else if cmd = 'g_powerup_respawn_time' then
   begin
     if Length(P) > 1 then
@@ -6440,8 +6480,8 @@ begin
       if cmd = 'greenarmor' then begin plr.GiveItem(ITEM_ARMOR_GREEN); g_Console_Add('player got a security armor'); continue; end;
       if cmd = 'bluearmor' then begin plr.GiveItem(ITEM_ARMOR_BLUE); g_Console_Add('player got a combat armor'); continue; end;
 
-      if (cmd = 'megasphere') or (cmd = 'mega') then begin plr.GiveItem(ITEM_SPHERE_BLUE); g_Console_Add('player got a megasphere'); continue; end;
-      if (cmd = 'soulsphere') or (cmd = 'soul')then begin plr.GiveItem(ITEM_SPHERE_WHITE); g_Console_Add('player got a soul sphere'); continue; end;
+      if (cmd = 'soulsphere') or (cmd = 'soul') then begin plr.GiveItem(ITEM_SPHERE_BLUE); g_Console_Add('player got a soul sphere'); continue; end;
+      if (cmd = 'megasphere') or (cmd = 'mega') then begin plr.GiveItem(ITEM_SPHERE_WHITE); g_Console_Add('player got a megasphere'); continue; end;
 
       if (cmd = 'invul') or (cmd = 'invulnerability') then begin plr.GiveItem(ITEM_INVUL); g_Console_Add('player got invulnerability'); continue; end;
       if (cmd = 'invis') or (cmd = 'invisibility') then begin plr.GiveItem(ITEM_INVIS); g_Console_Add('player got invisibility'); continue; end;