[p]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![/p][p][/p][p]I publish updates every friday about the week's progress on [url="https://discord.gg/yPpRgvu5ae"]Discord[/url], and some dev videos on [url="https://www.youtube.com/@TicTacToeDigital"]Youtube[/url]. But I thought I would publish a big update here, showcasing some of the work that has been done during the past 9 months.[/p][p][/p][p]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.[/p][p][/p][p]The TLDR:[/p][p][/p][h3]What's done?[/h3][list][*][p]The majority of the gameplay systems are in place and working as intended.[/p][/*][*][p]Ballistics simulation is mostly done, with some work remaining.[/p][/*][*][p]The most challenging parts of shader development are done.[/p][/*][*][p]Basic sound integration is in place.[/p][/*][*][p]General player progression is currently being finalized.[/p][/*][/list][p][/p][h3]What remains?[/h3][list][*][p]A lot of content: maps, targets, events, various cartridges, and of course many weapons. This is probably 80% of the work remaining.[/p][/*][*][p]A lot of SFX, and game soundtrack[/p][/*][*][p]Finalizing the remaining systems[/p][/*][*][p]Simulation improvements, including Magnus effect, coriolis, bullet ricochet and shattering and more.[/p][/*][*][p]Steam integration, accessibility features, etc.[/p][/*][*][p]Optimization and polish; Current progress is very promising for quite a low minimal config.[/p][/*][/list][p][/p][h3]Full changelist compiled from weekly updates (edited for relevance and clarity):[/h3][p][/p][h2]Weapon systems[/h2][list][*][p]First scope implementation[/p][/*][*][p]Update pivotable parts logic to better handle vertical axes (such as a scope top turret)[/p][/*][*][p]Big scope refactor to handle reticle placement in a shader.[/p][/*][/list][p][img src="{STEAM_CLAN_IMAGE}/45428985/662fd30464f5f5630d306b672a834a9e534ef1fc.png"][/img] [/p][list][*][p]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)[/p][/*][*][p]Weapon parts can display additional tools when manipulated, such as screwdrivers[/p][/*][/list][p][img src="{STEAM_CLAN_IMAGE}/45428985/815a6bea43f7f293c0bd65f571f3dd2e5b84b37e.png"][/img][/p][list][*][p]Weapons can be shouldered, altering the eye position and other values[/p][/*][*][p]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)[/p][/*][*][p]Full auto weapons[/p][/*][*][p]Stripper clips[/p][/*][/list][p][img src="{STEAM_CLAN_IMAGE}/45428985/14db184c9ce48e46771452b658a9a8751ed82651.png"][/img] [/p][list][*][p]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[/p][/*][*][p]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.[/p][/*][*][p]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[/p][/*][*][p]Made it possible to handle the multiple firing rates that you find on some trigger groups[/p][/*][*][p]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[/p][/*][*][p]Parts can now snap to several positions (to accommodate the BAR selector)[/p][/*][*][p]Setup shop prices for weapons[/p][/*][*][p]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[/p][/*][*][p]Added many properties to the weapon such as recoil, ergo, length, etc.[/p][/*][*][p]Weapon properties are now displayed in the workshop[/p][/*][*][p]Attachments now remove other overlapping attachments when they are spawned (but only when attached to the same weapon part for now)[/p][/*][/list][p][img src="{STEAM_CLAN_IMAGE}/45428985/9e7e22df5dfd4fddf2c4f27b9720a788d3cea486.png"][/img][/p][list][*][p]Fix input smoothing for scopes[/p][/*][*][p]Big refactor of how weapons are registered, allowing for clean spawning of attachments even when slots have duplicate names[/p][/*][*][p]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[/p][/*][*][p]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[/p][/*][*][p]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[/p][/*][*][p]Improved detection of overlapping attachments[/p][/*][*][p]Improve bolt mechanism code[/p][/*][*][p]Multiple grip points per part[/p][/*][*][p]Each part now can have an accuracy modifier, not only barrels[/p][/*][/list][p]
[/p][h2]Graphics[/h2][list][*][p]Slightly improved muzzle flash effects, doesn't trigger every time (will have a major rework later anyway) (Note: it had a major rework later)[/p][/*][*][p]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)[/p][/*][*][p]Implemented a system to manage lights in levels[/p][/*][*][p]Improved the edge detection algorithm in several ways, it is now in its final state, works much better[/p][/*][/list][p][img src="{STEAM_CLAN_IMAGE}/45428985/7bdafcf4a090241c92bc20f15aac609ae1712246.jpg"][/img][/p][list][*][p]Improved rotation-stable dithering, seems to now be working in all cases[/p][/*][*][p]Parametric muzzle blast and smoke is now plugged in and working as intended[/p][/*][*][p]Improve smoke effects[/p][/*][*][p]Better edge detection on many assets in hub[/p][/*][*][p]Improved main hub environement and optimisation of existing geometry[/p][/*][/list][p]
[/p][h2]Targets and ranges[/h2][list][*][p]Add new graduated targets and objectives related to bullseye hits[/p][/*][*][p]Fruit targets complete with fruit physics[/p][/*][*][p]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[/p][/*][*][p]Mannequin targets[/p][/*][/list][p]
[/p][h2]General systems[/h2][list][*][p]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.[/p][/*][*][p]Focus sytem: Similar 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.[/p][/*][*][p]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)[/p][/*][*][p]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[/p][/*][/list][p][img src="{STEAM_CLAN_IMAGE}/45428985/80282b61dc591dd8db3da05ff152edb89c9b22fa.png"][/img][/p][list][*][p]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[/p][/*][*][p]"Story events" system[/p][/*][*][p]Modelling and game design for game events[/p][/*][*][p]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.[/p][/*][*][p]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![/p][/*][*][p]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)[/p][/*][*][p]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[/p][/*][*][p]Auto target selection from impact location instead of relying on manual target selection[/p][/*][*][p]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.[/p][/*][/list][p][img src="{STEAM_CLAN_IMAGE}/45428985/e2956ace0884a0ac6da756e86b1eca3c11321d65.png"][/img][/p][list][*][p]Big cleanup on the projet side, homogenizing all naming, prices and unlock thresholds etc. for a test build[/p][/*][*][p]Stances: Finally, 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)[/p][/*][*][p]Reworked the navigation camera, now allowing panning, zomming and a better orbit[/p][/*][*][p]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)[/p][/*][*][p]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[/p][/*][/list][p][img src="{STEAM_CLAN_IMAGE}/45428985/013b0a8454ecdccfbdb94ebc5dc25a20d7e30195.png"][/img][/p][list][*][p]Began implementing hand placement mode while on range[/p][/*][*][p]Progress on quest/rewards system and recurring objectives[/p][/*][*][p]Spotter cam: you can switch to the spotter view, and see last bullet's trajectory - will later show more info, bullet tumbling, etc.[/p][/*][/list][p][img src="{STEAM_CLAN_IMAGE}/45428985/6844450bd3507b5f62450c5a4fc4092e9a826f88.png"][/img][/p][list][*][p]You can also switch between CCTV spots on the range[/p][/*][*][p]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[/p][/*][*][p]Spotter now matches impact with closest target on view plane as intended[/p][/*][*][p]Fixed distances called by spotter[/p][/*][*][p]Spotter now displays line in spotter cam mode between impact and matched target[/p][/*][*][p]Sound framework implementation[/p][/*][*][p]Meta events manager and implemented first meta events[/p][/*][*][p]Implemented a metadata asset system for more efficient loading of purchasable items when approaching shop[/p][/*][/list][p]
[/p][h2]Tooling[/h2][list][*][p]Thumbnail system for weapon parts, which allows automatic rendering of all the weapons's parts thumbnails[/p][/*][*][p]Tool for per geometry random vertex color assignment in Blender, for better edge detection support[/p][/*][*][p]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![/p][p]
[/p][/*][/list][h2]Scoring[/h2][list][*][p]First scoring implementation[/p][/*][*][p]polish of the scoring sequence[/p][/*][/list][p][img src="{STEAM_CLAN_IMAGE}/45428985/dfde791db4ccb690cb037e38a66379d58235611c.png"][/img][/p][list][*][p]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)[/p][/*][*][p]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[/p][/*][/list][p][img src="{STEAM_CLAN_IMAGE}/45428985/2816a732ab7efc7ea5376f1e77cbe22110c422e2.png"][/img][/p][list][*][p]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.)[/p][p]
[/p][/*][/list][h2]UI[/h2][list][*][p]Improved the display of attachments POIs, now they scale up when the mouses gets closer, so it's less intrusive.[/p][/*][*][p]Display key mappings on the range[/p][/*][*][p]Add Calls To Action in score recap screen, and in workshop UI[/p][/*][*][p]Set mouse pos when entering UIs[/p][/*][*][p]Improved attachments POI handling[/p][/*][/list][p][img src="{STEAM_CLAN_IMAGE}/45428985/4d4015971541ee83d3108493d6d7df8025c11999.png"][/img][/p][list][*][p]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[/p][/*][*][p]Fix cursor flicker when grabbing a part[/p][/*][*][p]Refactor of objective display to accomodate localization, and allow more complex objectives (such as target of a certain type)[/p][/*][*][p]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[/p][/*][*][p]Reorganized weapon categories, will now be Handguns, Rifles, and Automatic weapons[/p][/*][*][p]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[/p][/*][/list][p][img src="{STEAM_CLAN_IMAGE}/45428985/4b999c51e1774e9aaa320637bc8976427819a8af.png"][/img][/p][list][*][p]Objectives for current weapon are now listed in the pause menu when on the range[/p][/*][*][p]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[/p][/*][*][p]In the workshop, attachment POIs are cleaner, and partially occluded when blocked behind something[/p][/*][*][p]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[/p][/*][*][p]Reorganized workshop UI, now mirrors in-range UI with ammo, weapon info and weapon objectives groupped in the same tab[/p][/*][*][p]Spotter cam UI, trajectory traces improvements[/p][/*][*][p]Display properties for weapon parts in shop and workshop[/p][/*][*][p]Icon updates[/p][/*][*][p]CCTV UI for spotter cam[/p][/*][*][p]First pass on target challenges UI[/p][/*][*][p]Show attach item type in shop thumbnail[/p][/*][*][p]Accuracy of the weapon in shown in properties[/p][/*][/list][p]
[/p][h2]Various[/h2][list][*][p]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 )[/p][/*][*][p]Hit cards now display the correct info, and can also display a miss.[/p][/*][*][p]Change the cursor system to switch between hardware and software cusor during manipulation, greatly improving cursor responsiveness[/p][/*][*][p]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.[/p][/*][*][p]Fix bugs when switching from interaction to shooting mode while holding a cartridge[/p][/*][*][p]When leaving and re-opening workshop, previously selected weapon is now selected again in the UI[/p][/*][*][p]Add purchase all weapons functionality to debug menu[/p][/*][*][p]Fix unpause input not working in range mode[/p][/*][*][p]Add new container types for ammo with various bullet counts[/p][/*][*][p]Fix colt navy aiming pivot[/p][/*][*][p]Fix non registered inputs when leaving pause menu while in manipulation mode[/p][/*][*][p]Better highlight hover, with both the red highlight and the mouse cursor updated for much better clarity[/p][/*][*][p]Weapon parts and attachments now have a prerequisite unlocked weapon before they appear in the shop[/p][/*][*][p]Fix barrel accuracy was always 0 MOA[/p][/*][*][p]Fix random sway scaled by input sensitivity[/p][/*][*][p]Tune all weapons random movement sway[/p][/*][*][p]Add hoverable material to all hoverable parts[/p][/*][*][p]Refactor datatables to load weapons on the fly instead of having them all in memory[/p][/*][*][p]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[/p][/*][*][p]Did a first pass moving hard references to soft references for weapon classes, paving the way for more improvements[/p][/*][*][p]Cleanup hard references in the code for cleaner memory management[/p][/*][*][p]Fix weapon drifting with use when shouldering while recoil is applied[/p][/*][/list][p]
[/p][h2]Ballistics and weapon physics[/h2][list][*][p]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.[/p][/*][*][p]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)[/p][/*][*][p]To get more accurate results, bullets now simulate 500 to 1000 times per second instead of 100 times per second[/p][/*][*][p]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![/p][/*][*][p]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![/p][/*][*][p]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.[/p][/*][*][p]But it seems a hot, humid day is ideal for that 4000m shot after all![/p][/*][*][p]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[/p][/*][*][p]Fixed major error in part velocity calculation, probably the cause of dud roundin previous dev log[/p][/*][*][p]Recoil refactoring, rebalanced how secondary hand affects recoil. Recoil is now much more balanced and accurate, although full auto is still hard to control.[/p][/*][*][p]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.[/p][/*][*][p]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.[/p][/*][*][p]Correctly apply concussion, scaled by bullet exit pressure (and weapon modifiers)[/p][/*][/list][h2]
Debug[/h2][list][*][p]I finally setup a benchmark scene so I can measure impacts very precisely and compare with real world, see examples attached[/p][/*][*][p]New debug menu for weapon properties[/p][/*][*][p]Improvements to the weapons debug menu, now I can spawn weapons with ammo in the test range, saving a looot of time for testing
[/p][/*][/list][h2]Weapons and parts[/h2][list][*][p]New starter weapon, the air gun; moddable as an air rifle[/p][/*][*][p]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)[/p][/*][*][p]STEN[/p][/*][/list][p][img src="{STEAM_CLAN_IMAGE}/45428985/61c964713efb5d63642522c0d163bbbfb4ab04f6.png"][/img][/p][list][*][p]SKS[/p][/*][/list][p][img src="{STEAM_CLAN_IMAGE}/45428985/b8ef9f56a940599a930de7f46ca179eb987f19d9.png"][/img][/p][list][*][p]BAR[/p][/*][/list][p][img src="{STEAM_CLAN_IMAGE}/45428985/0ede20a4677bafc5d48461a36bf5863523ed7709.png"][/img][/p][list][*][p]New Picatiny attachments[/p][/*][*][p]Added rail adapter parts[/p][/*][*][p]Lasers[/p][/*][*][p]Red dot sights[/p][/*][*][p]Detachable mags[/p][/*][*][p]Picatiny Scope Mount[/p][/*][*][p]Picatiny foregrips[/p][/*][/list]