+---------------------------------------------------------------------------+ | | | Zoom out | | objects | | | | | | in | | | | | | orbit | | Primary object | | | | | | | | | | | | objects | | in orbit | | | | | | | | | +---------------------------------------------------------------------------+ +---------------------------------------------------------------------------+ | _________ __________ | | NAME OF PRIMARY OBJECT | Surface | Inside | | |_____________________________| |__________|________________________| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | +---------------------------------------------------------------------------+ Resource class: Name Resource class Resource: Resource class Name Density Properties... Object: Class Name Structure list (in class order): Resource Contents (resources) Contents (objects) Surface list: X, Y, Object Components list (in class order): Object Orbit (objects) Script Class: Name Interface list: Interface Structure list: Role name, Volume, Resource Class Manufacturing scale requirement Volume Capacity volume Footprint width Footprint height Surface width Surface height Surface type (wrap-around, flat) Possible components list: Name, Interface Minimum manufacturing scale ability Maximum manufacturing scale ability Abilities Name, Action, Arguments Default script Interface: Name Pipes list: Capacity (volume), Resource class ------------------------------------------------------------------------ Void Assembler ============== Registers --------- Statements ---------- invoke register executes register jump address moves execution pointer to address jump-if register address moves execution pointer to address if register is non-zero set register1 register2 sets register1 to register2 set register1 value sets register1 to value negate register1 sets register1 to zero if register1 is non-zero, else one. add register1 register2 adds register2 to register1 and leaves the total in register1 subtract register1 register2 substracts register2 from register1 and leaves the total in register1 multiply register1 register2 multiplies register1 by register2 and leaves the total in register1 divide register1 register2 divides register1 by register2 and leaves the total in register1 modulus register1 register2 divides register1 by register2 and leaves the remainder in register1 -------------------------------------------------------------------------------- Requirements: Open ended "thing" creation Open ended resources Interaction of resources Scriptable things MODEL Resource: Name Density Strength Phase Combustion threshold temperature Combustion resulting temperature Roles: * Structural Integrity (if < Maximum Volume, object falls apart) * Armour * Containment * Internal Object Class: Shape Footprint (automatically calculated) Surface Area (automatically calculated) Blueprint: list of: ID Role Maximum Volume Maximum Phase (Solid, Liquid, Gaseous, Plasma) Expected Parts: list of: ID Name Max Volume Shape Object External Volume (automatically calculated) Internal Volume (automatically calculated) Script Object: Mass (automatically calculated) Position Object Class Resources: list of: ID Mass Resource Parts: list of: ID Object Contents: list of: Object Outside: list of: Object Sample script for ship: connect fuel to tank.fuel connect keyboard to Sample script for tank: connect fuel to contents Sample script for engine: variable $power is float initially 0.0 regularly: move upto (capacity * $power) from parent.fuel into this combust into parent as propulsion empty into parent.waste If missing port is pulled, nothing is moved (nothing is added). If missing port is pushes, nothing is moved (stuff remains where it is). If stuff is pushed to non-existent parent, it is pushed onto surface ------------------------------------------------------------------------ Basic principles of the universe. A player controls the empire of a hive mind.