summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 9f9f313)
raw | patch | inline | side by side (parent: 9f9f313)
author | TerminalHash <lyashuk.voxx@gmail.com> | |
Thu, 31 Aug 2023 21:19:35 +0000 (00:19 +0300) | ||
committer | TerminalHash <lyashuk.voxx@gmail.com> | |
Thu, 31 Aug 2023 21:19:35 +0000 (00:19 +0300) |
(g_rulez_time_multiplier and g_rulez_randomize_respawn)
diff --git a/src/game/g_console.pas b/src/game/g_console.pas
index 1caeaf87b99ef93936c42993d7916567e3fab5d8..6ff8ec3fc1be9fe084b6c965abd7dd32d4b2a874 100644 (file)
--- a/src/game/g_console.pas
+++ b/src/game/g_console.pas
AddCommand('g_warmup_time', GameCVars);
AddCommand('g_spawn_invul', GameCVars);
AddCommand('g_item_respawn_time', GameCVars);
AddCommand('g_warmup_time', GameCVars);
AddCommand('g_spawn_invul', GameCVars);
AddCommand('g_item_respawn_time', GameCVars);
+ AddCommand('g_rulez_randomize_respawn', GameCVars);
+ AddCommand('g_rulez_time_multiplier', GameCVars);
AddCommand('sv_intertime', GameCVars);
AddCommand('sv_name', NetServerCVars);
AddCommand('sv_intertime', GameCVars);
AddCommand('sv_name', NetServerCVars);
WhitelistCommand('g_warmup_time');
WhitelistCommand('g_spawn_invul');
WhitelistCommand('g_item_respawn_time');
WhitelistCommand('g_warmup_time');
WhitelistCommand('g_spawn_invul');
WhitelistCommand('g_item_respawn_time');
+ WhitelistCommand('g_rulez_randomize_respawn');
+ WhitelistCommand('g_rulez_time_multiplier');
g_Console_ResetBinds;
g_Console_ReadConfig(gConfigScript);
g_Console_ResetBinds;
g_Console_ReadConfig(gConfigScript);
WriteLn(f, 'g_timelimit ', gsTimeLimit);
WriteLn(f, 'g_maxlives ', gsMaxLives);
WriteLn(f, 'g_item_respawn_time ', gsItemRespawnTime);
WriteLn(f, 'g_timelimit ', gsTimeLimit);
WriteLn(f, 'g_maxlives ', gsMaxLives);
WriteLn(f, 'g_item_respawn_time ', gsItemRespawnTime);
+ WriteLn(f, 'g_rulez_time_multiplier ', gsRulezTimeMultiplier);
WriteLn(f, 'g_spawn_invul ', gsSpawnInvul);
WriteLn(f, 'g_warmup_time ', gsWarmupTime);
WriteFlag('g_friendlyfire ', GAME_OPTION_TEAMDAMAGE);
WriteFlag('g_friendly_hit_trace ', GAME_OPTION_TEAMHITTRACE);
WriteFlag('g_friendly_hit_projectile ', GAME_OPTION_TEAMHITPROJECTILE);
WriteLn(f, 'g_spawn_invul ', gsSpawnInvul);
WriteLn(f, 'g_warmup_time ', gsWarmupTime);
WriteFlag('g_friendlyfire ', GAME_OPTION_TEAMDAMAGE);
WriteFlag('g_friendly_hit_trace ', GAME_OPTION_TEAMHITTRACE);
WriteFlag('g_friendly_hit_projectile ', GAME_OPTION_TEAMHITPROJECTILE);
+ WriteFlag('g_rulez_randomize_respawn ', GAME_OPTION_RULEZRANDOM);
WriteFlag('g_allow_exit ', GAME_OPTION_ALLOWEXIT);
WriteFlag('g_allow_monsters ', GAME_OPTION_MONSTERS);
WriteFlag('g_allow_dropflag ', GAME_OPTION_ALLOWDROPFLAG);
WriteFlag('g_allow_exit ', GAME_OPTION_ALLOWEXIT);
WriteFlag('g_allow_monsters ', GAME_OPTION_MONSTERS);
WriteFlag('g_allow_dropflag ', GAME_OPTION_ALLOWDROPFLAG);
diff --git a/src/game/g_game.pas b/src/game/g_game.pas
index 51044e4d620263455dd5b1823073022eccbe4460..93fbfd60262331ced79921ea5295358e3a82b324 100644 (file)
--- a/src/game/g_game.pas
+++ b/src/game/g_game.pas
WarmupTime: Word;
SpawnInvul: Word;
ItemRespawnTime: Word;
WarmupTime: Word;
SpawnInvul: Word;
ItemRespawnTime: Word;
+ RulezTimeMultiplier: Word;
MaxLives: Byte;
Options: LongWord;
WAD: String;
MaxLives: Byte;
Options: LongWord;
WAD: String;
GAME_OPTION_TEAMABSORBDAMAGE = 1024;
GAME_OPTION_ALLOWDROPFLAG = 2048;
GAME_OPTION_THROWFLAG = 4096;
GAME_OPTION_TEAMABSORBDAMAGE = 1024;
GAME_OPTION_ALLOWDROPFLAG = 2048;
GAME_OPTION_THROWFLAG = 4096;
+ GAME_OPTION_RULEZRANDOM = 8192;
STATE_NONE = 0;
STATE_MENU = 1;
STATE_NONE = 0;
STATE_MENU = 1;
gGameSettings.Options := gGameSettings.Options + GAME_OPTION_BOTVSMONSTER;
gGameSettings.Options := gGameSettings.Options + GAME_OPTION_TEAMHITPROJECTILE;
gGameSettings.Options := gGameSettings.Options + GAME_OPTION_TEAMHITTRACE;
gGameSettings.Options := gGameSettings.Options + GAME_OPTION_BOTVSMONSTER;
gGameSettings.Options := gGameSettings.Options + GAME_OPTION_TEAMHITPROJECTILE;
gGameSettings.Options := gGameSettings.Options + GAME_OPTION_TEAMHITTRACE;
+ gGameSettings.Options := gGameSettings.Options + GAME_OPTION_RULEZRANDOM;
gSwitchGameMode := GM_SINGLE;
gLMSRespawn := LMS_RESPAWN_NONE;
gSwitchGameMode := GM_SINGLE;
gLMSRespawn := LMS_RESPAWN_NONE;
a, b: Integer;
stat: TPlayerStatArray;
cmd: string;
a, b: Integer;
stat: TPlayerStatArray;
cmd: string;
+ it: PItem;
procedure ParseGameFlag(Flag: LongWord; OffMsg, OnMsg: TStrings_Locale; OnMapChange: Boolean = False);
var
procedure ParseGameFlag(Flag: LongWord; OffMsg, OnMsg: TStrings_Locale; OnMapChange: Boolean = False);
var
begin
ParseGameFlag(GAME_OPTION_TEAMHITPROJECTILE, I_MSG_FRIENDLY_PROJECT_TRACE_OFF, I_MSG_FRIENDLY_PROJECT_TRACE_ON);
end
begin
ParseGameFlag(GAME_OPTION_TEAMHITPROJECTILE, I_MSG_FRIENDLY_PROJECT_TRACE_OFF, I_MSG_FRIENDLY_PROJECT_TRACE_ON);
end
+ else if cmd = 'g_rulez_randomize_respawn' then
+ begin
+ ParseGameFlag(GAME_OPTION_RULEZRANDOM, I_MSG_RULEZ_RANDOM_ON, I_MSG_RULEZ_RANDOM_OFF);
+ end
else if cmd = 'g_weaponstay' then
begin
ParseGameFlag(GAME_OPTION_WEAPONSTAY, I_MSG_WEAPONSTAY_OFF, I_MSG_WEAPONSTAY_ON);
else if cmd = 'g_weaponstay' then
begin
ParseGameFlag(GAME_OPTION_WEAPONSTAY, I_MSG_WEAPONSTAY_OFF, I_MSG_WEAPONSTAY_ON);
g_Console_Add(Format('%s %d', [cmd, Integer(gsItemRespawnTime)]));
if g_Game_IsServer then g_Console_Add(_lc[I_MSG_ONMAPCHANGE]);
end
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_rulez_time_multiplier' then
+ begin
+ if Length(P) > 1 then
+ begin
+ gsRulezTimeMultiplier := nclamp(StrToIntDef(P[1], gsRulezTimeMultiplier), 0, $FFFF);
+ if g_Game_IsServer then
+ begin
+ gGameSettings.RulezTimeMultiplier := gsRulezTimeMultiplier;
+ if g_Game_IsNet then MH_SEND_GameSettings;
+ end;
+ end;
+
+ g_Console_Add(Format('%s %d', [cmd, Integer(gsRulezTimeMultiplier)]));
+ if g_Game_IsServer then g_Console_Add(_lc[I_MSG_ONMAPCHANGE]);
+ end
else if cmd = 'sv_intertime' then
begin
if (Length(P) > 1) then
else if cmd = 'sv_intertime' then
begin
if (Length(P) > 1) then
diff --git a/src/game/g_items.pas b/src/game/g_items.pas
index a69ceaaf811bd9f84f5b07ec41b0e6e2fcf11537..b0cd320c96f5258e40052c5dbf98b904e99c9408 100644 (file)
--- a/src/game/g_items.pas
+++ b/src/game/g_items.pas
ggItems[ID].Obj.oldY := ggItems[ID].Obj.Y;
ggItems[ID].alive := false;
ggItems[ID].RespawnTime := IfThen(gLMSRespawn = LMS_RESPAWN_NONE, gGameSettings.ItemRespawnTime, 15) * 36;
ggItems[ID].Obj.oldY := ggItems[ID].Obj.Y;
ggItems[ID].alive := false;
ggItems[ID].RespawnTime := IfThen(gLMSRespawn = LMS_RESPAWN_NONE, gGameSettings.ItemRespawnTime, 15) * 36;
+
+ if ((gGameSettings.Options and GAME_OPTION_RULEZRANDOM) = 0) then // Random powerup respawn
+ begin
+ if ggItems[ID].ItemType in [ITEM_SPHERE_BLUE, ITEM_SPHERE_WHITE, ITEM_INVUL,
+ ITEM_INVIS, ITEM_MEDKIT_BLACK, ITEM_JETPACK] then
+ begin
+ ggItems[ID].RespawnTime := Random(gGameSettings.RulezTimeMultiplier) * 36;
+ //e_logwritefln ('Randomized number', []);
+ end;
+ end;
end;
end;
end;
end;
-
procedure g_Items_Remove (ID: DWORD);
var
it: PItem;
procedure g_Items_Remove (ID: DWORD);
var
it: PItem;
index b3262a8997f203490b9a1e5f6fb1c862d95fb96c..d548df2eddd1c36556e4257605e7c388f4a88abc 100644 (file)
--- a/src/game/g_language.pas
+++ b/src/game/g_language.pas
I_MENU_ENABLE_EXITS,
I_MENU_WEAPONS_STAY,
I_MENU_ENABLE_MONSTERS,
I_MENU_ENABLE_EXITS,
I_MENU_WEAPONS_STAY,
I_MENU_ENABLE_MONSTERS,
+ I_MENU_ENABLE_RULEZ_RANDOM,
+ I_MENU_RULEZ_RESPAWN_MULTIPLIER,
I_MENU_BOTS_VS,
I_MENU_BOTS_VS_PLAYERS,
I_MENU_BOTS_VS_MONSTERS,
I_MENU_BOTS_VS,
I_MENU_BOTS_VS_PLAYERS,
I_MENU_BOTS_VS_MONSTERS,
I_MSG_SPECT_HUD_OFF,
I_MSG_PING_ON,
I_MSG_PING_OFF,
I_MSG_SPECT_HUD_OFF,
I_MSG_PING_ON,
I_MSG_PING_OFF,
+ I_MSG_RULEZ_RANDOM_ON,
+ I_MSG_RULEZ_RANDOM_OFF,
I_MSG_NO_WAD,
I_MSG_NO_MAPS,
I_MSG_NO_MAP,
I_MSG_NO_WAD,
I_MSG_NO_MAPS,
I_MSG_NO_MAP,
'Îðóæèå îñòà¸òñÿ:'),
('MENU ENABLE MONSTERS', 'Enable monsters:',
'Ìîíñòðû:'),
'Îðóæèå îñòà¸òñÿ:'),
('MENU ENABLE MONSTERS', 'Enable monsters:',
'Ìîíñòðû:'),
+ ('MENU ENABLE RULEZ RANDOM', 'Enable random powerup respawn:',
+ 'Ðàíäîìíûé ðåñïàóí ïîâåðàïîâ:'),
+ ('MENU RULEZ RESPAWN MULTIPLIER', 'Time multiplier for powerup respawn:',
+ 'Ìíîæèòåëü âðåìåíè äëÿ ðåñïàóíà ïîâåðàïîâ:'),
('MENU BOTS VS', 'Bots fight with:',
'Áîòû ïðîòèâ:'),
('MENU BOTS VS PLAYERS', 'Players',
('MENU BOTS VS', 'Bots fight with:',
'Áîòû ïðîòèâ:'),
('MENU BOTS VS PLAYERS', 'Players',
'Ïèíã êëèåíòà ïîêàçûâàåòñÿ'),
('MSG PING OFF', 'Client ping display off',
'Ïèíã êëèåíòà íå ïîêàçûâàåòñÿ'),
'Ïèíã êëèåíòà ïîêàçûâàåòñÿ'),
('MSG PING OFF', 'Client ping display off',
'Ïèíã êëèåíòà íå ïîêàçûâàåòñÿ'),
+ ('MSG RULEZ RANDOM ON', 'Random respawn for powerups on',
+ 'Ðàíäîìíûé ðåñïàóí äëÿ ïîâåðàïîâ âêëþ÷¸í'),
+ ('MSG RULEZ RANDOM OFF', 'Random respawn for powerups off',
+ 'Ðàíäîìíûé ðåñïàóí äëÿ ïîâåðàïîâ âûêëþ÷åí'),
('MSG NO WAD', 'WAD "%s" doesn''t exist!',
'WAD ôàéë "%s" íå íàéäåí!'),
('MSG NO MAPS', 'WAD "%s" doesn''t contain any maps!',
('MSG NO WAD', 'WAD "%s" doesn''t exist!',
'WAD ôàéë "%s" íå íàéäåí!'),
('MSG NO MAPS', 'WAD "%s" doesn''t contain any maps!',
diff --git a/src/game/g_menu.pas b/src/game/g_menu.pas
index ff6757f659ffcb5a4484f2d45588370a6591fcb1..ed4e25dc7b89ab84452ae47b199b02164aa80384 100644 (file)
--- a/src/game/g_menu.pas
+++ b/src/game/g_menu.pas
gsScoreLimit := StrToIntDef(TGUIEdit(GetControl('edScoreLimit')).Text, 0);
gsMaxLives := StrToIntDef(TGUIEdit(GetControl('edMaxLives')).Text, 0);
gsItemRespawnTime := StrToIntDef(TGUIEdit(GetControl('edItemRespawnTime')).Text, 0);
gsScoreLimit := StrToIntDef(TGUIEdit(GetControl('edScoreLimit')).Text, 0);
gsMaxLives := StrToIntDef(TGUIEdit(GetControl('edMaxLives')).Text, 0);
gsItemRespawnTime := StrToIntDef(TGUIEdit(GetControl('edItemRespawnTime')).Text, 0);
+ gsRulezTimeMultiplier := StrToIntDef(TGUIEdit(GetControl('edRulezTimeMultiplier')).Text, 0);
gsPlayers := TGUISwitch(GetControl('swPlayers')).ItemIndex;
gsMap := Map;
gsPlayers := TGUISwitch(GetControl('swPlayers')).ItemIndex;
gsMap := Map;
gsGameFlags := gsGameFlags or GAME_OPTION_WEAPONSTAY;
if TGUISwitch(GetControl('swMonsters')).ItemIndex = 0 then
gsGameFlags := gsGameFlags or GAME_OPTION_MONSTERS;
gsGameFlags := gsGameFlags or GAME_OPTION_WEAPONSTAY;
if TGUISwitch(GetControl('swMonsters')).ItemIndex = 0 then
gsGameFlags := gsGameFlags or GAME_OPTION_MONSTERS;
+ if TGUISwitch(GetControl('swRulezRandom')).ItemIndex = 0 then
+ gsGameFlags := gsGameFlags or GAME_OPTION_RULEZRANDOM;
case TGUISwitch(GetControl('swTeamHit')).ItemIndex of
1: gsGameFlags := gsGameFlags or GAME_OPTION_TEAMHITTRACE;
case TGUISwitch(GetControl('swTeamHit')).ItemIndex of
1: gsGameFlags := gsGameFlags or GAME_OPTION_TEAMHITTRACE;
// TODO: get this crap out of here
gGameSettings.ItemRespawnTime := gsItemRespawnTime;
// TODO: get this crap out of here
gGameSettings.ItemRespawnTime := gsItemRespawnTime;
+ gGameSettings.RulezTimeMultiplier := gsRulezTimeMultiplier;
gGameSettings.WarmupTime := gsWarmupTime;
gGameSettings.SpawnInvul := gsSpawnInvul;
end;
gGameSettings.WarmupTime := gsWarmupTime;
gGameSettings.SpawnInvul := gsSpawnInvul;
end;
if gsItemRespawnTime > 0 then
Text := IntToStr(gsItemRespawnTime);
end;
if gsItemRespawnTime > 0 then
Text := IntToStr(gsItemRespawnTime);
end;
+ with AddEdit(_lc[I_MENU_RULEZ_RESPAWN_MULTIPLIER]) do
+ begin
+ Name := 'edRulezTimeMultiplier';
+ OnlyDigits := True;
+ Width := 4;
+ MaxLength := 5;
+ if gsRulezTimeMultiplier > 0 then
+ Text := IntToStr(gsRulezTimeMultiplier);
+ end;
with AddSwitch(_lc[I_MENU_PLAYERS]) do
begin
Name := 'swPlayers';
with AddSwitch(_lc[I_MENU_PLAYERS]) do
begin
Name := 'swPlayers';
else
ItemIndex := 1;
end;
else
ItemIndex := 1;
end;
+ with AddSwitch(_lc[I_MENU_ENABLE_RULEZ_RANDOM]) do
+ begin
+ Name := 'swRulezRandom';
+ AddItem(_lc[I_MENU_NO]);
+ AddItem(_lc[I_MENU_YES]);
+ if LongBool(gsGameFlags and GAME_OPTION_RULEZRANDOM) then
+ ItemIndex := 0
+ else
+ ItemIndex := 1;
+ end;
with AddSwitch(_lc[I_MENU_BOTS_VS]) do
begin
Name := 'swBotsVS';
with AddSwitch(_lc[I_MENU_BOTS_VS]) do
begin
Name := 'swBotsVS';
if gsItemRespawnTime > 0 then
Text := IntToStr(gsItemRespawnTime);
end;
if gsItemRespawnTime > 0 then
Text := IntToStr(gsItemRespawnTime);
end;
+ with AddEdit(_lc[I_MENU_RULEZ_RESPAWN_MULTIPLIER]) do
+ begin
+ Name := 'edRulezTimeMultiplier';
+ OnlyDigits := True;
+ Width := 4;
+ MaxLength := 5;
+ if gsRulezTimeMultiplier > 0 then
+ Text := IntToStr(gsRulezTimeMultiplier);
+ end;
with AddSwitch(_lc[I_MENU_PLAYERS]) do
begin
Name := 'swPlayers';
with AddSwitch(_lc[I_MENU_PLAYERS]) do
begin
Name := 'swPlayers';
else
ItemIndex := 1;
end;
else
ItemIndex := 1;
end;
+ with AddSwitch(_lc[I_MENU_ENABLE_RULEZ_RANDOM]) do
+ begin
+ Name := 'swRulezRandom';
+ AddItem(_lc[I_MENU_NO]);
+ AddItem(_lc[I_MENU_YES]);
+ if LongBool(gsGameFlags and GAME_OPTION_RULEZRANDOM) then
+ ItemIndex := 0
+ else
+ ItemIndex := 1;
+ end;
with AddSwitch(_lc[I_MENU_BOTS_VS]) do
begin
Name := 'swBotsVS';
with AddSwitch(_lc[I_MENU_BOTS_VS]) do
begin
Name := 'swBotsVS';
diff --git a/src/game/g_options.pas b/src/game/g_options.pas
index ace71914663e7a139ae5f705149984909cec83cc..40249435823f84d3693ad06249082e669eefcc1f 100644 (file)
--- a/src/game/g_options.pas
+++ b/src/game/g_options.pas
gsGameFlags: LongWord;
gsSpawnInvul: Integer = 0;
gsItemRespawnTime: Word = 60;
gsGameFlags: LongWord;
gsSpawnInvul: Integer = 0;
gsItemRespawnTime: Word = 60;
+ gsRulezTimeMultiplier: Word = 60;
gsWarmupTime: Word = 30;
implementation
gsWarmupTime: Word = 30;
implementation
gsPlayers := 1;
gsSpawnInvul := 0;
gsItemRespawnTime := 60;
gsPlayers := 1;
gsSpawnInvul := 0;
gsItemRespawnTime := 60;
+ gsRulezTimeMultiplier := 60;
gsGameFlags := GAME_OPTION_ALLOWEXIT or GAME_OPTION_DMKEYS or
GAME_OPTION_BOTVSPLAYER or GAME_OPTION_BOTVSMONSTER or
GAME_OPTION_TEAMHITTRACE or GAME_OPTION_TEAMHITPROJECTILE or
gsGameFlags := GAME_OPTION_ALLOWEXIT or GAME_OPTION_DMKEYS or
GAME_OPTION_BOTVSPLAYER or GAME_OPTION_BOTVSMONSTER or
GAME_OPTION_TEAMHITTRACE or GAME_OPTION_TEAMHITPROJECTILE or
- GAME_OPTION_ALLOWDROPFLAG;
+ GAME_OPTION_ALLOWDROPFLAG or GAME_OPTION_RULEZRANDOM;
gsPlayers := 1;
if not gGameOn then
gsPlayers := 1;
if not gGameOn then
MaxLives := gsMaxLives;
SpawnInvul := gsSpawnInvul;
ItemRespawnTime := gsItemRespawnTime;
MaxLives := gsMaxLives;
SpawnInvul := gsSpawnInvul;
ItemRespawnTime := gsItemRespawnTime;
+ RulezTimeMultiplier := gsRulezTimeMultiplier;
WarmupTime := gsWarmupTime;
Options := gsGameFlags;
end;
WarmupTime := gsWarmupTime;
Options := gsGameFlags;
end;