Forts - [DEV] Blammo


G’day, Forts fans!

We're taking the chance this season roll-over provides to bring you some much needed fixes and updates. Among them is a favourites system for mods and maps. Use the star buttons on the left to mark favourites, then the filter menu to list only them. This will make it easier set up your most beloved battlefields.

We've also added the much requested ability to play multiplayer with alongside AI team mates, which broadens the range of maps for some players. Just select the new 'Team Deathmatch +AI' game mode in the lobby.

Ranked play has seen a few changes as well. The 2v2 competition has never been popular, and yet still consumes some of our time and attention. To better focus on the main attraction, 1v1, we have decided to discontinue it. We apologise to fans of this mode. Medal owners of previous seasons will retain their prizes.

Following some feedback on the maps used in ranked play, we have removed some, updated others, and added Stalactites 1v1. This should make the competition more consistent and focussed.

In addition, we have updated the way ranked games are scored in order to combat players disconnecting themselves and ducking a loss. Unfortunately this has seen some teething problems, and a bug with the initial patch caused enough scoring faults to warrant a reset of the leaderboard after a day of play. We believe this is fixed but are aware of some other issues which we are looking into. Please bear with us while we work to make ranked 1v1 the best it can be.

Check out the list below for more details.

Release 2020-04-03a Changelist
Add: Team Deathmatch +AI multiplayer mode, fills in empty forts with AI players
Add: star buttons to 'favourite' maps and mods, which can be used as a filter
Add: support for up to 10 weapon groups outside of campaigns
Add: Stalactites 1v1, new map for ranked multiplayer
Add: show weapon reload timer in replays
Add: FlipVertOnLeft flag to SpriteEffect
Add: copyright warning to Workshop Upload dialog
Add: blank 'draw' banner for when a player disconnects in ranked without a big enough damage difference
Add: FindUpgrade and RemoveUpgrade Lua functions to device_list.lua and weapon_list.lua
Add: screenshake to Howitzer firing
Add: Map Maker Tournament champion medal
Add: Flying Forts champion medals

Balance: AP snipers can one-shot shotguns (+100% damage)
Balance: increase minigun damage against shotgun (+200% damage)

Improve: update score during play with technical winner to discourage disconnection
Improve: tweaked Workshop Upload dialog to make German translations fit better
Improve: move menu backgrounds and base HUD skin to their own folders for substitution
Improve: texture paths can be substituted at run time to support menu and HUD skins
Improve: map name edit fields (map editor and upload dialogs) clamped to 30 chars and 350 pixels width
Improve: tweaked map name text fields in map editor, upload dialog and chatroom to be consistent (16 pt font, 350 width)
Improve: tweaked Campaign list box to clamp campaign names to 445 pixels (including localised "(In Progress)" suffix)
Improve: moved the following constants to "db\constants_user.lua":
- Game.LogGLErrors
- Game.LogDisplayModes
- View.UserScreen.TransitionTime
- View.UserScreen.EaseFraction
- Effects.VerboseLogging
- FileDetailsCache.VerboseLogging
- Mods.VerboseLogging
- Workshop.VerboseLogging
Improve: moved DedicatedHost to settings_hardware.lua
Improve: players can switch sides to sabotage the enemy
- Set lock teams on by default
Improve: explicitly define ranked map list in constants
Improve: overview and team screens are set to something sensible when not set by the map author
Improve: Pillars - Added extra armour to defend against Buzzsaw rush

Fix: edging sprites can be drawn at huge random sizes
Fix: AI can change target while firing beams
Fix: GetProjectileGravity doesn't return default gravity when it's not overridden
Fix: single point terrain blocks can still cause spurious device collisions
Fix: projectiles cause effects when hitting overridden blank surfaces
Fix: HUD ground texture doesn't update when cycling selected block
Fix: mod scripts are registered & executed twice
Fix: when devices are enabled by script HUD item visibility is adjusted regardless of the local team
Fix: .wav and .mp3 files are not correctly searched for when preloading samples
Fix: audio samples can't be loaded from pack files
Fix: \reload_effects causes effect preload errors
Fix: mod script.lua doesn't have its path variable set
Fix: when menu background texture fails to load the textures being loaded are cycled instead
- added ui/textures/invalid.tga to display instead of texture id 0
Fix: some display name issues suggesting workshop maps in lobby
Fix: Firebird icon for smokebomb is missing
Fix: disabled effects can delete child effects with no active particles
Fix: when deleting characters from IME it will also delete from console and editbox
Fix: ranked score can be reset incorrectly in some circumstances
Fix: saving default preview screens in editor doesn't correctly account for world extents
Fix: ranked score update sometimes doesn't match that shown to user
Fix: minigun, mortar2, rocket, shotgun upgrades were not modded/priced correctly due to loss of string key in 'Upgrades' table
Fix: some 'disable' mods for upgrades not updated to loss of string key in 'Upgrades' table
Fix: Moonshot campaign objectives are missing information about requirements and unlocks in Chinese
Fix: minor translation issues with commanders
Fix: AI deletes fuses before they burn out, preventing progress on the Goldberg mission
Fix: mod filters for multiplayer chatroom
Fix: issue with map/mod select state tests when refreshing file select screen
Fix: (Phantom) dummy devices still cost 30M rather than 20
Fix: reactor health doesn't cause a tie break in low damage match
Fix: mapping and flying champs don't show up in trophy cabinet
Fix: tutorial 2: poor turbine placement doesn't provide feedback
Fix: HUD skin_dlc1 texture errors when loading a ranked replay

Remove: ranked 2v2
Remove: outdated and inappropriate maps from ranked 1v1

Release 2020-04-19a Changelist (HOTFIX)
Add: save a backup campaign save (*.cbk) if the save was successful, and there is either no current backup or the backup file size is smaller than the new save
Add: Console error messages if a broken campaign save is detected (i.e. failed to load campaign save script)
Add: yes/no message box to restore from a backup campaign save if a broken save is detected, and a backup (*.cbk) exists
Add: "VerboseLoggingSound" to settings_hardware.lua and "Sound.VerboseLogging" to user constants:
- logs various fmod initialisation and bank loading steps to main game log.txt file
- (debug build only) logs internal fmod informational, warning and error messages to [userdir]\fmodoutput.txt
Add: data.MissileAimingDelay variable to specify the missile firing delay the AI uses
Add: '®' to Forts logo

Improve: validate campaign saves after they are written. Display an error message if they fail.
Improve: prevent panning when window not in focus

Fix: abandoning a campaign save would not write a backup (*.bak) if one already exists
Fix: issue with fmod->setAdvancedSettings() using incorrectly initialised FMOD_ADVANCEDSETTINGS structure
Fix: deserialising audio streams (i.e. replays and joining in progress) would play music regardless of EnableGameMusic setting
Fix: crash when using the GIF/video buttons in a replay
Fix: invalid console message "Error: Replay file 20200405_192959 is of the wrong version (0, should be 153)"
Fix: damage to reactor just before destruction can prevent ranked winner getting points
Fix: corrupt ranked scores can be uploaded
Fix: ranked draws count as a loss, affecting players win/loss ratio when the connection times out
Fix: host in ranked can switch team to spy on enemy commander selection
Fix: multi-projectile burst weapons (e.g. shotgun) can be fired without reload if projectiles are blocked
Fix: RankedMatchScreen still depends on the Multiplayer2 leaderboard to function correctly
Fix: when a node is created but obstructed it doesn't clear the standin node, preventing further construction
Fix: missiles can be launched from after the owner has changed
Fix: cursor can get stuck in pan mode when dropping out of multiplayer
Fix: weapon auto door preview can be out of sync with construction
Fix: strut drag/replace, and context convert, reclaim and repair menu show inconsistent expense signs
Fix: device reclaim and upgrade context menu show inconsistent expense signs
Fix: (Spire) difference in ground blocks AI script on team 2

Thanks for playing Forts.

Cheers,
EWG
Forts - [DEV] Blammo


G’day, Forts fans!

This past Saturday saw the sixteenth official Forts tournament take place, and what an event it was! Sixteen competitors from all corners of the globe battled it out over four rounds and two battle modes to decide the new Forts Champion.

Congratulations must go to Switzerland's KnuffigesPuffi for coming out on top and adding a tournament champion medal to the various medals he has earned over the last three ranked seasons. Both Matteo0160 and Nøxx did France proud, coming in second and third place respectively, in a fiercely competitive championship.

Indeed, the standard of competitor and the variety in strategy far exceeded that of previous tournaments, with no one default tactic emerging, and players having to adapt to the circumstances that the high level of opponent and map design presented. If you missed the live event, below are links to the streams from regular tournament commentators Project Incursus and Frazz, as well as that of emerging Forts streaming stalwart SynergyGamingTV and the ever-supportive Communauté Véritable Twitch Channel (FR). We thank them all for their support and efforts in making this tournament such a success.

Project Incursus
Frazzz
SynergyGamingTV
Communauté Véritable Twitch Channel (FR)

Last, but by no means least, thanks must go to 42scientist for organising the tournament and allowing it to go so smoothly, while at the same time putting in a valiant effort as a competitor.

Until the next tournament, thanks for playing Forts.

Cheers,
EWG
Feb 19, 2020
Forts - [DEV] Nozehed


G'day Forts Fans! We're back with a new tournament announcement, but first we'd like to bring your attention to the recent map making tournament that took place this past weekend.

Map Making Tournament
One of our biggest supporters Cronkhinator from the Official German FORTS Discord, along with help from 42 Scientist organised the very first Forts Map Making Tournament. The winner was M4r0x with his map MMT1F M4r0x (for which he will receive an in-game medal seen below in recognition), with SamsterBirdies coming in as the runner up.



Huge congrats to everyone involved for branching the Forts Tournaments into an interesting and exciting new direction. You can watch the chilled out tournament from two perspectives, via Smash Gaming (Frazzz) and Project Incursus streams...

Smash Gaming (Frazzz)
Project Incursus.











You can see the final scorecard here.

Forts Tournament XVI
It's been over half a year since our last official Forts Tournament and the time has come to see who is the the current top Forts player in the world!

This will be a 1v1 Moonshot Tournament with regular and capture point maps. It is being organised by the ever helpful 42 Scientist @ [FR/Official] FORTS Communauté Véritable, and is open to everyone and all languages. Once again, the battle maps will be chosen by audience vote during the live stream. You can vote here.

The tournament stream will be hosted by the endlessly supportive Project Incursus and Frazzz, with a cameo appearance by Nozehed as himself.

In order to participate, you must do the following...
  • Join the FORTS Discord
  • Send a direct message on Discord to 42 scientist#6023 saying you want to compete.
  • Your name on Discord and Steam have to match.
  • No long, obscure or offensive names allowed.
  • At this stage you will be entered into the tournament bracket as a competitor.
  • Log into the Tournament channel on the Forts discord during the tournament.
WHEN
  • Tournament starts March 7th, 2020 at...
  • 12pm (PDT West Coast USA)
  • 3pm (EST East Coast USA)
  • 8PM UTC/GMT (London)
  • 9PM CET (France)
  • 5AM AEDT March 8th (Eastern Australia)
WHERE
RULES
  • 1v1 Moonshot Standard Battles and Capture Points
  • Single Elimination
  • 15 minute battle time limit
  • Maps chosen by audience vote
  • Ton of Guns enabled
  • Moonshot enabled
  • Portals enabled
  • Commanders enabled
  • Draws decided by core damage inflicted (total damage if same core damage)
  • 16 competitors max
  • No suicides
  • 2nd round is in capture point mode
  • 3rd round and Finals are normal best of 3 with capture point tie-breaker
  • Late or missing players instantly forfeit
STREAMS
Project Incursus Youtube Channel
Smash Gaming Youtube Channel

THE BATTLEFIELDS
(chosen by viewers during the tournament)

CLICK HERE TO VOTE FOR THE NEXT MAP
    AbyssBallsBoxed InCatacombHang TimeHillfortIce CaveMooringsPenguinSkylandsVanillaTwin Derricks (Capture Points)Mid-City Oil (Capture Points)Five-Way Fossil Fuels (Capture Points)Asian Economy (Capture Points)Gusher (Capture Points)
note: Earthwork Games reserves the right to make changes to this event as needed
Forts - [DEV] Blammo


G’day, Forts fans!

Season 3 of Forts ranked multiplayer has now concluded, and we'dre happy to congratulate
QASAklim_ for claiming the top spot after a couple of months of honest work in the 1v1 arena. Over in the 2v2 scene, 2733382874 has emerged victorious, so congratulations to them.

These players will receive an in-game gold medal for their heroics, with the second and third placed players receiving silver and bronze medals respectively. On top of this, all players who finished in the top 20 will receive a medal to reflect that. The top 20 of each leaderboards are as follows:

1v1 Leaderboard
  1. QASAklim_
  2. Matteo0160
  3. samsam
  4. M4r0x | 無知な人間
  5. MrRauL124
  6. 魔魇大大
  7. Trekjeft
  8. HTBED
  9. Teutonick
  10. Jorge-Stoom
  11. vazquezma89
  12. CNFT_zhang502
  13. YUPUIP
  14. innocent child
  15. 君榆哟~
  16. 寂静的星空
  17. CNFT_摄像机
  18. CNFT_W11AWA
  19. boberetoGaming
  20. Technik
2v2 Leaderboard
  1. 2733382874
  2. YUPUIP
  3. HTBED
  4. QASAklim_
  5. CNFT_zhang502
  6. 副营长郝萌
  7. delitch
  8. Scon
  9. samsam
  10. Fumishow
  11. Vecro
  12. bananamilk233
  13. CNFT_DuskDawn
  14. CNFT_APlanmao
  15. milomill
  16. the KGB
  17. Megared
  18. 宁静致远
  19. 18326782360
  20. Paul ¯\_(ツ)_/¯
Season 4
The leaderboards have been reset, and Season 4 is now under way. Tuesday March 31st see the end of the season. In an effort to improve the ranked scene, we have improved the random map functionality, and reduced the ability for players to play an opponent more than three times to game the system.

Thanks for playing Forts.

Cheers,
EWG
Jan 5, 2020
Forts - [DEV] BeeMan


G'day forts fans, and happy new year! We've released a hotfix to Update 1.5 which adds the ability to rejoin a multiplayer battle you have dropped out of - a long standing problem when the internet doesn't cooperate. The lobby is posted to the top of the list, highlighted in orange and lasts for 10 minutes.

Workshop training missions can now be suggested to other players - see the button next to the
regular 'map' one. Mods can easily be removed from the lobby mod list, or suggested to be removed.

The Flak Gun has received a reduction in offensive potential, but an increase in hitpoints to make it less fragile. The Shotgun has received a slight buff to better take over the offensive role the Flak was being used for.

Some major optimisations have been done, and fixes to big and small bugs. A serious desync on joining has been fixed, as well as the frustrating issue of rejoining the wrong base. Along with the ability to rejoin a lobby, it should make the online experience much smoother.

Release 2020-01-06c Changelist
Add: most recent in-progress lobby is listed to allow rejoining after drop-outs
Add: buttons to remove mods or suggest removal from mod list in lobby
Add: button to suggest Workshop training missions in lobby

Balance: reduce Flak's shrapnel damage multiplier against weapons and devices to 40% of normal (-60%)
Balance: increase Flak hit points from 90 to 130 to make more resilient vs swarm (+44%)
Balance: reduce Flak upgrade cost from 100 to 50 metal (-50%)
Balance: reduce Shotgun fire cost from 30 to 15 metal (-50%)
Balance: reduce the Shotgun build time from 25 to 20 seconds (-20%)

Improve: update training strings

Optimise: only need ClearAlreadyHitFlags() in HandleCollisions when a collision takes place
Optimise: write in-memory world state as PoD for speed, convert to text on write to file
Optimise: don't allocate WorldDump buffer when not in online play
Optimise: CompositeSprite::IterateNodes constructs path if necessary instead of using sprintf_s
Optimise: CompositeSprite uses iterators for mChildrenBehind and mChildrenInFront
Optimise: added early out/continues to DrawLinkCladding and other minor improvements
Optimise: minor improvements to DrawStrut
Optimise: DrawLink doesn't copy doorCap and endCap Sprites

Fix: joining desync when anti-air weapons are selected
Fix: error message with Chinese mod trying set help panel texture
Fix: Chinese watermark not set correctly
Fix: players can rejoin in the wrong base (not yet fixed for LAN connections)
Fix: Chinese display names missing for some capture maps
Fix: host can be AFK if there's a game in progress, preventing rejoining player from getting in
Fix: crash in Multiplayer::Execute after AbortLoad
Fix: commander script paths are written to log at game start, allowing players to cheat
Fix: host unnecessarily calls SendUpdatedServerDetailsToSteam every display frame
Fix: effects/shell_eject_small.lua isn't always visible over weapons
Fix: chamber position of cannon and minigun
Fix: crash when opening mod list in lobby
Fix: AddResources not registered as a script function
Fix: GenerateCrashDump can reference garbage commander mods
Fix: subscribed training missions don't appear until the game is restarted

Remove: holiday theme

Release 2020-01-24a Changelist
Add: SpawnCircle and SpawnLine functionality in release build

Optimise: Sprite holds a pointer to the sprite prototype (mSpriteProto)
Optimise: fast-build doesn't need to iterate device and weapon upgrades to adjust build duration

Fix: sometimes weapon head disappears, maybe causing other graphical glitches
Fix: (Buster) can't easily add depleted uranium to modded weapons
Fix: (Buster) DU howitzer and warhead trails are too short
Fix: (Phantom) construct/complete effects execute for enemy when building cloaked weapons
Fix: players can delete maps to eliminate them from ranked map selection
Fix: removed pack files can be left behind by Steam, causing desyncs in multiplayer
Fix: fast-build increases the build time of short build duration devices
Fix: infinite loop crash when invulnerable struts queued for destruction receive splash damage
Fix: firebeam doesn't turn depleted uranium rounds incendiary
Fix: damagedmissile2 DU projectile has green trail, making it hard to identify
Fix: there are two versions of MakeFlamingVersion with different semantics of the trailEffect parameter
- trailEffect is now the fully formed path

Improve: short video captures are ended by pausing

Fix: players can play beyond ranked match limit by mashing start
- quit lobby as soon as ranked match limit is found
Fix: desync when an isolated node with a standin link bounces off a strut
Fix: PhysicsManager::EMP can attempt to disable standin links
Fix: PhysicsManager::ExtinguishFire can attempt to extinguish standin links
Fix: cursor missing after video recording

Thanks for playing Forts!

Cheers,
EWG
Forts - [DEV] Blammo

G'day forts fans! We're back with the two in a one-two punch of updates. As well as the usual fixes and optimisations, Update 1.5 comes with the new multiplayer training missions.

Multiplayer Training Missions
With many new players expected over the holiday season, we though it high time we gave rookies a helping hand in getting up to speed with the techniques of online multiplayer combat, thus the multiplayer training missions.



After heading to the Multiplayer section of the game, you will find a Training tab next to the Online and Local tabs. This is where the training missions live. We have added three new missions aimed at teaching new players some of the common skills employed in the meta game. This new feature comes with a new environment set Training Ground, complete with all new props, Gunner Sergeant character and ambient sound effects.

Training Missions
  • Anti-Air - Survive against three AI forts for ten minutes. Construct anti-air defences to protect your fort against the enemy swarms and warheads.
  • Cross-bracing - Discover the benefits of cross-bracing or die. You have less than a minute to reinforce your base before the enemy blast-doors open and hell is unleashed.
  • Rush - Keep getting hit with swarm missiles before you've strapped on your helmet? Learn how to rush swarm missiles before the timer runs out in this training mission.
Don't see a mission relating to a common n00b shortcoming? Build your own! Yes, training missions can be built by the community and added via the Steam Workshop integration. Simply add 'Training = true' to your mission script. This will prevent it showing up anywhere else, so make sure to record the AI for it before doing this. Sadly, we cannot supply localisation for play made training missions, but do encourage volunteers and collaborators.

Cheating in Ranked
Recently we found evidence of three players cheating in 1v1 ranked multiplayer. These players have had their scores for this season reset, and if they manage to achieve a top 20 position they will be ineligible to receive a medal in either 1v1 or 2v2. The flaw allowing them to cheat has been fixed.

Our team is very small, so incidents like this take valuable time away from more exciting work such as new features and content. If you know of anything going on, please let us know.

Release 2019-12-19a Changelist
Add: Christmas theme
Add: Multiplayer training missions (Anti-Air, Cross Bracing & Missile Rush)
Add: \block_info command to track down symmetry errors
Add: capture point mode technical winner determination for ranked disconnections
Add: error logging for mod sound bank loading
Add: warning sound and taskbar flash when lobby goes AFK

Improve: make 'Lock teams' apply before game as well as during (off by default)
Improve: Load device and weapon sprites before configuration to allow re-use of sprites regardless of order, logging disabled

Optimise: remove DDS version of splash screen and updated PNG version to reduce load time
Optimise: pre-allocate mDevices::mNodeEffects to eliminate the need for copying in Device::Clone
Optimise: GetNodeCountSide and GetNodeAtIndexSide
Optimise: CompositeSprite::AddNode reserves space in child lists to avoid reallocation
Optimise: Link::UpdateCladBothSides doesn't need to recurse if test already passed

Fix: duplicate instances Forts are possible (now brings existing instance to foreground)
Fix: crash when attempting to convert an invalid strut
Fix: crash when observer cycles selected device by key
Fix: crash when upgrade index is invalid due to duplicate device savenames
Fix: data desync caused by permanent non-preloaded effects
Fix: PhysicsManager::CapsulesIntersect returns an invalid position if the two midpoints are coincident
Fix: duplicate devices and material SaveNames can be created, causing issues
Fix: PhysicsManager::DrawLinkCladding accesses invalid third node
Fix: overlap of replay compress thread and join compress state can cause a host crash when someone joins
Fix: crash when interacting with background structures
Fix: crash on joining when desync_detected refers to unknown client
Fix: SetBlockFlags did not handle several flags (now shown in scripts/shapes.lua)
Fix: weapons can flip when their platform participates in breaks
Fix: ReceiveCreateNodeMessage can use an invalid position for LineSegIntersectsWithDevices
Fix: desync when devices are placed on near vertical struts
Fix: Workshop mods receive an invalid 'path' when changing sprites based on faction
Fix: the cursor is visible while taking map screenshots in editor
Fix: A Bridge Too Far missiles hit the ground
Fix: dlc1_MP 12 3v3 (Crossfire) symmetry error
Fix: anti-air AI sometimes leaves doors open when door is followed by solid strut
Fix: custom mod sound banks can fail to load first time
Fix: menu music starts at EWG logo rather than main menu
Fix: scripts replay desync when restarting campaign mission

From all of us have a safe and fun holiday season. Thanks for playing Forts!

Cheers,
EWG
Forts - [DEV] Blammo


G’day, Forts fans!

Today we're bringing you news of the result of the second season of Forts Multiplayer and a new update with a bunch of fixes, features and balance changes.

Season 2 Winners
Season 2 of Forts Ranked Multiplayer has just finished and it's been another hard fought fight to the top, with millions of bullets fired, thousands of players experiencing the power of gravity, and, when it comes to nukes, more drunks than a bachelor party brewery tour!

And so to the winners. In the 1v1 arena we're happy to announce that CNFT_DuskDawn has improved on his eighth place finish in season 1 to claim the top spot. Congratulations! In the 2v2 world, CNFT_LZjun has finished at the summit, adding the 2v2 gold medal to the 1v1 version he claimed in season 1. Well done!

As before, these players will receive an in-game gold medal for their heroics, with the second and third placed players receiving silver and bronze medals respectively. On top of this, all players who finished in the top 20 will receive a medal to reflect that. The top 20 of each leaderboards are as follows:

1v1 Leaderboard
  1. CNFT_DuskDawn
  2. KnuffigesPuffi
  3. CNFT_zhang502
  4. 信仰彼方的喵哟
  5. CNFT_LZjun
  6. CNFT_W11AWA
  7. Moon_Red
  8. 魔魇大大
  9. Trekjeft
  10. Bowser
  11. pudy248
  12. CNFT_BlackBird
  13. sgitkene
  14. Aerocraft
  15. Carrie
  16. 年糕糕糕
  17. stupid noob
  18. Da_Lao
  19. 趋光
  20. 0fred0m
2v2 Leaderboard
  1. CNFT_LZjun
  2. CNFT_zhang502
  3. KnuffigesPuffi
  4. Emile-wa
  5. Fumishow
  6. Vecro
  7. 二营长
  8. Romerolagus
  9. Trekjeft
  10. 浅黄色的里程碑
  11. CNFT_HouCan
  12. 寒风
  13. CNFT_东方延绪

  14. bananamilk233
  15. gostho29
  16. Gutenews
  17. pokekoper
  18. ignis_pluvius
  19. kayden en boaz
Season 3 and Random Maps
Along with the balance changes listed below, Season 3, which starts now and ends on January 31st, will feature random map selection. This is to ensure players don't just sit on a favoured map with a favoured build order, but have to adapt to the battlefield they are given. Hosts can still chose between regular encounters and capture mode via a checkbox. In addition to this, we have made a few other changes to further streamline the ranked experience. Check out the changelist below to find out more.

Update 1.4
We're bringing a whole host of new features, balance updates and bug fixes to Forts, including cloud saves for campaign progress and settings, fullscreen HUD, and map filters.

For modders a universe of possibility has been opened up with fully featured scripting support. Just add script.lua to the root of your mod, add dofile("scripts/forts.lua") to the top and then treat it much like a mission script. Tutorials will be coming, but for now we have removed compilation on maps/03-weapons/03-weapons.lua, maps/02-resources/02-resources.lua and ai/ai.lua to provide some samples. We're also working on documentation of the scripting API. Alexc96161 has generously written a starter guide. Just remember to keep all of your state in the 'data' table, or you will cause errors and desyncs.

On top of this, weapons can now have multiple prerequisite combinations, multiple upgrades with customised context buttons, and material conversion buttons can be added to the context menu. ReloadTime has been simplified, just set ReloadTimeIncludesBurst = false and you'll find weapons easier to balance.

To help manage the increasing complexity of mods, we've added support for source control within mod folders. Basically, the game will filter out anything it doesn't recognise when updating, including any .svn or .git folders. These will not make it into the Workshop item, keeping size down for players.

Join us on The Forts Official Discord to get direct help from us and other modders.

There's much more in this update that can't easily be summarised, so please trawl through the changelist and see how much love we put into this update.



release 2019-12-01a changelist
Add: randomised map selection in ranked, selecting 1v1 or 2v2 maps depending on leaderboard, with button to select capture maps
Add: Steam Cloud support for campaigns and settings
Add: transition to steam id user paths to support cloud saves
Add: map list filtering
Add: expanded HUD for Material, Device, Weapon, Terrain and Prop selection
--- Hold "Q" to display (can be switched to toggle in Options -> Game)
Add: fully featured dynamic scripting for mods (script.lua from base folder of mod)
Add: support for using source control in mod folders
Add: support for multiple upgrades with customisable context buttons
Add: support for multiple prerequisite combos for devices and materials
--- e.g. Prerequisite = {{ "a", "b", "c" }, { "d", "e" }, { "f" }},
--- Upgrades can have Prerequisite independent of the base device
--- An empty upgrade prerequisite means nothing required, even if base weapon has a
requirement
Add: support for secondary (barrel) structures allocated to players and AI in TDM
Add: SecondaryForts mission script table to associate primary forts with secondary forts by IdPos
Add: SecondaryForts.AllocateRemaining to decide what to do with unallocated secondary forts
Add: validate select game files on startup, flag Steam to verify and restart
Add: script checksum system
Add: support for ground weapons without a forced angle
Add: alternative destroy effect when expiring (defaults to destroy effect)
Add: Scale variable to CompositeSprite node
Add: open medal links in the Steam overlay if available
Add: an alias for shortened field identifiers (e.g. FI_D -> FIELD_DISRUPT)
Add: RAY_HIT_FIELD enum to CastRayFromDevice results
Add: draw anchor positions & directions and outlines of all composite sprite nodes in editor for selected device
Add: Additive variable to CompositeSprite node
Add: data desync logging for prerequisite and upgrade differences
Add: show repair area effects during replays
Add: logging during World construction to narrow down silent crashes
Add: SplashForceIsGravity flag to specify projectile splash force is gravity
Add: 'Log' function support for building_materials.lua and projectile_list.lua
Add: console error logging to mod.lua and script.lua loading
Add: customisable material conversion buttons, defaulting to DefaultConversions when Conversions is missing
Add: MergeLists Lua function to easily extend DefaultConversions for a material
Add: portal warmup times to context menu buttons
Add: weapon_pack_skirmish to balance weapon_pack outside of the Moonshot campaign
Add: material SplashMultiplier parameter to adjust general vulnerability to splash damage
Add: DoorSpeedClose so doors can close at a different speed to opening
Add: include uihelper.lua in sprites.lua for convenient modding
Add: GetTeamCount and GetTeamId functions to enumerate teams
Add: TEAM_ANY value to forts.lua
Add: script functions to change block texture
Add: toSelf parameter to SendScriptEvent so it can target its own mod scripts
Add: AddResources script function to spend or gain resources
Add: OnShowResult script notification to allow boss missions to disable the pause menu
Add: show device bounds when in debug mode, without circles
Add: red icon for Phantom device move
Add: allow one more game with a player in 2v2 before being match limited
Add: new Workshop tag "Capture"
Add: SetDoorState script function for instant door manipulation
Add: a frame rate counter to the main menu for testing UI performance (enabled by UI.MainMenuFPS)
Add: ReloadTimeIncludesBurst flag to weapon scripts (defaults to true) to maintain mod balance

Improve: move field identifiers to projectile_list.lua
Improve: change FIELD_BLOCK_ANTIAIR to FIELD_BLOCK_FIRING (doesn't apply just to anti-air)
Improve: replace use of cos/sin/FastCos/FastSin with cosf/sinf for performance/accuracy
Improve: moved AddPrerequisite from DeviceManager to World for use by materials
Improve: move portal controls into the first row of the context menu for consistency with doors
Improve: HUD-Buttons-Blank*.tga context buttons for use as mod upgrade & conversion button template
Improve: make link and node debug text more readable but translucent to see what's under
Improve: split settings.lua into settings.lua (cloud compatible) and settings_hardware.lua (local hardware config)
Improve: replace upgrade display name search with SaveName search in EnableDeviceUpgradeOfType script function
Improve: reorder Add*Control functions to appear next to each other in documentation

Balance: increase range of mortars to be viable on long range maps (MaxFireSpeed +30%)
Balance: increase reload period of warheads by 4s to 25s (+19%)
Balance: increase shootdown radius of warhead from 10 to 14 (+40%)
Balance: increase charge period +10% and reduce active period of Overdrive -30% (~36% reduction overall)
Balance: shotgun sprays projectiles evenly
Balance: increase hitpoints of shotgun to withstand one sniper shot
Balance: increase hitpoints of smoke grenade to withstand one sniper shot
Balance: smokebomb projectiles can't be shot down
Balance: shields immune to 20mm splash damage
Balance: portal receives only 25% of normal splash damage to make return to senders more viable
Balance: increase repair station radius from 200 to 270 (+35%)
Balance: reduce repair station energy upkeep from 16 to 10 (-37.5%)
Balance: increase firebeam firing cost from 1500 to 2000 (+33%)
Balance: increase firebeam reload period from 14 to 17s (+21%)
Balance: reduce protruding door caps when fully open by half
Balance: increase open speed of doors from 50 to 70 to combat warheads at close range
Balance: tightened up human assist anti-air AI to react faster to threats
--- AntiAirPeriod reduced from 0.4 to 0.3
--- AntiAirMinTimeToImpact reduced from 1.8 to 1.5
--- AntiAirReactionTimeMin reduced from 0.375 to 0.2
--- AntiAirReactionTimeMax reduced from 1 to 0.8
Balance: reduce phantom move time from normal deconstruction of the device time to 3s
--- Can be modified with the DefaultMovePeriod rule
--- Can be overridden using the MovePeriod variable in device_list.lua or weapon_list.lua
Balance: reduce Phantom dummy weapon metal cost from 30 to 20 (-33%)

Optimise: replace RotateAboutAxis in SparkSet::EmitSparkAtIndex with GenerateRotationMatrix/RotateVec
Optimise: PhysicsManager::GetLinkCount counts primary links, rather than using visited flags
Optimise: Control::EvaluateLayoutScript avoids double recursion if current control has no scripted layout
Optimise: HUDItems::Initialise prevents re-evaluation of HUD item layout during runtime
Optimise: reduced size of file cache lookup key for workshop maps (stripped off local path prefix)

Fix: beams can collide with the same field or projectile more than once
Fix: beam segments drawn to field graphical position are incorrectly drawn when the beam survives
Fix: projectile types can collide that wouldn't normally when fired from different weapons
Fix: non-DisruptionBlocksFire Anti-air weapons are blocked
Fix: AI can shoot DisruptionBlocksFire weapons offensively through a blocking field
Fix: use of FastCos and FastSin adds error to sprite anchors and aiming gizmo
Fix: CompositeSprite nodes are drawn with invalid dimensions if frame image isn't found
Fix: munitions plant has an incorrectly set Scale value in its sprite
Fix: upgrade centre has a gap in the sprite
Fix: DeviceExists doesn't check for fully built, disabled or dummy (check existing usage)
Fix: potential crash when reading excessively long upgrade SaveNames
Fix: upgrade params are not included in device checksum
Fix: basic mesh projectile sprites don't have their Scale and Additive values set
Fix: background terrain surfaces are drawn in foreground in the map editor
Fix: struts on fire can be converted to other materials
Fix: fire can spread to bracing while being replaced
Fix: team extents not updated correctly when converting or mirroring a fort
Fix: device positions are not updated during structure mirror, affecting structure extents
Fix: weapon angles are not updated during structure mirror, causing aiming at strange angles
Fix: interleaving dynamic ground blocks (e.g. energy field) can corrupt edge sprite rendering
Fix: ambient.lua effect desync after player uses \set_background in map editor (loaded permanently instead of temporarily)
Fix: maps that don't set a FortGroup table are limited to 4 AI forts on each side
Fix: World::AllocateFortsToAI unnecessarily loops through all structure states
Fix: rope peg isn't included in cost of building a new rope to the ground
Fix: artificial increase to default FortGroups causes map flag caching to slow
Fix: device facing is mirrored with structure in map editor
Fix: desync when placing device on a perfectly vertical strut
Fix: shockwave 'construct' effect misplaced for sloping devices
Fix: desync when firing structure weapons with fixed angle
Fix: Weapon::AimWeapon has obsolete, incorrect and inefficient behavior
Fix: default Russian keyboard layout is JCUKEN which is less clear than QWERTY
Fix: desync when standin links connect to a bouncing node
Fix: weapon RoundsPerBurst, ReloadTime and RoundPeriod can be zero or negative
Fix: portal orientation desync: aiming depends on prior aim of weapon
Fix: auto portal orientation weapon aiming fails when weapons are in auto fire/reloading
Fix: effects within environment mods cause replays to desync
Fix: desync when connecting to a single floating node (e.g. in zero gravity)
Fix: incorrect structure breaks when connecting to isolated nodes
Fix: crash when alt-tabbing during shell initialisation
Fix: "rank" string in Chinese
Fix: math.random can be used to produce non-deterministic numbers
Fix: allow use of math.random in effects scripts only
Fix: blank mod is activated for built-in environments
Fix: memfile leak in ReadEnvironmentName when terrain file is the wrong version
Fix: the failure to load some textures goes without error message
Fix: ReadProjectileEffectMap crashes if non-string table keys are present
Fix: secondary projectiles can never collide
Fix: corrupt base2.pack can cause memory allocation crash
Fix: projectiles with IgnitesBackgroundMaterials = true pass through materials with a certain configuration
Fix: Splash defaults to true for Deflect effects
Fix: crash when spawning a secondary projectile that doesn't exit
Fix: Shockenaugh's explosive barrel can overlap devices
Fix: shockenaugh explosive barrel uses battery detail panel
Fix: base of cannon has factory colours during construction in some circumstances
Fix: commander Buster error messages for impact_howizter and impact_howizter_big sprites when dlc1_weapons is off
Fix: crash in HUD::AddToContextMenu2 if row exceeds the maximum
Fix: SetDamageMultiplierSpecific sets AntiAir multiplier only, instead of type parameter passed
Fix: cannon detail panel not updated with munitions colours in weapon_pack
Fix: crash when switching team in editor without a selection
Fix: door caps can be drawn beyond the link when fully open
Fix: AI can build devices up-side down (AttachDevice accidentally using direct attachment)
Fix: weapons facing backwards when seeking in replays
Fix: OnKey can cause Lua exceptions during cutscenes when advance button is mashed
Fix: on start up game doesn't load when not in focus
Fix: SetControlText doesn't use parent to disambiguate the requested control
Fix: GetChildName does no bounds checking
Fix: GetDeviceType returns NULL, potentially causing exceptions or crashes
Fix: MapOriginalNode logs nodeTeam when node doesn't exist
Fix: game switches to terrain edit mode in CreateBlock
Fix: teamChecksum[0] was not cleared after structure checksums
Fix: repair breaks weapon reload animations
Fix: devices can protrude slightly and suffer projectile impacts
Fix: pause menu shows in final Black Gold mission victory cinematic, UI can become unresponsive
Fix: F1 or ESC on final victory banner causes the video cutscene to be missed, and can lock controls
Fix: crash when right clicking on terrain with a unknown texture or edge type
Fix: crash when opening maps with the indo environment
Fix: AI keeping doors open, blocked by door cap but opens door any way
Fix: door cap collision in DeviceManager::FireWeapon and Weapon::OpenDoorsInFrontOf ignores modification
Fix: generated file caches break if no language is set up (i.e. release builds)
Fix: gData.UseEnglishMapNames inconsistencies (used in FileSelect::GetMapDisplayName, but not used in some other cached places)
Fix: Mod Moonshot icon issue wrt a circular status check when refreshing items
Fix: updated workshop items can have versioning issues if the itemversion.lua script is modified or rolled back
Fix: Prevent F2 re-opening HUD if force closed by GameOver or script call
Fix: Prevent mousing over bottom of screen re-opening HUD if force closed by GameOver or script call

Remove: dynamic screen files from old system
Remove: compiling of tutorial mission scripts so they can be used as scripting references
Remove: obsolete upgradeDisplayName in UpgradeParams
Remove: obsolete BeamImpactProjectile on magnabeam
Remove: isolated nodes after fire burns out the last strut
Remove: obsolete clouds layer and texture from desert environment
Remove: map selection, AI control and game mode control from ranked lobbies
Remove: host configuration grace period, to prevent "shopping" for favourable maps
Remove: compilation of ai.lua, 03-weapons.lua, and 02-resources.lua for use as scripting examples
Remove: dummy sandbags for Phantom
Remove: AI deliberately keeping doors open between shots (looks buggy)


Thanks for playing Forts.

Cheers,
EWG
Oct 27, 2019
Forts - [DEV] Blammo


Hallowe'en is now the season,
When things turn sinister,
And defy all reason.

Upon Forts does a pall descend,
Bringing a spooky landscape
And a haunted front end!

EWG goblins spent all their time
On art, music and code,
And very little on rhyme!

Haunted Main Menu


Cursed Landscape


Wishing you a happy Hallowe'en,
EWG
Forts - [DEV] Blammo

G’day, Forts fans!

Today sees the culmination of the first season of Forts ranked multiplayer. After thousands of battles, we have our champions of the 1v1 and 2v2 leaderboards. Congratulations to CNFT_ LZjun topping the 1v1 leaderboard after eighty eight. In the 2v2 arena, KnuffigesPuffi claimed the top spot. Well done!

These players will receive an in-game gold medal for their heroics, with the second and third placed players receiving silver and bronze medals respectively. On top of this, all players who finished in the top 20 will receive a medal to reflect that. The top 20 of each leaderboards are as follows:

1v1 Leaderboard
  1. CNFT_LZjun
  2. 2784724182速出加农
  3. KnuffigesPuffi
  4. CNFT_zhang502
  5. CNFT_BlackBird
  6. pudy248
  7. QASAklim_
  8. CNFT_DuskDawn
  9. 魔魇大大
  10. Romerolagus
  11. Kamen Rider Ab
  12. 喵呜~~~
  13. EreXiuM
  14. Zi_Min
  15. Jorge-Stoom
  16. tony
  17. Kamsta99
  18. Bowser
  19. Trekjeft
  20. 0fred0m
2v2 Leaderboard
  1. KnuffigesPuffi
  2. Emile-wa
  3. Grizz (Commend Meツ)
  4. JKS
  5. Gluflex
  6. Romerolagus
  7. QASAklim_
  8. АРБУЗ
  9. 2727342737
  10. 1075115010
  11. Баклажан
  12. 18302030633
  13. slibarmann
  14. 枫叶丶柚子茶
  15. DJ_lazysheep
  16. Monika_Chan
  17. oDa_
  18. CNFT_zhang502
  19. Red_Lhok
  20. BSKDragon
Season 2
In a bid to increase competitiveness on the leaderboards, we are reducing the duration of seasons to two months. Therefore, Season 2 will finish on November 30th. The leaderboards have been reset, the season starts now! To the battlefield!

Thanks for playing Forts.

Cheers,
EWG
Forts - [DEV] Blammo

G'day forts fans! We're back with another update for you, concerning some fixes and optimisations, and the introduction of in-game medals in preparation for the end of Forts Ranked Multiplayer Season 1 on September 30th.

This update also features some changes and additions for mod makers:
  • Projectiles now have a 'DeviceDamageBonus' variable which works just like WeaponDamageBonus.
  • The projectile DamageMultiplier table can now have "structure", "device", "weapon" and "projectile" entries that provide a catch-all for those categories, if no specific SaveName matches what is hit.
  • The projectile Effect system has been extended with the addition of the 'Chain' variable, which contains a list of additional effects to execute. These do not apply additional damage but can spawn visual effects and new projectiles.
  • Projectiles now have 'EnemyCanTeleport' variable which is an alias for 'PassesEnemyPortals', but does not trigger Moonshot dependency for the mod.
  • Projectile vs projectile collision damage multiplier has been moved from the receiver using Direct, to the giver using AntiAir. This makes it consistent with other damage multiplier types, and allows damage to projectiles having the same name as their weapon to be differentiated.
  • Commander descriptions can be modified in-game using paths such as mods\\language-English\\mods\\commander-bpo-scattershot\\strings.lua.
See the sniper projectile in the base files for samples of DeviceDamageBonus and categorised damage multipliers. Further documentation will be coming.

Medals
Introducing the new Forts medals system. Upon the completion of the current ranked season, players placing in the top three of the 1v1 and 2v2 leader boards will be awarded medals to signify this achievement. Additional medals will be awarded for anyone else who placed in the top 20. A star on the corner of the medal indicates that older medals have been hidden. Simply click on the medals to see the full history. Medals will also be granted to Forts content creators and modders/map makers who meet the minimum criteria, with those owning Moonshot DLC getting a further medal with immediate effect. A developer medal will also be awarded to the developers. It's our game, so why not? :P


  1. 1st Place - Season 1 - 1v1
  2. 1st Place - Season 1 - 2v2
  3. 2nd Place - Season 1 - 1v1
  4. 2nd Place - Season 1 - 2v2
  5. 3rd Place - Season 1 - 1v1
  6. 3rd Place - Season 1 - 2v2
  7. Top 20 - Season 1 - 1v1
  8. Top 20 - Season 1 - 2v2


  1. Current Tournament Champion
  2. Workshop
  3. Content Creator
  4. Developer


These medals will appear next to the player's name, as shown, with visibility being specified in the game options screen (hide rank in lobbies) to avoid high ranked players getting kicked by fearful server hosts. Hovering over the medals pops out larger versions of the medal that can be clicked on to take the player to a specific destination, as described below.



Additionally, we have implemented a Trophy Cabinet section to the Ranked Match screen, for players to get an over view of their medals and bask in the glory of their haul in hi-res. This screen will also show placings from previous seasons.

Content creators with at least 100 subscribers can apply for a medal by emailing us at info@earthworkgames.com (from the email address listed on your channel for verification purposes) with links to three videos featuring Forts for at least ten minutes each. Also include a link to your Steam profile to allow the game to identify you.

Applications for the Workshop medal are handled via this form. To qualify, you must have at least one Steam Workshop item with at least 1000 subscribers.

Changelist release 2019-08-30a
Add: medals for devs, moonshot owners, streamers, modders, and ranked and tournament winners with popup links
Add: Trophy Cabinet to show ranked season and tournament medals
Add: Season results with links to previous leaderboards and medals earned
Add: AgeEffectsOnExpiry to ProjectileParams to prevent spawning of projectiles
Add: Chain to CollisionActionParams for secondary impact effects to projectile collisions
Add: support for additive highlighting of Button controls
Add: DeviceDamageBonus to projectiles
Add: WeaponDamageBonus and DeviceDamageBonus can be negative
Add: SetDamageMultiplier and SetDamageMultiplierSpecific convenience functions to projectile_list.lua
Add: DamageMultiplier categories for structure, device, weapon and projectile
Add: "Retrieving Workshop Items" notice at top of map/mod select screens if waiting on initial workshop initialisation

Optimise: loading of file selection screens (maps, mods, replays)
Optimise: Workshop maps/mods are no longer parsed for ranked matches

Fix: DamageMultiplier between projectiles are broken (moved multiplier from damage receiver to giver, and from Direct to AntiAir)
Fix: ConvertStructure goes beyond no-conductive struts, preventing correct set up of team forts connected to neutral structures
Fix: invalid upgrades are accepted without error, and cause crashes
Fix: mods can cause devices to be inconsistent between Team1/Team2 and Passive/Active without warning
Fix: ground animations are not loaded from environment
Fix: actions can spawn new projectiles with no life span, allowing infinite loops
Fix: howitzer projectiles don't collide if they start within range
Fix: howitzer projectiles don't collide if they are trapped in a portal loop
Fix: crash when a client disconnects during a ranked game
Fix: crashes calling load callbacks when OnP2PSessionConnectFail is called during loading
Fix: handling of excessive ping doesn't score ranked matches
Fix: internal disconnecting client status gets spammed when receive timer times out
Fix: extrusion fails and can crash if a full extrusion material doesn't have a recession target
Fix: commander specific fmod events are not reliably loaded
Fix: leaderboard names can overlap right most columns
Fix: 'Unranked' text in RankedMatchScreen can overlap first column
Fix: damage to background structures creates inaccurate damage stats
Fix: invalid forces can be applied to structures when a weapon is blocked by an unowned device
Fix: ray damage isn't applied when a device is hit
Fix: remove defunct 'left click deselect weapon' option
Fix: rotate up/down by key allows weapons to aim and shoot outside normal range
Fix: ground edge sprites sometimes appear large and corrupted
Fix: materials with negative mass cause projectiles to slow down too much, sometimes producing infinite collision loops
Fix: mMaxSparks can be zero or negative
Fix: mSparksPerBurst can exceed mMaxSparks
Fix: forfeit message doesn't arrive when force quit in ranked
Fix: when other team forfeits ranked winner can be decided by damage
Fix: if host times out player doesn't score self in ranked
Fix: incendiary mortars don't clear smoke
Fix: dedicated host setting can be used in ranked games
Fix: Workshop maps could appear in player tab of ranked map select
Fix: dlc1_MP0 incorrectly marked for "FromScratch" map select tab
Fix: "AllowEdit = false" maps were not being displayed for copy in map edit select (now greyed out for edit mode)
Fix: item list index was used to track current selection when going back to map select, and can get out of sync if still downloading items
Fix: Chatroom Subscribe messages could incorrectly pick a local display name in certain circumstances
Fix: MultiplayerUnlocked settings flag now also checks against steam multiplayer stats

Remove: error message when forcing default recession target for materials
Remove: turn stiffness limit error into a warning to avoid dropping console

Thanks for playing Forts!

Cheers,
EWG
...