hedgewars/uTypes.pas
changeset 8795 b5b79a8f9354
parent 8774 39754516eee6
child 8833 c13ebed437cb
child 9071 df85fad2c7f7
equal deleted inserted replaced
8793:43e106417a05 8795:b5b79a8f9354
   218     PHedgehog = ^THedgehog;
   218     PHedgehog = ^THedgehog;
   219     PTeam     = ^TTeam;
   219     PTeam     = ^TTeam;
   220     PClan     = ^TClan;
   220     PClan     = ^TClan;
   221 
   221 
   222     TGearStepProcedure = procedure (Gear: PGear);
   222     TGearStepProcedure = procedure (Gear: PGear);
       
   223 // So, you're here looking for variables you can (ab)use to store some gear state?
       
   224 // Not all members of this structure are created equal. Comments below are my take on what can be used for what in the gear structure.
   223     TGear = record
   225     TGear = record
   224             NextGear, PrevGear: PGear;
   226 // Don't ever override these.
   225             Active: Boolean;
   227             NextGear, PrevGear: PGear;  // Linked list
   226             AdvBounce: Longword;
   228             Z: Longword;                // Z index. For rendering. Sets order in list
   227             Invulnerable: Boolean;
   229             Active: Boolean;            // Is gear Active (running step code)
   228             RenderTimer: Boolean;
   230             Kind: TGearType;
   229             AmmoType : TAmmoType;
   231             doStep: TGearStepProcedure; // Code the gear is running
   230             State : Longword;
   232             AmmoType : TAmmoType;       // Ammo type associated with this kind of gear
   231             X : hwFloat;
   233             RenderTimer: Boolean;       // Will visually display Timer if true
       
   234             Target : TPoint;            // Gear target. Will render in uGearsRender unless a special case is added
       
   235             AIHints: LongWord;          // hints for ai.
       
   236             LastDamage: PHedgehog;      // Used to track damage source for stats
       
   237             CollisionIndex: LongInt;    // Position in collision array
       
   238             Message: LongWord;          // Game messages are stored here. See gm bitmasks in uConsts
       
   239             uid: Longword;              // Lua use this to reference gears
       
   240 // Strongly recommended not to override these.  Will mess up generic operations like portaling
       
   241             X : hwFloat;              // X/Y/dX/dY are position/velocity. People count on these having semi-normal values
   232             Y : hwFloat;
   242             Y : hwFloat;
   233             dX: hwFloat;
   243             dX: hwFloat;
   234             dY: hwFloat;
   244             dY: hwFloat;
   235             Target : TPoint;
   245             State : Longword;        // See gst bitmask values in uConsts
   236             Kind: TGearType;
   246             PortalCounter: LongWord; // Necessary to interrupt portal loops.  Not possible to avoid infinite loops without it.
   237             Pos: Longword;
   247 // Don't use these if you're using generic movement like doStepFallingGear and explosion shoves. Generally recommended not to use.
   238             doStep: TGearStepProcedure;
   248             Radius: LongInt;     // Radius. If not using uCollisions, is usually used to indicate area of effect
   239             Radius: LongInt;
   249             CollisionMask: Word; // Masking off Land impact  FF7F for example ignores current hog and crates
   240             Angle, Power : Longword;
   250             AdvBounce: Longword; // Triggers 45° bounces. Is a counter to avoid edge cases
   241             DirAngle: real;
       
   242             Timer : LongWord;
       
   243             Elasticity: hwFloat;
   251             Elasticity: hwFloat;
   244             Friction  : hwFloat;
   252             Friction  : hwFloat;
   245             Density   : hwFloat;
   253             Density   : hwFloat; // Density is kind of a mix of size and density. Impacts distance thrown, wind.
   246             Message, MsgParam : Longword;
   254             ImpactSound: TSound; // first sound, others have to be after it in the sounds def.
   247             Hedgehog: PHedgehog;
   255             nImpactSounds: Word; // count of ImpactSounds.
       
   256 // Don't use these if you want to take damage normally, otherwise health/damage are commonly used for other purposes
       
   257             Invulnerable: Boolean;
   248             Health, Damage, Karma: LongInt;
   258             Health, Damage, Karma: LongInt;
   249             CollisionIndex: LongInt;
   259 // DirAngle is a "real" - if you don't need it for rotation of sprite in uGearsRender, you can use it for any visual-only value
   250             Tag: LongInt;
   260             DirAngle: real;
   251             Tex: PTexture;
   261 // These are frequently overridden to serve some other purpose
   252             Z: Longword;
   262             Pos: Longword;           // Commonly overridden.  Example use is posCase values in uConsts.
   253             CollisionMask: Word;
   263             Angle, Power : Longword; // Used for hog aiming/firing.  Angle is rarely used as an Angle otherwise.
   254             LinkedGear: PGear;
   264             Timer : LongWord;        // Typically used for some sort of gear timer. Time to explosion, remaining fuel...
   255             FlightTime: Longword;
   265             Tag: LongInt;            // Quite generic. Variety of uses.
   256             uid: Longword;
   266             FlightTime: Longword;    // Initially added for batting of hogs to determine homerun. Used for some firing delays
   257             ImpactSound: TSound; // first sound, others have to be after it in the sounds def.
   267             MsgParam: LongWord;      // Initially stored a set of messages. So usually gm values like Message. Frequently overriden
   258             nImpactSounds: Word; // count of ImpactSounds
   268 // These are not used generically, but should probably be used for purpose intended. Definitely shouldn't override pointer type
   259             SoundChannel: LongInt;
   269             Tex: PTexture;          // A texture created by the gear. Shouldn't use for anything but textures
   260             PortalCounter: LongWord;  // Hopefully temporary, but avoids infinite portal loops in a guaranteed fashion.
   270             LinkedGear: PGear;      // Used to track a related gear. Portal pairs for example.
   261             AIHints: LongWord; // hints for ai. haha ^^^^^^ temporary, sure
   271             Hedgehog: PHedgehog;    // set to CurrentHedgehog on gear creation
   262             IceTime: Longint; //time of ice beam with object some interaction  temporary
   272             SoundChannel: LongInt;  // Used to track a sound the gear started
   263             IceState: Longint; //state of ice gun temporary
       
   264             LastDamage: PHedgehog;
       
   265             end;
   273             end;
   266     TPGearArray = array of PGear;
   274     TPGearArray = array of PGear;
   267     PGearArrayS = record
   275     PGearArrayS = record
   268         size: LongWord;
   276         size: LongWord;
   269         ar: ^TPGearArray;
   277         ar: ^TPGearArray;
   427             sidDrillStrike, sidSnowball, sidNothing, sidTardis,
   435             sidDrillStrike, sidSnowball, sidNothing, sidTardis,
   428             {sidStructure,} sidLandGun, sidIceGun, sidKnife);
   436             {sidStructure,} sidLandGun, sidIceGun, sidKnife);
   429 
   437 
   430     TMsgStrId = (sidStartFight, sidDraw, sidWinner, sidVolume, sidPaused,
   438     TMsgStrId = (sidStartFight, sidDraw, sidWinner, sidVolume, sidPaused,
   431             sidConfirm, sidSuddenDeath, sidRemaining, sidFuel, sidSync,
   439             sidConfirm, sidSuddenDeath, sidRemaining, sidFuel, sidSync,
   432             sidNoEndTurn, sidNotYetAvailable, sidRoundSD, sidRoundsSD, sidReady, 
   440             sidNoEndTurn, sidNotYetAvailable, sidRoundSD, sidRoundsSD, sidReady,
   433             sidBounce1, sidBounce2, sidBounce3, sidBounce4, sidBounce5, sidBounce,
   441             sidBounce1, sidBounce2, sidBounce3, sidBounce4, sidBounce5, sidBounce,
   434             sidMute);
   442             sidMute);
   435 
   443 
   436     // Events that are important for the course of the game or at least interesting for other reasons
   444     // Events that are important for the course of the game or at least interesting for other reasons
   437     TEventId = (eidDied, eidDrowned, eidRoundStart, eidRoundWin, eidRoundDraw,
   445     TEventId = (eidDied, eidDrowned, eidRoundStart, eidRoundWin, eidRoundDraw,
   438             eidNewHealthPack, eidNewAmmoPack, eidNewUtilityPack, eidTurnSkipped,
   446             eidNewHealthPack, eidNewAmmoPack, eidNewUtilityPack, eidTurnSkipped,
   439             eidHurtSelf, eidHomerun, eidGone);
   447             eidHurtSelf, eidHomerun, eidGone);
   440 
   448 
   441     TGoalStrId = (gidCaption, gidSubCaption, gidForts, gidLowGravity, gidInvulnerable,
   449     TGoalStrId = (gidCaption, gidSubCaption, gidForts, gidLowGravity, gidInvulnerable,
   442             gidVampiric, gidKarma, gidKing, gidPlaceHog, gidArtillery,
   450             gidVampiric, gidKarma, gidKing, gidPlaceHog, gidArtillery,
   443             gidSolidLand, gidSharedAmmo, gidMineTimer, gidNoMineTimer, 
   451             gidSolidLand, gidSharedAmmo, gidMineTimer, gidNoMineTimer,
   444             gidRandomMineTimer, gidDamageModifier, gidResetHealth, gidAISurvival, 
   452             gidRandomMineTimer, gidDamageModifier, gidResetHealth, gidAISurvival,
   445             gidInfAttack, gidResetWeps, gidPerHogAmmo, gidTagTeam);
   453             gidInfAttack, gidResetWeps, gidPerHogAmmo, gidTagTeam);
   446 
   454 
   447     TLandArray = packed array of array of LongWord;
   455     TLandArray = packed array of array of LongWord;
   448     TCollisionArray = packed array of array of Word;
   456     TCollisionArray = packed array of array of Word;
   449     TPreview  = packed array[0..127, 0..31] of byte;
   457     TPreview  = packed array[0..127, 0..31] of byte;