Releases: inkoalawetrust/Military-Vehicles-Pack
Version 0.5.0 (Main Battle Tank)
NOTE: THIS VERSION OF THE MOD REQUIRES VERSION 0.0.1 OF THE KAI LIBRARY OR HIGHER TO RUN !
This is the next major release of the MVP, and boy is it a big one. This release finally adds the tank to the mod, needless to say, it's the most powerful vehicle in the pack. It can fire different types of shells, has 2 remote weapon stations, active and passive defenses, can run enemies over, the list goes on and on.
In addition to the tank, I will also be making 3 additional variants of the tank, serving different roles. However, I have only coded 1 of these variants so far, the anti air gun. The other 2 will be finished at a later time, because it took me super fucking long to model all the tank assets, and code the MBT. So I only made the SPAAG and MBT for the time being. However, all the variants are already implemented as props.
This update also brings huge amount of improvements and bugfixes to the mod in general, as usual. But one huge difference is that most of the base vehicle code has been spun off to a separate AI library, which makes it possible to share code between my mods, and also allows others to make smart NPCs with my code.
Another major change is that the documentation has now been moved into a wiki hosted on this repository. Allowing me to actually organize the information.
For more information on the tank, check its' wiki page, or the tanks' showcase video.
Full Changelog
Version 0.4.0 (Di-Cokka)
This update adds one new vehicle to the MVP, the Di-Cokka, this is a vehicle from Metal Slug instead of an original design. Half added as a joke, half as a warmup for future vehicles. It's mechanics are very different from the other vehicles in the pack for more info, check the updated documentation.
Besides this new vehicle, this update is actually mainly a HUGE rewrite and bugfix update. This update fixes a ridiculous amount of bugs and undefined behavior that was present in the mod before. It also is a massive rewrite of how turrets work. This is a lot more code compared to the Di-Cokka, which is also fairly simplistic by design compared to other vehicles. Since it's a cartoon tank from a run and gun game series.
Code wise, a lot of these changes are also in preparation of me potentially making a new AI library in vein to VJ Base, where the base code for the MVP will serve as the vehicle base. This is partly why I put such a focus on extensibility and flexibility. But of course, I also did it to make my job easier. This library will allow others to more easily use my AI code for their projects, it will even make integrating my NPCs to my own future projects easier, which is another plus. And reason I want to make this library. No ETA on when I'll begin work on this library.
Known bugs:
- Because of a bug in GZDoom 4.10, there is a 50/50 chance that right when close GZDoom, it will crash. I can't really do anything about it on my end. I do know that it's caused by the AttackStates state array however.
Videos:
Video on the Di-Cokka: https://youtu.be/Y7TBvQGW7nc
Video on the newly rewritten turret mechanics and line of fire checks: https://youtu.be/qLtzr4XU0X0
Changelog:
- The line of fire checks that the turrets use have been completely reworked from the ground up. Now instead of relying on a hardcoded function. There is instead a custom LineTracer class (MVP_LOFRaycast), which contains a bunch of basic methods and variables. These methods and variables from the custom LOF tracer can then be used to make custom LOF checks for specific usages, creating a far more flexible and extensible system, such as for vehicle attacks with specific collision rules. However, there is still a basic LOF tracer and check function included, useful for projectile attacks with fairly generic collisions and such (e.g not rippers like the .50 BMG projectiles).
- Turrets now have elevation limits that they can obey, like real world turrets do. Turrets cannot move/shoot above or below those limits, if a target is too high up for a turret to shoot in particular, then the vehicle it's attached to will try to drive away from the target, to allow the turret to shoot it. These new elevation limits can be specified with the MVP_BaseTurret.MaximumPitch and MVP_BaseTurret.MinimumPitch properties.
- The way the turrets' turn sounds are handled has been improved and consolidated. And the turn sound can be changed with the new MVP_BaseTurret.TurnSound property.
- A realistic turret traverse system has been implemented, which makes it so turrets have to actually take time to aim at targets, instead of facing them instantly like normal monsters. Which adds an extra element of realism (And balancing !). You can specify turn rates with the CombatAngleTurnRate and CombatPitchTurnRate properties, which control how many degrees per second a turret can traverse horizontally and vertically, respectively. A new +NOCOMBATTRAVERSE flag has also been added, which can be used to turn off the realistic turret traverse entirely, it's used by the Di-Cokkas' turret. (However it can be turned off on the Di-Cokka check the document for more info.)
- Code has been implemented to allow marine warnings, and marine warning zones, to be created and moved at whichever direction a turret is aiming at. This is useful for making it so Smart Marines can know that they should avoid vehicle attacks, e.g to avoid the line of fire of an enemy APC. The code isn't super generic however, and does need some messy turret-specific setting up, such as for when the warning zone should be created and removed.
- A lot, and I mean, a fucking LOT of bugfixes. Way too many for me to even remember or list, some were deliberate fixes from me, others were simply consequences of all the refactors on how the turrets' code works.
For a list of all the bug fixed, here is a list to all the commits since the last release.
Version 0.3.1.1
This update does not update the demo map or documentation. It was done and released in its' half baked state because I fucking forgot a line of debug code in the APCs' death state.
- Removed a debug line of code. It wouldn't be one of my mods if I DIDN'T miss some bit of debug code !
- Added default values to HandleTargetPrediction().
- Made turrets have their velocity always set to 0 when they are attached on vehicles.
- Vehicles can no longer crush corpses in mid air.
- Improved turret rotation mechanics.
Version 0.3.1
This is a minor update to the mod, that mostly has a bunch of bug fixes and fixes for crashes.
The demo map and documentation have also been updated.
- Fixed a startup issue.
- Lowered the attenuation of air shell explosions.
- Autocannon shells now have the ability to perform a proximity airburst if the APC shoots them at a flying enemy (That is not immune to blast damage). This applies to both flying monsters AND players.
- Added debug CVARs that allow all hostile monsters to be able to see friendly monsters.
- Added lights for the autocannon shells' explosions.
- Added lights for the APCs' death animations.
- Vehicles will now stop running from powerful enemies if the distance between the vehicle and the enemy is over 4 times longer than the distance specified by User_RetreatDistance. Before they would simply run away from the powerful foe until the enemy died or was out of sight.
- Vehicles no longer try to crush corpses that are too big or don't even have a Raise state.
- Slightly increased the range of the explosion produced when the autocannon shell explodes in the air.
- Made it so the APC does not stop to have its' turret fire if it its' target or alternatively the APCs' target are out of range.
- Added some sanity checks to prevent VM aborts from happening if the marines aren't loaded.
- Organized the GLDEFS code a bit.
- Fixed a bug that made the prop versions of the Army Car and Truck to not have lights attached to them.
- Fixed a bug where after the Army Cars' Pain Ray is destroyed. It gets teleported back to the Car and flung off when the Car dies.
- Fixed wildly inaccurate offsets on autocannon shell tracer.
- Setting a vehicles' User_DefaultOrder to "Stand" now does the same thing as using "Stay".
- Cleaned up code duplication by moving certain generic checks to an MVP_CheckFunctions mixin.
- Fixed an egregious bug with the Army Truck and Cars' pre-gibbed props, where the optional flames they spawned didn't last forever(-ish).
- Fixed a VM abort that happened when an APC with no turret entered its' See state.
- Rewrote a bunch of code to use more proper math by using Vec3OffsetRelative(), fixing several bugs in the process.
- Increased the amount of flames the Army Truck spawns when gibbed.
- Hopefully fixed a bug that made flames not spawn. And also made flames able to spawn at random heights within the vehicles' hitbox.
- Improved the behavior of the code that makes marines escape the destroyed APC. Now it uses an actual time instead of pure RNG.
- Changed the token giving checks for when the mod is ran without the Smart Marines, now they check if the token exists at all instead of if the marines are loaded. This should allow other non-marine mods to make use of these tokens even without the Smart Marines loaded, by having their own copies of said tokens (SM_ImInDanger etc). Or something.
- Made projectile tracers brighter.
- Fixed being able to give the APC ruin prop turrets.
Version 0.3.0 (APC)
Edit: There was a minor mistake in the original version of the MVP PK3 that prevented it from starting up (Despite me playtesting it first, of course.), but it should be fixed now.
The next vehicle in the pack has been released, the APC.
This is a BIG update to the mod, besides adding the APC, it also adds A FUCKING LOT of new base turret and vehicle code.. Frankly, a lot of the new features and updates have less to do with the APC specifically, and are more brand new mechanics and behaviors that will be shared by ALL (or most) of the armed vehicles from now on. But for now, they are more like brand new APC-related features. So read both the APC and general Changelog section, since they are basically almost all APC related.
For more information, read the attached document !
Armored Personnel Carrier
- Is the most durable and powerful vehicle in the MVP (For now :> ), and has 1500 health along with decent damage factors for armor.
- Can drop 8 marines, in more or less the same manner as the Army Truck.
- Has two turrets, a dual machine gun turret similar to the stationary ones the marines use, and an autocannon turret, which comes with a smaller MG turret on top of itself.
- Can crush sufficiently small corpses by running them over. By default, the APC will actively seek nearby corpses to crush when it's not fighting, or following a player. This is done to prevent enemy Archviles or other resurrecting enemies from turning the corpses to enemies. This is configurable through the User_CrushMode variable.
- When the APC is destroyed (But not gibbed !), there is a chance that a random amount of the APC's passengers at the time of death (If any) will survive, albeit injured. And after a few seconds, they will escape from the APC.
Changelog
- There are simply far too many changes since the last release to list, but here are some of the biggest ones off the top of my head.
- The demonstration map (And especially the written documentation.), have been updated to talk and show all these new updates and changes.
- Massive overhaul to how turrets work (Not applied to the Pain Ray so far, only to turrets' post-rewrite, like the APCs' turrets). Turrets now have the ability to visually change their elevation up and down based on their pitch. Shoot ahead of targets. Rotate back to their vehicles' angle organically instead of abruptly snapping back into place. Play a rotating sound if rotating fast enough. Can have a minimum and maximum elevation at which they are able to fire at. And so on.
- Added a base projectile class, used by lethal projectiles such as 12.7mm and 7.68mm bullets, and 30mm shells. This class offers a bunch of features, mainly trail code that works on projectiles of all velocities without breaking apart, which can also have customizable lengths and shapes. Unlike the basic FastProjectile trails which fall apart on projectiles with a speed about 120-140. It also allows for features like texture specific splashes and liquid explosions.
- Added projectile deflection mechanics, allowing projectiles to bounce off actors. This mechanic allows for a lot of customizability on the backend, such as how much the speed of the projectile post-deflection should be reduced or increase, how much less damage a projectile will do when deflected. And of course, what the actual chance of a deflection is. The deflection mechanic works on specific classes like the APC. But projectiles also have some generic checks to be able to more universally bounce off certain actors, like bullets always deflecting off players in god mode or invulnerable monsters. And inorganic actors (Ones with the NOBLOOD flag) with over 2000 health having a high chance to have bullets deflect off them. Oh yeah, deflections also produce sparks and ricochet sounds too.
- Added a vehicle radio with multiple orders and ways of delivering them. It can be used to command both vehicles and Smart Marines.
- Flaming vehicle wrecks can now cause marines to stay away from them for as long as they are on fire. THIS CAUSES A KNOWN BUG LISTED BELOW !
- Added a bunch of other code pertaining to actual lethal attacks, such as custom line of fire checks for projectiles. Which also allow turrets to shoot through cover that the target is behind, if that cover is weak enough that the turret can break through it in a reasonable amount of time.
- Added a corpse crushing mechanic, which crushes corpses identically to how they are crushed by moving sectors and grinding polyobjects. It also allows for having the vehicle seek corpses, only passively crush them, or not crush them at all. The maximum dimensions of a corpse can be specified on the vehicle with two custom actor properties. Currently this mechanic is only used by the APC, since it's big and heavy enough to justify it being able to crush things. But the mechanic will be getting added to more vehicles in the future as well (coughcoughcoughcough).
- Tons of code optimizations, cleanups, and improvements.
- A lot of bug fixes.
- A lot of things I'm forgetting.
Known bugs
- When friendly marines run away from a flaming vehicle, they will for some god forsaken reason cause all other nearby friendly monsters to try and attack the vehicle (Or more specifically, it's warning zone.). I have no idea why the actual fuck that happens, finishing this update was too hard already, and I'm fucking sick to my very soul of dealing with asinine bugs like these (ESPECIALLY WITH THE MARINES). So it's not fixed. TL;DR I tried fucking everything to fix it on my end. I've even asked @MrRaveYard for help. But he wasn't able to find anything that could be responsible for this bug. If you can somehow fix it, then please PR me the fix.
- Sometimes the vehicle radio will not work with the Smart Marines. I'm also not sure why this happens, but I am guessing it has to do something with the code that allows marines to determine what order to be on by default based on player visibility.
Where have I been ?
As you may have noticed, this update has taken twice as long to release compared to the span between making the Army Car and Truck. I still have not even finished the showcase video, so I'm kinda rushing through to get this update out.
Now, you are probably wondering why it took so long. Basically, almost everything that could go wrong, did. Here is most of it, in order:
- Making the APC model gave me a hard time, particularly me trying to seamlessly wrap the procedural camouflage material I use around the APC. This made the modelling process take like an extra week of work, mostly pulling my hair out at the limitations of object coordinates.
- I got struck with three separate illnesses at once.
- Had to move to a new house to live in a city for the first time in my life.
- Took a week or two to slowly adjust to living in a new house and on the city, slowly picking up where I left off with my projects..
- Went almost totally broke post-moving out.
- Now here comes the real fucking clown shit. For the mechanic of marines escaping the APC, I needed some sprite edits of marines interacting with my APC sprites, to have the crew open the hatches and jump out of the APC. I have no way to do that myself. So I was waiting for someone else to do the sprite edits for me. I waited for several weeks. Then I just gave up on having the crew escape, and only had the passengers escape. So if you've noticed that the APC's death is kinda weird (Having the hatches and front door open, and then the back doors, instead of only the back doors.). Yeah, that's because the death sprites are actually still half-done.
Version 0.2.0 (Army Truck)
The next vehicle in the pack has been added, the Army Truck.
Army Truck:
- Has 100 more health than the Car, however, it is overall more fragile (Doesn't have damage factors as good as the default.), and especially has damage factors that do 1.25x more damage if the truck is hit by the damage types "Explosion" or "ExplosiveImpact", it also takes 1.5x more damage from "MarineGrenade" type damage (The damage type of the marines' grenades, obviously).
- Can drop up to 14 marines (Changeable with User_MarineAmount) that fight on its' side, the marines also try to avoid getting stuck together when dropped. When it's health is at 1/4th of it's starting spawn health, it will become far more likely to drop marines, and drop them twice as fast as well.
- Can attack enemies by ramming them (User_Ramming must be on), causing tons of melee damage based on how fast it hit an enemy. The truck simply pushes allies away instead of hurting them. All marines will also avoid trucks that are charging, both marines that are friendly and opposed to the truck. The truck will also only charge when it has no marines left, so that if it dies, none of the marines it was carrying will die along with it.
- Keeps a distance of 1024 map units away from all enemies, instead of the standard 768 map units.
- Has all of the other features shared by all vehicles (Working headlights, giving up on enemies, keeping a distance from enemies, various customizable prop versions of the vehicle)
- Updated the documentation and the demonstration map with a new section dedicated to the Army Truck and how to use it. (Includes a basic example of scripting a truck convoy, that attacks some enemies then splits off.)
Changelog:
- Re-rendered the Army Cars' sprites, fixing a lighting issue caused by me accidentally forgetting a sun light on while making the original sprite renders.
- The amount of time that vehicles spend chasing their target, before giving up on them after they've been out of sight for too long. Has no been exposed to mappers and modders with the User_ChaseTime variable.
- Fixed a bug that caused vehicles to be able to collide with their turrets, causing the Army Car to not be able to ever climb up with it's Pain Ray equipped.
- Fixed a bug that caused infinite recursion when a marine spawning vehicle, like the car, tried to drop marines in an invalid location.
- Vehicles no longer are able to use walls by default, so no more cars opening doors. You'll either have to turn CANUSEWALLS back on with ACS, or add different activation types to your doors and lifts. Or just remove -CANUSEWALLS from MVP_BaseVehicle of course.
- The User_IdleSound variable is now shared by all props, and can also be dynamically turned on and off.
- Further organized the code, such as by moving the headlight spawning functions for each vehicle to a new HeadlightDefinitions.zsc file.
- MVP_BigExplosion has now been made customizable, more information can be found in its' ZScript definition.
- Fixed bugs in the marine spawning code.
- Stopped vehicles from being able to be scared of dead enemies.
- Fixed a bug that made SmartMarineWarningZone not work.
- IsDead() now more properly checks for dead players in particular.
Version 0.1.1
- Made the army car slightly faster and removed one last debug message.
- Add sprite shadow related flags to the base classes. So sprite shadows now work properly.
- Improved ZDoom patrol system support.
- Setting User_RetreatDistance to -1 now prevents the vehicles from running away from their nearest enemy entirely.
- The chance of the Army Car randomly deciding to stop standing still while being equipped with the pain ray has also been slightly reduced.
- Updated documentation
- Have also made a showcase video for the Army Car, which can be found here: https://youtu.be/1droRFw7LEo
The demonstration map remains the same as before.
Version 0.1.0
This is the first public version of the Military Vehicle Pack mod, currently it only includes the Army Car, More vehicles will be added in the future, as I am nowhere near done yet with this project.
The mod also includes a full document on how to use it in your projects*, along with a demonstration map, that demonstrates features shared by all vehicles, and also specific vehicles like the army car.
*The document comes in HTML format, since it's way more accessible, but the original un-exported ODT document is available as well.