Modular Game Objects

* See also Object
* See also Player Created Assets
* See also Flexible_Game_Terrain_Design
* See also Building_Block
* See also Templates
* See also Player Creation Contests
* See also Buildings_and_Building_Blocks
* See also Tap_into_the_Players_Creativity
Example of Modular 'Object' Data for the Game Object : "The Chair" :
--- --- --- --- --- ---
Note How the Objects/Props properties (below) affect various game situations and interactions with Players/NPCs and game mechanics. Many of the values ( & groups of values ) are Optional, and only are present for the Object if relevant to the objects functionality. Some Attributes ( data defining something about the game object ) come from 'Templates' ( like Material:Wood below ), so are shared between many objects. A hierarchy of Templates further reduces the duplication of the same data. 
For Instances ( the unique set of the data for an operational game Object ), some data intended as variable ( allowing game object variants ) is built up in memory uniquely via equations/logic. Other data resides commonly in shared Templates ( which saves alot of memory space -- facilitating having the greatly detailed objects of the MMORGP ). Large data sub-assets like commonly-used textures/animations/sounds are held as one copy in memory, and the Object has only a 'pointer' to them.
ADD A DIAGRAM HERE]
--- --- ---
Attributes :
Static Attributes : list ( Objects properties that determine how it behaves in the Game )
* Name: ( specific Template identity ) "Generic_Wooden_Chair: 
* Description: (sort keywords) "typical simple chair, made of wood, no wheels, varnish finish"
* Typical Environment: ( subsets of normal placements ) : furnishing, office
* Normal Orientation plane: ( X-Y (floor), Ceiling, Wall ) : Floor
* Material: ( determines properties from the material(s) the object is composed of ) : Wood & Fabric ?
** 'Wood' Material template ( inherited Attributes ) :
*** Density: ( 0.8 g/cc - wood usually less dense than water -- will float in water )
*** Combustible: Yes
*** Explosive: No
*** BTU content: ( how long/much will burn ) : 5
*** Electrical conductive: No
*** Water resistant: Mostly not ( wood damages over time in water )
*** Durability : Average
* Overall Weight: 35 lb ( function of size and density - used for lift/move/throw calculations )
* Appearance (static data set):
** Mesh - '3D' shape of object ( made up of points/triangles Includes UV match up data with the 'Textures' ):
** SHAPE - think of a typical simple wooden chair shape with minimal detail and no fancy decorations.
** Mesh for things like human figures have >20 sub-parts that are rendered/animated separately and some machines have working parts ( including parts that can be removed that can exist a independent objects ).
** Optional 'damaged' mesh: ( shape if object damaged/deformed ) : NULL
** Optional 'machine repair' mesh ( for machines which have an interior with components and sub components ) : NULL
** Textures: the '2D' color picture used with Mesh to define objects surface detail
** State textures Ruined/dirty/burn/new - different looks depending on what state the object is in
*** Textures colored to reflect the chairs state 'new colors' vs soiled/dirty vs burnt/charred look
*** the textures include the exterior and interior ( if it has one - containers and machines that open for repairs )
** Bump Map: ( used to fake detail shadows and give object details a much more complicated '3D' mesh could provide ):
** Breakdown Pieces: Used when Object is broken or 'exploded' or when being constructed/reconstructed (parts)
** List of Subdivided object mesh for each 'piece' : Back piece, seat, 2 front legs w(often is separate 'triangle lists' off the original mesh ... can be separate meshes)
** Start Position for pieces ( list, offsets on original whole so the can fly/drop apart when object broken ):
** Effect Tie Points ( list, points where burn smoke/flames or leak water-drip/stream would be shown and what patterns )
** Associated Particle Effects: ( functions defining what 'emanations' come off/out of Object based on scripting ) : NULL
** Hold Points ( list of points on object where hands usually hold it - for 'carry' action rendering ) : Null
-
* Animations : ( list of Animation sequences used with scripting/standard reactions that move 3D mesh ): NULL -- passive
** Many objects have no mechanical behavior -- a rocking chair would have a rocking 'motion' defined (it effectively becomes a 'vehicle' modifying the objects sitting in it)
** Movement animations ( motion vector sequences ):
** Open/close animations ( for containers and machines that open for repairs ):
** Firing animation:
** Activation animation:
** 'On' animation (continuous):
* Sounds: ( list of sounds used with behaviors/reactions ): ??
* Attributes that define an objects functionality in game (static):
** Freestanding: Yes
** Fastenable : ( does it bolt to mounting surface ) : No
** Utility Usage : ( types or utility hookups the object requires to function ) : NULL
** Electrical/water/hear/air/drainage/Comm/ Functionality: NULL
** Structural Usage: ( part used to form terrain structures ) :NULL
** Pattern designation ( standard structural slot it fits ) : Null
** Utility features: ( data having to do with utility functionality, utility hookups, etc... ) :
** Interface Surfaces: ( list of openings that can be matched up to adjacent structures ): Null
** Damage maximum : ( 'HitPoints' usually effects function ability - often used for 'wear' ): 15
*** Non-functional Damage: ( damage that object becomes none functional ) : 8 ( loses structural integrity at about half HP )
** Self-repair rate ( HP/minute or somesuch ) : 0
** Quality: ( imparts extra value/usability/durability ) : Average
** Fragility: ( how easily the object comes apart )
** Tool Usage ( what tool operations can be performed and what efficiency )
** Drag coefficient ( for transport like having wheels allowing easy dragging as a container or just moving ): 0
** Skill operations: ( what tasks tool used for - list of pointers to task templates ) NULL ? or 'stand on object skill' ??
** Fuel capacity: Null
** 'Make Object' Creation/Mutation ability ( for Fabrication tools ): NULL
*** Available Recipes for Fabrication 'conversions' (a list): NULL
*** Make' animation :
*** Fabrication/Repair Recipe: List of parts/materials needed and work types to be done ( indicates Tools/Skills ) for resulting items 'built':
** IsStackable ( Objects can be put on top of this Object ) :
*** Player can stand ON : Yes
*** Objects can be placed on : Yes
*** Standing Surface ( one or more rectangles defining a surface a player could 'stand on' ) data- seat surface rectangle
*** Stability Factor ( how easy for player to stand on and not fall off of - try to stand on a rocking chair ) : 90%
*** Sittable: ( Player/NPC can sit on - use std 'sit' action ) : Yes
*** Support capacity: ( excess force damage calculated from materials composed of ) : 150 Kg
** IsVehicle: ( use to transport NPCs or items ) : NULL
*** Vehicle control script : NULL
*** Trackage Use: ( type of "track" object this vehicle follows ) :
*** Max Speed :
*** Max Braking :
** IsContainer: ( ability to contain other objects ) : NULL
*** Opening action script : ( actions to open/lock specifics if any ) : NULL
*** Volume limit :
*** Internal dimensions X Y Z : ( use to limit what shape/size objects can be contained ) :
*** Max weight limit :
*** Liquid Holding: ( can object hold a liquid )
** Projectile Action: ( ability to project projectiles ) :NULL
*** Movement type : ( roll on ground/fly/bounce/float)
*** Velocity Imparted :
*** Expenditure Volume : How far projection extends ( used with flamethrower like Objects )
-
* Mini-game Associated: ( template pointer list of existing Mini_Games|Mini-Games which can operate on this Object ) : NULL
-
* Behavior data ( static pointers to shared scripts ) :
** Behavior Scripts:
*** Active behaviors: NULL -- passive - no active behavior
*** Polling Scan script ( 'smart' object will react to nearby objects proximity ) : NULL
*** Functional Check script ( checks if object that interacts is operational - like power is live thru a wires connection ) : NULL
*** Creation variation script: ( script than can mutate attributes to make Object a little different from others ):
*** Installation script ( rules/decisions of proper placement for 'auto generation' and NPC placement actions )
** Reaction Scripts: ( scripts for particular object actions/reactions - controls rendering/results )
*** Explode
*** Burn
*** Electrified
*** Crushed
*** Thrown
*** Struck
*** Fall
*** Activated
*** Aimed&Fired(weapon)
*** Opened (containers)
*** Hacked
*** Moving
*** etc ...
-
* Instance (changeable) data: ( some standard states, many would be custom states used by specific scripting as local persistent state data ). This is the data for a SPECIFIC object :
** Appearance mode: ( broken/dirty/destroyed/normal/etc ... ) : normal
** Sub-component positions: List ( movable sub-parts like a figures body parts ) :
** Current Position in world: ( position in game world X/Y/Z and possibly pointer to 'building block' section it is part of )
** Current Orientation ( which way object is facing ) :
*** Current Damage ( HitPoints having been inflicted ) : 0
*** On/off state: NULL
*** Currently Contained by : ( what object is the immediate container, Object this object is inside of ) : ??? the building section ( chair is on the floor )
*** Open/Closed state : Null
*** List of objects contained ( pointers to objects, if this is a container ) : NULL
*** Fuel contained : NULL
*** Adjacent connected objects, list ( used for structural parts including 'building blocks' ) : Null
*** Physics: ( data specifying object in motion):
** Current Speed : 0
** Current Move Vector : 0
** Current rotational vector : ( if object is spinning ) : 0
** Center of mass position X/Y/Z:
*** Script Working data: ( working data for continuously running scripts ) : NULL
** List of Pointers to script specific data sets
** Quest Linkage : (would be set by a quest) : NULL , (( the infamous 'get me a chair' quest ?? ))
*** Temporary Effects applied to this object, list: ( effects caused by previous actions/being acted upon ) : null
** Effect data ( data particular to each effect type ) :
*** Playing sound:
*** Particle effect state data
--- --- ---
Inheritance - A Shortcut :
Many of these Attributes can be 'inherited' from "Attribute Templates" which define common sets of attribute settings used to facilitate easy composition in the creation Tools. Many attributes are 'NULL', meaning that the attribute is not used because the Object type lacks that functionality.
Object would be 'instanced' from its set of defining templates and later if it was affected by NPC/Player actions then would get attributes changed to reflect results of all actions (cumulative).
Objects (like NPCs) would have MANY times as much data as this ( largely to do with their AI behavior ).
This is just a sample of possible Attributes, the actual number/specifics are dependent on the details of the game mechanics and various extensions.
---
Data Extraction from BS1/BS2 game info :
* Meshes may have to be cut from static 'level' meshes and patched to make them have all sides.
* Or there may be the original individual objects as separate data ( ones that were placed many spots )
* Textures specifically for an object may have to be cut from larger shared texture files into files for just the object and mesh UV values adjusted. ( then the alternate textures other than dirty/ruined would have to be repainted )
* Animations of Machines ( for moving parts -- Keyframe Keyframe animation uses a sequence of actual frames of the complete object shape mesh and Tween between each frame for the drawn motions. mesh or "Bone" Animation "Bone" Animation - Individual limbs and pieces of the body/structure (a skeleton) are manipulated with offsets/rotations/translations using matrix math upon a schedule/timeline of movements to action the object's animations data )
* Sounds probably already exist as separate assets
* Chunks of buildings to be cut up along obvious division lines. Those used for auto-generation need to be made interchangeable. Additional work to cut out sections of inner walls and other details to modularize -- for Player interchanging/replacing them ( as repairs or mutated scenery )
* You could see that making this a 'metal_chair' would take very few attribute modifications ( besides the shape and texture )
Example - Reuse of Persephone :
* Not all of it dropped into the trench in BS2 ... Part that wasn't blown may remain as part of the City terrain ( map ).
* Parts of the building that did go boom in-game can be recycled as generic industrial site, etc ...
* Unique Objects/details extracted from that area are useful for the rest of Rapture
--- --- ---
Modularize THIS Sucka !! :
As the MMORPG's whole design is modular, it would be possible to build different game experiences within the same World. Players would operate under different play-style game mechanics.
Some Players just like to be 'Tourists', others to be 'Killers', others 'Role Players', many 'Explorers', some 'Crafters'/'Fabricators', and many want to do everything. And with this games major feature, they also would want to see Assets they created in-place/made-use-of in the Game World. Concentrations in various activity areas could exist which would minimize the tediousness of certain other game aspects ( ie- 'Tourists' could walk around as neutrals without being accosted by every bothersome Splicer or mutated rat ). At the same time, many elements like the Flashbacks don't impact any Player's Avatar ( except the 'Achievements', so are available to all ).
Different play-styles could be accommodated, but precautions must be made so that the different modes aren't used as loopholes ( Thus there would be no switching between modes, and a Player's character would have to start entirely over if they wanted to switch - Obviously detailed explanations/descriptions of this would have to be provided to let the Player make an informed decision ).
--- --- ---
REUSEABILITY !!!!
Another aspect for the development effort required to implement the 'Player Created Asset' MMORPG game model ---- The Server/Client mechanisms and tools can be REUSED for creating other similar MMORPG games ( Something like half the work would be re-applyable to a second/third/etc game of a similar type ).
Example - a X-COM MMORPG game .
Again, an important factor is the production savings ( $$$ ) by using the Player Created game Assets/content ( which IS one of the MAJOR expenses in these MMORPG games ), and making possible MMORPG games in niche genres that companies wont touch right now as financially nonviable.
SO much the better if the company already has a 'seed set' of Assets extracted from the existing Solo games to install in the core/pre-built areas of the initial game world map ( like from BioShock, with the 2 games and a bunch of DLC materials ).
--- --- --- --- ---
.
.