The last few years of development (2018/08/06)
Hello again after a long time :)
I would like to summarize what happened in the past years of Resistance Force development. We were developing RF right into 2014, there was an improved unpublished version of the game, but since some things were in a state of flux it wasn't releasable.
At the time I was working on improving the physics and collision engine as I was unhappy with the Bullet physics engine. So I went into working on my own little physics library, only to realize that rigid body physics is much more about various hacks and that certain behaviors are inherent to it.
There was also an issue with the engine not being able to scale to "bigger" worlds, there was some work on occlusion based visibility checking, but it wasn't helping much really. Other parts were also cumbersome.
In addition to that, the asset creation was also very cumbersome. I've found some nice techniques for modelling, but it involved many manual steps between Blender and GIMP. I was able to work on some assets that way but quickly burned out with all the steps involved.
During 2015-2016 I went more into rethinking the whole thing, finding solutions to the problems encountered. For physics it was obvious that the classical rigid body approach wouldn't work with all the issues inherent to it. It works quite well on a macro level, but if you observe the details it's quite horrible and you can't easily control it. I've decided to go with the much simpler and easier to control Verlet integration approach, esp. when the main use case is ragdoll physics and some breakable stuff. The rest can be handled with a pure collision detection code.
Also got the idea for the new renderer and asset creation. I've been using the Subsurf modifier in Blender to make overall shapes of objects and then adding details at specific places by attaching the more detailed shape at specific places. Then I've created a lowpoly version that contained all the shapes involved and baked normalmaps from the more detailed shapes. Then I had to manually blend the normalmaps in GIMP, scissoring it by hand and merging. If I had to modify anything from the previous steps I had to redo the next steps.
The Subsurf modifier is nice but has several downsides. One can't mix well a coarse shape editing with details in one shape. That's why I went with the technique outlined in the previous paragraph. Other is that when you're changing the level of tesselation the overall shape is changing which is not good.
These issues made my way to abandon classic polygons for modelling and instead using the Bézier patches (including a fully automated UV mapping). These are very similar to Subsurf modifier in Blender, however the overall shape is basically the same no matter what tesselation level you choose. This is great for creating multiple LODs (level of details) for models.
The other issue of mixing coarse shape with details is just a tools issue. Previously I thought that 3D modelling should be external to the game engine. So I used Blender for 3D models, GIMP for texturing and a separate map editor for world modelling. But I've found that all this stuff is all tied very closely to the particular engine and having different renderers and handling, esp. when it's 3rd party tools that are not exactly aligned with your goals, is not a good idea.
So this time I went with an approach of a single engine that does both the editing (including the 3d modeller and the texture editor) and the normal game usage. As an interesting twist, the new renderer is based on software rendering even when used with GPU rendering. It turns out the software renderer can nicely handle visibility determination (including properly sorted translucent polygons) and either be used directly or just rendering nothing and instead feeding the GPU with the stuff to render (in a GPU friendly way of course, no individual polygons feeding).
Actually I'm quite amazed at the performance of the software renderer and it's capabilities, it achieves about 60-70 FPS in a 720p resolution on an old 2.4GHz quad core CPU (Q6600). All this while handling per-pixel cubemap effects and translucent polygons. We'll see if it will stay that way even further into the development, but I'm quite optimistic about it based on how it works. This will allow to have a very good compatibility on alternative operating systems as well as having a good fallback in case of GPU related troubles.
As for further development, I've decided to switch to a microblogging approach instead of the more traditional article based blogging. This will allow me to inform you about various development advances much more easily and more frequently. I think I've reached to a point where all the major new foundations were built and decided on and that there is just some pretty straighforward development path in front of me.
I will be posting the microblog entries on this address: http://www.resistanceforce.com/blog
So be sure to check it out from time to time if you're interested in Resistance Force development :)
New alpha version available (build #17) (2012/12/08)
New version is available, adding dynamic shadows to point lights, weapon recoil, updates to Central map and other improvements and bug fixes.
We now also have the ability to download custom content when joining a server, and there is already one community map available by Leiche. You can test it by joining the community server and using map vote to choose the map.
Build #17 2012/12/08 (public alpha):
- Added dynamic shadows to point lights
- Fixed garbled texturing of some polygons on player model
- Improved dynamic weapon movement
- Added weapon recoil
- Adjusted weapon fire positions
- Slowed down fire rate for SMG weapon
- Added server configuration file
- Added support for downloading custom maps when connecting to server
- Lowered volume of footsteps when walking crouched or aimed
- Added displaying of player name who killed you
- Fixed loading of controls from config file
- Updated Central map
New alpha version available (build #16) (2012/11/14)
New version is available, introducing three new maps, improved leaning, server browser and other improvements and bug fixes.
The biggest news is however that since this year we're now two people team, both dedicated to this game. This is a big boost to development of Resistance Force. BirthNight is audio/music guy primarily but fell love into mapping, modelling and many other things. This allows me to focus more on the game core and together making assets faster and better.
Build #16 2012/11/13 (public alpha):
- Added 3 new maps
- Fixed reloading animation
- Added dynamic weapon movement when moving mouse
- Improved leaning
- Added correct penumbra for dynamic shadows
- Removed tips
- Added server browser
- Added ability to call vote (for map change)
- Fixed head triangles that were popping into view sometimes
- Fixed visible floating weapon at origin when player connects
- Added 64bit binaries for Linux (also fixes problem with ATI drivers)
Resistance Force Map Editor is now available (2011/12/10)
Map editor is now available for pre-orderers. It contains two tools: the map editor itself and composite texture editor. Both are available for all three platforms (Windows, Linux, Mac OS X).
Map editor uses brushes as main geometry along with ability to place models into the map. It works with hierarchy of groups and other powerful blocks, such as duplicators (great for stairs and other repeated things), prefabs and placement tool where physics engine is used to place things precisely on each other.
Composite texture editor is for editing detailed textures that can span over big areas (mostly useful to terrains). You can read more about it here.
To obtain the editor you have to pre-order the game and send me e-mail or contact me through IRC on QuakeNet (#resforce channel), you can also use the Chat page. Provide e-mail you used for pre-order or other proof of purchase (eg. PayPal receipt).
New alpha version available (build #15) (2010/12/30)
New version is available, most notable changes are: improved player model,
added bullet spread and multiple damage zones to players, moved ragdoll
computation from client to server so everyone sees the same death animation
and there is less resources needed for players with lowend hardware.
There is known performance degradation when dynamic shadows are enabled, this will be fixed in next release.
Build #15 2010/12/29 (public alpha):
- Removed usage of float textures
- Moved ragdoll computation from client to server
- Improved netcode robustness when there is little packet loss
- Fixed problem with players occasionally jumping very high and then dying
- Added occlusion queries for dynamic models
- Added support for detail textures
- Improved ambient lighting in regard to normalmaps
- Improved player model
- Enhanced map a bit
- Added bullet spread when firing
- Added multiple damage zones to players
- Increased bomb explosion delay from 40s to 45s
- Allow players to roam on server when there is no player in opposite team
New alpha version available (build #14) (2010/06/11)
New version is available, most work went into adding major features into the engine (static meshes, composite texture, material system, normalmaps) and optimizations. On the game side the current map was enhanced, initial set of detail meshes was added and there is a new gun available.
This release is another big milestone in development of Resistance Force, as the engine is now capable of all basic stuff needed to create content. The focus is already shifting from engine, tools and game programming to content creation, thus accelerating the speed of development of Resistance Force.
Previously the engine didn't support static meshes at all, which was very limiting. Composite texture allows detailed texturing of large areas (terrains), material system and normalmaps allow good visual effects and most importantly it allows to use much lower number of polygons in models while retaining high quality.
Build #14 2010/06/11 (public alpha):
- Renderer optimizations (with shadows disabled)
- Fixed problem with rapidly decreasing FPS with more players
- Added support for static meshes
- Added support for composite texture
- Added material system
- Added support for normalmaps
- Added tips
- Enhanced map
- Added some detail models to map
- Improved chat dialog
- Team chat is now more apparent
- Improved collision detection for objects with higher velocity
- Increased grenade explosion delay from 2.5s to 3.75s
- Increased bomb explosion delay from 30s to 40s
- Added selection of textures quality
- Added new weapon
- Improved bomb defusing
New alpha version available (build #13) (2010/01/01)
New version is available: it brings explosive grenades to the arsenal among with
many bug fixes and small features. There is no need to manually apply this update,
just run the game and it will be auto-downloaded.
Hopefully this version will also fix problem with players testing the game, but each one coming at different time to the server. So many people couldn't test the game. The solution is in defining certain hours so players can gather easier. I've defined 16:00 and 20:00 CET, you can also try to join server at beginning of each hour. This is also presented directly in the game when no one is on the server.
Build #13 2010/01/01 (public alpha):
- Fixed crashing on some video cards
- Disabled initialization of display/sound in dedicated server
- Fixed crashing of server when bad packet arrives
- Shortened prepare time from 12 to 8 seconds
- Added better logging of player connects/renames/disconnects
- Fixed footstep sounds for other players
- Added notification of team change
- Added support for colors in message list
- Added team chat
- Added ability to move just by tiny amount when short tapping the movement keys
- Added invert mouse option
- Added vsync and FPS limiter options
- Fixed occasional death when falling from top of stairs
- Added unlimited number of magazines to engine test
- Added explosive grenades
- Bomb explosion now causes death
- Added notice when no people are playing
- Added ability to start running from crouching, also fixed crouch toggle
Public alpha version released (2009/11/19)
Public alpha version of this game was just released, also the website is now open. This game is in development for over two years and we're glad to finally present you a fully playable albeit limited version of this game. No information about this game was published until this point because we wanted to present you something you can already enjoy and not wait years to finish and then be possibly disappointed.
It's also a great milestone for development because fully playable game means a lot. It means it can be incrementally enhanced and these individual enhancements can be delivered to players in short time.