hedgewars/uConsts.pas
branchui-scaling
changeset 15288 c4fd2813b127
parent 13394 24b531dcebe7
parent 15228 32678e65b25e
equal deleted inserted replaced
13395:0135e64c6c66 15288:c4fd2813b127
    27 
    27 
    28 const
    28 const
    29     HDPIScaleFactor     =  1;
    29     HDPIScaleFactor     =  1;
    30 
    30 
    31     // application return codes
    31     // application return codes
    32     HaltNoError         =  0;
    32     HaltNoError         =  0; // Hedgewars quits normally
    33 
    33 
    34     // error codes are placed in range 50-99 because that way then don't overlap with run-time errors of pascal
    34     // error codes are placed in range 50-99 because that way then don't overlap with run-time errors of pascal
    35     // see https://www.freepascal.org/docs-html/user/userap4.html
    35     // see https://www.freepascal.org/docs-html/user/userap4.html
    36     HaltUsageError      =  51;
    36     HaltUsageError      =  51; // Hedgewars was invoked incorrectly (e.g. bad command-line parameter)
    37     HaltFatalError      =  52;
    37     HaltFatalError      =  52; // Fatal internal error. See logs for more. Also reports error to frontend
    38     HaltStartupError    =  53;
    38     HaltStartupError    =  53; // Failure loading critical resources
    39     HaltFatalErrorNoIPC =  54;
    39     HaltFatalErrorNoIPC =  54; // Fatal internal error, IPC socket is not available
    40 
    40 
    41     // for automatic tests
    41     // for automatic tests
    42     HaltTestSuccess     =  0;
    42     HaltTestSuccess     =  0;  // Test result: success
    43     HaltTestFailed      =  60;
    43     HaltTestFailed      =  60; // Test result: failed
    44     HaltTestLuaError    =  61;
    44     HaltTestLuaError    =  61; // Lua runtime error
    45     HaltTestUnexpected  =  62;
    45     HaltTestUnexpected  =  62; // Unexpected error
    46 
    46 
    47 
    47 
       
    48     // maximum ScreenFadeValue
    48     sfMax = 1000;
    49     sfMax = 1000;
    49 
    50 
    50     // message constants
    51     // log message constants
    51     errmsgCreateSurface   = 'Error creating SDL surface';
    52     errmsgCreateSurface   = 'Error creating SDL surface';
    52     errmsgTransparentSet  = 'Error setting transparent color';
    53     errmsgTransparentSet  = 'Error setting transparent color';
    53     errmsgUnknownCommand  = 'Unknown command';
    54     errmsgUnknownCommand  = 'Unknown command';
    54     errmsgUnknownVariable = 'Unknown variable';
    55     errmsgUnknownVariable = 'Unknown variable';
    55     errmsgIncorrectUse    = 'Incorrect use';
    56     errmsgIncorrectUse    = 'Incorrect use';
    62     msgFailed            = 'failed';
    63     msgFailed            = 'failed';
    63     msgFailedSize        = 'failed due to size';
    64     msgFailedSize        = 'failed due to size';
    64     msgGettingConfig     = 'Getting game config...';
    65     msgGettingConfig     = 'Getting game config...';
    65 
    66 
    66     // camera movement multipliers
    67     // camera movement multipliers
    67     cameraKeyboardSpeed : ShortInt = 10;
    68     cameraKeyboardSpeed     : LongInt = 10;
       
    69     cameraKeyboardSpeedSlow : LongInt =  3;
    68 
    70 
    69     // color constants
    71     // color constants
    70     cWhiteColorChannels : TSDL_Color = (r:$FF; g:$FF; b:$FF; a:$FF);
    72     cWhiteColorChannels : TSDL_Color = (r:$FF; g:$FF; b:$FF; a:$FF);
    71     cNearBlackColorChannels : TSDL_Color = (r:$00; g:$00; b:$10; a:$FF);
    73     cNearBlackColorChannels : TSDL_Color = (r:$00; g:$00; b:$10; a:$FF);
    72 
    74     cInvertTextColorAt    : Byte = 64;
    73     cWhiteColor           : Longword = $FFFFFFFF;
    75 
    74     cYellowColor          : Longword = $FFFFFF00;
    76     cWhiteColor           : Longword = $FFFFFFFF; // white
    75     cNearBlackColor       : Longword = $FF000010;
    77     cNearBlackColor       : Longword = $FF000010; // nearly black
       
    78 
       
    79     capcolDefault         : Longword = $FFFFFFFF; // default caption color
       
    80     capcolSetting         : Longword = $FFCCCCCC; // caption color for changing client setting like volume or auto camera
       
    81     capcolDefaultLua      : Longword = $FFFFFFFF; // capcolDefault for Lua
       
    82     capcolSettingLua      : Longword = $CCCCCCFF; // capcolSetting for Lua
       
    83 
       
    84     cCentralMessageColor  : Longword = $FFFFFF00; // color of message in center of screen like quit or pause
    76 
    85 
    77 {$WARNINGS OFF}
    86 {$WARNINGS OFF}
    78     cAirPlaneSpeed: hwFloat = (isNegative: false; QWordValue:   3006477107); // 1.4
    87     cAirPlaneSpeed: hwFloat = (isNegative: false; QWordValue:   3006477107); // 1.4
    79     cBombsSpeed   : hwFloat = (isNegative: false; QWordValue:    429496729);
    88     cBombsSpeed   : hwFloat = (isNegative: false; QWordValue:    429496729);
    80 {$WARNINGS ON}
    89 {$WARNINGS ON}
   110     tpHighest     = 1.00;
   119     tpHighest     = 1.00;
   111 
   120 
   112 // To allow these to layer, going to treat them as masks. The bottom byte is reserved for objects
   121 // To allow these to layer, going to treat them as masks. The bottom byte is reserved for objects
   113 // TODO - set lfBasic for all solid land, ensure all uses of the flags can handle multiple flag bits
   122 // TODO - set lfBasic for all solid land, ensure all uses of the flags can handle multiple flag bits
   114 // lfObject and lfBasic are only to be different *graphically*  in all other ways they should be treated the same
   123 // lfObject and lfBasic are only to be different *graphically*  in all other ways they should be treated the same
   115     lfBasic          = $8000;  // black
   124     lfBasic          = $8000;  // normal destructible terrain (mask.png: black)
   116     lfIndestructible = $4000;  // red
   125     lfIndestructible = $4000;  // indestructible terrain (mask.png: red)
   117     lfObject         = $2000;  // white
   126     lfObject         = $2000;  // destructible terrain, land object (mask.png: white)
   118     lfDamaged        = $1000;  //
   127     lfDamaged        = $1000;  //
   119     lfIce            = $0800;  // blue
   128     lfIce            = $0800;  // icy terrain (mask.png: blue)
   120     lfBouncy         = $0400;  // green
   129     lfBouncy         = $0400;  // bouncy terrain (mask.png: green)
   121     lfLandMask       = $FF00;  // upper byte is used for terrain, not objects.
   130     lfLandMask       = $FF00;  // upper byte is used for terrain, not objects.
   122 
   131 
   123     lfCurrentHog     = $0080;  // CurrentHog.  It is also used to flag crates, for convenience of AI.  Since an active hog would instantly collect the crate, this does not impact play
   132     lfCurHogCrate    = $0080;  // CurrentHedgehog, and crates, for convenience of AI.  Since an active hog would instantly collect the crate, this does not impact playj
   124     lfNotCurrentMask = $FF7F;  // inverse of above. frequently used
   133     lfNotCurHogCrate = $FF7F;  // inverse of above. frequently used
   125     lfObjMask        = $007F;  // lower 7 bits used for hogs and explosives and mines 
   134     lfObjMask        = $007F;  // lower 7 bits used for hogs and explosives and mines 
   126     lfNotObjMask     = $FF80;  // inverse of above.
   135     lfNotObjMask     = $FF80;  // inverse of above.
   127 
   136 
   128 // breaking up hogs would makes it easier to differentiate 
   137 // breaking up hogs would makes it easier to differentiate 
   129 // colliding with a hog from colliding with other things
   138 // colliding with a hog from colliding with other things
   134     lfNotHHObjShift  = 4;
   143     lfNotHHObjShift  = 4;
   135     lfNotHHObjSize   = lfNotHHObjMask shr lfNotHHObjShift;  
   144     lfNotHHObjSize   = lfNotHHObjMask shr lfNotHHObjShift;  
   136 
   145 
   137     // lower byte is for objects.
   146     // lower byte is for objects.
   138     // consists of 0-127 counted for object checkins and $80 as a bit flag for current hog.
   147     // consists of 0-127 counted for object checkins and $80 as a bit flag for current hog.
   139     lfAllObjMask     = $00FF;  // lfCurrentHog or lfObjMask
   148     lfAllObjMask     = $00FF;  // lfCurHogCrate or lfObjMask
   140 
   149 
   141 
   150     lfAll            = $FFFF;  // everything
   142 
   151 
   143     cMaxPower     = 1500;
   152 
   144     cMaxAngle     = 2048;
   153 
       
   154     cMaxPower     = 1500; // maximum power value for ammo that powers up
       
   155     cMaxAngle     = 2048; // maximum positive value for Gear angle
   145     cPowerDivisor = 1500;
   156     cPowerDivisor = 1500;
   146 
   157 
   147     MAXNAMELEN = 192;
   158     MAXNAMELEN = 192;
   148     MAXROPEPOINTS = 3840;
   159     MAXROPEPOINTS = 3840;
       
   160     MAXROPELAYERS = 16;
   149 
   161 
   150     {$IFNDEF PAS2C}
   162     {$IFNDEF PAS2C}
   151     // some opengl headers do not have these macros
   163     // some opengl headers do not have these macros
   152     GL_BGR              = $80E0;
   164     GL_BGR              = $80E0;
   153     GL_BGRA             = $80E1;
   165     GL_BGRA             = $80E1;
   155     GL_TEXTURE_PRIORITY = $8066;
   167     GL_TEXTURE_PRIORITY = $8066;
   156     {$ENDIF}
   168     {$ENDIF}
   157 
   169 
   158     cVisibleWater       : LongInt = 128;
   170     cVisibleWater       : LongInt = 128;
   159     cTeamHealthWidth    : LongInt = 128;
   171     cTeamHealthWidth    : LongInt = 128;
       
   172     cGearContourThreshold : LongInt = 179; // if water opacity is higher than this, draw contour for some gears when in water
   160 
   173 
   161     cifRandomize = $00000001;
   174     cifRandomize = $00000001;
   162     cifTheme     = $00000002;
   175     cifTheme     = $00000002;
   163     cifMap       = $00000002; // either theme or map (or map+theme)
   176     cifMap       = $00000002; // either theme or map (or map+theme)
   164     cifAllInited = cifRandomize or cifTheme or cifMap;
   177     cifAllInited = cifRandomize or cifTheme or cifMap;
   165 
   178 
   166     RGB_LUMINANCE_RED    = 0.212671;
   179     RGB_LUMINANCE_RED    = 0.212671;
   167     RGB_LUMINANCE_GREEN  = 0.715160;
   180     RGB_LUMINANCE_GREEN  = 0.715160;
   168     RGB_LUMINANCE_BLUE   = 0.072169;
   181     RGB_LUMINANCE_BLUE   = 0.072169;
   169 
   182 
   170     cMaxTeams        = 8;
   183     // hedgehog info
   171     cMaxHHIndex      = 7;
   184     cMaxTeams        = 8; // maximum number of teams
   172     cMaxHHs          = 48;
   185     cMaxHHIndex      = 7; // maximum hedgehog index (counting starts at 0)
       
   186                           // NOTE: If you change cMaxHHIndex, also change cMaxHogHealth!
       
   187     cMaxHHs          = cMaxTeams * (cMaxHHIndex+1); // maximum number of hogs
       
   188 
       
   189     cClanColors      = 9; // number of possible clan colors
   173 
   190 
   174     cMaxEdgePoints = 32768;
   191     cMaxEdgePoints = 32768;
   175 
   192 
   176     cHHRadius = 9;
   193     cBorderWidth = 6; // width of indestructible border
       
   194                       // width of 3 allowed hogs to be knocked through with grenade
       
   195 
       
   196     cHHRadius = 9; // hedgehog radius
   177     cHHStepTicks = 29;
   197     cHHStepTicks = 29;
   178 
   198 
       
   199     cMaxHogHealth = 268435455; // maximum hedgehog health
       
   200     // cMaxHogHealth was calculated by: High(LongInt) div (cMaxHHIndex+1);
       
   201 
       
   202     ouchDmg = 55;        // least amount of damage a hog must take in one blow for sndOuch to play
       
   203 
       
   204     // Z levels
   179     cHHZ = 1000;
   205     cHHZ = 1000;
   180     cCurrHHZ = Succ(cHHZ);
   206     cCurrHHZ = Succ(cHHZ);
   181 
   207 
   182     cBarrelHealth = 60;
   208     // some gear constants
   183     cShotgunRadius = 22;
   209     cBarrelHealth = 60;  // initial barrel health
   184     cBlowTorchC    = 6;
   210     cShotgunRadius = 22; // radius of land a shotgun shot destroys
   185     cakeDmg =   75;
   211     cBlowTorchC    = 6;  // blow torch gear radius component (added to cHHRadius to get the full radius)
   186 
   212     cakeDmg =   75;      // default cake damage
       
   213 
       
   214     // key stuff
   187     cKeyMaxIndex = 1600;
   215     cKeyMaxIndex = 1600;
   188     cKbdMaxIndex = 65536;//need more room for the modifier keys
   216     cKbdMaxIndex = 65536;//need more room for the modifier keys
   189 
   217 
       
   218     // font stuff
   190     cFontBorder = 2 * HDPIScaleFactor;
   219     cFontBorder = 2 * HDPIScaleFactor;
   191     cFontPadding = 2 * HDPIScaleFactor;
   220     cFontPadding = 2 * HDPIScaleFactor;
   192 
   221 
   193     cDefaultBuildMaxDist = 256;
   222     cDefaultBuildMaxDist = 256; // default max. building distance with girder/rubber
       
   223     cResurrectorDist = 100; // effect distance of resurrector
       
   224     cSeductionDist = 250; // effect distance of seduction
       
   225 
       
   226     ExtraTime = 30000; // amount of time (ms) given for using Extra Time
   194 
   227 
   195     // do not change this value
   228     // do not change this value
   196     cDefaultZoomLevel = 2.0;
   229     cDefaultZoomLevel = 2.0; // 100% zoom
   197 
   230 
   198     cBaseChatFontHeight = 12;
   231     cBaseChatFontHeight = 12;
   199     cChatScaleRelDelta = 0.1;
   232     cChatScaleRelDelta = 0.1;
   200     cMinChatScaleValue = 0.8;
   233     cMinChatScaleValue = 0.8;
   201     cMaxChatScaleValue = 20.0;
   234     cMaxChatScaleValue = 20.0;
   202 
   235 
   203     cDefaultUIScaleLevel = 1.0;
   236     cDefaultUIScaleLevel = 1.0;
   204 
   237 
   205     // game flags
   238     // game flags
   206     gfAny                = $FFFFFFFF;
   239     gfAny                = $FFFFFFFF; // mask for all possible gameflags
   207     gfOneClanMode        = $00000001;           // used in trainings
   240     gfOneClanMode        = $00000001; // Game does not end if there's only one clan in play. For missions
   208     gfMultiWeapon        = $00000002;           // used in trainings
   241     gfMultiWeapon        = $00000002; // Enter multishoot mode after attack with infinite shots. For target practice
   209     gfSolidLand          = $00000004;
   242     gfSolidLand          = $00000004; // (almost) indestrutible land
   210     gfBorder             = $00000008;
   243     gfBorder             = $00000008; // border at top, left and right
   211     gfDivideTeams        = $00000010;
   244     gfDivideTeams        = $00000010; // each clan spawns their hogs on own side of terrain
   212     gfLowGravity         = $00000020;
   245     gfLowGravity         = $00000020; // low gravity
   213     gfLaserSight         = $00000040;
   246     gfLaserSight         = $00000040; // laser sight for all
   214     gfInvulnerable       = $00000080;
   247     gfInvulnerable       = $00000080; // invulerable for all
   215     gfResetHealth        = $00000100;
   248     gfResetHealth        = $00000100; // heal hogs health up to InitialHealth each turn
   216     gfVampiric           = $00000200;
   249     gfVampiric           = $00000200; // vampirism for all
   217     gfKarma              = $00000400;
   250     gfKarma              = $00000400; // receive damage you deal
   218     gfArtillery          = $00000800;
   251     gfArtillery          = $00000800; // hogs can't walk
   219     gfSwitchHog          = $00001000;
   252     gfSwitchHog          = $00001000; // free switch hog at turn start
   220     gfRandomOrder        = $00002000;
   253     gfRandomOrder        = $00002000; // hogs play in random order
   221     gfKing               = $00004000;
   254     gfKing               = $00004000; // King Mode
   222     gfPlaceHog           = $00008000;
   255     gfPlaceHog           = $00008000; // place all hogs at game start
   223     gfSharedAmmo         = $00010000;
   256     gfSharedAmmo         = $00010000; // ammo is shared per-clan
   224     gfDisableGirders     = $00020000;
   257     gfDisableGirders     = $00020000; // disable land girders
   225     gfDisableLandObjects = $00040000;
   258     gfDisableLandObjects = $00040000; // disable land objects
   226     gfAISurvival         = $00080000;
   259     gfAISurvival         = $00080000; // AI is revived
   227     gfInfAttack          = $00100000;
   260     gfInfAttack          = $00100000; // infinite attack
   228     gfResetWeps          = $00200000;
   261     gfResetWeps          = $00200000; // reset weapons each turn
   229     gfPerHogAmmo         = $00400000;
   262     gfPerHogAmmo         = $00400000; // each hog has its own ammo
   230     gfDisableWind        = $00800000;
   263     gfDisableWind        = $00800000; // don't automatically change wind
   231     gfMoreWind           = $01000000;
   264     gfMoreWind           = $01000000; // wind influences most gears
   232     gfTagTeam            = $02000000;
   265     gfTagTeam            = $02000000; // hogs of same clan share their turn time
   233     gfBottomBorder       = $04000000;
   266     gfBottomBorder       = $04000000; // border at bottom
   234     gfShoppaBorder       = $08000000;
   267     gfShoppaBorder       = $08000000; // Surround terrain with fancy "security border". Pure eye candy
   235     // NOTE: When adding new game flags, ask yourself
   268     // NOTE: When adding new game flags, ask yourself
   236     // if a "game start notice" would be useful. If so,
   269     // if a "game start notice" would be useful. If so,
   237     // add one in uWorld.pas - look for "AddGoal".
   270     // add one in uWorld.pas - look for "AddGoal".
   238 
   271 
   239     // gear states
   272     // gear states
   240     gstDrowning       = $00000001;
   273     gstDrowning       = $00000001; // drowning
   241     gstHHDriven       = $00000002;
   274     gstHHDriven       = $00000002; // hog is controlled by current player
   242     gstMoving         = $00000004;
   275     gstMoving         = $00000004; // moving
   243     gstAttacked       = $00000008;
   276     gstAttacked       = $00000008; // after attack
   244     gstAttacking      = $00000010;
   277     gstAttacking      = $00000010; // while attacking
   245     gstCollision      = $00000020;
   278     gstCollision      = $00000020; // it has *just* collided
   246     gstChooseTarget   = $00000040;
   279     gstChooseTarget   = $00000040; // choosing target
   247     gstHHJumping      = $00000100;
   280     gstHHJumping      = $00000100; // hog is doing long jump
   248     gsttmpFlag        = $00000200;
   281     gsttmpFlag        = $00000200; // temporary wildcard flag, use it for anything you want
   249     gstHHThinking     = $00000800;
   282     gstHHThinking     = $00000800; // AI hog is thinking
   250     gstNoDamage       = $00001000;
   283     gstNoDamage       = $00001000; // gear is immune to damage
   251     gstHHHJump        = $00002000;
   284     gstHHHJump        = $00002000; // hog is doing high jump
   252     gstAnimation      = $00004000;
   285     gstAnimation      = $00004000; // hog is playing an animation
   253     gstHHDeath        = $00008000;
   286     gstHHDeath        = $00008000; // hog is dying
   254     gstWinner         = $00010000;  // this, along with gstLoser, is good for indicating hedgies know they screwed up
   287     gstWinner         = $00010000; // indicates if hog did well
   255     gstWait           = $00020000;
   288     gstWait           = $00020000;
   256     gstNotKickable    = $00040000;
   289     gstNotKickable    = $00040000; // gear cannot be pushed by forces
   257     gstLoser          = $00080000;
   290     gstLoser          = $00080000; // indicates if hog screwed up
   258     gstHHGone         = $00100000;
   291     gstHHGone         = $00100000; // hog is gone (teamgone event)
   259     gstInvisible      = $00200000;
   292     gstInvisible      = $00200000; // invisible
   260     gstSubmersible    = $00400000;
   293     gstSubmersible    = $00400000; // can survive in water
   261     gstFrozen         = $00800000;
   294     gstFrozen         = $00800000; // frozen
   262     gstNoGravity      = $01000000;
   295     gstNoGravity      = $01000000; // ignores gravity
       
   296     gstInBounceEdge   = $02000000; // spawned in bounce edge
   263 
   297 
   264     // gear messages
   298     // gear messages
   265     gmLeft           = $00000001;
   299     gmLeft           = $00000001; // left
   266     gmRight          = $00000002;
   300     gmRight          = $00000002; // right
   267     gmUp             = $00000004;
   301     gmUp             = $00000004; // up
   268     gmDown           = $00000008;
   302     gmDown           = $00000008; // down
   269     gmSwitch         = $00000010;
   303     gmSwitch         = $00000010; // switch hedgehog
   270     gmAttack         = $00000020;
   304     gmAttack         = $00000020; // attack
   271     gmLJump          = $00000040;
   305     gmLJump          = $00000040; // long jump
   272     gmHJump          = $00000080;
   306     gmHJump          = $00000080; // high jump
   273     gmDestroy        = $00000100;
   307     gmDestroy        = $00000100; // request to self-destruct
   274     gmSlot           = $00000200; // with param
   308     gmSlot           = $00000200; // slot key; with param
   275     gmWeapon         = $00000400; // with param
   309     gmWeapon         = $00000400; // direct weapon selection (SetWeapon); with param
   276     gmTimer          = $00000800; // with param
   310     gmTimer          = $00000800; // set timer; with param
   277     gmAnimate        = $00001000; // with param
   311     gmAnimate        = $00001000; // start animation; with param
   278     gmPrecise        = $00002000;
   312     gmPrecise        = $00002000; // precise aim
   279 
   313 
   280     gmRemoveFromList = $00004000;
   314     // gmAddToList and gmRemoveFromList are used when changing order of gears in the gear list. They are used together when changing a gear's Z (drawing order)
   281     gmAddToList      = $00008000;
   315     gmRemoveFromList = $00004000; // remove gear from gear list
   282     gmDelete         = $00010000;
   316     gmAddToList      = $00008000; // add gear to gear list
       
   317 
       
   318     gmDelete         = $00010000; // delete gear
   283     gmAllStoppable = gmLeft or gmRight or gmUp or gmDown or gmAttack or gmPrecise;
   319     gmAllStoppable = gmLeft or gmRight or gmUp or gmDown or gmAttack or gmPrecise;
   284 
   320 
   285     cMaxSlotIndex       = 10;
   321     // ammo slots
       
   322     cMaxSlotIndex       = 10; // maximum slot index (including hidden slot) (row in ammo menu)
   286     cHiddenSlotIndex    = cMaxSlotIndex; // slot for hidden ammo types, not visible and has no key
   323     cHiddenSlotIndex    = cMaxSlotIndex; // slot for hidden ammo types, not visible and has no key
   287     cMaxSlotAmmoIndex   = 6;
   324     cMaxSlotAmmoIndex   = 5; // maximum index for ammos per slot (column in ammo menu)
   288 
   325 
   289     // ai hints
   326     // AI hints to be set for any gear
   290     aihUsualProcessing    = $00000000;
   327     aihUsualProcessing    = $00000000; // treat gear as usual
   291     aihDoesntMatter       = $00000001;
   328     aihDoesntMatter       = $00000001; // ignore gear in attack calculations and don't intentionally attack it
   292 
   329 
   293     // ammo properties
   330     // ammo properties
   294     ammoprop_Timerable    = $00000001;
   331     ammoprop_Timerable    = $00000001; // can set timer
   295     ammoprop_Power        = $00000002;
   332     ammoprop_Power        = $00000002; // can power up fire strength
   296     ammoprop_NeedTarget   = $00000004;
   333     ammoprop_NeedTarget   = $00000004; // must select target
   297     ammoprop_ForwMsgs     = $00000008;
   334     ammoprop_ForwMsgs     = $00000008; // received gear messages are forwarded to the spawned gear
   298     ammoprop_AttackInMove = $00000010;
   335     ammoprop_AttackInMove = $00000010; // can attack while moving / in mid-air
   299     ammoprop_DoesntStopTimerWhileAttacking
   336     ammoprop_DoesntStopTimerWhileAttacking
   300                           = $00000020;
   337                           = $00000020; // doesn't stop timer while attacker is attacking
   301     ammoprop_NoCrosshair  = $00000040;
   338     ammoprop_NoCrosshair  = $00000040; // no crosshair rendered
   302     ammoprop_AttackingPut = $00000080;
   339     ammoprop_AttackingPut = $00000080; // selecting a target is considered an attack
   303     ammoprop_DontHold     = $00000100;
   340     ammoprop_DontHold     = $00000100; // don't keep ammo selected in next turn
   304     ammoprop_AltAttack    = $00000200;
   341     ammoprop_AltAttack    = $00000200; // ammo can equip alternate ammo (ammoprop_AltUse)
   305     ammoprop_AltUse       = $00000400;
   342     ammoprop_AltUse       = $00000400; // ammo can be equipped by an ammo with ammoprop_AltAttack
   306     ammoprop_NotBorder    = $00000800;
   343     ammoprop_NotBorder    = $00000800; // ammo is not available if map has border
   307     ammoprop_Utility      = $00001000;
   344     ammoprop_Utility      = $00001000; // ammo is considered an utility instead of a weapon
   308     ammoprop_Effect       = $00002000;
   345     ammoprop_Effect       = $00002000; // ammo is considered an effect like extra time or vampirism
   309     ammoprop_SetBounce    = $00004000;
   346     ammoprop_SetBounce    = $00004000; // can set bounciness
   310     ammoprop_NeedUpDown   = $00008000;//Used by TouchInterface to show or hide up/down widgets
   347     ammoprop_NeedUpDown   = $00008000; // used by TouchInterface to show or hide up/down widgets
   311     ammoprop_OscAim       = $00010000;
   348     ammoprop_OscAim       = $00010000; // oscillating aim
   312     ammoprop_NoMoveAfter  = $00020000;
   349     ammoprop_NoMoveAfter  = $00020000; // can't move after attacking
   313     ammoprop_Track        = $00040000;
   350     ammoprop_Track        = $00040000; // ammo follows the landscape, used by AI
   314     ammoprop_DoesntStopTimerInMultiShoot
   351     ammoprop_DoesntStopTimerInMultiShoot
   315                           = $00080000;
   352                           = $00080000; // doesn't stop timer after entering multi-shoot mode
   316     ammoprop_DoesntStopTimerWhileAttackingInInfAttackMode
   353     ammoprop_DoesntStopTimerWhileAttackingInInfAttackMode
   317                           = $00100000;
   354                           = $00100000; // doesn't stop timer while Attacking gear msg is set and inf. attack mode is on
   318     ammoprop_ForceTurnEnd = $00200000;
   355     ammoprop_ForceTurnEnd = $00200000; // always ends turn after usage, ignoring inf. attack
   319     ammoprop_NoTargetAfter= $00400000;
   356     ammoprop_NoTargetAfter= $00400000; // disable target selection after attack
   320     ammoprop_NoRoundEnd   = $10000000;
   357     ammoprop_NoWrapTarget = $00800000; // allow to select target beyond wrap world edge limits
   321 
   358     ammoprop_ShowSelIcon  = $01000000; // show icon when selected
   322     AMMO_INFINITE = 100;
   359     ammoprop_NoRoundEnd   = $10000000; // ammo doesn't end turn
   323     AMMO_FINITE_MAX = 99;
   360 
       
   361     AMMO_INFINITE = 100;               // internal representation of infinite ammo count
       
   362     AMMO_FINITE_MAX = 99;              // maximum possible finite ammo count
       
   363 
       
   364     JETPACK_FUEL_INFINITE : LongInt = Low(LongInt); // internal representation of infinite jetpack fuel
       
   365     BIRDY_ENERGY_INFINITE : LongInt = Low(LongInt); // as above, but for Birdy
       
   366 
       
   367     // Special msgParam value used internally for invalid/non-existing value
       
   368     // Must not be sent over the network!
       
   369     MSGPARAM_INVALID = High(LongWord);
       
   370 
       
   371     // raw probability values for crate drops
       
   372     probabilityLevels: array [0..8] of LongWord = (0,20,30,60,100,200,400,600,800);
       
   373 
       
   374     // raw bounciness values for each of the player-selectable bounciness levels
       
   375     defaultBounciness = 1000;
       
   376     bouncinessLevels: array [0..4] of LongWord = (350, 700, defaultBounciness, 2000, 4000);
   324 
   377 
   325     // explosion flags
   378     // explosion flags
       
   379     // By default, an explosion removes land, damages and pushes gears,
       
   380     // spawns an explosion animation and plays no sound.
   326     //EXPLAllDamageInRadius = $00000001;  Completely unused for ages
   381     //EXPLAllDamageInRadius = $00000001;  Completely unused for ages
   327     EXPLAutoSound         = $00000002;
   382     EXPLAutoSound         = $00000002; // enable sound (if appropriate)
   328     EXPLNoDamage          = $00000004;
   383     EXPLNoDamage          = $00000004; // don't damage gears
   329     EXPLDoNotTouchHH      = $00000008;
   384     EXPLDoNotTouchHH      = $00000008; // don't push hogs
   330     EXPLDontDraw          = $00000010;
   385     EXPLDontDraw          = $00000010; // don't remove land
   331     EXPLNoGfx             = $00000020;
   386     EXPLNoGfx             = $00000020; // don't spawn visual effects
   332     EXPLPoisoned          = $00000040;
   387     EXPLPoisoned          = $00000040; // poison hogs in effect radius
   333     EXPLDoNotTouchAny     = $00000080;
   388     EXPLDoNotTouchAny     = $00000080; // don't push anything
   334 
   389     EXPLForceDraw         = $00000100; // remove land even with gfSolidLand
   335     posCaseAmmo    = $00000001;
   390 
   336     posCaseHealth  = $00000002;
   391     // Pos flags for gtCase
   337     posCaseUtility = $00000004;
   392     posCaseAmmo    = $00000001; // ammo crate
   338     posCaseDummy   = $00000008;
   393     posCaseHealth  = $00000002; // health crate
   339     posCaseExplode = $00000010;
   394     posCaseUtility = $00000004; // utility crate
   340     posCasePoison  = $00000020;
   395     posCaseDummy   = $00000008; // dummy crate
       
   396     posCaseExplode = $00000010; // crate explodes when touched
       
   397     posCasePoison  = $00000020; // crate poisons hog when touched
   341 
   398 
   342     cCaseHealthRadius = 14;
   399     cCaseHealthRadius = 14;
   343 
   400 
   344     // hog tag mask
   401     // hog tag mask
   345     //htNone        = $00;
   402     //htNone        = $00;
   346     htTeamName    = $01;
   403     htTeamName    = $01;
   347     htName        = $02;
   404     htName        = $02;
   348     htHealth      = $04;
   405     htHealth      = $04;
   349     htTransparent = $08;
   406     htTransparent = $08;
   350 
   407 
   351     NoPointX = Low(LongInt);
   408     NoPointX = Low(LongInt); // special value for CursorX/CursorY if cursor's disabled
   352     cTargetPointRef : TPoint = (x: NoPointX; y: 0);
   409     cTargetPointRef : TPoint = (x: NoPointX; y: 0);
   353 
   410 
   354     kSystemSoundID_Vibrate = $00000FFF;
   411     kSystemSoundID_Vibrate = $00000FFF;
   355 
   412 
   356     cMinPlayWidth = 200;
   413     cMinPlayWidth = 200;
   357     cWorldEdgeDist = 200;
   414     cWorldEdgeDist = 200;
   358 
   415 
       
   416     cMaxLaserSightWraps = 1; // maximum number of world wraps of laser sight
       
   417 
       
   418     cMaxTurnTime = Pred(High(LongInt)); // maximum possible turn time
       
   419 
   359 implementation
   420 implementation
   360 
   421 
   361 end.
   422 end.