4DFAF Uploaded

******* Now on FAF client for download *******
225dab7a-f8d0-48a4-9b4e-546f837f5229-image.png

Been working on converting the old 4th-D mod to work with FAF. Just uploaded the 1st portion of it, the original UEF units.

A few important things of note...

  • It wont modify the preexisting units or game assets. There maybe a follow on mod later that uses the 4th-D and 4DC content for the preexisting units.

  • Currently I've not added any AI support. Partly because its likely changed quite a bit since last I modded anything, and that I'd rather get the units in a playable state first before attempting this.

  • Balancing has been quickly looked at for some units but not all. Hence your constructive input is welcome.

All in all its taken the better part of a week to go through all 14 of the UEF original units, get them working and cleaned up. There is a far bit of new script done to improve upon or outright replace what was done using DMS.

Two examples...

UEF land mines in 4DC used an area sensing technique that to this day I don't fully understand. It was replaced with a "weapon" based system, but does work as intended.

UEF Thrasher T2 fighter has a all new afterburner script. Able to use the afterburner to catch up to targets or escape. While also able to automatically adjust its Break off distance / trigger based on the type of target it has.

Enjoy!

Resin

Finally, after all these years! Thanks Resin. Can confirm that all units work as intended to, with the exception of the T2 Naval mine not being able to surface or dive, as the toggle doesn't seem to work. I tested this with BlackOps and BrewLan mods. Loved the Balrog's magma canon explosion graphics. I forgot how "beautiful" it was. Great work, look forward to seeing the other units.

For the uninitiated (me), what does this mod add?

"Design is an iterative process. The required number of iterations is one more than the number you have currently done. This is true at any point in time."

See all my projects:

@blackrobe the Naval mine is built on the surface and then should sink to deploy. It's a one way animation event.

Edit: There shouldn't be a toggle. Will check again later.

There are some instances with mines that they are seen. The way the game handles stealth and Intel, it couldn't be helped. Only other option would be to make the mines non-detectable by all units, even Omni. What are your thoughts on this?

@indexlibrorum In its current form, fourteen custom UEF units. With three of them being experimentals.

Check out the following videos from 15 years ago. (Yeah its been a long time) And check out some of the snippet videos in my signature, these are also from 4th-D / 4DC.

https://youtu.be/qGJLD2CByvI?si=xHJ2THKmU4j6FJMU

https://youtu.be/4XA7mBDGvnI?si=6LBuSGTGNanRdunf

Great. Thank you.

@blackrobe corrected the issue with the Naval mine and re-confirmed that they do have stealth for all but Omni.

Edit: Will release an update in a few days. Want to sort out the trash bags for the units using attached emitter effects. Got most of this done, but experimentals can take a while due to testing being pretty lengthy for them.

@foxy_pj Me confused... Edit NM, just saw the PM.

Your welcome.

@resin_smoker No worries Resin. I was gunna say that stealth and cloak for all but omni is good. If you have a look at the BrewLAN Mod, he has T1/T2/T3 mines that can go on land and submerse in water; and they are cloaked and stealthed to all but omni as well. If you see what he's done, It should help so you can adapt your mines the same so you see them as cloaked in FAF.

@blackrobe I just used the standard in game cloak / stealth, as It's simple and works. Though I'll give the Mod you've suggested a deep look.

One thing to consider... The way that intel is setup "Structures" once seen, can not be un-seen, even after Intel is removed. Thus, I've setup the mines as either Land or Naval units, which allows them to once again be un-seen once the Omni source has been removed. (They just can't move) This should make them a bit more viable / functional in longer games as a result.

Side note: I really hate that Intel perma-detects structures in this way, and would advise the FAF Dev's to address this issue. Far as I'm concerned, Intel is too powerful, too cheap, and has too great of an area of effect (especially on smaller maps).

-Resin

Just took a look at the BrewLan mines, specifically unit SEB2220. Looks like he's also using the standard intel system for stealth, along with the "Suicide" weapon trigger event.

--Snippet from the units blueprint
Intel = {
        Cloak = true,
        RadarStealth = true,
        SonarStealth = true,
        VisionRadius = 0,
        OmniRadius = 1,
    },
SEB2220 = Class(MineStructureUnit) {
    Weapons = {
        Suicide = Class(MineStructureUnit.Weapons.Suicide) {
   			FxDeathLand = EffectTemplate.TSmallYieldNuclearBombHit01,
        },
    },
}
TypeClass = SEB2220

Only significant change here is that the mines are using there own Omni Intel rather than other types. Thus the mines can see thru stealthed units. But notice that the mines are all labeled as Structures. This means once they've been discovered via Omni that they will always remain so, even after Omni has been removed.

In comparison from 4DFAF unit UEB2102 (yes the identifier shows it as a structure but its not. This is deliberate)

--Snippet from the unit blueprint
	Intel = {
		Cloak = true,
		RadarStealth = true,
		VisionRadius = 2,
	},
-----------------------------------------------------------------------------
--	File	 : /units/ueb2102/ueb2102_script.lua
--
--	Author(s): EbolaSoup, Resin Smoker, Optimus Prime, Vissroid, Domino
--
--	Summary  : UEF Basic Land Mine Script
--
--	Copyright © 2024 4DFAF, All rights reserved.
-----------------------------------------------------------------------------

local bombWeap = import('/lua/sim/DefaultWeapons.lua').KamikazeWeapon
local emtBpPath = ('/effects/emitters/')
local TLandUnit = import('/lua/terranunits.lua').TLandUnit
local util = import('/lua/utilities.lua')

--Mine custom FX Tables
local mineFX = {
	emtBpPath .. 'destruction_explosion_concussion_ring_01_emit.bp',
	emtBpPath .. 'tti_dirt02_large01_01_emit.bp',
	emtBpPath .. 'tti_dirt02_large01_02_emit.bp',
}

ueb2102 = Class(TLandUnit) {

	Weapons = {

		Suicide = Class(bombWeap) {
			OnFire = function(self)
				--Check to see if mine has already fired once
				if not self.unit.Detonated then

					--Set flag true
					self.unit.Detonated = true

					--Trigger FX
					self.unit:DetonateFX()

					--Callback to KamikazeWeapon to perform damage
					bombWeap.OnFire(self)
				end
			end,
		},
	},

	OnCreate = function(self,builder,layer)
		TLandUnit.OnCreate(self)
		 --Set hitbox
		self:SetCollisionShape('Sphere', 0, 0, 0, 0.5)

		--Make the mine uncapturable
		self:SetCapturable(false)

		--Enable stealth
		self:EnableIntel('Cloak')
		self:EnableIntel('RadarStealth')

		--Set flag to prevent multiple firings
		self.Detonated = false
	end,

	OnDamage = function(self, instigator, amount, vector, damagetype)
		--Trigger mine detonation if the mine is damaged
		if self and not self:IsDead() and not self.Detonated then
			self:GetWeaponByLabel('Suicide'):FireWeapon()
		end

		--Null the damage amount so the unit attacking the mine doesnt earn a kill counter, as it just triggered the detonation instead
		amount = 0
		TLandUnit.OnDamage(self, instigator, amount, vector, damagetype)
	end,

	DetonateFX = function(self)
		--Sound FX
		self:PlayUnitSound('Detonate')

		--Do local calls
		local army = self:GetArmy()
		local pos = self:GetPosition()
		local bp = self:GetBlueprint()
		local ran = util.GetRandomFloat(0.75, 1.0)
		local myWeapon = self:GetWeaponByLabel('Suicide')

		--Disable the weapon to prevent them triggering more than once
		self:SetWeaponEnabledByLabel('Suicide', false)

		--Make FX and decals
		for k, v in mineFX do
			local mineEmitter01 = CreateEmitterAtBone(self,-2,army,v):ScaleEmitter(0.5)
			self.Trash:Add(mineEmitter01)
		end
		CreateDecal( pos, util.GetRandomFloat(0,2*math.pi), 'nuke_scorch_001_normals', '', 'Alpha Normals', 1 + ran, 1 + ran, 150, 60, army )
		CreateDecal( pos, util.GetRandomFloat(0,2*math.pi), 'nuke_scorch_002_albedo', '', 'Albedo', 2 + ran, 2 + ran, 150, 60, army )

		--Shake camera
		self:ShakeCamera(myWeapon:GetBlueprint().DamageRadius, 0.5, 0.25, 1)
	end,

}
TypeClass = ueb2102

Biggest difference here is that the 4DC mines have more destruction effects, impact shake and leave craters.