In this update14
Full notes
Full Ballistic.exe update
Read the full published notes in a cleaner layout. The original post stays linked below.
What changed
- Gameplay
- Performance
- UI and audio
- Maps
- Balance
- Workshop
Ballistic.exe changes
Since the publication of the Steam page more than 9 months ago, development of Ballistic.exe has been going strong. As a solo dev I can only afford to work on the game part time, but progress is steady, and actually slightly ahead of schedule. But still a ways to go!
I publish updates every friday about the week's progress on Discord, and some dev videos on Youtube. But I thought I would publish a big update here, showcasing some of the work that has been done during the past 9 months.
In the same time, we passed 25k wishlists here on Steam, which is mind blowing. Communication is not my strong suit, but I put a lot of work into it on youtube and socials and I hope it paid off.
The TLDR:
What's done?
The majority of the gameplay systems are in place and working as intended.
Ballistics simulation is mostly done, with some work remaining.
The most challenging parts of shader development are done.
Basic sound integration is in place.
General player progression is currently being finalized.
What remains?
A lot of content: maps, targets, events, various cartridges, and of course many weapons. This is probably 80% of the work remaining.
A lot of SFX, and game soundtrack
Finalizing the remaining systems
Simulation improvements, including Magnus effect, coriolis, bullet ricochet and shattering and more.
Steam integration, accessibility features, etc.
Optimization and polish; Current progress is very promising for quite a low minimal config.
Full changelist compiled from weekly updates (edited for relevance and clarity):
Weapon systems
First scope implementation
Update pivotable parts logic to better handle vertical axes (such as a scope top turret)
Big scope refactor to handle reticle placement in a shader.
Various weapon system refactors, especially on the Enfield. E.g, now the bolt can pickup cartridges from the magazine without the Enfield itself handling any logic (Turns out this was almost the case already and I didn't even realize myself lol, thanks past me)
Weapon parts can display additional tools when manipulated, such as screwdrivers
Weapons can be shouldered, altering the eye position and other values
The active sight can be switched to give more accurate aim with a given sight (input is scaled back when sights are aligned) (Note: Refactored later on with detection of all active sights)
Full auto weapons
Stripper clips
Recoil refactor based on physics equations instead of approximations; chamber pressure is calculated from powder mass and energy potential, cartridge volume and pressure / burn rate curves. This also allows me to more accurately simulate gas pressure at muzzle, which plays a lot into recoil. This will be super important to simulate the effect of compensators / suppressors on recoil, because they affect exit pressure and compensate recoil by redirecting exit gases
Spent some time adding stats-related variables to the weapon part class, paving the ground for weapon parts such as handles, suppressors, muzzle devices, shoulder pads, buffer tubes, etc. which need to have properties for ergo, recoil, concussion etc.
Non reciprocating handles, you can cock the bolt and then the handle remains free floating - but when the bolt comes forward, it brings the handle with it (but only forward). Needed to expand the manipulation system a little for this, but seems to be working very well
Made it possible to handle the multiple firing rates that you find on some trigger groups
Changed the way switchable parts are stored, now they are not loaded into memory until needed. Will save me some headaches later! Since that is the case, made a simple system to load all necessary parts in the background when you approach the shop or the workshop to avoid hitches
Parts can now snap to several positions (to accommodate the BAR selector)
Setup shop prices for weapons
Big refactor to sights system, you don't have to switch sights anymore, it uses all present sights to determine input smoothing, works very well + Fixes issues when no sights presents
Added many properties to the weapon such as recoil, ergo, length, etc.
Weapon properties are now displayed in the workshop
Attachments now remove other overlapping attachments when they are spawned (but only when attached to the same weapon part for now)
Fix input smoothing for scopes
Big refactor of how weapons are registered, allowing for clean spawning of attachments even when slots have duplicate names
More malfunctions supported: Fail to hit any primer, Weapon unloaded, fail to ignite primer, fail to ignite powder charge, Bolt cannot close (held open), Safety is on, No spark produced by flash pan, trigger locked, Hammer not cocked, Fail to drop hammer
I've been doing some work on the manipulation of rotating parts, especially things like revolver cylinders, scope turrets etc. It's starting to feel better, I've added a circle UI (very WIP visually) which helps alot to visualize what's going on
In the same vein, manipulated parts can now display values when manipulated like ranges, either in meters (or imperial units), MOA or mils (once again the font/colors are just for testing). This is especially important because these units will be displayed in your unit system of choice, even though the 3D model itself will only display real-world accurate graduations. It will also be possible to have a menu option to choose if this value should display with units consistent with the real-world weapon or scope model, but it's a low-priority feature atm
Improved detection of overlapping attachments
Improve bolt mechanism code
Multiple grip points per part
Each part now can have an accuracy modifier, not only barrels
Graphics
Slightly improved muzzle flash effects, doesn't trigger every time (will have a major rework later anyway) (Note: it had a major rework later)
One thing I'm experimenting with is rotation stable dithering, which is much easier on the eye. It's not 100% working right now but promising. (Note: was continued later on)
Implemented a system to manage lights in levels
Improved the edge detection algorithm in several ways, it is now in its final state, works much better
Improved rotation-stable dithering, seems to now be working in all cases
Parametric muzzle blast and smoke is now plugged in and working as intended
Improve smoke effects
Better edge detection on many assets in hub
Improved main hub environement and optimisation of existing geometry
Targets and ranges
Add new graduated targets and objectives related to bullseye hits
Fruit targets complete with fruit physics
New range! I thought the pistol range was too boring, so now it's an abandonned swimming pool. It also allows much longer distances, up to 50m
Mannequin targets
General systems
Attachment system: Every weapon has core parts which are listed at the bottom of the workshop, but each part can also have attachments. And of course, attachements can have attachments as well! These can be scope mounts, scopes (on scope mounts), iron sights, red dots, lasers, handles/grips, and hopefully a lot more.
- Focus sytemSimilar to a "hold your breath" input in any FPS, but quite different. When launching a focus, camera slightly zooms in, and weapon movement is gradually very reduced, but only for a fraction of a second. Then tremors make the weapon gradually more unstable until focus runs out.
Where this becomes interesting is that you have to time the moment very precisely with the trigger pull, since it's not instant and varies from trigger to trigger. While very exaggerated, I feel like it transcribes a real shooting experience pretty well, where you have to "catch the moment" when your hand is stable and aligned, eye in focus and trigger pull steady (in pistol shooting especially)
Refactor of the objectives manager to allow non-consecutive objectives (eg. shoot 3 targets at 300m+ during a session, but doesn't have to be consecutive), + some objectives didn't register at all before, they now do
For a while I've had a problem with wepaon parts that transfer movement to other parts, like the revolver hammer. Any part can be set to transfer movement to any other part with many options (one way, two ways, ratcheting, etc.) Previously, every frame where a linked part would move, the movement during the frame was treated, and added to the other linked part. To simplify, in theory, if the hammer moves 0.1 for ten frames, then the cylinder would move 1 during those ten frames. However this is not a good system because floating point errors mean those 0.1 10 might not add up to 1 over time, especially in cases where the cylinder can do many turns over time and the imprecisions add up. One in a while the cylinder would not turn. So I refactored this part completely and it now is much more robust
"Story events" system
Modelling and game design for game events
Spotter: The spotter takes the form of a robocomputer next to you on the range. It looks for your impacts, and now distributes the cards physically in the world as well as in the UI.
You get information about your hit on "hit cards" When you miss, you get spotting info on the "miss card"! But remember, the spotter has to be able to see the impact, and if the impact is far down range, it may have trouble giving you precise information!
Since the spotter requires a currently selected target, I did a pass so that in order to clarify which target is selected, and make it easier to switch targets (scroll wheel) (Note: Replaced with automatic target detection later on)
Weapons can now compute their center of gravity and the center of grip from hands positions (later on you will be able to change the hand placement). An embalanced weapon will have increased pitch, making it slighlty harder to aim. Heavier weapons will have increased sway later on
Auto target selection from impact location instead of relying on manual target selection
Target cam: Target cam is shown a a computer that takes a snapshot after each impact - but it may only update on successful hits in the future, otherwise it's a little too easy and spotter mechanic becomes kinda useless (need to think it over). The same computer will show measurements later on like wind speed, atmospheric data etc.
Big cleanup on the projet side, homogenizing all naming, prices and unlock thresholds etc. for a test build
- StancesFinally, I can kneel and go prone in the game, which gives a narrower FOV and reduced sway, allowing for longer distance shots (recoil still needs to account for this sytem) (Note: recoil was later adapted for this system)
Reworked the navigation camera, now allowing panning, zomming and a better orbit
Objectives can now specify if they should be completed without a scope, without a laser, using a specific stance, or without the weapon being shouldered (UI is once again WIP)
Implemented ammo inventory and shop system, allowing player to purchase various kinds of ammo. Base ammo is free, better ammo has to be purchased and is consumed when used
Began implementing hand placement mode while on range
Progress on quest/rewards system and recurring objectives
Spotter cam: you can switch to the spotter view, and see last bullet's trajectory - will later show more info, bullet tumbling, etc.
You can also switch between CCTV spots on the range
I don't want this to replace the target camera or the information the spotter gives you, it's less precise anyway; but I feel like it exposes the simulation a little, helping the player understand what's going on with trajectories
Spotter now matches impact with closest target on view plane as intended
Fixed distances called by spotter
Spotter now displays line in spotter cam mode between impact and matched target
Sound framework implementation
Meta events manager and implemented first meta events
Implemented a metadata asset system for more efficient loading of purchasable items when approaching shop
Tooling
Thumbnail system for weapon parts, which allows automatic rendering of all the weapons's parts thumbnails
Tool for per geometry random vertex color assignment in Blender, for better edge detection support
Spent time to setup a big library to format and display values with units. Units will be displayed according to your choices, in meters, yards or even arshins, kilograms, onces, grams, grains, whatever. You'll even be able to setup velocities as m/s, ft/s, km/h, mph, etc. Your choice!
Scoring
First scoring implementation
polish of the scoring sequence
At the end of a session, there is a score recap with several stages, previously it was a long animated sequence. I did a big refactor and now it's a page-by-page manual sequence so you can go back and forth to study your score for each shot (Completly replaced later on)
Complete rework of the scoring system, now targets spawn "bonus modifiers" randomly, those bonuses can have associated challenges like limited time, limited misses, requires a bullseye, etc. Still work to do but works much better than the old system. Depending on the stance you are using, closer bonuses will be disabled, such that you can't cheat and go prone to get a bonus 20m away
Implemented "save" feature for hit cards, you can now save your hits and see them in your card collection with all the scoring info and details about the hit (range, energy, velocity, wind, etc.)
UI
Improved the display of attachments POIs, now they scale up when the mouses gets closer, so it's less intrusive.
Display key mappings on the range
Add Calls To Action in score recap screen, and in workshop UI
Set mouse pos when entering UIs
Improved attachments POI handling
Did a big pass on pausing both in the hub and on the range, cleaning up the pause UI, and making sure you can smoothly quit the game (why) or go back to the main menu and relaunch the hub. Struggled with the wording, because "quit to desktop" can mean both going back to main menu or quitting the game for real
Fix cursor flicker when grabbing a part
Refactor of objective display to accomodate localization, and allow more complex objectives (such as target of a certain type)
Ranges can now be unlocked, and can display information in the UI such as interior/exterior setting, elevation, max distance... And later on will display weather info
Reorganized weapon categories, will now be Handguns, Rifles, and Automatic weapons
Settings menu (not complete but at least fonctionnal), which triggered some cleanup work on the UI, generalizing some UI elements, and to the save system to save additional graphic settings
Objectives for current weapon are now listed in the pause menu when on the range
Weapon malfunctions notifications! Took quite a bit of refactoring and cleaning up to get working with all weapons; For now "malfunctions" is a broad term, it includes a fail primer, safety being on, weapon being unloaded... In fact these will probably be off by default, but since there is no sound or feedback right now, it's actually quite helpful even for debugging purposes
In the workshop, attachment POIs are cleaner, and partially occluded when blocked behind something
V1 of the hand placement interface + refactor of the range interface, now neatly grouped in a tabbed menu on the top right, with your ammo, weapon props, and weapon objectives
Reorganized workshop UI, now mirrors in-range UI with ammo, weapon info and weapon objectives groupped in the same tab
Spotter cam UI, trajectory traces improvements
Display properties for weapon parts in shop and workshop
Icon updates
CCTV UI for spotter cam
First pass on target challenges UI
Show attach item type in shop thumbnail
Accuracy of the weapon in shown in properties
Various
Changes to the bullet code, to switch everything to metric, setup an unit conversion and formatting library (anticipating the need of implementing a metric/imperial units toggle, perhaps per unit so you can display distances as meters but weights as grains )
Hit cards now display the correct info, and can also display a miss.
Change the cursor system to switch between hardware and software cusor during manipulation, greatly improving cursor responsiveness
Door logic refactor, now cleanly handled by a parent class. Game dev 101. Added some doors in the hub I won't talk about yet.
Fix bugs when switching from interaction to shooting mode while holding a cartridge
When leaving and re-opening workshop, previously selected weapon is now selected again in the UI
Add purchase all weapons functionality to debug menu
Fix unpause input not working in range mode
Add new container types for ammo with various bullet counts
Fix colt navy aiming pivot
Fix non registered inputs when leaving pause menu while in manipulation mode
Better highlight hover, with both the red highlight and the mouse cursor updated for much better clarity
Weapon parts and attachments now have a prerequisite unlocked weapon before they appear in the shop
Fix barrel accuracy was always 0 MOA
Fix random sway scaled by input sensitivity
Tune all weapons random movement sway
Add hoverable material to all hoverable parts
Refactor datatables to load weapons on the fly instead of having them all in memory
Currently, a lot of weapons and weapon parts are loaded in memory at all times due to the way they are references in data tables; this is not a problem, but could become one when there are many of them
Did a first pass moving hard references to soft references for weapon classes, paving the way for more improvements
Cleanup hard references in the code for cleaner memory management
Fix weapon drifting with use when shouldering while recoil is applied
Ballistics and weapon physics
I reimplemented my muzzle velocity calculations, using research from Reload Swiss. They did a whole linear regression to get a formula for muzzle velocity according to Powder charge, Bullet weight, Barrel length, Cartridge length and bullet caliber.
This works well, but not good enough currently. It's really tailored for rifles and higher velocities, and breaks down a little for handguns. Still, progress is progress. (Note: This was completely refactored later)
To get more accurate results, bullets now simulate 500 to 1000 times per second instead of 100 times per second
Wind is now a thing! I did a big refactor of how drag was implemented, using a more accurate drag coefficient. Research was super interesting, I learned that wind doesn't blow bullets very much at all, but bullets align themselves into the wind, and drag differential causes a deflection. I suspect some of you knew that!
This is how it is implemented currently and drag seems more accurate overall. I'll have to see how that works with pellets and .36PN Ball. But I've been comparing with real world data, seems pretty fcking accurate already!
Air density is now fully calculated from current temperature and humidity levels! Did you know that air density actually goes down as air gets more humid? And that air density goes down with temperature? Funny that we often feel the air is "heavy" when its hot.
But it seems a hot, humid day is ideal for that 4000m shot after all!
Finished implementing bullet velocity calculations, now using a pressure curve instead of previous approximations, happy to see I get accurate muzzle velocities for both 9mm out of a 10cm barrel and 30 .06 out of a 60cm barrel! Those rounds couldn't be more different so it's a good sign
Fixed major error in part velocity calculation, probably the cause of dud roundin previous dev log
Recoil refactoring, rebalanced how secondary hand affects recoil. Recoil is now much more balanced and accurate, although full auto is still hard to control.
Barrel temperatyre : Energy is transferred to barrel in form of heat when firing a round, and temperature goes down according to barrel characteristics. When barrel is hot, some slight drift in point of impact may occur in certain barrels.
More importantly, heat is transferred to currently chambered round! In closed bolt weapons, this means leaving a round for a while in a hot chamber will increase burn rate, and in most cases muzzle velocity, as cartridge will be hotter.
Correctly apply concussion, scaled by bullet exit pressure (and weapon modifiers)
Debug
I finally setup a benchmark scene so I can measure impacts very precisely and compare with real world, see examples attached
New debug menu for weapon properties
Improvements to the weapons debug menu, now I can spawn weapons with ammo in the test range, saving a looot of time for testing
Weapons and parts
New starter weapon, the air gun; moddable as an air rifle
Flintlock platform; It has dozens of parts already, you can take it from mini travel pistol to blunderbuss or full blown rifle, combinations are endless (and more to come)
STEN
SKS
BAR
New Picatiny attachments
Added rail adapter parts
Lasers
Red dot sights
Detachable mags
Picatiny Scope Mount
Picatiny foregrips
Source
Changelog.gg summarizes and formats this update. How we read updates.
