ACF 20 Ton Mech Challenge

I liked the idea of Chromehounds. It gave you bits and weapons, and you got to throw together a mech that was truly yours. You then marched out into the field of battle, spewing fire and death.

The ACF 20 Ton Challenge is meant to mimic that using the Armored Combat Framework on GGG.

For this little combat experiment, I provide you with the chip (that handles any number of legs), and I provide you with an aiming expression that provides a wobbly as fuck hologram as an aiming system. You build a mech, and then throw down with other people, hopefully recording it to show off in the thread.

There are no winners, there are no losers. You just get to throw together well designed pieces of machinery and smash the shit out of one another. Post your cool beans robots here so people can gawk in amazement.

However, there are some basic rules:

  1. No Target Finders or any other entity tracking of entities you do not own. This includes ranger fuckery, entity discovery, target finders, tagging holograms, or anything else of that nature.
  2. You must use the ACF Battle Pod, ACF Pilot Seat, Office Chair or Prisoner Pod as your vehicle of choice.
  3. You must be piloting the vehicle, that is, inside of it.
  4. All wire must be on-board.
  5. All ammunition must be on-board, but you can parent it.
  6. Do not stack ammo crates inside of each other to get more ammo.
  7. Don’t cheat the inertia using applyForce. It takes a lot of the headaches out of construction.

The mech weight that we’ve been using so far has been 20 tons, with an additional 3 tons per leg if you have more than 2 legs. Any weapons you can fit on your chassis are a-ok.

Anyways, the chips:
BFW_V4 - It will automatically scale forces to your contraption. It can handle as many legs as you want, providing it doesn’t explode from the opcount.
V3 - Added Crouching with the Alt button
V4 - Added a center of mass tweakable for the torso. Added EGPv3 HUD based 2d Radar. It communicates with other BFW chips. Toggle between Active and Passive by tapping R.
V5 - Cut ops by moving to quats, Removed Radar, improved jump, changed walking throttle to depend upon body speed



@name bfw_v5
@inputs ADV:wirelink X Y
@outputs SetYaw Debug
#inputs
@persist For Back Right Left FiltX FiltY Jump Boost Crouch Pod:entity Swap Active
#entities
@persist Tot:array
@persist [Torso Hip]:entity Feet:array FeetC TotL
@persist [TorsoMDL HipMDL FootMDL]:string
#vectors
#-held information
@persist [LatD RigD UpD CamD]:vector
#-position
@persist [HSP FLSP FRSP]:vector FSP:array
@persist [HCP FLCP FRCP]:vector FCP:array
@persist [HOP FLOP FROP]:vector FOP:array LAS:array
#-direction
@persist [HipHeld HipCur]:quaternion
@persist [TorsoHeld TorsoCur]:quaternion
#-walking
@persist [LefA RigA]:vector
@persist [HipPos HipVel Adjusted ForceVec]:vector
#numbers
#-stepsize stuff
@persist MaxH StepS ThrM Time Perc CrouchAmount
#-torso/hip force
@persist HipNat FootHoldForce
#-jumping bidness
@persist JumpForce JTGL Tow:vector
#-Sound Bools
@persist SCH Jpit Spit Rpit Dpit [JumpSND StepSND RunSND DeadSND]:string
@persist ALIVE SC:vector TrimTorso TrimHip VMul Accm Acceleration
#temporary values
@persist N TempE:entity TempS:string TempD:vector TotMass Q JFlag
@trigger 

if(dupefinished())
{
    reset()
}

if(first())
{
    #HELLO AND WELCOME TO THE BASIC WALKING CHIP
    #I AM YOUR HOST SESTZE
    
    #SO RIGHT, MY SUGGESTION FOR BALLSOCKETS IS AS FOLLOWS
    #BETWEEN HIP and FEET, use -0.1 to 0.1 for X, Y, and Z, with FREE MOVEMENT CHECKED
    #Between the LOWER LEG and FOOT, use the BALLSOCKET CENTER TOOL or use BALLSOCKET LINEDRAW
    #Between the UPPER and LOWER LEG, use -45 to 45 or so for X, it seems to work. -0.1 to 0.1 for the others
    #Between the HIP and UPPER LEG, use -45 to 45 X or so, and -35 to 35 Y, or so. -0.1 to 0.1 for Z
    #BETWEEN THE HIP AND TORSO USE BALLSOCKET CENTER ON THE TORSO TO THE HIP
    #THEN LIMIT IT'S ROTATION BY APPLYING AN ADVANCED BALLSOCKET WITH -45 to 45 X, -0.1 to 0.1 Y AND Z WITH FREE MOVMENT CHECKED BETWEEN THEM
    #NEED AN EYEPOD WITH CUMULATIVE OUTPUT, Ymin -180, ymax 180, xmin 0, xmax 0
    #NEED AN ADVANCED POD CONTROLLER, USE THE WIRELINK CREATOR TO MAKE IT A WIRELINK
    #THAT'S ABOUT IT. HAVE FUN!
    
    #it now supports any number of legs - if you're using this for ACF,
    #I think it'd be balanced to get an extra 3 tons worth of armor for
    #every leg beyond 2 you have. So:
    #2 legs - 20t
    #3 legs - 23t
    #4 legs - 26t
    #etc, etc, etc.
    
    #place models here!
    TorsoMDL = "models/hunter/blocks/cube075x075x075.mdl"
    HipMDL = "models/props_c17/FurnitureWashingmachine001a.mdl"
    FootMDL = "models/props_2fort/trainwheel001.mdl"
    
    #place sounds here! use "<NONE>" for no sound
    Jpit = 80
    Spit = 60
    Rpit = 60
    Dpit = 100
    JumpSND = "npc/waste_scanner/grenade_fire.wav"
    StepSND = "npc/antlion/shell_impact4.wav"
    RunSND = "npc/turret_wall/turret_loop1.wav"
    DeadSND = "ambient/levels/labs/electric_explosion2.wav"
    
    #Trims the strength of the active KUs
    TrimTorso = 1.0 #Torso
    TrimHip = 1.0 #Hip
    #Adjusts the step height of your robot. VMul * StepLength
    VMul = 1
    #Adjusts how fast the mech snaps to walking. This does not increase the overall
    #speed of your contraption if you make it really large. Just sayin'.
    Acceleration = 7
    
    #the rest is done automagically
    timer("checkstuff", 500)
}

if(clk("checkstuff"))
{
    Tot = entity():getConstraints()
    Tot[Tot:count()+1, entity] = entity()
    N = 1
    TotMass = 0
    FeetC = 0
    MaxH = 0
    timer("firstchecks", 10)
}
if(clk("firstchecks"))
{
    while(perf() & (N <= Tot:count()))
    {
        TempE = Tot[N, entity]
        TempS = Tot[N, entity]:model():lower()
        if(!(TempE:parent()))
        {
            if(TempS == TorsoMDL:lower())
            {
                Torso = TempE
            }
            if(TempS == HipMDL:lower())
            {
                Hip = TempE
            }
            if(TempS == FootMDL:lower())
            {
                FeetC++
                Feet[FeetC, entity] = TempE
                MaxH += TempE:massCenter():z()
            }
        }
        if(!(TempE:parent()))
        {
            TotMass += TempE:mass()
        }
        N++
    }
    if(N <= Tot:count())
    {
        print(N + " Items Checked")
        timer("firstchecks", 100)
    }
    else
    {
        timer("secondchecks", 10)
    }
}
if(clk("secondchecks"))
{
    MaxH = abs(Hip:massCenter():z() - MaxH/FeetC)
    TotL = FeetC
    StepS = MaxH / 2.5
    if(StepS)
    {
        ThrM = 720/StepS
    }
    else
    {
        ThrM = 6
    }
    
    LatD = vec(0, 1, 0)
    RigD = vec(0, 0, -1):cross(LatD)
    UpD = vec(0, 0, 1)
    
    ForceVec = vec(0, 1, 0)
    
    Accm = 0.9
    
    HipHeld = inv(quat(Hip)) * quat(LatD, UpD)
    TorsoHeld = inv(quat(Torso)) * quat(LatD, UpD)
    
    THF = Torso:toLocal(Torso:pos()+LatD)
    THR = Torso:toLocal(Torso:pos()+RigD)
    HHF = Hip:toLocal(Hip:pos()+LatD)
    HHR = Hip:toLocal(Hip:pos()+RigD)
    
    N = 1
    HSP = vec()
    while(N <= FeetC)
    {
        TempD = (Hip:massCenter() - Feet[N, entity]:massCenter())
        FSP[N, vector] = TempD:dot(LatD)*vec(1,0,0)+TempD:dot(RigD)*vec(0,1,0)+TempD:dot(UpD)*vec(0,0,1)
        HSP = (HSP * (N - 1) + (FSP[N, vector]))/N
        N++
    }
    
    HipNat = TotMass/Hip:mass() * 2/3
    FootHoldForce = HipNat
    
    JumpForce = TotMass/Torso:mass() * 32
    
    if(Hip & Torso & (FeetC > 1))
    {
        hint("Mech ready!", 3)
        timer("ntrvl", 20)    
    }
    else
    {
        hint("Error: missing bits! Please Refresh", 3)
    }
}

if(clk("ntrvl"))
{
    ALIVE = (Hip & Torso & (FeetC >= TotL))
    #Controls
    For = ADV["W", number]
    Back = ADV["S", number]
    Right = ADV["D", number]
    Left = ADV["A", number]
    FiltX = X/4
    FiltY = Y/4
    Jump = ADV["Space", number]
    Boost = ADV["Shift", number]
    Crouch = ADV["Alt", number]
    Pod = ADV["Entity", entity]
    Swap = ADV["R", number]
    Active = ADV["Active", number]
    SetYaw = Active * 90
    CrouchAmount = clamp(CrouchAmount+((Crouch)-(!Crouch))*0.05, 0, 1)
    #Hip stuff
    
    HipPos = Hip:massCenter()
    HipVel = $HipPos
    #TIME
    Q = (abs(For - Back) | abs(Right - Left)) & (CrouchAmount == 0)
    ForceVec = ((For - Back) * LatD + (Right - Left) * RigD):normalized()
    if(Q)
    {
        ForceVec = ForceVec:normalized()
    }
    Adjusted = Accm*(HipVel:setZ(0) + ForceVec * Acceleration)
    Time = Time + clamp(Adjusted:length() * 360 / (StepS * 2 * pi()), 0, ThrM*(1.5)^Boost) 
    L = (Adjusted:length() > 0.5)
    Perc = clamp(Perc + 0.1*(L-!L), 0, 1)*!JTGL
    
    SCH = ((Time % (360/FeetC)) < 5) & (Q) & !JTGL
    if(SCH & ($SCH > 0) & (StepSND != "<NONE>"))
    {
        soundPlay(entity():id()+"step", 4, StepSND)
        soundPitch(entity():id()+"step", Spit-5+random(10))
    }
    
    #Vector Hibbetyjibbety
    LatD = vec(sin(FiltX), cos(FiltX), 0)
    RigD = vec(0, 0, -1):cross(LatD)
    CamD = vec(sin(FiltX)*cos(FiltY), cos(FiltX)*cos(FiltY), sin(FiltY))
    
    #-torso dir
    TDF = CamD - (Torso:toWorld(THF)-Torso:pos()):normalized()
    TDR = RigD - (Torso:toWorld(THR)-Torso:pos()):normalized()
    
    #-hip dir
    HDF = LatD - (Hip:toWorld(HHF)-Hip:pos()):normalized()
    HDR = RigD - (Hip:toWorld(HHR)-Hip:pos()):normalized()
    
    #-hip/feet pos
    N = 1
    HCP = vec()
    while(N <= FeetC)
    {
        if(Feet[N, entity])
        {
            TempD = (Hip:massCenter() - Feet[N, entity]:massCenter())
            FCP[N, vector] = TempD:dot(LatD)*vec(1,0,0)+TempD:dot(RigD)*vec(0,1,0)+TempD:dot(UpD)*vec(0,0,1)
            TempD = FCP[N, vector] - FSP[N, vector]
            SC = ((Right | Left) & (!For & !Back)) * LatD*StepS*0.5
            LefA = StepS*Perc*(Adjusted:normalized()*sin(Time+(360/FeetC)*N)+VMul*UpD*cos(Time+(360/FeetC)*N)) + SC*((N%2)==0) - SC*((N%2)==1)
            #LefA = StepS*Perc*((For-Back)*LatD*sin(Time+(360/FeetC)*N)+(Right-Left)*RigD*sin(Time+(360/FeetC)*N)+VMul*UpD*cos(Time+(360/FeetC)*N)) + SC*((N%2)==0) - SC*((N%2)==1)
            LAS[N, vector] = FOP[N, vector]
            FOP[N, vector] = TempD:x()*LatD+TempD:y()*RigD+TempD:z()*UpD + LefA
            TempD = FOP[N, vector] - LAS[N, vector]
            Feet[N, entity]:applyForce((FOP[N, vector] + TempD * 2.5)*FootHoldForce*Perc*Feet[N, entity]:mass())
            HCP = (HCP * (N - 1) + FCP[N, vector])/N
            N++
        }
        else
        {
            FSP:remove(N)
            FCP:remove(N)
            LAS:remove(N)
            FOP:remove(N)
            Feet:remove(N)
            FeetC--
        }
    }
    TempD = ((HSP - vec(0, 0, CrouchAmount*MaxH*1/3)) - HCP)
    HOP = TempD:x()*LatD+TempD:y()*RigD+(TempD:z())*UpD
    #Forces
    if(ALIVE)
    {
        Hip:applyForce((HOP+$HOP*2.5)*HipNat*Hip:mass())
        
        Temp = RigD:cross(CamD)
    
        HipCur = quat(Hip) * HipHeld
        TorsoCur = quat(Torso) * TorsoHeld
        
        Hip:applyTorque(Hip:inertia() * TrimHip * 100 * (Hip:toLocal(Hip:pos()+rotationVector(quat(LatD, vec(0, 0, 1))/HipCur))*15-Hip:angVelVector()))
        Torso:applyTorque(Torso:inertia() * TrimTorso * 100 * (Torso:toLocal(Torso:pos()+rotationVector(quat(CamD, Temp)/TorsoCur))*15-Torso:angVelVector()))
    }
    #Hopping
    if(Jump & ($Jump > 0) & !JTGL)
    {
        JTGL = 1
        if(JumpSND != "<NONE>")
        {
            soundPlay(entity():id()+"jump", 2.5, JumpSND)
            soundPitch(entity():id()+"jump", Jpit-10+random(20))
        }
        timer("stopjump", 200)
    }
    if(RunSND != "<NONE>")
    {
        if(Boost & ($Boost > 0))
        {
            soundPlay(entity():id()+"boost", 0, RunSND)
            soundPitch(entity():id()+"boost", Rpit-10+random(20))
        }
        if(!Boost & ($Boost < 0))
        {
            soundStop(entity():id()+"boost", 0.5)
        }
    }
    if(JTGL == 1)
    {
        TempD = CamD:cross(RigD) * -1
        Torso:applyForce(TempD * JumpForce * Torso:mass())
        Hip:applyForce(TempD * JumpForce * Hip:mass())
        N = 1
        while(N<=FeetC)
        {
            if(Feet[N, entity])
            {
                Feet[N, entity]:applyForce(TempD * JumpForce * Feet[N, entity]:mass())
                N++
            }
        }
    }
    #Check if I'm still alive!
    if(Hip & Torso & (FeetC >= TotL))
    {
        timer("ntrvl", 20)
    }
    else
    {
        Pod:hintDriver("Error: missing bits, probably destroyed! Shutting down.", 3)
        if(DeadSND != "<NONE>")
        {
            soundPlay(entity():id()+"dead", 0, DeadSND)
            soundPitch(entity():id()+"dead", Dpit)
        }
    }
}
if(clk("stopjump"))
{
    timer("resetjump", 8000)
    JTGL = 2
}
if(clk("resetjump"))
{
    JTGL = 0
}

if(last())
{
    soundStop(entity():id()+"boost")
    soundStop(entity():id()+"dead")
    soundStop(entity():id()+"jump")
    soundStop(entity():id()+"step")
}


Basic GPS w/ Holo - The hologram is a necessary evil for the horizon lock issue - if you have a better solution, feel free to use it.



@name Basic GPS Aiming - holo'd
@inputs Pod:entity Gun:entity Gunb:entity
@outputs
@persist Dran:ranger Gof:vector Gofb:vector Chk Hv:vector Run
@persist Trg:vector Gfa Gfb
@trigger 

#You're welcome.

interval(10)

if(first() | dupefinished())
{
    #Gun forces for the first and second gun, respectively. Increase
    #for larger size guns, obviously.
    Gfa = 4
    Gfb = 4
}

if(Pod:driver())
{
    if(!Run)
    {
        Run = 1
        holoCreate(entity():id(), entity():pos())
        holoParent(entity():id(), Pod)
        holoScale(entity():id(), vec(0.1, 0.1, 0.1))
        holoAlpha(entity():id(), 100)
    }
    Dran = rangerOffset(60000, Pod:driver():shootPos() + Pod:driver():eye() * 200, Pod:driver():eye())
    Trg = (Dran:position() - Pod:driver():shootPos()):normalized()
    holoPos(entity():id(), Pod:driver():shootPos()+Trg * 15)
    if(Dran:entity())
    {
        holoColor(entity():id(), vec(0, 255, 0))
    }
    else
    {
        holoColor(entity():id(), vec(255, 0, 0))
    }
    if(Gun)
    {
        Gof = (Dran:position() - Gun:massCenter()):normalized() - Gun:forward()
        Gun:applyOffsetForce((Gof + $Gof * 8) * Gfa * Gun:mass(), Gun:massCenter() + Gun:forward() * 200)
        Gun:applyOffsetForce((Gof + $Gof * 8) * -Gfa * Gun:mass(), Gun:massCenter() + Gun:forward() * -200)
    }
    if(Gunb)
    {
        Gofb = (Dran:position() - Gunb:massCenter()):normalized() - Gunb:forward()
        Gunb:applyOffsetForce((Gofb + $Gofb * 8) * Gfb * Gunb:mass(), Gunb:massCenter() + Gunb:forward() * 200)
        Gunb:applyOffsetForce((Gofb + $Gofb * 8) * -Gfb * Gunb:mass(), Gunb:massCenter() + Gunb:forward() * -200)
    }
}
else
{
    if(Run)
    {
        holoDelete(entity():id())
        Run = 0
    }
}


Last but not least, I uploaded the clientside ACF files to Garrysmod.org if you’re too lazy to futz with the SVN: http://www.garrysmod.org/downloads/?a=view&id=117695
(It’s been reported, but I have no goddamn idea why)

[editline]8th February 2011[/editline]

Bideos:
Crappy Thanatos vs. 40mmAC Slugger

Artillery Bot vs. 100mmC Sniper bot
[media]http://www.youtube.com/watch?v=w-4SAE3IjSI[/media]
Crappy Hellspawn without a missile pod vs Tankbot
[media]http://www.youtube.com/watch?v=hKdv6bYiObc[/media]
Spider Sniper vs Spider Sniper
[media]http://www.youtube.com/watch?v=cmC5eVO3wow[/media]
Me getting owned a lot in the crappy thanatos
[media]http://www.youtube.com/watch?v=KuacMhdwZo4[/media]
105mm Artillery Bot vs 75mmC Tankbot
[media]http://www.youtube.com/watch?v=BtS1gft2yBM

GGG SVN is here: http://ggg.deathgibs.com/svn/

Has all the tools we use, and the external SVN to ACF.

Parent the holo to the gun itself and it won’t be so spazzy

my first 2 mechs for this, they’ve turned out ok

The mechs are pretty cool but that holo probably gave me eye cancer. Try this;



@name PodHud
@inputs [Pod Lock]:entity Active Reset [AimPos AimVec]:vector Red
@outputs 
@persist [Offset Scale]:vector Posed
@trigger Active Reset


if (dupefinished() | ~Reset & Reset)
{
    reset()
}

if (first())
{
    Offset = vec(0,0,0)
    Scale  = vec(0.65,0.05,0.05)
    
    #Crawshare
    holoCreate(5345, Pod:pos(), -Scale)
    holoShadow(5345, 0)
    holoModel(5345, "icosphere2")
    holoColor(5345, vec(0,255,0), 255)
    holoMaterial(5345,"models/wireframe")
    holoParent(5345,Pod)
    
    #Lawkhare
    holoCreate(5346, Pod:pos(), -Scale)
    holoShadow(5346, 0)
    holoModel(5346, "icosphere2")
    holoColor(5346, vec(0,255,0), 0)
    holoMaterial(5346,"models/wireframe")
    holoParent(5346,Pod)
}

if (Active)
{
    interval(50)
    
    if (!Posed)
    {
        holoPos(5345, Pod:driver():shootPos())
        holoPos(5346, Pod:driver():shootPos())
        Posed = 1
    }
    
    ShootPos = Pod:driver():shootPos()
    Ang = Pod:driver():eye():toAngle()
    holoAng(5345, Ang)
    if (Red)
    {
        holoColor(5345, vec(255,0,0))
    }
    else
    {
        holoColor(5345, vec(0,255,0))
    }
    
    if (Lock)
    {
        holoAlpha(5346, 255)
        holoColor(5346, vec(255,0,0))
        ShootPos = Pod:driver():shootPos()
        Ang = (Lock:pos() - Pod:driver():shootPos()):toAngle()
        holoAng(5346, Ang)
    }
    else
    {
        holoAlpha(5346, 0)
    }
    
}



It’s a HUD system that points a crosshair at your eye angle. It also has an extra crosshair for indicating an entity position like a locked target, grandma’s house etc. The systems are different because while your holo is continuously placed in front of the player and at the mercy of E2 tickrate, this is parented to the player’s eye position, and rotated to give the illusion of a moving crosshair. This eliminates the distracting spazzing holo of doom, and imo looks a bit nicer :v:
You can adjust it to your needs, like making the lock crosshair point at the gun’s orientation instead etc.

Fyi there are redundant variables left over after a branch into more specialised applications, and sometimes does not “latch” to the eyepos in certain circumstances related to pod enter/exit.

[editline]8th February 2011[/editline]

Oh yeah, probably won’t be entering because I dislike ACF being limited to a USA server. Great for anyone living stateside, otherwise not so good. If you extended the rules to include PewPew or something that isn’t private then I’d be more happy to take part.

Would really like to give this a go, but… :

^This…

I live in the UK and play on GGG alot and I am just as capable of beating someone on a US based server, compared to an EU based one.

GGG needs an EU / UK server. I get around 200 ping there… it’s unbearable.

tutorial need please.
for the E2, I don’t understand it at all.

It has instructions in the code, just use them. Here, I’ll even get them for you.



    #HELLO AND WELCOME TO THE BASIC WALKING CHIP
    #I AM YOUR HOST SESTZE
    
    #SO RIGHT, MY SUGGESTION FOR BALLSOCKETS IS AS FOLLOWS
    #BETWEEN HIP and FEET, use -0.1 to 0.1 for X, Y, and Z, with FREE MOVEMENT CHECKED
    #Between the LOWER LEG and FOOT, use the BALLSOCKET CENTER TOOL or use BALLSOCKET LINEDRAW
    #Between the UPPER and LOWER LEG, use -45 to 45 or so for X, it seems to work. -0.1 to 0.1 for the others
    #Between the HIP and UPPER LEG, use -45 to 45 X or so, and -35 to 35 Y, or so. -0.1 to 0.1 for Z
    #BETWEEN THE HIP AND TORSO USE BALLSOCKET CENTER ON THE TORSO TO THE HIP
    #THEN LIMIT IT'S ROTATION BY APPLYING AN ADVANCED BALLSOCKET WITH -45 to 45 X, -0.1 to 0.1 Y AND Z WITH FREE MOVMENT CHECKED BETWEEN THEM
    #NEED AN EYEPOD WITH CUMULATIVE OUTPUT, Ymin -180, ymax 180, xmin 0, xmax 0
    #NEED AN ADVANCED POD CONTROLLER, USE THE WIRELINK CREATOR TO MAKE IT A WIRELINK
    #THAT'S ABOUT IT. HAVE FUN!
    
    #it now supports any number of legs - if you're using this for ACF,
    #I think it'd be balanced to get an extra 3 tons worth of armor for
    #every leg beyond 2 you have. So:
    #2 legs - 20t
    #3 legs - 23t
    #4 legs - 26t
    #etc, etc, etc.
    
    #place models here!
    TorsoMDL = "models/props_vehicles/apc_tire001.mdl"
    HipMDL = "models/props_junk/TrashDumpster01a.mdl"
    FootMDL = "models/props_junk/MetalBucket02a.mdl"


Played ChromeHounds to death.

The clientside files for ACF were removed from garrysmod.org, don’t know why.

To anyone who doesn’t understand how to use or obtain ACF, or want to know how it works, I wrote this article a long time ago.

Ooohh Ahhh I see, thanks.

Chromehounds had tanks and wheeled vehicles too. I’m just putting it out there. And is there any way to make aiming not more or less useless on the move?

Rofl, it would really help out if you tried to put the ACF Client side up again, it’s really annoying that you have to build your mech on client (I have a slow internet and it would be worse on the US server), and then later on go to GGG to put up the guns. I would like to participate, but it would really help if someone fixed Client ACF.

The ACF client isn’t meant to work in singleplayer.
The client files are just the sounds, particles and models the client machine needs to use ACF on the servers.

Can’t fix it if it isn’t broken.

You say that the only thing in the ACF client is the raw content?
Perhaps to facilitate offline building of ACF contraption the client package should include a set of dummy entities that can be placed and wired in a manner similar to their real counterparts, but don’t actually function. This way an ACF contraption can be created in its entirety offline and then pasted into a live fire setting, as the client’s serverside entities of the same name are replaced with the server’s ones.

[editline]11th February 2011[/editline]

Find someone to contact with that idea :v:

Kaf has vanished so we can’t change anything in ACF yet.

Gibbo i know, but i mean like it would help alot of we could get like the guns so we don’t have to go into GGG and put everything in there. Splambobs idea was awesome imo. ACF was not maybe made for Client side, but wouldn’t it be better if we could smash all the guns (Or like Splambob said, that we use a “dummy entities”) so we can atleast finish it up in single. I hate trying to build on public, specially GGG because it’s a US. Gives me lagspikes and i lose my progress all the time. Does not ofcourse happen to everyone (like kyle mentioned he had no problem at all), but some of us do.

Look, what would be great would be simply to release the ACF Menu tool to spawn guns and ammo and the torch to check ammo. Modify them so the guns won’t shoot at all(remove the shooting code entirely) and only have the armor code in enough to calculate the values for the torch.

I believe Ses has access to GGG files, maybe he can just grab the relevant files and hand them to a trusted LUA coder to modify them.