FAForever Forums
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Login
    The current pre-release of the client ("pioneer" in the version) is only compatible to itself. So you can only play with other testers. Please be aware!

    Supcom/Moho engine rewrite

    Scheduled Pinned Locked Moved Contribution
    61 Posts 32 Posters 3.8k Views 12 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • S Offline
      SlightlyGrilled
      last edited by

      Hello, I'm back, and I believe I'm even closer to feature parity with base supcom now!

      Before anything, the exes:
      Mac
      https://upload.disroot.org/r/Ruv6XWA3#wTu4NeQg/SvvKWHGL/Y7Z5k0qRnYoYJoUka+Ej3arog=
      Windows
      https://upload.disroot.org/r/q2XTdA0V#rTfciPHkfYNsX5bRLmBEeauD1BliPu8WrPebsCqWFjY=
      Linux
      https://upload.disroot.org/r/8FAj9fnz#ZHyZiptsQo4EmI53hP6sn2y2ea3NrL8OVosy61PgbRE=


      Many nasty little bugs have been squashed.
      Don't miss the particle video πŸŽ†

      But first performance!

      I wasn't happy with the fps in that 64k air fight, after all it's only 64k, that's rookie numbers for modern computers.

      While I can't do much about the 200-300ms of time spent in the lua (as a rule of this project is not to edit the faf/supcom lua, it must be a drop in replacement), I can certainly improve the rendering speed.

      and in this modern age computers come with many cores, so best put them to good use.

      The rendering loop is made up of a few stages

      • intel
      • strategic icons
      • minimap
      • interpolate positions
      • animation
      • lod selection
      • particles
      • ui
      • issuing draw calls

      before this was all serial in a single render thread.

      now its broken down, in to two main threads, with workers for more parallel work

      First LODs

      Then

      • intel
      • strategic icons
      • ui

      at the same time

      • interpolate positions
      • animation
      • particles

      as can be scene here
      37ad76e8-32d2-49e7-81c1-f5e324f58d7f-image.png

      Then the next thing was the draw submits to wgpu. Now we're long past the days of direct9 and being bound to a single thread.

      We can record the commands all in parallel.
      87166459-df35-479c-87f8-4855eff252d5-image.png

      Along with some work to batch process units

      we end up with a full frame looking like this
      e5762e9a-bfae-4e48-847b-da983caeeaef-image.png

      You can really see the difference vs before
      331b26a5-3d14-4a91-8246-12611c2e6c30-image.png

      This brings the 64k air fight from about 15fps up to 70-100fps.
      While the main sim only runs about 2.5-3x slower than the default speed!

      and can all be seen below in full technicolour!
      https://youtu.be/UVgRPUpkJp0

      And for extra fun, you can see the whole sim tick for that fight here, look at all that lua (in blue/cyan on the sim thread)!
      Every bit that isn't rips through as many cores as it can
      182367bc-0289-44d7-990b-c2bd53e94a38-image.png


      On to bugs/improvements, and there are many!

      Replays!

      Now these are only compatible with my version and only with the version that created them.

      The game will save out your last 100 replays, and you can access them in the replay menu.

      They are stored along side the exe
      7e49e8ac-8b69-4069-bdf7-dc05781db97d-image.png

      Particles!!!

      So supcoms particles where kind of gpu accelerated, well not full compute shader, but they wrote all the info to buffers, then let the vertex shader go to town.

      Also particles where just horrible broken in my version.

      We now in 2026 do the same! (along with my 2nd fav unit to show it off (don't worry fatboy, you're still number 1)
      edab2356-79a0-43b5-af79-5375ddb3b5eb-image.png
      ac95ae90-adcf-4c30-9ed7-44918a8849e3-image.png

      Actually I believe really you need to see the Video to really do particles justice πŸ™‚
      https://youtu.be/qlK1FC12H1o

      Map gen

      the map actually looks correct (or more so) now.
      Before πŸ˜•
      c154d317-8c4a-4d15-9e22-1975b2decbde-image.png

      After!
      6b6ac47f-ab49-458f-9104-2a533dd7bd3d-image.png

      Before
      2400916e-bb90-4a5d-acc7-ade6f44e663c-image.png
      After
      d6a0edd0-7045-4435-abd9-f6d606062477-image.png

      Before
      cef78e14-ab79-4539-a61f-d6c079f2e616-image.png
      After
      f653cb5e-b9ed-4999-b62b-a56e60f3f1c7-image.png

      Glowing Mexs!

      53c7d4b1-454a-429f-bdc2-9a0f561b6aba-image.png

      Rings!

      Now they work for hover and select, and just generally work
      79a26918-e1dc-439b-8126-003547059224-image.png

      Factory upgrades

      Gone are the days of waiting for factory to upgrade before queue those machines are war, now you can queue up builds as you would expect
      5c560bc4-fb37-4bb9-8939-b962bdcab33d-image.png

      The un pictured rest

      • you can queue mex upgrades
      • upgrading radar no longer shows the next ring level
      • reclaim numbers now show in the ui
      • you can no longer click on enemy units to see their orders! what a shame cheating will never be so easy again.
      • engineers will now help the target they are assisting when that target assist
      • random bright boxes on dying aircraft
      • veterancy works!
      • macos track pad scroll no longer sends you for a spin
      • Some better fps stats, we now list vram, ram usage, render cpu and gpu time (this screenshot is from the 64k air fight)
        d7fdabb7-7548-47bb-bfa8-a31f513c7ebf-image.png
      1 Reply Last reply Reply Quote 6
      • S Offline
        SlightlyGrilled
        last edited by

        And another quick update with a requested 10k vs 10k airfight video πŸ˜„

        https://www.youtube.com/watch?v=BrD_8Py4gX0
        image.png

        the dead rest...
        image.jpg

        1 Reply Last reply Reply Quote 10
        • DeribusD Offline
          Deribus Moderator FAF Association Board
          last edited by

          10k v 10k v Youtube compression

          1 Reply Last reply Reply Quote 0
          • SaverS Offline
            Saver
            last edited by

            πŸ‘

            auch mal fΓΌnf gerade sein lassen

            1 Reply Last reply Reply Quote 0
            • D Offline
              Downlord
              last edited by

              This is fantastic! When I heard about recent AI reverse engineering progress, I instantly thought of Moho. So happy that someone is already doing it!

              1 Reply Last reply Reply Quote 0
              • G Offline
                GaryTheGoat
                last edited by

                This is great!, I was hoping someone would take on this challenge you get my vote and support! keep going!.

                1 Reply Last reply Reply Quote 0
                • Brutus5000B Offline
                  Brutus5000 FAF Server Admin
                  last edited by

                  Well I ususally say pics or didn't happen. But in this case I'd rather say code or didn't happen πŸ˜‰

                  He said, "I've been to the year 3000
                  Not much has changed, but they live underwater
                  And your great-great-great-granddaughter
                  Is playin' FAF, playin' FAF"

                  D S 2 Replies Last reply Reply Quote 0
                  • D Offline
                    Darien_ @Brutus5000
                    last edited by

                    @Brutus5000 said:

                    Well I ususally say pics or didn't happen. But in this case I'd rather say code or didn't happen πŸ˜‰

                    This. Please share the code!

                    1 Reply Last reply Reply Quote 0
                    • wilson_W Offline
                      wilson_
                      last edited by

                      Did I just read that we could potentially get rid of p2p?

                      Doing stuff over at the FAF Dojo, and helping out with tournaments.

                      1 Reply Last reply Reply Quote 0
                      • L Offline
                        lan94
                        last edited by

                        Great Work! I was happy to play it easily on my Mac mini. Very impressive what has been done so far. I came along with these bugs so far:

                        1. The integrated mod "x2" which doubles the incoming resources seems not working, as the resources staying normal even when this mod is activated

                        2. Sometimes units are built and they are invisible. This happens when you select e.g. factory to build 10 technicans or other units, then the first unit is normal as expected, but every further unit is invisible. Often these units staying stacked in the model of the factory. I didnt tested all factories, but when building multiple T3 battleships, they are not invisible, but e.g. on air factory i got this error with multiple units.

                        3. When Cybran T4 Soul Ripper is in attack range of an enemy unit, it prioritizes the attack more than moving commands by me. It is then hardly control-able. Often it is attacking the enemy until it is dead, and then i can control it again.

                        4. Is the damage of the T3 Anti-Air-Sam-Cannon normal? When 5 SAMs attacking 1 T3-Gunboat and they needed 30 seconds to finish it, the damage seems kinda small.

                        5. Air-Transporter dont seem to be able to transport units? Units can be selected to support the transporter, but i cant get them into the transporter.

                        6. When air troops are dying, they are crashing into the ground, and sometimes their object is still clickable, showing 0 lifepoints.

                        1 Reply Last reply Reply Quote 0
                        • C Offline
                          CDRMV
                          last edited by CDRMV

                          Truly very impressive.
                          It’s genuinely fascinating to see what this community can achieve through a great deal of ambition and experimentation.
                          I’m excited to see what this project will bring about in the future.
                          Keep Up the great Work.

                          1 Reply Last reply Reply Quote 1
                          • S Offline
                            SlightlyGrilled
                            last edited by

                            The Binaries

                            Mac
                            https://upload.disroot.org/r/XHFvbT4s#ZaPwUTGTjpmK0IlKXyW8N1f8c9Qu5JgVboD8USbDzxk=
                            Windows
                            https://upload.disroot.org/r/M0EnT4kb#Ws6EFNfzgC0s/xGGYsIdzgoQNjfmCodVQ6fozlJDfjQ=
                            Linux
                            https://upload.disroot.org/r/tuUFTLuT#27oozpFjzTrcIzBS1lY/AeicAgDbtqv5ns460MpwebQ=


                            Picture in picture

                            This is a cool new feature, I was mainly thinking of casters for this.
                            Now on major events, such as your team building an experimental, or an acu dying, you get a picture popup that you can click on to view the location. it also supports modding, so modders can make new events, I've included an example mod that tells you when your acu is below 10% hp. (I'll make a follow up post about this, as I'm not sure i like the api...)
                            of course this is all toggleable in the settings, and I'm super open to feedback.
                            32d0ddbc-9e51-43a6-a3c0-b7972f289051-image.png

                            Timeline on replay

                            Another really cool feature, that was mainly me thinking about casters again. I've added a timeline view, that lets you move to any part in the game, it also highlights key events. Such as (ACU death, Exp built).
                            Allows you to zoom to selected events, and will shift the camera to just before.
                            It does support rewind, but at the moment it restarts the game and fast forwards, in the future we could save out keyframes, but i want to avoid game serialisation until later as its a source of endless bugs πŸ˜„

                            I have more ideas for this one, but just wanted to get something basic in for now.

                            like above this is a setting as well, it can be on either main or second screen, or just turned off.
                            You can see a video here, although the ai playing makes the scrubbing a bit slow
                            https://youtu.be/aOz7DxAPm28

                            256e47fd-ce2c-4e0c-b530-7d445b9de59f-image.png

                            Split screen! and Dual screen!

                            This was a fair amount of work, and I'm sure will need more testing. It will work on different refresh rate screens with each screen running at its max speed. You can now in the settings set which display is main and secondary screen.
                            If any one has a 240hz-480hz I'd love to know if it can go that fast
                            3c13e75a-4803-46ac-9eba-381fe0a0cbe7-image.png

                            Mod support!

                            I haven't tested with blackops, but certainly the inbuilt x2 resources now work

                            Lua documention!

                            This one is also really nice.

                            thanks to rust macros, the apis from the engine to the lua, are now auto generated, and output both to luau type file and a emmy lua file that faf uses, I love this sort of feature, it should help things stay in sync, and of course helps me compare my api to fafs
                            here's an examples of it on the rust side, then the luau and the emmy lua output

                            this rust adds the ChangeMaxRadius method to the weapon class, that comment is auto put in to the lua docs too

                                lua_method!(lua, moho::Weapon,
                                    /// Sets the weapon's maximum range (world units) and refreshes the unit's attack range.
                                    ChangeMaxRadius = |lua, (this, r): (Obj<moho::Weapon>, f64)| {
                                        with_state(lua, &this, |w| w.max_radius = crate::engine::sim::math::from_lua(r))?;
                                        refresh_attack_range(lua, handle(&this)?.unit);
                                        Ok(())
                                    }
                                )?;
                            

                            Then the generated luau types (a snippet of them)

                            declare extern type Weapon with
                                --- A weapon dies with its unit.
                                function BeenDestroyed(self): boolean
                                --- True if the weapon is enabled and its fire clock has run out.
                                function CanFire(self): boolean
                                --- Overrides the weapon's damage.
                                function ChangeDamage(self, damage: number): ()
                                --- Sets how far (degrees) the turret may be off target and still fire.
                                function ChangeFiringTolerance(self, t: number): ()
                                --- Sets the weapon's maximum range (world units) and refreshes the unit's attack range.
                                function ChangeMaxRadius(self, r: number): ()
                            

                            the emmylua type

                            --- Sets the weapon's maximum range (world units) and refreshes the unit's attack range.
                            ---@param r number
                            function weapon_methods:ChangeMaxRadius(r) end
                            

                            while I'm sure this is far from perfect, it's just a fantastic example of little things that really can help a project stay manageable, in another time/life, this would have all been manual work of someone.

                            Merge order lines for units sharing a first waypoint.

                            No more 10k lines over the map causing massive lag

                            ded0c310-5853-4195-abb9-dfdb26d42a0a-image.png


                            Perf

                            (I always strive for faster, not only does it mean higher end pcs will run it faster, but it unlocks lower end devices, which is just as important)

                            Faster startups for lua transformaions

                            in order to support fafs old lua under a new lua vm, I have to translate the lua.
                            some things can be done very fast and quickly using find and replace, others require full parsing of the lua scripts which is really slow, I now do a quick check before fully parsing a file to see if the find and replace route works

                            scripts/translate all FAF .lua (2,798 files, total cpu time over all cores) 538 ms -> 129 ms
                            scripts/translate Unit.lua 12.1 ms -> 6.65 ms
                            Headless startup, user CPU 3.62 s -> 2.68 s
                            Script prewarm wall time (16 cores) 289 ms -> 196 ms

                            Better thread pool allocation

                            I've then rejigged the thread pools for the engine, taking in to account low core machines, this has helped the startup time on low core machines. (its a small amount, but poco a poco
                            This is limiting the cores to 4
                            Headless time to game start 2.23 s -> 2.12 s
                            Script prewarm 726 ms 624 ms

                            Texture loading

                            Texture loading, textures are now all streamed as efficiently as possible to the gpu, minimising copies, and shifted off the main render thread to worker threads
                            Render thread upload models ~675 ms -> ~60 ms
                            Worst frame in upload models 13–21 ms -> ~1 ms

                            total texture load time (this is limited to 4 cores)
                            1,465ms -> 658ms

                            Terrain loading

                            we now load terrain much faster, and also much less work is done on the render thread
                            and when map elevation is changes such as placing a building.

                            81km map (again on a simulated 4core machine)
                            map textures uploaded (time from launch) 8.4–11.8 s -> 1.4–1.8 s
                            terrain change, render thread 23–38 ms -> 0.17–0.64 ms (worker: 4–8 ms)

                            Bugs and features

                            • killed units now stop showing their stragic icons and are no longer selectable
                            • lods are now based on the distance to the plane of the camera, instead of the camera location, so no more circles of trees
                            • all of fafs graphics settings are now supported (with bumps to shadow mapping as I now support 2k shadow maps instead of 1k)
                            • we have edge of map mesh now!
                            • paused builder updates progress and finishes when assisted
                            • reclaim progress bar now
                            • units move clear of a build site before construction starts
                            • build range needs only touch the target's build skirt
                            • units being built in a factory are no longer selectable
                            • box selection leaves out engineers when other units are in the box
                            • Novax satellite beam reaches the ground, satellite holds its height as well, instead of bobbing up and down
                              • part of this fixed area damage, which i think effected other units as well
                            • preferences are saved, and FAF's preferences are now imported on first launch
                            • reclaim labels show (Alt-R)
                            • interface settings now work
                            • Half-built Fatboy - engineer assist offers repair, not the transport cursor
                            • factory assist takes the queue and destination of the factory it assists
                            • fixed no borderless windows on windows (how truly awful I let this even pass... serves me right for mainly testing on windows)
                            • fixed bombers not dropping their bombs
                            • fixed auto attack on idle, e.g. bombers moving around in their range to hit things
                            1 Reply Last reply Reply Quote 9
                            • S Offline
                              SlightlyGrilled @Brutus5000
                              last edited by

                              @Brutus5000

                              I 100% want to make this open source, no worries, I just want a bit more time, as I'm well aware that open sourcing it will open the floor gates. I would also be interested in how this can be transferred over to the faf team as well. I do believe this has real merit to replace the base engine. it already demonstrates a large amount of the game working, and absolutely has the nuts and bolts to go all the way.

                              @wilson_

                              So it doesn't get rid of p2p, but I think/hope that it handles it more gracefully than base supcom, the faf team just need to host an iroh relay server, which from my understanding doesn't need to be beefy at all.

                              Also along with the game being many times faster than the base game, should stop that horrible lag.

                              and the dynamic input latency.

                              @lan94

                              Thank you very much for play testing! I believe I have fixed all but number 2, although air transports are not perfect πŸ™‚
                              4. I tired to reproduce, but i have fixed some issues with weapons so maybe this has been fixed along the way before i got to your report πŸ™‚

                              again thank you very much for the feedback.

                              @giebmasse
                              Also thank you for testing πŸ™‚ very much appreciated

                              @cdrmv @garythegoat @downlord @saver @j_w_w @snoog @xanoxis @randomko @limez3_ @nomads @lycanrising
                              Thank you for your nice words πŸ™‚

                              @arkenflame @darien_
                              Yes I do plan to make it open source, I just want it to bake in the oven a little bit longer as im sure you can imagine.

                              Brutus5000B 1 Reply Last reply Reply Quote 7
                              • I Offline
                                InfimeCmdr
                                last edited by

                                This post is deleted!
                                1 Reply Last reply Reply Quote 0
                                • M Offline
                                  mirddes
                                  last edited by

                                  this is incredible!

                                  1 Reply Last reply Reply Quote 0
                                  • Z Offline
                                    zwierzak
                                    last edited by

                                    Very cool!
                                    Looking forward to try this at some point (without having to trust a random binary downloaded from the internet). πŸ™‚

                                    1 Reply Last reply Reply Quote 0
                                    • R Offline
                                      rigomate
                                      last edited by

                                      This is really amazing! Keep up the good work.

                                      1 Reply Last reply Reply Quote 0
                                      • F Offline
                                        FunkOff
                                        last edited by

                                        This could be the greatest thing to happen to FA since FAF

                                        1 Reply Last reply Reply Quote 1
                                        • Brutus5000B Offline
                                          Brutus5000 FAF Server Admin @SlightlyGrilled
                                          last edited by

                                          @SlightlyGrilled said:

                                          I 100% want to make this open source, no worries, I just want a bit more time, as I'm well aware that open sourcing it will open the floor gates. I would also be interested in how this can be transferred over to the faf team as well. I do believe this has real merit to replace the base engine. it already demonstrates a large amount of the game working, and absolutely has the nuts and bolts to go all the way.

                                          You can transfer the repository to the FAForever project and still remain the repo admin. It could also be a private repository if you are worried about cheats etc.

                                          I suggest you contact us in our https://faforever.zulipchat.com, so we can discuss options.

                                          He said, "I've been to the year 3000
                                          Not much has changed, but they live underwater
                                          And your great-great-great-granddaughter
                                          Is playin' FAF, playin' FAF"

                                          1 Reply Last reply Reply Quote 0
                                          • CascadeC Offline
                                            Cascade
                                            last edited by

                                            Awesome! Some strong competition for another TA spinoff that shall not be named

                                            1 Reply Last reply Reply Quote 0

                                            Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                                            Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                                            With your input, this post could be even better πŸ’—

                                            Register Login
                                            • First post
                                              Last post