Previous Blog Next Blog
Prev/Next Blog
by date

OnagerEngine is now WarEngine and I have a feature list!

OnagerEngine is now WarEngine and I have a feature list!
Name:Daniel Buckmaster 
Date Posted:Aug 01, 2008
Rating:Not Rated
Public:YES
Comments:YES
RSS Feed:GarageGames Blog feedor Subscribe with .
Profile Page:View profile page for Daniel Buckmaster

Blog post
I decided against OnagerEngine, in the end. I came up with WarEngine before, and it's better, so I don't know why I didn't like it.

Meh

The critical thing is, I've actualy taken the time to sit down and write up a list of features to implement. Of course, this is in no way a final list; doubtless, I'll add things that I see along the way, remove things that prove too difficult or unecessary, and generally prune and refine the engine. However, I've got to start somewhere.

After making the big list, I grouped all the modifications into little parcels based on what I thought was most difficult, what updates went together well, and what needed to be done most quickly. I then bunched up those parcels into versions - so now when I finish a chunk of coding, I can label the engine with a nice decimal version number. You can see the result of all this below, as the road map.

The WarEngine is primarily being designed for use with my project, an FPS set in the Warhammer 40k universe. Yes, I know about the IP issues; I'm dealing with them. However, once I've got as far as version 1.0, I'd like to release the code to the community - it's going to be mostly resources anyway! I'm sure it would provide a nice starting point for someone looking to make a war game like mine. I'm even wondering about a little example game to show it off - all these engine code changes are going to have to be supported by a massive amount of scripting...

Well... on with the show, I guess!

Oh, wait! Important question!
I'm not allowed to share source code changes with my team who haven't licenced Torque. I'm cool with that; they're not programmers. However, am I allowed to share this list? It contains some internal details of Torque, though no actual code.
I'm pretty sure I'm fine, but I thought I'd ask here first, just to be on the safe side.

WarEngine feature list

Characters

Stance system
-Stand, crouch, prone (on belly and back), and swim stances
-Each stance has its own set of maximum speeds and movement forces, as well as its own bounding box
-Bounding box checks are made before state transitions

Detailed damage model
-Players can be knocked back by damage, possibly causing them to stumble or fall. Animations are chosen depending on the direction of the damage
-Damage locations can be defined, as well as effects when a location is damaged a certain amount such as limping
-Locations can bleed, depending on the type of damage inflicted. Bleeding will be faster or slower depending on the amount of damage done
-'Creeping damage' represents effects such as poison or fire spreading across the body, and is managed per location, with definable effects such as particles, damage per second, camera effects, and more
-Advanced damage flashes display a number of different bitmaps depending on where the damage was caused and the amount and type of damage
-Death animations can be script-controlled
-Damage may be tracked depending on the player who inflicted it

Advanced movement controls
-Characters can conform to the terrain, optionally only when prone
-Torso-twists and head-turning
-Animations are played in first-person viewpoint for an immersive experience
-Jump strength is based on the amount of time the jump trigger is held for, and an animation can be played while the jump is readied
-Characters can be allowed to climb ladders, or any arbitrary surface, including vehicles
-A stress meter affects character movement, and can use one of several equations with definable parameters
-A dynamic member affects the overall movement speed of the character, set in script

In-depth weapon handling
-Aiming state
-Characters use 'pose' animations that define all arm animations for a given type of weapon
-Characters use fake IK to adapt their pose to the exact dimensions of a weapon
-When moving, a swinging arm animation can be played depending on the speed of the movement
-Swing animation is also affected by a dynamic accuracy member and the stress level of the character

Jetpack love
-Characters can use a simple jetpack activated either when the character makes a maximum-strength jump, or when the character double-jumps
-Alternatively, an advanced jetpack allows characters to hover and control their movement through the air
-Finally, a jump pack is available, which controls the character's flight in a script-defined arc
-All jetpacks can define particles and sounds when drifting and jetting, and animations when jetting

Character sounds
-Characters can have movement and ambient sounds as well as footstep sounds, and optionally 'wet' movement sounds

Inventory system
-Each character operates an inventory that stores a list of objects and quantities

Voice sets
-Each character has a reference to a voice set datablock that defines the audio files used for their speech
-Voice sets can be asked to formulate a character's speech based on simple inputs. Each voice set implements a variety of methods to resolve requests for speech
-Each character has his own voice pitch modifier to make characters with the same voice set sound slightly more unique



Projectiles

Advanced flight modelling
-Ballistic projectiles bounce when under a certain angle from the surface
-Bouncing projectiles can leave bounce decals and onCollision is called
-Projectiles have definable behaviour when entering water, depending on speed and other factors
-In-flight acceleration of projectiles
-Coded collision impulse

New projectile behaviours
-Seeking projectiles, with definable behaviour such as gradual steering, distance-relative steering, and terrain reasoning
-'Fluid' projectiles, which can pass through objects while still doing damage, and will stick to static objects and vehicles. They can optionally spawn creeping damage on characters
-Munitions can be placed (and will stick to vehicles), and can be set off via timer, proximity trigger and/or remote detonator

Sound variety
-Bounce sounds and hit sounds are definable per material type
-In-flight sounds with Doppler effect

Visual effects
-Bounce and hit decals defined per material type
-Tracers with definable colour, length, etc.
-Explosions may adjust the colour of some of their particles based on the material they take place on

Laser beams
-Beam can be interpolated to provide curving effects with either gravity or a specified direction vector, strength decay and atmospheric interference
-Continuous
-Damage can be done at the effect start, end, or per second of contact. Damage can also be applied within a radius of the beam, or just at the beam's hit point (where a radius may also be used)
-Callbacks when an object is hit by the beam. Callbacks are managed through the MountedImage that owns the beam
-Maximum length can determine strength decay through either a linear, inverse or square-root equation
-Beam warm-up and cool-down



Vehicles

Improved vehicle collisions

Titan class
-Titans are constructed of multiple vehicle hulls, moved by a manager object to walk and aim weapons
-Detailing is provided by static shapes attached to the hulls
-Ragdoll physics is used when a Titan is destroyed

Walker class?
-Move animation
-Advanced bounding box resolves legs in more detail

Vehicle seating system
-Individual seats can be mounted by players close enough
-Each seat is in a specified seating location of the vehicle
-Players can swap between seats in their location
-Each seat may have a control object assigned to it, and a set of controls able to be used

Damage model
-Vehicles use damage locations, each with consequences of being damaged
-When damage is applied to a location, damage can be passed on to players seated there, or to turrets or other control objects
-Vehicle behaviour can be modified by damage level

Mountable, controllable turrets
-Turrets may be AI controlled or character controlled (via a seat in the vehicle or mounting the turret itself
-Turrets are either mounted to vehicles or created as stand-alone units

Vehicle special effects
-Engine sound is pitched based on engine speed
-Damage to a certain location may play additional sounds, optionally dependent on vehicle speed or gear
-Wheel sounds are defined per material type
-Advanced destruction effects, including secondary explosions, long-lasting smoke and fire particles, etc.

HoverVehicle improvements
-Air-braking enabled, along with an optional brake animation
-Speed limiter
-Multiple artist-defined stabs that can have arbitrary position and rotation

Two-wheeled vehicles
-A balancing force is used to stabilise two-wheeled vehicles, and a leaning force aids turning

Gears
-WheeledVehicles use a gear system

Wheel friction per material type



Images

Watched fields
-Up to four fields per mounted image
-Script callbacks in situations such as OnMin or OnIncTo
-Can be tied to global (non-state-dependent) particles, lights, sounds or animations

Manual state changes
-Image state, as well as global animations, lights, sounds and particles, can be managed through script

Images collide
-Characters' bounding boxes may be extended to take into account the extents of mounted images

Increased image limit
-Characters can mount up to 16 images
-Network modifications make image networking more efficient

Mount image images
-Images can be mounted to already-mounted images while retaining all of their own functionality

Melee weapons
-Images can process raycasts every tick to deal close-combat damage
-Raycasts can be interpolated for greater accuracy

Simple images?
-Simple images remove functionality such as the state machine and particles, and are used for equipment and inert close combat weapons

Alternate trigger state

Scope
-Characters can view the world through an image, with an optional GUI overlay and zoom factor



ShapeBase

Advanced skin swapping

Mesh hiding
-Individual mesh objects may be shown or hidden

Hitboxes
-Hitboxes are artist-defined
-Can be activated and deactivated dynamically
-Included in RayInfo struct and projectile collision callbacks

Sound modifier track
-Whenever a sound is played by the object, the modifier sound will also be played
-Optionally, the modifier sound will adjust its volume to match that of the played sound

Contact surface velocity
-ShapeBase objects adjust their position by the velocity of an object beneath them, after definable friction is taken into account
-It is left to derived objects to collect the velocities of objects they are resting on



Terrain

Deformation
-Terrains can be deformed by one of four patterns (rectangle, point, circle, hemi) with definable dimensions and timescales
-Terrain vertices are 'compressed' to lessen the effect of multiple deformations and to allow non-deformable zones
-Terrains are locally relit when a deformation is performed
-The terrain material of the deformed vertices may be changed

IceBlocks
-WaterBlocks with collision and no waves
-Can be broken in places, with a defined pattern given a size index

Server-side waves
-Waves are synchronised on the server and clients, so they can be used to alter the simulation of other objects



Rendering

Torque Modernisation Kit
-Allows use of shaders on interior and water objects, DRL and screen bloom

Koushik's shaders
-Enables the use of shaders on DTS objects, as well as screen-space shaders

Dynamic weather
-Limited dusk/dawn cycles
-Cloud layers can be changed in real-time
-Dynamic-brightness sun

Environment pack
-Implements numerous changes



Artificial Intelligence

Squad manager
-Provides an easy interface for its membrs to access critical information about the squad's condition
-Keeps track of incoming fire and enemies in range
-When squads converge, their managers work together
-Orchestrates chatter and other interactions between squad members
-Dictates low-level movement, finds cover locations, manages movement through interiors based on navigation nodes

Individual AI
-Simple routines to decide whether to focus on shooting, moving, or cover
-Independent characters
-Improved aiming routine allows for random error and gradual improvement in aim

Strategic AI
-Long-range pathfinding across large maps via nodes
-Two levels of management above squad-level direct battles using terrain reasoning and goal-based objectives



New Stuff

Soft objects
-Rope and cloths are possible. They are calculated client-side with simulation LoD available; raycasted collision is taken into account, but does not affect other objects

Dynamic buildings
-Buildings are generated procedurally based on datablock values
-Created from separate 'tiles' of wall, floor and roof segments
-Each tile is destructible, using mesh hiding and skin swapping for greater detail. Damage is passed between tiles for continuity
-Tiles are associated with damage and destruction sounds and explosions
-The building manager is responsible for rendering the tiles of its building and checking collision
-Datablocks also have options to add set pieces, ladders, stairs, etc.



WarEngine road map

v0.0 TGE 1.5.2

v0.05
-TMK, Koushik shaders, environment pack

v0.1
-Character poses, stances, movement controls, sounds, jetting
-Projectile flight modelling, behaviours
-Image watched fields, manual state changes, alt trigger, image images
-ShapeBase skin swapping, mesh hiding, hitboxes

v0.15
-Character weapon handling, damage model
-ShapeBase contact surface velocity

v0.2
-Vehicle collisions, damage, turrets, two-wheeled vehicles, gears
-Terrain deformation

v0.3
-Character advanced jetting and jumping
-Image scope, melee raycasts, collision, increased limit
-Vehicle friction per material type
-Projectile visual effects, sounds

v0.35
-Laser projectiles

v0.4
-Character inventory

v0.5
-Tactical AI

v0.53
-Character voice pitch modulation
-Voice sets
-ShapeBase sound modifier track

v0.55
-Vehicle seating system

v0.58
-Strategic AI, independent AI

v0.6
-Simple images

v0.65
-Buildings

v0.7
-HoverVehicles
-Walker vehicle?
-Titan vehicle

v0.71
-AI interactions

v0.73
-Server waves

v0.75
-Dynamic sky
-Dynamic sun

v0.8
-Local terrain relight
-Terrain texture painting

v0.81
-IceBlocks
-Soft objects

v0.85
-Character damage tracking

Bug fixing, testing

v1.0 WarEngine

Recent Blog Posts
List:11/22/08 - Upgrading arm animations
08/08/08 - For newbs like me...
08/01/08 - OnagerEngine is now WarEngine and I have a feature list!
05/07/08 - The War Engine
11/03/07 - No, still no crosshair...
09/01/07 - Second blog post!
08/07/07 - First blog entry...?

Submit ResourceSubmit your own resources!

Konrad Kiss   (Aug 01, 2008 at 19:32 GMT)
Impressive! Good luck!

Daniel Buckmaster   (Aug 01, 2008 at 20:11 GMT)
Gah :P Not all the tags are working...

Thanks :)

Daniel Buckmaster   (Aug 02, 2008 at 06:53 GMT)
Edit: I totally forgot the bit about the buildings! :P

Edit: And AI!
Edited on Aug 02, 2008 12:51 GMT

Devon Winter   (Aug 04, 2008 at 15:27 GMT)
You've done an excellent job of laying out the various systems, and thinking about exactly what you want to do and where you want to go with each system. It gives one a perspective on just exactly how much work is involved in a fairly complex game. It sounds like you've got about 2 to 3 years of work there with a good team, so hope you continue to post updates, and am looking forward to seeing how this project progresses.

Good luck!

(oh, and you forgot screenshots. :P )

Daniel Buckmaster   (Aug 04, 2008 at 19:59 GMT)
Heh, if I must...

It's stock TGE and TMK - but then again, I'm only up to version 0.05 as of yesterday :P.
Projectiles are in progress...

Anyway, thanks! I'd better start looking for a team, then... ;P
Edited on Aug 04, 2008 20:03 GMT

You must be a member and be logged in to either append comments or rate this resource.