DISCLAIMER:
The following GameMode is in beta state, this means that it's feature-complete.
Unintended behavior and glitches may still occur during play, but it should work as intended, most of the time.
It has been heavilly optimized and has done away with most, if not all, the hacky/workaround methods.
The code will still be always improved upon, and balance tweaks might happen from time to time, to ensure smooth gameplay.
Objective/Rules:
Arena Mode:
The game can also be played in Arena Mode, this affects the game in the following ways.
Game Customization/Variable Explanations:
You can customize the GameMode (to a degree) to fit your needs, even without any blueprint knowledge.
To override any of the GameMode's variables listed above, all you have to do is append the corresponding variable name, along with the desired value, into the GameOptions string.
Here is an example: ?GoalScore=10?TimeLimit=20?IsArena=True?RoundTimer=60
Do note that any variables that have been set incorrectly (e.g. letters where you are supposed to enter a number), set out of their allowed range, or haven't be set at all; will be assigned to their default values. The algorythm has been designed to be case insensitive, so it doesn't matter which capitalization you use.
Known Issues:
Reporting Issues:
To report any issues/bugs that you've found with the GameMode, post in this thread, after making sure of the following:
FAQ:
Roadmap for Upcoming Features and Optimizations:
Credits:
TimEh: Providing a generous portion of the initial coding which the initial release had (even though little code survived through the modifications/conversions), and also responsible for teaching me how to blueprint.
RattleSN4K3: Providing major contributions to the code and assistance with the debugging process. Thanks to his knowledge and work, I was able to heavily optimize the code and solve issues that were plaguing the GameMode for a long time.
vlad.serbanescu11: Being involved in tight collaboration with me, providing me with crucial fixes (in the earlier versions), latest advancements, debugging assistance, and audio resources needed for this project.
knepleyp, Mysterial, RZE, Joe Wilcox, Steven Polge: Providing advice and necessary blueprint exposure in the code, so our blueprint development becomes both possible and easier.
JoshuaMarlow: Providing me the new ice material that he made for DM-Chill. A variation of which, is now used within the GameMode.
frez: Providing the art for the GameMode badge that's used by the HUB UI.
Gleedo: Providing the audio file, for touching sounds, when thawing players.
Zaccubus: Showcasing the GameMode during the 03/23/2016 UTea Forecast steam.
raxxy: Testing and hosting this GameMode on his array of custom hubs.
Download and Cooking Instructions:
You can grab the latest available blueprints/source from here.
The archive also includes a test map which me and TimEh were using, in early versions, to quickly test the game's logic.
To cook it: Extract the above archive into your "\UnrealTournamentEditor\UnrealTournament\Content" folder. From there on out, you can:
A cooked version of the GameMode along with it's MD5 checksum, for those who can't or don't want to cook it, can be found here.
Installation Instructions:
WARNING: I highly suggest not to disable the force respawn option, as the GameMode's functionality and smoothness depends on it.
Version History/Information:
04/20/2015: Initial version.
04/20/2015: Version 0.2 Changelog.
04/21/2015: Version 0.3 Changelog.
05/01/2015: Version 0.4 Changelog.
06/13/2015: Version 0.5 Changelog.
06/15/2015: Hotfix 0.5.1 Changelog.
07/04/2015: Version 0.6 Changelog.
07/13/2015: Hotfix 0.6.1 Changelog.
07/31/2015: Version 0.7 Changelog.
09/10/2015: Version 0.8 Changelog.
09/12/2015: Hotfix 0.8.1 Changelog.
10/31/2015: Version 0.9 Changelog.
03/08/2016: Version 1.0 Changelog.
03/10/2016: Hotfix 1.0.1 Changelog.
03/16/2016: Hotfix 1.0.2 Changelog.
06/02/2016: Version 1.1 Changelog.
03/11/2017: Version 1.2 Changelog.
07/22/2017: Version 1.3 Changelog.
Any sort of footage, testing, suggestions, feedback are more than welcome!
The following GameMode is in beta state, this means that it's feature-complete.
Unintended behavior and glitches may still occur during play, but it should work as intended, most of the time.
It has been heavilly optimized and has done away with most, if not all, the hacky/workaround methods.
The code will still be always improved upon, and balance tweaks might happen from time to time, to ensure smooth gameplay.
Objective/Rules:
- The GameMode is played on DM/TDM maps.
- Scoring is done in rounds. First team to reach the GoalScore, or have the bigger score when the TimeLimit hits, wins.
- To win a round you must work as a team and freeze all the enemy team's players.
- Each round has a 3-second startup period in which players cannot take damage, get frozen or fire their weapons.
- Players enter a frozen state instead of dying. While in this state, they are invulnerable to damage, but cannot move or fire weapons. They can, however, be pushed around and they are able to spectate their teammates.
- If a player gets knocked over the void, they are frozen and assigned a random spawn. (same rule also applies for knocking frozen players off the map)
- Frozen players can thaw (unfreeze), by having a teammate standing next to them, for a fixed amount of time. (the more teammates, the faster the thawing)
- Frozen players automatically thaw after a (longer) fixed amount of time.
- When frozen players thaw, they receive back any weapons and ammo they had at their moment of death.
- Each round has an sudden death timer. When this timer reaches zero, periodic damage is being dealt to all the alive players.
- If a player happens to get thawed during a round overtime, his starting health is capped to that of their healthiest alive teammate.
- If a player joins mid-round, he is forced to sit out, until a new round begins.
- If a player switches team mid-round, he is forced to sit out, until a new round begins.
- The round will halt if there are not enough players, and restart once it detects enough players again.
Arena Mode:
The game can also be played in Arena Mode, this affects the game in the following ways.
- Players start the round with a designated health and armor amount.
- Players start the round with all of the available arsenal that the map contains, redeemer excluded, at a designated ammo capacity. (for example, if the bio-rifle weapon pickup isn't available in the map, you won't get a bio-rifle)
- Players cannot receive fall-damage or self-damage.
- All pickups and powerups are disabled.
Game Customization/Variable Explanations:
You can customize the GameMode (to a degree) to fit your needs, even without any blueprint knowledge.
- IsArena (Boolean, Default=False): Controls whether the GameMode is played in Arena Mode or not. "True" enables Arena Mode, "False" disables it.
- ArenaHealth (Integer, Default=100, Range 100-199): Controls how much health the players receive when a new round starts, if Arena Mode is enabled.
- ArenaArmor (Integer, Default=6, Range 0-7): Controls what types of armor the players receive when a new round starts, if Arena Mode is enabled.
- 0 - No armor (0)
- 1 - Small Armor (20)
- 2 - Thighpads (50)
- 3 - Thighpads + Small Armor (70)
- 4 - Chest (100)
- 5 - Chest + Small Armor (120)
- 6 - Chest + Thighpads (150)
- 7 - Chest + Thighpads + Small Armor (170)
- ArenaAmmo (Integer, Default=50, Range 20-100): Controls how much ammo (in percentage) the players receive when a new round starts, if Arena Mode is enabled.
- RespawnThawedPlayers (Boolean, Default=False): Controls the respawn behavior of thawed players. "True" will make the players use the map's spawnpoints when they thaw, "False" makes the players resume playing from the exact spot they were thawed from.
- ThawTime (Float, Default=5, Range >0): The amount of time (in seconds) it takes for frozen players to thaw, by having a teammate standing next to them.
- AutoThawTime (Float, Default=50, Range >0): The amount of time (in seconds) it takes for frozen players to thaw by default/automatically.
- RoundTimer (Integer, Default=120, Range >=0): The amount of time (in seconds) for a round to reach sudden death.
- SuddenDeathDamage (Integer, Default=5, Range >0): The amount of damage dealt to players, every 2.5 seconds, when the round is in sudden death.
- LethalSuddenDeath (Boolean, Default=False): Controls whether the sudden death is lethal to the players or not. "True" will make the sudden death mechanic deal damage until the players die, "False" will make it deal damage until it brings the players down to 1hp.
To override any of the GameMode's variables listed above, all you have to do is append the corresponding variable name, along with the desired value, into the GameOptions string.
Here is an example: ?GoalScore=10?TimeLimit=20?IsArena=True?RoundTimer=60
Do note that any variables that have been set incorrectly (e.g. letters where you are supposed to enter a number), set out of their allowed range, or haven't be set at all; will be assigned to their default values. The algorythm has been designed to be case insensitive, so it doesn't matter which capitalization you use.
Known Issues:
- Frozen players are unable to go through teleporters. Worry not, they can't be telefragged. (Relevant discussion can be found here)
- If the HUD is turned off via the "showhud" command, the UMG overlay will not be hidden. (Relevant discussion can be found here)
- Bots cannot be prevented from firing, during round startup. You shouldn't play this with bots, really. (Relevant discussion can be found here)
Reporting Issues:
To report any issues/bugs that you've found with the GameMode, post in this thread, after making sure of the following:
- You are running the latest version of Unreal Tournament and the latest version of FreezeTag.
- You do not have any previous versions of FreezeTag in your "\Documents\UnrealTournament\Saved\Paks\DownloadedPaks" folder. (As it can cause conflicts when installing newer versions of the GameMode)
- You are not playing the GameMode with bots. (Bots are not supported. Their behavior cannot be controlled through blueprints and no logic has been coded for them yet, as a result, they will yield undesirable behavior)
- You have to be able to reproduce the issue in a consistent manner, and also provide a detailed explanation on how you did it. (Please also include your GameOptions string, your mutators/configuration, and any logs that you might have)
- You have read carefully the existing issues, on the first post, and the one you faced is not already listed in it.
FAQ:
- Q: Help! I do not understand how to play.
A: If you have questions on how to thaw teammates or other gameplay mechanics, take a look at the "Objective/Rules" section of this post. A tutorial video which explains how to play, will come at some point. - Q: Can I play this with 4 teams?
A: Yes and no. The GameMode can support any number of teams. However, the core game does not offer any skins, announcers or scoreboard/HUD resources for anything other than the Red and Blue teams. - Q: Can I play this with Instagib?
A: Yes, Instagib is fully supported. All you have to do is include it in the mutator list. You can use it in conjunction with Arena Mode, if you want to disable fall-damage. (The designated Arena health and armor are not given when using this combination, as they serve no purpose)
Roadmap for Upcoming Features and Optimizations:
- Include primitive bot support, so bots can at least ignore frozen enemies and thaw frozen allies.
Targeted bot support pattern:
If the bot itself is frozen, it's code/behavior should come to a halt. (until it's thawed again)
If the bot comes across any enemies which are frozen, it should ignore them. (right now it treats them as alive enemies, and proceeds to stand there and attack them repeatedly)
If the bot comes across any frozen teammates, it should initiate the following steps in order to thaw them:- If there aren't any enemies in their immediate line of sight, they should stand near their frozen teammates, and resume pathing once they have thawed.
- They should check the general area for enemy presence (if there are enemies in their line of sight) and if there are enemies, they should give more weight in clearing the said general area. (By killing the enemies, or driving them away)
- They should try not to leave the general area, unless their health is at critical levels.
Credits:
TimEh: Providing a generous portion of the initial coding which the initial release had (even though little code survived through the modifications/conversions), and also responsible for teaching me how to blueprint.
RattleSN4K3: Providing major contributions to the code and assistance with the debugging process. Thanks to his knowledge and work, I was able to heavily optimize the code and solve issues that were plaguing the GameMode for a long time.
vlad.serbanescu11: Being involved in tight collaboration with me, providing me with crucial fixes (in the earlier versions), latest advancements, debugging assistance, and audio resources needed for this project.
knepleyp, Mysterial, RZE, Joe Wilcox, Steven Polge: Providing advice and necessary blueprint exposure in the code, so our blueprint development becomes both possible and easier.
JoshuaMarlow: Providing me the new ice material that he made for DM-Chill. A variation of which, is now used within the GameMode.
frez: Providing the art for the GameMode badge that's used by the HUB UI.
Gleedo: Providing the audio file, for touching sounds, when thawing players.
Zaccubus: Showcasing the GameMode during the 03/23/2016 UTea Forecast steam.
raxxy: Testing and hosting this GameMode on his array of custom hubs.
Download and Cooking Instructions:
You can grab the latest available blueprints/source from here.
The archive also includes a test map which me and TimEh were using, in early versions, to quickly test the game's logic.
To cook it: Extract the above archive into your "\UnrealTournamentEditor\UnrealTournament\Content" folder. From there on out, you can:
- Open any of your maps and select "FreezeTag" as your GameMode Override setting (located in World Settings), then proceed by hitting Share > Share This Level. This will bundle FreezeTag inside your Map Package, and can be found under your "\Documents\UnrealTournament\Saved\Paks\MyContent" folder, once cooking completes.
- Open up a terminal, and then navigate to your "\UnrealTournamentEditor\Engine\Build\BatchFiles" folder, then issue the following command:
Code:RunUAT.bat makeUTDLC -DLCName=FreezeTag -platform=Win64 -version=3525360
WARNING: Do note that if you go with this method, you will have to modify the -version argument to correspond to the network version of the currently available build.
The paths and the commands might also differ, depending on your OS configuration and setup.
A cooked version of the GameMode along with it's MD5 checksum, for those who can't or don't want to cook it, can be found here.
Installation Instructions:
WARNING: I highly suggest not to disable the force respawn option, as the GameMode's functionality and smoothness depends on it.
- For single player usage:
Place the cooked package under your "\Documents\UnrealTournament\Saved\Paks" folder, and then launch or restart your game. From there on out, you can:- Start any DM/TDM map from the game, with FreezeTag as the selected GameMode. (This is faster, but will use the default GameMode configuration)
- Bring up your console and execute an open command.
Here's an example (you can also squeeze in any of the GameMode customization variables here):
Code:open DM-DeckTest?Game=/Game/FreezeTag/FreezeTag.FreezeTag_C?GoalScore=10?TimeLimit=20?MinPlayers=2?MaxPlayers=8?BotFill=8
- For dedicated servers:
Place the cooked package under your "\UnrealTournament\Content\Paks" dedicated server folder, and then edit your server execution line/script accordingly.
Here's an example (your binary may differ, based on your server configuration and setup):
Code:UE4Server-Linux-Test UnrealTournament DM-DeckTest?Game=/Game/FreezeTag/FreezeTag.FreezeTag_C?GoalScore=10?TimeLimit=20?MinPlayers=2?MaxPlayers=8?BotFill=0
- For hub servers:
Place the cooked package under your "\UnrealTournament\Content\Paks" hub server folder, and then edit the corresponding files accordingly:
Add the following lines in your Rules.json
Code:{ "uniqueTag": "FreezeTag", "categories": [ "TeamPlay" ], "title": "Freeze Tag", "tooltip": "It's time to break the ice!", "description": "GameMode created by FrostbyteGR.\n<UT.Hub.RulesText_Small>Report any issues on the forums!</>\n\n<UT.Hub.RulesText_Small>TimeLimit : %TimeLimit% Minutes</>\n<UT.Hub.RulesText_Small>GoalScore : %GoalScore% Rounds</>\n<UT.Hub.RulesText_Small>Maximum players : %MaxPlayers%</>", "displayTexture": "Texture2D'/Game/FreezeTag/GB_FT.GB_FT'", "gameMode": "/Game/FreezeTag/FreezeTag.FreezeTag_C", "requiredPackages": [ "FreezeTag-WindowsNoEditor" ], "gameOptions": "?TimeLimit=20?GoalScore=10?MustBeReady=1", "minPlayers": 2, "maxPlayers": 10, "bTeamGame": true, "bCompetitiveMatch": false, "mapPrefixes": [ "DM" ], "maxMapsInList": 0, "defaultMap": "/Game/RestrictedAssets/Maps/WIP/DM-DeckTest", "customMapList": [ "/Game/RestrictedAssets/Maps/WIP/DM-ASDF", "/Game/EpicInternal/Backspace/DM-Backspace", "/Game/EpicInternal/Batrankus/DM-Batrankus", "/Game/RestrictedAssets/Maps/DM-BioTower", "/Game/RestrictedAssets/Maps/WIP/DM-Cannon", "/Game/RestrictedAssets/Maps/DM-Chill", "/Game/RestrictedAssets/Maps/WIP/DM-Deadfall", "/Game/RestrictedAssets/Maps/WIP/DM-DeckTest", "/Game/RestrictedAssets/Maps/WIP/DM-Focus", "/Game/EpicInternal/Lea/DM-Lea", "/Game/RestrictedAssets/Maps/WIP/DM-NickTest1", "/Game/RestrictedAssets/Maps/DM-Outpost23", "/Game/EpicInternal/Salt/DM-Salt", "/Game/RestrictedAssets/Maps/WIP/DM-Solo", "/Game/RestrictedAssets/Maps/WIP/SM-Spacer", "/Game/RestrictedAssets/Maps/WIP/DM-Temple", "/Game/RestrictedAssets/Maps/DM-Underland", "/Game/EpicInternal/Unsaved/DM-Unsaved" ], "optionFlags": 65535, "bHideFromUI": false }
Code:[/Script/UnrealTournament.UTBaseGameMode] RedirectReferences=(PackageName="FreezeTag-WindowsNoEditor", PackageURLProtocol="<URL_PROTOCOL>", PackageURL="<HTTP_PATH_TO_FREEZETAG_PACKAGE>", PackageChecksum="<FREEZETAG_PACKAGE_CHECKSUM>")
- Replace <URL_PROTOCOL> with the value that your fileserver uses, https or http.
- Replace <HTTP_PATH_TO_FREEZETAG_PACKAGE> with the url that the FreezeTag.pak will be downloaded from.
- Replace <FREEZETAG_PACKAGE_CHECKSUM> with the MD5 provided above, or generate your own MD5 checksum if you did the cooking yourself.
NOTE: You can also use the "-run=UTGenerateRedirect" commandlet, to automatically generate the redirect references for you.
NOTE: For further customization of the rulesets and hub configuration in general, please review this thread which was kindly provided by RZE and JoeWilcox.
Version History/Information:
04/20/2015: Initial version.
04/20/2015: Version 0.2 Changelog.
04/21/2015: Version 0.3 Changelog.
05/01/2015: Version 0.4 Changelog.
06/13/2015: Version 0.5 Changelog.
06/15/2015: Hotfix 0.5.1 Changelog.
07/04/2015: Version 0.6 Changelog.
07/13/2015: Hotfix 0.6.1 Changelog.
07/31/2015: Version 0.7 Changelog.
09/10/2015: Version 0.8 Changelog.
09/12/2015: Hotfix 0.8.1 Changelog.
10/31/2015: Version 0.9 Changelog.
03/08/2016: Version 1.0 Changelog.
03/10/2016: Hotfix 1.0.1 Changelog.
03/16/2016: Hotfix 1.0.2 Changelog.
06/02/2016: Version 1.1 Changelog.
03/11/2017: Version 1.2 Changelog.
07/22/2017: Version 1.3 Changelog.
Any sort of footage, testing, suggestions, feedback are more than welcome!
Comment