GithubHelp home page GithubHelp logo

fa's Introduction

About Forged Alliance Forever

Impression of the game

Forged Alliance Forever is a vibrant, community-driven project designed to enhance the gameplay of Supreme Commander: Forged Alliance. Our active community has developed a custom client, backend and website. We provide a rich gaming experience with an extensive library of community-made maps, mods and co-op scenarios. The project can be financially supported through Patreon.

Getting started playing

  • Register through our website and verify through either Steam or GOG your ownership of a copy of Supreme Commander: Forged Alliance.
  • Download the client from our website.
  • Log in using the account you registered and host a game with AIs and/or players, queue up for matchmaker or upload your own content to our vaults for other players to enjoy.
  • Engage with the community through the forums using the account you registered or join us on the official Discord server.

Changelog

The changelog is split across multiple files. Each file represents a release. You can find them in the changelog folder. Some changes are also described in an alternative format that makes them easier to read for the community.

Contributing

There are instructions in English and in Russian to help you set up a development environment. It is important that you discuss your contributions beforehand. You can do this by making a comment on an existing issue or, if it doesn't exist yet, by opening a new issue. Not all pull requests are merged by default. It is important that the changes align with the vision of the project.

There's an extensive guide to help you setup a debug environment. Everyone that contributes must adhere to the rules and apply the contribution guidelines as they discuss issues with other community members.

Deployment

There are three branches branches that deployable and are available for players to play on. The deployment procedure is automated. Pushing commits to one of these branches is sufficient to trigger the deployment.

  • (1) deploy/faf is the production branch that maps to the FAF gametype.
  • (2) deploy/fafdevelop is a development branch that maps to the FAF Develop gametype.
  • (3) deploy/fafbeta is a development branch that maps to the FAF Beta Balance gametype.

Deployment of a development branch

There are no requirements to a deployment to a development branch. A push of a commit is sufficient to trigger a deployment. The development branches are unaware of history. For example, A replay will always start using the last deployment. All replays that used a previous deployment when the game was played is guaranteed to desync.

Deployment of the production branch

There are various requirements when deploying to production:

  • (1) Update the game version in mod_info.lua and version.lua.
  • (2) Update the game executable. This needs to be done by a server administrator. This is only required when there are changes to the executable.
  • (3) Update the changelog in changelog.md and changelogData.lua.
  • (4) Update the game version in changelogData.lua.
  • (5) Create a new release with the changelog that points to a commit on the develop branch

Specifically steps (1), (2) and (5) are required to create a functioning deployment where even replays can retrieve the proper configuration to prevent desyncs.

Related repositories

Campaign or co-op content

Lua plugin

Assembly patches

fa's People

Contributors

4z0t avatar aeoncleanse avatar basilisk3 avatar blackyps avatar brute51 avatar chriskitching avatar clyfordv avatar cookienoob avatar crotalus avatar duk3luk3 avatar exotic-retard avatar garanas avatar hdt80bro avatar hussar-mtrela avatar jaggedappliance avatar kionx avatar ll1l1 avatar mrnukealizer avatar mrrowey avatar petricpwnz avatar philipjfryfaf avatar ppipp avatar relent0r avatar shalkya avatar sheeo avatar strogoo avatar tagada14 avatar thekeyblue avatar uveso avatar xinnony avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fa's Issues

Seraphim ACU Explodes on Transport

The Seraphim ACU sometimes explodes when you unload it from a transport. It is thought to be something to do with the unit being turned the wrong way when it is loaded or something.

JSON header of downloaded replay missing player

The JSON headers of downloaded replays are missing one player name.

portion of local replay file 2679856-RoLa.fafreplay: {"featured_mod_versions": {"11": 3634, "13": 3634, "12": 3634, "15": 3634, "14": 3634, "17": 3634, "19": 3634, "18": 3634, "20": 3634, "1": 3634, "3": 3634, "2": 3633, "5": 1, "4": 1, "6": 1, "9": 1, "8": 1, "21": 3634}, "num_players": 8, "game_end": 1412885102.758, "uid": 2679856, "version_info": {"lobby": "0.10.121"}, "game_time": 1412885010.329131, "game_type": 0, "host": "janpol", "sim_mods": [], "teams": {"1": ["tropodator", "RoLa", "janpol", "EiS"], "2": ["iswearshewas18", "Slartibartfast", "BlackBirds", "Greataxe"], "-1": ["B3stEc0EU"]}, "access": "public", "state": "playing", "options": [], "command": "game_info", "featured_mod": "faf", "title": "600-1100", "recorder": "RoLa", "mapname": "gap of rohan.v0001", "max_players": 8, "complete": true}

downloaded faforever.com/faf/vault/replay_vault/replay.php?id=2679856 {"num_players": 8, "featured_mod_versions": {"1": 3634, "2": 3633, "3": 3634, "4": 1, "5": 1, "6": 1, "8": 1, "9": 1, "11": 3634, "12": 3634, "13": 3634, "14": 3634, "15": 3634, "17": 3634, "18": 3634, "19": 3634, "20": 3634, "21": 3634}, "game_end": 1412885108.918998, "uid": 2679856, "title": "600-1100", "game_type": 0, "teams": {"1": ["tropodator", "RoLa", "EiS"], "2": ["Greataxe", "Slartibartfast", "iswearshewas18", "BlackBirds"]}, "mapname": "gap of rohan.v0001", "featured_mod": "faf", "complete": true}

New Modelling Process

Not entirely sure this issue belongs in FA, but there doesn't appear to be a misc section.

BannanaHammer has made good progress towards fixing Issue #23 properly. The theory is correct and adding a new bone is the way forwards. However, the importer used with Blender is currently broken, not importing Normals properly and making the entire process far, far harder than it needs to be.

I think we need to put a long-term goal in place to either find out what program(s) GPG used to create models in the first place, contact as many of the old/current modellers as we can, and get documentation together on how to do this, and how to avoid or solve the common problems.

It is also worth, I think, writing a new importer or whatever it takes to make editing models as easy and painless as possible, if such an endeavour is even achievable.

How it's meant to look: http://snag.gy/WvyIV.jpg
How it looks post-edit: http://snag.gy/euISO.jpg

Aiming and Beam Weapons

Pip told me that setting MuzzleVelocity to a high value makes beam weapons aim properly.

This needs to be done for all beam weapons, and it opens up the following improvements:

  • Sera t3maa can have its custom beam code removed
  • Cybran pd and rhino can be reverted back to beam weapons

Changing fire mode

"Cycle through all of the available fire states." is a key binding option which can be found under "Orders" when you press F1 in game.

Right now it has a delay of a second on it each time you use the key binding. However, when you change fire mode by clicking on it with the mouse it'll happen instantly.

The delay can be annoying when microing a bomber which already takes a lot of time and effort.

Nukes, Defenses, and Mass Stall

When you mass stall (And possible when E stall too), nukes and anti-nukes building missiles get hit much harder by the way resources are shared out. They appear to get 1/10th the resources they should get.

Engineer repair progresses upgrades

When a commander being repaired starts an upgrade the engineers assist it while not using extra resources. It seems to not progress as much when stalling but goes full speed when not stalling.

replay ID: 2678703

Autobalance when choosing random

Random spawn should be autobalanced teamwise, alot of effort goes to just trying to make balanced teams in lobby.

I will make a pull request which contains some autobalance stuff, it could always be tuned (adding it as an option etc) but will work for now

Fix SupComDataPathFAF.lua and SupComDataPath.lua to work in any location

Both DataPath lua files import files from the CWD instead of the InitFileDir.

Change:

dofile('init_faf.lua')

to

dofile(InitFileDir .. '\\init_faf.lua')

The files are missing from this repo and they are actually something the server sends to the clients. Since both of them are directly related to this "featured mod", I report this issue here.

Lobby auto teams launch lua error when in 'None' mode. [develop]

It crashes when running AssignRandomStartSpots (I don't know why it is being run) on launch when players have team '-' (no team).

I don't seem to be able to change teams in 'Manual' autoteams mode as well.

Error

WARNING: Error running OnRelease script in <deleted object>: h:\.faforever\bin\test\lua\ui\lobby\lobby.lua(1297): table index is nil
         stack traceback:
            h:\.faforever\bin\test\lua\ui\lobby\lobby.lua(1297): in function <h:\.faforever\bin\test\lua\ui\lobby\lobby.lua:1169>
            h:\.faforever\bin\test\lua\ui\lobby\lobby.lua(1650): in function `LaunchGame'
            h:\.faforever\bin\test\lua\ui\lobby\lobby.lua(1676): in function <h:\.faforever\bin\test\lua\ui\lobby\lobby.lua:1485>
            h:\.faforever\bin\test\lua\ui\lobby\lobby.lua(1582): in function <h:\.faforever\bin\test\lua\ui\lobby\lobby.lua:1581>
            h:\.faforever\gamedata\lua.nx2\lua\ui\uiutil.lua(946): in function `OnClick'
            ...d alliance\gamedata\mohodata.scd\lua\maui\button.lua(133): in function <...d alliance\gamedata\mohodata.scd\lua\maui\button.lua:122>

My lines are different, so here's the actual offending code:

        gameInfo.PlayerOptions = {}
        for _, r in best.result do
            local slot = r['slot']
            local player = r['player']
            local team = r['team']
            LOG(repr(r))                    -- INFO: { player=2, rating=0, team=1 }
            gameInfo.PlayerOptions[slot] = table.deepcopy(orgPlayerOptions[player]) -- <-
            gameInfo.PlayerOptions[slot].StartSpot = slot
            gameInfo.PlayerOptions[slot].Team = team
        end

This happens, because the teams table which is made by this code:

        teams = {}
        teams[1] = {}
        teams[2] = {}

        for i = 1, numAvailStartSpots do
            if gameInfo.ClosedSlots[i] == nil then
                if gameInfo.GameOptions['AutoTeams'] == 'lvsr' then
                    local midLine = GUI.mapView.Left() + (GUI.mapView.Width() / 2)
                    if(not GUI.markers[i].marker) then return end
                    local markerPos = GUI.markers[i].marker.Left()

                    if markerPos < midLine then
                        table.insert(teams[1], i)
                    else
                        table.insert(teams[2], i)
                    end
                elseif gameInfo.GameOptions['AutoTeams'] == 'tvsb' then
                    local midLine = GUI.mapView.Top() + (GUI.mapView.Height() / 2)
                    local markerPos = GUI.markers[i].marker.Top()

                    if markerPos < midLine then
                        table.insert(teams[1], i)
                    else
                        table.insert(teams[2], i)
                    end
                elseif gameInfo.GameOptions['AutoTeams'] == 'pvsi' then
                    if i == 1 or i == 3 or i == 5 or i == 7 or i == 9 or i == 11 then
                        table.insert(teams[1], i)
                    else
                        table.insert(teams[2], i)
                    end
                end -- TAG 1.
            end
        end
        -- shuffle the array for randomness.
        teams[1] = table.shuffle(teams[1])
        teams[2] = table.shuffle(teams[2])
        teams = table.shuffle(teams)
  1. Does not deal with every case.

Autoteams needs fixes.

Extractor VS Storage Priority

Nombringer came up with this one: "Not sure if this is inside the scope of this patch, but I think it would be a great improvement if mass extractors had a higher target priority than mass storage."

ScriptBitToggle not working?

I've had reports from numerous players today, one of whom I absolutely trust, that the Cybran T1 MAA and T2 Cruiser, units with weapon toggles, are bugging out. For example, apparently the Cruiser will fire both guns at ground targets without being toggled. I've not had a chance to test this yet, but I've checked the unit scripts and they appear to be in order.

One of them gave me a possible lead. He thinks this only began happening in the same update as my unit description changes went live.

No Windowed Mode?

I use a windowed mode command line toggle when launching my test branch. It gets to the lobby fine windowed, but hitting launch it jumps to fullscreen mode for the in-game. This did not happen prior to the most recent merge.

Range overlay reduces FPS by up to 90%

Range overlays are a huge performance bottleneck, especially "Selection" and it is enabled for all users as default.

The toll is taken on the GPU so people with fast cards notice less impact but the problem is that if someone is running a low-end gfxcard (like me for the moment), the result is stall / stutter in a network game. The sim and render side isn't decoupled enough :/

For someone wanting to test the impact you can create say, 200 asf and then select those with selection range overlay enabled. As long as you have them selected on screen it will cause a huge fps drop, It is probably the "merge overlay circles" code which is crap.

My suggestion is to remove Selection-overlay as an option in the UI completely and make sure it starts disabled. The only time it should be on is if you select a single unit (which is already the case). It is useless anyway for the multi-unit select case.

I will put up a pull request with some other performance improvements at the same time.

star transport

build a star topology game protocol.

purpose

  • reduce reliance on existing faf proxy
  • this stands to eliminate certain forms of desync
  • reduce server bandwidth.
  • possible reconnect/resume support after tcp disconnect?

components

  1. a localhost proxy that simulates the framing data of /n/ other players over udp to localhost. demuxes tcp streams into udp data recieved from 2 below from server into the engine's udp recieve port
    1. should remove it's own inbound commands, or verify the ones sent are the ones received.
  2. on the server side, a zero-copy muxer that receives tcp streams without udp framing data normally sent over udp, but everything else that matters. unclear how similar this is to replay data.
    1. sends the entire tick over tcp to the player's localhost proxy above, including the player's own commands. if all players receive the same stream (unclear if this is exactly what a replay looks like at this time...) the transmission of one outbound network buffer to n sockets is pretty cheap and scalable.
    2. optional deflate on stream
    3. should be single-process, single thread C or java select IO handling numerous concurrent matches and handling the replay-server role of FAF defined elsewhere
  3. FAF client support
    1. toggle use in FAF
    2. define or register server mux before launch and include in lobby pre-game meta
    3. encapsulate lobby protocol also? adding and removing players before match?

Coop Shield Recharge issue

It has been stated that the fix for this has been ready for awhile now. I'd like to remind you guys about it so it would likely be implemented soon. I have noticed a large influx of foot traffic in the coop recently, and i'd hate for people to lose interest, as the story is brilliant and playing it with friends is nice.

-Turnus

Release 3636

Making this issue as a final one to visit before we release 3636.

Requirements here:

  • Full test of all of the changelog
  • Integration tests with the new patcher

Coding conventions

Would be nice with some lua-coding conventions for contributors .

At the moment the indentation is mixed between spaces, tabs and just incorrect indentation.

Also, using double slash (--) for comments is probably better than hash (#) due to syntax coloring / linter reasons, even though # is allowed as comment in lua 5.0

(Sublime seems to have some trouble with lua-indentation and handling #-comments which is unfortunate)

Sinking wreckage refactoring

Currently hover and air units sink to the bottom with a slider, straight down.

I want to let the physics engine take care of it instead by attaching the dead unit to a dummy projectile. This will make it somewhat more realistic.

Also going to change the real position of the wreckages to the sea bottom instead of surface, making it easier to target when reclaiming.

The final goal is to DRY(remove all the duplication of code) defaultunits.lua in regards to wreckage and kill effects. Instead this will be general code in Unit.lua which all units use.

Best approaches to get to GPLv3

Okay so, in the current state of this repository we cannot release the code under GPLv3, since we don't have the rights for all of the code (Some of it is verbatim GPG code).

I'm opening this issue to discuss ways to get to a state where we can change the license to GPLv3.

Refactor lobby code

At the moment, the lobby code has grown out of proportion.

There are 7.200 lines of ill-formatted and inconsistent lua code. This needs fixing.

Auto Upgrade Hotbuild Factories Fix

Basically.. If you use the Auto upgrade hotbuild key on a factory.. it upgrades it to a factory regardless of whether or not you have one present.

Can you change it so that It detects if there is a HQ present and so upgrade to a support factory?

Regards. Kal~

Scripted map which tests balance of armies

Would be good to have a scripted map which can test certain balance aspects of the game. This will of course not cover all scenarios but could be an indication if a change tilts the balance too much.

Preferably each test would be in it's own function and the total results of it written to a textfile or similar, then you can have CI on it automatically.

Infinite economy exploit

It's possible to get infinite economy by using assisting engineers.

The problem appears to be with UpdateResourceConsumption in Unit.lua, which when called causes bad economy events for the unit.

Move-attack range issue

When you move attack units they move too close to targets before initiating attacks. For instance, a T1 artillery unit moves too close to T1 PD.

This is controlled by GuardScanRadius, which is currently not used for many units. The value is also used to decide if a unit should deviate from its patrol / assist ground order and initiate attack / reclaim / repair.

AI = {
     GuardScanRadius = 25,
},

We should set this value to a unit's weapon range + some buffer. This should be possible with some blueprint hooks I guess?

Sim crash

Replay 2702646 crashes with an unknown sim bug.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.