hedgewars/HHHandlers.inc
author unc0rr
Fri, 01 May 2009 09:01:44 +0000
changeset 2021 a591afb43768
parent 2017 7845c77c8d31
child 2023 41d3afaa20c7
permissions -rw-r--r--
Some changes in try to fix issue when you enter room with painted map, but frontend shows generated one (most probably bug is triggered by template filters) Untested.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
     1
(*
1066
1f1b3686a2b0 Update copyright headers a bit
unc0rr
parents: 1035
diff changeset
     2
 * Hedgewars, a free turn based strategy game
1689
3d0eee01f734 RC Plane
unc0rr
parents: 1682
diff changeset
     3
 * Copyright (c) 2004-2009 Andrey Korotaev <unC0Rr@gmail.com>
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
     4
 *
183
57c2ef19f719 Relicense to GPL
unc0rr
parents: 149
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
57c2ef19f719 Relicense to GPL
unc0rr
parents: 149
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
57c2ef19f719 Relicense to GPL
unc0rr
parents: 149
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
     8
 *
183
57c2ef19f719 Relicense to GPL
unc0rr
parents: 149
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
57c2ef19f719 Relicense to GPL
unc0rr
parents: 149
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
57c2ef19f719 Relicense to GPL
unc0rr
parents: 149
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
57c2ef19f719 Relicense to GPL
unc0rr
parents: 149
diff changeset
    12
 * GNU General Public License for more details.
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    13
 *
183
57c2ef19f719 Relicense to GPL
unc0rr
parents: 149
diff changeset
    14
 * You should have received a copy of the GNU General Public License
57c2ef19f719 Relicense to GPL
unc0rr
parents: 149
diff changeset
    15
 * along with this program; if not, write to the Free Software
57c2ef19f719 Relicense to GPL
unc0rr
parents: 149
diff changeset
    16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    17
 *)
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
    18
37
2b7f2a43b999 - Properly get seed in net game
unc0rr
parents: 32
diff changeset
    19
////////////////////////////////////////////////////////////////////////////////
783
4f59db6f147d - New command 'set weapon'
unc0rr
parents: 614
diff changeset
    20
procedure ChangeAmmo(Gear: PGear);
941
b5222ddafe1f - Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents: 931
diff changeset
    21
var slot, i: Longword;
783
4f59db6f147d - New command 'set weapon'
unc0rr
parents: 614
diff changeset
    22
begin
4f59db6f147d - New command 'set weapon'
unc0rr
parents: 614
diff changeset
    23
slot:= Gear^.MsgParam;
4f59db6f147d - New command 'set weapon'
unc0rr
parents: 614
diff changeset
    24
4f59db6f147d - New command 'set weapon'
unc0rr
parents: 614
diff changeset
    25
with PHedgehog(Gear^.Hedgehog)^ do
927
2c1675344a6f Remove AltSlot and AltAmmo fields of Hedgehog record, as they are not actually needed
unc0rr
parents: 926
diff changeset
    26
	begin
1883
7c7476f56114 - Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents: 1865
diff changeset
    27
	Gear^.Message:= Gear^.Message and not gm_Slot;
7c7476f56114 - Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents: 1865
diff changeset
    28
	
928
b9064b48b001 Some preparation work for attacking from rope, parachute and etc.
unc0rr
parents: 927
diff changeset
    29
	if ((Gear^.State and (gstAttacking or gstAttacked)) <> 0)
b9064b48b001 Some preparation work for attacking from rope, parachute and etc.
unc0rr
parents: 927
diff changeset
    30
		or (AttacksNum > 0)
927
2c1675344a6f Remove AltSlot and AltAmmo fields of Hedgehog record, as they are not actually needed
unc0rr
parents: 926
diff changeset
    31
		or ((Gear^.State and gstHHDriven) = 0) then exit;
783
4f59db6f147d - New command 'set weapon'
unc0rr
parents: 614
diff changeset
    32
1883
7c7476f56114 - Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents: 1865
diff changeset
    33
	Gear^.Message:= Gear^.Message and not (gm_LJump or gm_HJump);
783
4f59db6f147d - New command 'set weapon'
unc0rr
parents: 614
diff changeset
    34
927
2c1675344a6f Remove AltSlot and AltAmmo fields of Hedgehog record, as they are not actually needed
unc0rr
parents: 926
diff changeset
    35
	if CurSlot = slot then
2c1675344a6f Remove AltSlot and AltAmmo fields of Hedgehog record, as they are not actually needed
unc0rr
parents: 926
diff changeset
    36
		begin
941
b5222ddafe1f - Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents: 931
diff changeset
    37
		i:= 0;
b5222ddafe1f - Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents: 931
diff changeset
    38
		repeat
927
2c1675344a6f Remove AltSlot and AltAmmo fields of Hedgehog record, as they are not actually needed
unc0rr
parents: 926
diff changeset
    39
		inc(CurAmmo);
941
b5222ddafe1f - Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents: 931
diff changeset
    40
		if (CurAmmo > cMaxSlotAmmoIndex) then
b5222ddafe1f - Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents: 931
diff changeset
    41
			begin
b5222ddafe1f - Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents: 931
diff changeset
    42
			CurAmmo:= 0;
b5222ddafe1f - Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents: 931
diff changeset
    43
			inc(i);
b5222ddafe1f - Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents: 931
diff changeset
    44
			TryDo(i < 2, 'Engine bug: no ammo in current slot', true)
b5222ddafe1f - Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents: 931
diff changeset
    45
			end;
b5222ddafe1f - Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents: 931
diff changeset
    46
		until (Ammo^[slot, CurAmmo].Count > 0) and (Team^.Clan^.TurnNumber > Ammoz[Ammo^[slot, CurAmmo].AmmoType].SkipTurns)
927
2c1675344a6f Remove AltSlot and AltAmmo fields of Hedgehog record, as they are not actually needed
unc0rr
parents: 926
diff changeset
    47
		end else
2c1675344a6f Remove AltSlot and AltAmmo fields of Hedgehog record, as they are not actually needed
unc0rr
parents: 926
diff changeset
    48
		begin
941
b5222ddafe1f - Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents: 931
diff changeset
    49
		i:= 0;
b5222ddafe1f - Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents: 931
diff changeset
    50
		// check whether there's ammo in slot
b5222ddafe1f - Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents: 931
diff changeset
    51
		while (i <= cMaxSlotAmmoIndex)
b5222ddafe1f - Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents: 931
diff changeset
    52
		  and ((Ammo^[slot, i].Count = 0)
b5222ddafe1f - Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents: 931
diff changeset
    53
		       or (Team^.Clan^.TurnNumber <= Ammoz[Ammo^[slot, i].AmmoType].SkipTurns)) do inc(i);
b5222ddafe1f - Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents: 931
diff changeset
    54
		
b5222ddafe1f - Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents: 931
diff changeset
    55
		if i <= cMaxSlotAmmoIndex then
b5222ddafe1f - Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents: 931
diff changeset
    56
			begin
b5222ddafe1f - Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents: 931
diff changeset
    57
			CurSlot:= slot;
b5222ddafe1f - Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents: 931
diff changeset
    58
			CurAmmo:= i
b5222ddafe1f - Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents: 931
diff changeset
    59
			end
b5222ddafe1f - Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents: 931
diff changeset
    60
		end
1710
cecb3cc93251 Fix angle restriction applying to rc plane when choosing via ammomenu
unc0rr
parents: 1689
diff changeset
    61
	end
783
4f59db6f147d - New command 'set weapon'
unc0rr
parents: 614
diff changeset
    62
end;
4f59db6f147d - New command 'set weapon'
unc0rr
parents: 614
diff changeset
    63
4f59db6f147d - New command 'set weapon'
unc0rr
parents: 614
diff changeset
    64
procedure HHSetWeapon(Gear: PGear);
4f59db6f147d - New command 'set weapon'
unc0rr
parents: 614
diff changeset
    65
var t: LongInt;
4f59db6f147d - New command 'set weapon'
unc0rr
parents: 614
diff changeset
    66
    weap: TAmmoType;
4f59db6f147d - New command 'set weapon'
unc0rr
parents: 614
diff changeset
    67
begin
4f59db6f147d - New command 'set weapon'
unc0rr
parents: 614
diff changeset
    68
weap:= TAmmoType(Gear^.MsgParam);
941
b5222ddafe1f - Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents: 931
diff changeset
    69
b5222ddafe1f - Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents: 931
diff changeset
    70
if PHedgehog(Gear^.Hedgehog)^.Team^.Clan^.TurnNumber <= Ammoz[weap].SkipTurns then exit; // weapon isn't activated yet
b5222ddafe1f - Fix bug with picking up ammos from cases, when total ammo count may become more than AMMO_INFINITE
unc0rr
parents: 931
diff changeset
    71
783
4f59db6f147d - New command 'set weapon'
unc0rr
parents: 614
diff changeset
    72
Gear^.MsgParam:= Ammoz[weap].Slot;
4f59db6f147d - New command 'set weapon'
unc0rr
parents: 614
diff changeset
    73
4f59db6f147d - New command 'set weapon'
unc0rr
parents: 614
diff changeset
    74
t:= cMaxSlotAmmoIndex;
4f59db6f147d - New command 'set weapon'
unc0rr
parents: 614
diff changeset
    75
4f59db6f147d - New command 'set weapon'
unc0rr
parents: 614
diff changeset
    76
Gear^.Message:= Gear^.Message and not gm_Weapon;
4f59db6f147d - New command 'set weapon'
unc0rr
parents: 614
diff changeset
    77
4f59db6f147d - New command 'set weapon'
unc0rr
parents: 614
diff changeset
    78
with PHedgehog(Gear^.Hedgehog)^ do
926
d231e007452a Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents: 925
diff changeset
    79
	while (Ammo^[CurSlot, CurAmmo].AmmoType <> weap) and (t >= 0) do
d231e007452a Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents: 925
diff changeset
    80
		begin
d231e007452a Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents: 925
diff changeset
    81
		ChangeAmmo(Gear);
d231e007452a Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents: 925
diff changeset
    82
		dec(t)
1710
cecb3cc93251 Fix angle restriction applying to rc plane when choosing via ammomenu
unc0rr
parents: 1689
diff changeset
    83
		end;
cecb3cc93251 Fix angle restriction applying to rc plane when choosing via ammomenu
unc0rr
parents: 1689
diff changeset
    84
cecb3cc93251 Fix angle restriction applying to rc plane when choosing via ammomenu
unc0rr
parents: 1689
diff changeset
    85
ApplyAmmoChanges(PHedgehog(Gear^.Hedgehog)^)
783
4f59db6f147d - New command 'set weapon'
unc0rr
parents: 614
diff changeset
    86
end;
4f59db6f147d - New command 'set weapon'
unc0rr
parents: 614
diff changeset
    87
926
d231e007452a Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents: 925
diff changeset
    88
procedure HHSetTimer(Gear: PGear);
d231e007452a Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents: 925
diff changeset
    89
begin
d231e007452a Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents: 925
diff changeset
    90
Gear^.Message:= Gear^.Message and not gm_Timer;
d231e007452a Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents: 925
diff changeset
    91
with PHedgehog(Gear^.Hedgehog)^ do
d231e007452a Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents: 925
diff changeset
    92
	if (Ammo^[CurSlot, CurAmmo].Propz and ammoprop_Timerable) <> 0 then
d231e007452a Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents: 925
diff changeset
    93
		begin
d231e007452a Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents: 925
diff changeset
    94
		Ammo^[CurSlot, CurAmmo].Timer:= 1000 * Gear^.MsgParam;
d231e007452a Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents: 925
diff changeset
    95
		with CurrentTeam^ do
d231e007452a Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents: 925
diff changeset
    96
			ApplyAmmoChanges(Hedgehogs[CurrHedgehog]);
d231e007452a Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents: 925
diff changeset
    97
		end;
d231e007452a Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents: 925
diff changeset
    98
end;
d231e007452a Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents: 925
diff changeset
    99
d231e007452a Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents: 925
diff changeset
   100
32
78bff13b11c0 With this patch the game doesn't crash when gaming by net
unc0rr
parents: 16
diff changeset
   101
procedure Attack(Gear: PGear);
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   102
var xx, yy: hwFloat;
2017
7845c77c8d31 nemo's great patch:
unc0rr
parents: 1964
diff changeset
   103
    tmpGear: PGear;
32
78bff13b11c0 With this patch the game doesn't crash when gaming by net
unc0rr
parents: 16
diff changeset
   104
begin
78bff13b11c0 With this patch the game doesn't crash when gaming by net
unc0rr
parents: 16
diff changeset
   105
with Gear^,
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   106
     PHedgehog(Gear^.Hedgehog)^ do
32
78bff13b11c0 With this patch the game doesn't crash when gaming by net
unc0rr
parents: 16
diff changeset
   107
     begin
95
1ef5e2c41115 - Fixed compilation
unc0rr
parents: 82
diff changeset
   108
     if ((State and gstHHDriven) <> 0)and
542
ec26095f1bed - Get rid of ammoProp_AttackInFall and gstFalling
unc0rr
parents: 540
diff changeset
   109
        ((State and (gstAttacked or gstHHChooseTarget)) = 0)and
836
150c7c87e66c - Small formatting changes
unc0rr
parents: 835
diff changeset
   110
        (((State and gstMoving) = 0) or ((Ammo^[CurSlot, CurAmmo].Propz and ammoprop_AttackInMove) <> 0))and
150c7c87e66c - Small formatting changes
unc0rr
parents: 835
diff changeset
   111
        ((TargetPoint.X <> NoPointX) or ((Ammo^[CurSlot, CurAmmo].Propz and ammoprop_NeedTarget) = 0)) then
32
78bff13b11c0 With this patch the game doesn't crash when gaming by net
unc0rr
parents: 16
diff changeset
   112
        begin
95
1ef5e2c41115 - Fixed compilation
unc0rr
parents: 82
diff changeset
   113
        State:= State or gstAttacking;
1ef5e2c41115 - Fixed compilation
unc0rr
parents: 82
diff changeset
   114
        if Power = cMaxPower then Message:= Message and not gm_Attack
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   115
        else if (Ammo^[CurSlot, CurAmmo].Propz and ammoprop_Power) = 0 then Message:= Message and not gm_Attack
95
1ef5e2c41115 - Fixed compilation
unc0rr
parents: 82
diff changeset
   116
        else begin
1ef5e2c41115 - Fixed compilation
unc0rr
parents: 82
diff changeset
   117
             if Power = 0 then
1ef5e2c41115 - Fixed compilation
unc0rr
parents: 82
diff changeset
   118
                begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   119
                AttackBar:= CurrentTeam^.AttackBar;
1669
b709e061577e Mostly fix voicepack usage
unc0rr
parents: 1658
diff changeset
   120
                PlaySound(sndThrowPowerUp, false, nil)
95
1ef5e2c41115 - Fixed compilation
unc0rr
parents: 82
diff changeset
   121
                end;
1ef5e2c41115 - Fixed compilation
unc0rr
parents: 82
diff changeset
   122
             inc(Power)
1ef5e2c41115 - Fixed compilation
unc0rr
parents: 82
diff changeset
   123
             end;
1ef5e2c41115 - Fixed compilation
unc0rr
parents: 82
diff changeset
   124
        if ((Message and gm_Attack) <> 0) then exit;
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   125
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   126
        if (Ammo^[CurSlot, CurAmmo].Propz and ammoprop_Power) <> 0 then
32
78bff13b11c0 With this patch the game doesn't crash when gaming by net
unc0rr
parents: 16
diff changeset
   127
           begin
282
b1e3387389b6 - Pickhammer sound
unc0rr
parents: 263
diff changeset
   128
           StopSound(sndThrowPowerUp);
1669
b709e061577e Mostly fix voicepack usage
unc0rr
parents: 1658
diff changeset
   129
           PlaySound(sndThrowRelease, false, nil);
32
78bff13b11c0 With this patch the game doesn't crash when gaming by net
unc0rr
parents: 16
diff changeset
   130
           end;
1922
88cdabb51995 Fix bug with rope and bazooka
unc0rr
parents: 1883
diff changeset
   131
519
981df6f6e2a9 - Fix desert eagle
unc0rr
parents: 518
diff changeset
   132
        xx:= SignAs(AngleSin(Angle), dX);
900
5224ac938442 Fix attack direction when perform somersault
unc0rr
parents: 883
diff changeset
   133
        yy:= -AngleCos(Angle);
5224ac938442 Fix attack direction when perform somersault
unc0rr
parents: 883
diff changeset
   134
5224ac938442 Fix attack direction when perform somersault
unc0rr
parents: 883
diff changeset
   135
        if ((Gear^.State and gstHHHJump) <> 0) then xx:= - xx;
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   136
             case Ammo^[CurSlot, CurAmmo].AmmoType of
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   137
                      amGrenade: FollowGear:= AddGear(hwRound(X), hwRound(Y), gtAmmo_Bomb,    0, xx*Power/cPowerDivisor, yy*Power/cPowerDivisor, Ammo^[CurSlot, CurAmmo].Timer);
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   138
                  amClusterBomb: FollowGear:= AddGear(hwRound(X), hwRound(Y), gtClusterBomb,  0, xx*Power/cPowerDivisor, yy*Power/cPowerDivisor, Ammo^[CurSlot, CurAmmo].Timer);
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   139
                      amBazooka: FollowGear:= AddGear(hwRound(X), hwRound(Y), gtAmmo_Grenade, 0, xx*Power/cPowerDivisor, yy*Power/cPowerDivisor, 0);
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   140
                          amUFO: FollowGear:= AddGear(hwRound(X), hwRound(Y), gtUFO,          0, xx*Power/cPowerDivisor, yy*Power/cPowerDivisor, 0);
32
78bff13b11c0 With this patch the game doesn't crash when gaming by net
unc0rr
parents: 16
diff changeset
   141
                      amShotgun: begin
1669
b709e061577e Mostly fix voicepack usage
unc0rr
parents: 1658
diff changeset
   142
                                 PlaySound(sndShotgunReload, false, nil);
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   143
                                 CurAmmoGear:= AddGear(hwRound(X), hwRound(Y), gtShotgunShot,  0, xx * _0_5, yy * _0_5, 0);
32
78bff13b11c0 With this patch the game doesn't crash when gaming by net
unc0rr
parents: 16
diff changeset
   144
                                 end;
498
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 435
diff changeset
   145
                   amPickHammer: CurAmmoGear:= AddGear(hwRound(Gear^.X), hwRound(Gear^.Y) + cHHRadius, gtPickHammer, 0, _0, _0, 0);
866
ac6f6c95c23f - Some more sounds
unc0rr
parents: 865
diff changeset
   146
                         amSkip: ParseCommand('/skip', true);
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   147
                         amRope: CurAmmoGear:= AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtRope, 0, xx, yy, 0);
800
e95f16b7ec80 - Your hedgehogs says you: "Yes, sir"
unc0rr
parents: 799
diff changeset
   148
                         amMine: begin
e95f16b7ec80 - Your hedgehogs says you: "Yes, sir"
unc0rr
parents: 799
diff changeset
   149
                                 AddGear(hwRound(X) + hwSign(dX) * 7, hwRound(Y), gtMine, 0, SignAs(_0_02, dX), _0, 3000);
1682
f8c4af3a2b54 Fix laugh voicepack
unc0rr
parents: 1669
diff changeset
   150
                                 PlaySound(sndLaugh, false, CurrentTeam^.voicepack)
800
e95f16b7ec80 - Your hedgehogs says you: "Yes, sir"
unc0rr
parents: 799
diff changeset
   151
                                 end;
876
d5b6e0ae5755 Desert Eagle and Shotgun shot animations
unc0rr
parents: 868
diff changeset
   152
                       amDEagle: CurAmmoGear:= AddGear(hwRound(X + xx * cHHRadius), hwRound(Y + yy * cHHRadius), gtDEagleShot, 0, xx * _0_5, yy * _0_5, 0);
1112
11590c68b68e Hedgehog laughs when drops dynamite or cake
unc0rr
parents: 1108
diff changeset
   153
                     amDynamite: begin
11590c68b68e Hedgehog laughs when drops dynamite or cake
unc0rr
parents: 1108
diff changeset
   154
                                 AddGear(hwRound(X) + hwSign(dX) * 7, hwRound(Y), gtDynamite, 0, SignAs(_0_03, dX), _0, 5000);
1682
f8c4af3a2b54 Fix laugh voicepack
unc0rr
parents: 1669
diff changeset
   155
                                 PlaySound(sndLaugh, false, CurrentTeam^.voicepack)
1112
11590c68b68e Hedgehog laughs when drops dynamite or cake
unc0rr
parents: 1108
diff changeset
   156
                                 end;
979
edb8f208c1d9 Fix firepunch direction when attacking from high jump
unc0rr
parents: 958
diff changeset
   157
                    amFirePunch: CurAmmoGear:= AddGear(hwRound(X) + hwSign(dX) * 10, hwRound(Y), gtFirePunch, 0, xx, _0, 0);
1712
f5b916de40f0 Patch by nemo (polished by me)
unc0rr
parents: 1710
diff changeset
   158
                         amWhip: begin
f5b916de40f0 Patch by nemo (polished by me)
unc0rr
parents: 1710
diff changeset
   159
                                 CurAmmoGear:= AddGear(hwRound(X) + hwSign(dX) * 10, hwRound(Y), gtWhip, 0, SignAs(_1, dX), - _0_8, 0);
f5b916de40f0 Patch by nemo (polished by me)
unc0rr
parents: 1710
diff changeset
   160
                                 PlaySound(sndWhipCrack, false, nil)
f5b916de40f0 Patch by nemo (polished by me)
unc0rr
parents: 1710
diff changeset
   161
                                 end;
854
fef7f2d908bf Animate baseball bat attack
unc0rr
parents: 839
diff changeset
   162
                  amBaseballBat: CurAmmoGear:= AddGear(hwRound(X) + hwSign(dX) * 10, hwRound(Y), gtShover, 0, xx * _0_5, yy * _0_5, 0);
498
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 435
diff changeset
   163
                    amParachute: CurAmmoGear:= AddGear(hwRound(X), hwRound(Y), gtParachute, 0, _0, _0, 0);
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 435
diff changeset
   164
                    amAirAttack: AddGear(Ammo^[CurSlot, CurAmmo].Pos, 0, gtAirAttack, 0, _0, _0, 0);
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 435
diff changeset
   165
                   amMineStrike: AddGear(Ammo^[CurSlot, CurAmmo].Pos, 0, gtAirAttack, 1, _0, _0, 0);
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 435
diff changeset
   166
                    amBlowTorch: CurAmmoGear:= AddGear(hwRound(X), hwRound(Y), gtBlowTorch, 0, SignAs(_0_5, dX), _0, 0);
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 435
diff changeset
   167
                       amGirder: CurAmmoGear:= AddGear(0, 0, gtGirder, Ammo^[CurSlot, CurAmmo].Pos, _0, _0, 0);
520
e83dfb7ffead Teleportation tool
unc0rr
parents: 519
diff changeset
   168
                     amTeleport: CurAmmoGear:= AddGear(0, 0, gtTeleport, 0, _0, _0, 0);
534
92fb2b0d5117 - Fix some bugs
unc0rr
parents: 528
diff changeset
   169
                       amSwitch: CurAmmoGear:= AddGear(hwRound(X), hwRound(Y), gtSwitcher, 0, _0, _0, 0);
924
227f9fcdc2f4 Initial implementation of mortar
unc0rr
parents: 900
diff changeset
   170
                       amMortar: FollowGear:= AddGear(hwRound(X), hwRound(Y), gtMortar,  0, xx*cMaxPower/cPowerDivisor, yy*cMaxPower/cPowerDivisor, 0);
1712
f5b916de40f0 Patch by nemo (polished by me)
unc0rr
parents: 1710
diff changeset
   171
                      amRCPlane: begin
f5b916de40f0 Patch by nemo (polished by me)
unc0rr
parents: 1710
diff changeset
   172
                                 CurAmmoGear:= AddGear(hwRound(X), hwRound(Y), gtRCPlane,  0, xx * cMaxPower / cPowerDivisor / 4, yy * cMaxPower / cPowerDivisor / 4, 0);
f5b916de40f0 Patch by nemo (polished by me)
unc0rr
parents: 1710
diff changeset
   173
                                 PlaySound(sndRCPlane, true, nil)
f5b916de40f0 Patch by nemo (polished by me)
unc0rr
parents: 1710
diff changeset
   174
                                 end;
984
dd5f16f69926 Kamikaze weapon
unc0rr
parents: 979
diff changeset
   175
                       amKamikaze: CurAmmoGear:= AddGear(hwRound(X), hwRound(Y), gtKamikaze, 0, xx * _0_5, yy * _0_5, 0);
1112
11590c68b68e Hedgehog laughs when drops dynamite or cake
unc0rr
parents: 1108
diff changeset
   176
                         amCake: begin
11590c68b68e Hedgehog laughs when drops dynamite or cake
unc0rr
parents: 1108
diff changeset
   177
                                 CurAmmoGear:= AddGear(hwRound(X) + hwSign(dX) * 3, hwRound(Y), gtCake, 0, xx, _0, 0);
1682
f8c4af3a2b54 Fix laugh voicepack
unc0rr
parents: 1669
diff changeset
   178
                                 PlaySound(sndLaugh, false, CurrentTeam^.voicepack)
1112
11590c68b68e Hedgehog laughs when drops dynamite or cake
unc0rr
parents: 1108
diff changeset
   179
                                 end;
1286
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   180
                    amSeduction: CurAmmoGear:= AddGear(hwRound(X + xx * cHHRadius * 2), hwRound(Y + yy * cHHRadius * 2), gtSeduction, 0, xx * _0_4, yy * _0_4, 0);
1261
903058d382c7 Add watermelon weapon (without proper sprites yet)
unc0rr
parents: 1259
diff changeset
   181
                   amWatermelon: FollowGear:= AddGear(hwRound(X), hwRound(Y), gtWatermelon,  0, xx*Power/cPowerDivisor, yy*Power/cPowerDivisor, Ammo^[CurSlot, CurAmmo].Timer);
1263
24677a82531d Add Hellish bomb weapon
unc0rr
parents: 1261
diff changeset
   182
                  amHellishBomb: FollowGear:= AddGear(hwRound(X), hwRound(Y), gtHellishBomb,    0, xx*Power/cPowerDivisor, yy*Power/cPowerDivisor, 5000);
1507
d18c67b7ad4c Quick and dirty napalm implementation
unc0rr
parents: 1505
diff changeset
   183
                       amNapalm: AddGear(Ammo^[CurSlot, CurAmmo].Pos, 0, gtAirAttack, 2, _0, _0, 0);
1573
cf88e0ace609 Drill rocket
unc0rr
parents: 1528
diff changeset
   184
                        amDrill: FollowGear:= AddGear(hwRound(X), hwRound(Y), gtDrill, 0, xx*Power/cPowerDivisor, yy*Power/cPowerDivisor, 0);
1601
0cff69c8c4cf Ballsgun
unc0rr
parents: 1573
diff changeset
   185
                        amBallgun: CurAmmoGear:= AddGear(hwRound(X), hwRound(Y), gtBallgun,  0, xx * _0_5, yy * _0_5, 0);
1849
2a989e5abda6 4 utilities by nemo
unc0rr
parents: 1749
diff changeset
   186
                      amLowGravity: cGravity:= cMaxWindSpeed / 2;
2a989e5abda6 4 utilities by nemo
unc0rr
parents: 1749
diff changeset
   187
                      amExtraDamage: cDamageModifier:= _1_5;
2a989e5abda6 4 utilities by nemo
unc0rr
parents: 1749
diff changeset
   188
                      //this flag unfortunately gets cleared too often for true invulnerability, although it seemed like the natural choice
2a989e5abda6 4 utilities by nemo
unc0rr
parents: 1749
diff changeset
   189
                      //amInvulnerable: State:= State or gstNoDamage;
2a989e5abda6 4 utilities by nemo
unc0rr
parents: 1749
diff changeset
   190
                      amInvulnerable: Invulnerable:= true;
2a989e5abda6 4 utilities by nemo
unc0rr
parents: 1749
diff changeset
   191
                      amExtraTime: TurnTimeLeft:= TurnTimeLeft + 30000;
1854
6e05013899b2 laser beam by nemo reworked a bit by me
unc0rr
parents: 1849
diff changeset
   192
                      amLaserSight: cLaserSighting:= true;
2017
7845c77c8d31 nemo's great patch:
unc0rr
parents: 1964
diff changeset
   193
                      amVampiric: cVampiric:= true;
32
78bff13b11c0 With this patch the game doesn't crash when gaming by net
unc0rr
parents: 16
diff changeset
   194
                  end;
829
1209eb768acf Use 'first blood' sound
unc0rr
parents: 800
diff changeset
   195
1209eb768acf Use 'first blood' sound
unc0rr
parents: 800
diff changeset
   196
        uStats.AmmoUsed(Ammo^[CurSlot, CurAmmo].AmmoType);
1209eb768acf Use 'first blood' sound
unc0rr
parents: 800
diff changeset
   197
2017
7845c77c8d31 nemo's great patch:
unc0rr
parents: 1964
diff changeset
   198
        if not (SpeechText = '') then
7845c77c8d31 nemo's great patch:
unc0rr
parents: 1964
diff changeset
   199
            begin
7845c77c8d31 nemo's great patch:
unc0rr
parents: 1964
diff changeset
   200
            tmpGear:= AddGear(0, 0, gtSpeechBubble, 0, _0, _0, 0);
7845c77c8d31 nemo's great patch:
unc0rr
parents: 1964
diff changeset
   201
            tmpGear^.Text:= SpeechText;
7845c77c8d31 nemo's great patch:
unc0rr
parents: 1964
diff changeset
   202
            tmpGear^.Hedgehog:= CurrentHedgehog;
7845c77c8d31 nemo's great patch:
unc0rr
parents: 1964
diff changeset
   203
            tmpGear^.State:= SpeechType;
7845c77c8d31 nemo's great patch:
unc0rr
parents: 1964
diff changeset
   204
            SpeechText:= ''
7845c77c8d31 nemo's great patch:
unc0rr
parents: 1964
diff changeset
   205
            end;
7845c77c8d31 nemo's great patch:
unc0rr
parents: 1964
diff changeset
   206
32
78bff13b11c0 With this patch the game doesn't crash when gaming by net
unc0rr
parents: 16
diff changeset
   207
        Power:= 0;
930
3f61bd3b08fd Initial support for attacking from rope
unc0rr
parents: 928
diff changeset
   208
        if (CurAmmoGear <> nil)
3f61bd3b08fd Initial support for attacking from rope
unc0rr
parents: 928
diff changeset
   209
           and (((Ammo^[CurSlot, CurAmmo].Propz) and ammoprop_AltUse) = 0){check for dropping ammo from rope} then
32
78bff13b11c0 With this patch the game doesn't crash when gaming by net
unc0rr
parents: 16
diff changeset
   210
           begin
930
3f61bd3b08fd Initial support for attacking from rope
unc0rr
parents: 928
diff changeset
   211
           CurAmmoGear^.Ammo:= @(Ammo^[CurSlot, CurAmmo]);
82
2f4f3236cccc - New fort
unc0rr
parents: 80
diff changeset
   212
           Message:= Message or gm_Attack;
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   213
           CurAmmoGear^.Message:= Message
82
2f4f3236cccc - New fort
unc0rr
parents: 80
diff changeset
   214
           end else begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   215
           if not CurrentTeam^.ExtDriven and
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   216
             ((Ammo^[CurSlot, CurAmmo].Propz and ammoprop_Power) <> 0) then SendIPC('a');
1849
2a989e5abda6 4 utilities by nemo
unc0rr
parents: 1749
diff changeset
   217
           AfterAttack;
82
2f4f3236cccc - New fort
unc0rr
parents: 80
diff changeset
   218
           end
1849
2a989e5abda6 4 utilities by nemo
unc0rr
parents: 1749
diff changeset
   219
        end else Message:= Message and not gm_Attack;
32
78bff13b11c0 With this patch the game doesn't crash when gaming by net
unc0rr
parents: 16
diff changeset
   220
     end
78bff13b11c0 With this patch the game doesn't crash when gaming by net
unc0rr
parents: 16
diff changeset
   221
end;
78bff13b11c0 With this patch the game doesn't crash when gaming by net
unc0rr
parents: 16
diff changeset
   222
78bff13b11c0 With this patch the game doesn't crash when gaming by net
unc0rr
parents: 16
diff changeset
   223
procedure AfterAttack;
78bff13b11c0 With this patch the game doesn't crash when gaming by net
unc0rr
parents: 16
diff changeset
   224
begin
602
f7628ebfccde Add CurrentHedgehog variable which simplifies code
unc0rr
parents: 558
diff changeset
   225
with CurrentHedgehog^.Gear^,
1286
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   226
		CurrentHedgehog^ do
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   227
	begin
1849
2a989e5abda6 4 utilities by nemo
unc0rr
parents: 1749
diff changeset
   228
	State:= State and not gstAttacking;
1883
7c7476f56114 - Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents: 1865
diff changeset
   229
	if ((Ammo^[CurSlot, CurAmmo].Propz) and ammoprop_Utility) = 0 then
7c7476f56114 - Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents: 1865
diff changeset
   230
		begin
7c7476f56114 - Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents: 1865
diff changeset
   231
		Inc(AttacksNum);
7c7476f56114 - Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents: 1865
diff changeset
   232
		if (Ammo^[CurSlot, CurAmmo].NumPerTurn >= AttacksNum) or
7c7476f56114 - Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents: 1865
diff changeset
   233
		((GameFlags and gfMultiWeapon) <> 0) then
7c7476f56114 - Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents: 1865
diff changeset
   234
			isInMultiShoot:= true
7c7476f56114 - Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents: 1865
diff changeset
   235
		else
7c7476f56114 - Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents: 1865
diff changeset
   236
			begin
7c7476f56114 - Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents: 1865
diff changeset
   237
			TurnTimeLeft:= Ammoz[Ammo^[CurSlot, CurAmmo].AmmoType].TimeAfterTurn;
7c7476f56114 - Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents: 1865
diff changeset
   238
			State:= State or gstAttacked;
7c7476f56114 - Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents: 1865
diff changeset
   239
			OnUsedAmmo(CurrentHedgehog^);
7c7476f56114 - Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents: 1865
diff changeset
   240
			end;
7c7476f56114 - Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents: 1865
diff changeset
   241
		end
7c7476f56114 - Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents: 1865
diff changeset
   242
	else
7c7476f56114 - Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents: 1865
diff changeset
   243
	begin
7c7476f56114 - Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents: 1865
diff changeset
   244
	OnUsedAmmo(CurrentHedgehog^);
7c7476f56114 - Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents: 1865
diff changeset
   245
	ApplyAmmoChanges(CurrentHedgehog^);
7c7476f56114 - Clear gm_Slot flag even if you can't switch ammo:
unc0rr
parents: 1865
diff changeset
   246
	end;
1286
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   247
	AttackBar:= 0;
a02a5345b91e Seduction animation
unc0rr
parents: 1285
diff changeset
   248
	end
32
78bff13b11c0 With this patch the game doesn't crash when gaming by net
unc0rr
parents: 16
diff changeset
   249
end;
78bff13b11c0 With this patch the game doesn't crash when gaming by net
unc0rr
parents: 16
diff changeset
   250
42
72ffe21f027c - Fixed console behavior
unc0rr
parents: 39
diff changeset
   251
////////////////////////////////////////////////////////////////////////////////
863
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   252
procedure doStepHedgehogDead(Gear: PGear);
868
4884bce5e5eb Hedgehog death animation
unc0rr
parents: 866
diff changeset
   253
const frametime = 200;
4884bce5e5eb Hedgehog death animation
unc0rr
parents: 866
diff changeset
   254
      timertime = frametime * 6;
863
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   255
begin
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   256
if Gear^.Timer > 1 then
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   257
	begin
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   258
	AllInactive:= false;
868
4884bce5e5eb Hedgehog death animation
unc0rr
parents: 866
diff changeset
   259
	dec(Gear^.Timer);
4884bce5e5eb Hedgehog death animation
unc0rr
parents: 866
diff changeset
   260
	if (Gear^.Timer mod frametime) = 0 then inc(Gear^.Pos)
863
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   261
	end else
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   262
if Gear^.Timer = 1 then
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   263
	begin
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   264
	Gear^.State:= Gear^.State or gstNoDamage;
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   265
	doMakeExplosion(hwRound(Gear^.X), hwRound(Gear^.Y), 30, EXPLAutoSound);
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   266
	AddGear(hwRound(Gear^.X), hwRound(Gear^.Y), gtGrave, 0, _0, _0, 0)^.Hedgehog:= Gear^.Hedgehog;
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   267
	DeleteGear(Gear);
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   268
	SetAllToActive
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   269
	end else // Gear^.Timer = 0
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   270
	begin
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   271
	AllInactive:= false;
868
4884bce5e5eb Hedgehog death animation
unc0rr
parents: 866
diff changeset
   272
	Gear^.Z:= cCurrHHZ;
4884bce5e5eb Hedgehog death animation
unc0rr
parents: 866
diff changeset
   273
	RemoveGearFromList(Gear);
4884bce5e5eb Hedgehog death animation
unc0rr
parents: 866
diff changeset
   274
	InsertGearToList(Gear);
1669
b709e061577e Mostly fix voicepack usage
unc0rr
parents: 1658
diff changeset
   275
	PlaySound(sndByeBye, false, PHedgehog(Gear^.Hedgehog)^.Team^.voicepack);
868
4884bce5e5eb Hedgehog death animation
unc0rr
parents: 866
diff changeset
   276
	Gear^.Pos:= 0;
4884bce5e5eb Hedgehog death animation
unc0rr
parents: 866
diff changeset
   277
	Gear^.Timer:= timertime
863
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   278
	end
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   279
end;
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   280
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   281
////////////////////////////////////////////////////////////////////////////////
42
72ffe21f027c - Fixed console behavior
unc0rr
parents: 39
diff changeset
   282
procedure PickUp(HH, Gear: PGear);
295
8834f3cb620e - Implement ammo cases
unc0rr
parents: 285
diff changeset
   283
var s: shortstring;
8834f3cb620e - Implement ammo cases
unc0rr
parents: 285
diff changeset
   284
    a: TAmmoType;
42
72ffe21f027c - Fixed console behavior
unc0rr
parents: 39
diff changeset
   285
begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   286
Gear^.Message:= gm_Destroy;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   287
case Gear^.Pos of
1964
dc9ea05c9d2f - Another way of defining official server
unc0rr
parents: 1922
diff changeset
   288
       posCaseUtility,
295
8834f3cb620e - Implement ammo cases
unc0rr
parents: 285
diff changeset
   289
       posCaseAmmo: begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   290
                    a:= TAmmoType(Gear^.State);
553
5478386d935f - Switch to bazooka (or whatever) after use of some weapon (fixes problem with bots)
unc0rr
parents: 549
diff changeset
   291
                    AddAmmo(PHedgehog(HH^.Hedgehog)^, a);
1072
6bc4389344c7 Show picked up ammo in demo playing mode
unc0rr
parents: 1066
diff changeset
   292
                    if (not (PHedgehog(HH^.Hedgehog)^.Team^.ExtDriven
6bc4389344c7 Show picked up ammo in demo playing mode
unc0rr
parents: 1066
diff changeset
   293
                      or (PHedgehog(HH^.Hedgehog)^.BotLevel > 0)))
6bc4389344c7 Show picked up ammo in demo playing mode
unc0rr
parents: 1066
diff changeset
   294
                    or (GameType = gmtDemo)  then
836
150c7c87e66c - Small formatting changes
unc0rr
parents: 835
diff changeset
   295
                       begin
150c7c87e66c - Small formatting changes
unc0rr
parents: 835
diff changeset
   296
                       s:= trammo[Ammoz[a].NameId] + '(+' + IntToStr(Ammoz[a].NumberInCase) + ')';
150c7c87e66c - Small formatting changes
unc0rr
parents: 835
diff changeset
   297
                       AddCaption(s, PHedgehog(HH^.Hedgehog)^.Team^.Clan^.Color, capgrpAmmoinfo);
150c7c87e66c - Small formatting changes
unc0rr
parents: 835
diff changeset
   298
                       end
295
8834f3cb620e - Implement ammo cases
unc0rr
parents: 285
diff changeset
   299
                    end;
42
72ffe21f027c - Fixed console behavior
unc0rr
parents: 39
diff changeset
   300
     posCaseHealth: begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   301
                    inc(HH^.Health, Gear^.Health);
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   302
                    str(Gear^.Health, s);
295
8834f3cb620e - Implement ammo cases
unc0rr
parents: 285
diff changeset
   303
                    s:= '+' + s;
549
4278a80140a8 - Introduce clans (teams with same color)
unc0rr
parents: 545
diff changeset
   304
                    AddCaption(s, PHedgehog(HH^.Hedgehog)^.Team^.Clan^.Color, capgrpAmmoinfo);
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   305
                    RenderHealth(PHedgehog(HH^.Hedgehog)^);
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   306
                    RecountTeamHealth(PHedgehog(HH^.Hedgehog)^.Team)
42
72ffe21f027c - Fixed console behavior
unc0rr
parents: 39
diff changeset
   307
                    end;
435
25820c10c849 Better AI behavior
unc0rr
parents: 434
diff changeset
   308
     end
42
72ffe21f027c - Fixed console behavior
unc0rr
parents: 39
diff changeset
   309
end;
32
78bff13b11c0 With this patch the game doesn't crash when gaming by net
unc0rr
parents: 16
diff changeset
   310
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   311
const StepTicks: LongWord = 0;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   312
302
7aca131ecd7f First implementation of Blow Torch
unc0rr
parents: 300
diff changeset
   313
procedure HedgehogStep(Gear: PGear);
371
731ad6d27bd1 integer -> LongInt
unc0rr
parents: 369
diff changeset
   314
var PrevdX: LongInt;
302
7aca131ecd7f First implementation of Blow Torch
unc0rr
parents: 300
diff changeset
   315
begin
542
ec26095f1bed - Get rid of ammoProp_AttackInFall and gstFalling
unc0rr
parents: 540
diff changeset
   316
if ((Gear^.State and (gstAttacking or gstMoving)) = 0) then
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   317
   begin
408
6c3da4907d00 Airplane can fly from right to left
unc0rr
parents: 394
diff changeset
   318
   if isCursorVisible then
6c3da4907d00 Airplane can fly from right to left
unc0rr
parents: 394
diff changeset
   319
      with PHedgehog(Gear^.Hedgehog)^ do
6c3da4907d00 Airplane can fly from right to left
unc0rr
parents: 394
diff changeset
   320
        with Ammo^[CurSlot, CurAmmo] do
6c3da4907d00 Airplane can fly from right to left
unc0rr
parents: 394
diff changeset
   321
          begin
542
ec26095f1bed - Get rid of ammoProp_AttackInFall and gstFalling
unc0rr
parents: 540
diff changeset
   322
          if (Gear^.Message and gm_Left  ) <> 0 then
408
6c3da4907d00 Airplane can fly from right to left
unc0rr
parents: 394
diff changeset
   323
             Pos:= (Pos + Ammoz[AmmoType].PosCount - 1) mod Ammoz[AmmoType].PosCount
6c3da4907d00 Airplane can fly from right to left
unc0rr
parents: 394
diff changeset
   324
          else
542
ec26095f1bed - Get rid of ammoProp_AttackInFall and gstFalling
unc0rr
parents: 540
diff changeset
   325
          if (Gear^.Message and gm_Right ) <> 0 then
408
6c3da4907d00 Airplane can fly from right to left
unc0rr
parents: 394
diff changeset
   326
             Pos:= (Pos + 1) mod Ammoz[AmmoType].PosCount
6c3da4907d00 Airplane can fly from right to left
unc0rr
parents: 394
diff changeset
   327
          else exit;
423
5f4559ce7062 Better construction tool
unc0rr
parents: 409
diff changeset
   328
          StepTicks:= 200;
408
6c3da4907d00 Airplane can fly from right to left
unc0rr
parents: 394
diff changeset
   329
          exit
6c3da4907d00 Airplane can fly from right to left
unc0rr
parents: 394
diff changeset
   330
          end;
505
fcba7d7aea0d Fix old bug with grenade(bomd, etc..) not colliding with attacking hedgehog
unc0rr
parents: 498
diff changeset
   331
1033
622c5de38d72 Start implementing waves
unc0rr
parents: 1012
diff changeset
   332
	if ((Gear^.Message and gm_Animate) <> 0) then
622c5de38d72 Start implementing waves
unc0rr
parents: 1012
diff changeset
   333
		begin
622c5de38d72 Start implementing waves
unc0rr
parents: 1012
diff changeset
   334
		Gear^.Message:= 0;
622c5de38d72 Start implementing waves
unc0rr
parents: 1012
diff changeset
   335
		Gear^.State:= Gear^.State or gstAnimation;
622c5de38d72 Start implementing waves
unc0rr
parents: 1012
diff changeset
   336
		Gear^.Tag:= Gear^.MsgParam;
622c5de38d72 Start implementing waves
unc0rr
parents: 1012
diff changeset
   337
		Gear^.Timer:= 0;
622c5de38d72 Start implementing waves
unc0rr
parents: 1012
diff changeset
   338
		Gear^.Pos:= 0
622c5de38d72 Start implementing waves
unc0rr
parents: 1012
diff changeset
   339
		end;
622c5de38d72 Start implementing waves
unc0rr
parents: 1012
diff changeset
   340
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   341
   if ((Gear^.Message and gm_LJump ) <> 0) then
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   342
      begin
542
ec26095f1bed - Get rid of ammoProp_AttackInFall and gstFalling
unc0rr
parents: 540
diff changeset
   343
      Gear^.Message:= Gear^.Message and not gm_LJump;
505
fcba7d7aea0d Fix old bug with grenade(bomd, etc..) not colliding with attacking hedgehog
unc0rr
parents: 498
diff changeset
   344
      DeleteCI(Gear);
68
cbb93eb90304 Collision-related stuff
unc0rr
parents: 62
diff changeset
   345
      if not TestCollisionYwithGear(Gear, -1) then
498
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 435
diff changeset
   346
         if not TestCollisionXwithXYShift(Gear, _0, -2, hwSign(Gear^.dX)) then Gear^.Y:= Gear^.Y - _2 else
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 435
diff changeset
   347
         if not TestCollisionXwithXYShift(Gear, _0, -1, hwSign(Gear^.dX)) then Gear^.Y:= Gear^.Y - _1;
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   348
      if not (TestCollisionXwithGear(Gear, hwSign(Gear^.dX))
68
cbb93eb90304 Collision-related stuff
unc0rr
parents: 62
diff changeset
   349
         or   TestCollisionYwithGear(Gear, -1)) then
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   350
         begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   351
         Gear^.dY:= -_0_15;
498
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 435
diff changeset
   352
         Gear^.dX:= SignAs(_0_15, Gear^.dX);
542
ec26095f1bed - Get rid of ammoProp_AttackInFall and gstFalling
unc0rr
parents: 540
diff changeset
   353
         Gear^.State:= Gear^.State or gstMoving or gstHHJumping;
1669
b709e061577e Mostly fix voicepack usage
unc0rr
parents: 1658
diff changeset
   354
         PlaySound(sndJump1, false, PHedgehog(Gear^.Hedgehog)^.Team^.voicepack);
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   355
         exit
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   356
         end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   357
      end;
505
fcba7d7aea0d Fix old bug with grenade(bomd, etc..) not colliding with attacking hedgehog
unc0rr
parents: 498
diff changeset
   358
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   359
   if ((Gear^.Message and gm_HJump ) <> 0) then
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   360
      begin
505
fcba7d7aea0d Fix old bug with grenade(bomd, etc..) not colliding with attacking hedgehog
unc0rr
parents: 498
diff changeset
   361
      DeleteCI(Gear);
542
ec26095f1bed - Get rid of ammoProp_AttackInFall and gstFalling
unc0rr
parents: 540
diff changeset
   362
      Gear^.Message:= Gear^.Message and not gm_HJump;
855
8842c71d16bf - Fix too long delay between shotgun and deagle shots
unc0rr
parents: 854
diff changeset
   363
8842c71d16bf - Fix too long delay between shotgun and deagle shots
unc0rr
parents: 854
diff changeset
   364
      Gear^.dY:= -_0_2;
8842c71d16bf - Fix too long delay between shotgun and deagle shots
unc0rr
parents: 854
diff changeset
   365
      SetLittle(Gear^.dX);
8842c71d16bf - Fix too long delay between shotgun and deagle shots
unc0rr
parents: 854
diff changeset
   366
      Gear^.State:= Gear^.State or gstMoving or gstHHJumping;
1669
b709e061577e Mostly fix voicepack usage
unc0rr
parents: 1658
diff changeset
   367
      PlaySound(sndJump3, false, PHedgehog(Gear^.Hedgehog)^.Team^.voicepack);
855
8842c71d16bf - Fix too long delay between shotgun and deagle shots
unc0rr
parents: 854
diff changeset
   368
      exit
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   369
      end;
505
fcba7d7aea0d Fix old bug with grenade(bomd, etc..) not colliding with attacking hedgehog
unc0rr
parents: 498
diff changeset
   370
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   371
   PrevdX:= hwSign(Gear^.dX);
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   372
   if (Gear^.Message and gm_Left  )<>0 then Gear^.dX:= -cLittle else
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   373
   if (Gear^.Message and gm_Right )<>0 then Gear^.dX:=  cLittle else exit;
505
fcba7d7aea0d Fix old bug with grenade(bomd, etc..) not colliding with attacking hedgehog
unc0rr
parents: 498
diff changeset
   374
74
42257fee61ae - Unicode support for team and hedgehogs names
unc0rr
parents: 73
diff changeset
   375
   StepTicks:= cHHStepTicks;
610
9b5a6200f667 - Training format change
unc0rr
parents: 602
diff changeset
   376
   if PrevdX <> hwSign(Gear^.dX) then
9b5a6200f667 - Training format change
unc0rr
parents: 602
diff changeset
   377
      begin
9b5a6200f667 - Training format change
unc0rr
parents: 602
diff changeset
   378
      FollowGear:= Gear;
9b5a6200f667 - Training format change
unc0rr
parents: 602
diff changeset
   379
      exit
9b5a6200f667 - Training format change
unc0rr
parents: 602
diff changeset
   380
      end;
9b5a6200f667 - Training format change
unc0rr
parents: 602
diff changeset
   381
   DeleteCI(Gear); // must be after exit!! (see previous line)
838
1faae19f2116 Remove tailing spaces in some places
unc0rr
parents: 836
diff changeset
   382
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   383
   PHedgehog(Gear^.Hedgehog)^.visStepPos:= (PHedgehog(Gear^.Hedgehog)^.visStepPos + 1) and 7;
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   384
   if TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   385
      begin
498
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 435
diff changeset
   386
      if not (TestCollisionXwithXYShift(Gear, _0, -6, hwSign(Gear^.dX))
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 435
diff changeset
   387
         or TestCollisionYwithGear(Gear, -1)) then Gear^.Y:= Gear^.Y - _1;
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 435
diff changeset
   388
      if not (TestCollisionXwithXYShift(Gear, _0, -5, hwSign(Gear^.dX))
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 435
diff changeset
   389
         or TestCollisionYwithGear(Gear, -1)) then Gear^.Y:= Gear^.Y - _1;
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 435
diff changeset
   390
      if not (TestCollisionXwithXYShift(Gear, _0, -4, hwSign(Gear^.dX))
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 435
diff changeset
   391
         or TestCollisionYwithGear(Gear, -1)) then Gear^.Y:= Gear^.Y - _1;
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 435
diff changeset
   392
      if not (TestCollisionXwithXYShift(Gear, _0, -3, hwSign(Gear^.dX))
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 435
diff changeset
   393
         or TestCollisionYwithGear(Gear, -1)) then Gear^.Y:= Gear^.Y - _1;
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 435
diff changeset
   394
      if not (TestCollisionXwithXYShift(Gear, _0, -2, hwSign(Gear^.dX))
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 435
diff changeset
   395
         or TestCollisionYwithGear(Gear, -1)) then Gear^.Y:= Gear^.Y - _1;
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 435
diff changeset
   396
      if not (TestCollisionXwithXYShift(Gear, _0, -1, hwSign(Gear^.dX))
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 435
diff changeset
   397
         or TestCollisionYwithGear(Gear, -1)) then Gear^.Y:= Gear^.Y - _1;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   398
      end;
1528
3fee15104c1d More stable blowtorch:
unc0rr
parents: 1519
diff changeset
   399
2017
7845c77c8d31 nemo's great patch:
unc0rr
parents: 1964
diff changeset
   400
   // ARTILLERY HERE
498
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 435
diff changeset
   401
   if not TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then Gear^.X:= Gear^.X + SignAs(_1, Gear^.dX);
62
c3eda0c68cd6 No more hedgehogs hung in air
unc0rr
parents: 56
diff changeset
   402
   SetAllHHToActive;
37
2b7f2a43b999 - Properly get seed in net game
unc0rr
parents: 32
diff changeset
   403
68
cbb93eb90304 Collision-related stuff
unc0rr
parents: 62
diff changeset
   404
   if not TestCollisionYwithGear(Gear, 1) then
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   405
   begin
498
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 435
diff changeset
   406
   Gear^.Y:= Gear^.Y + _1;
68
cbb93eb90304 Collision-related stuff
unc0rr
parents: 62
diff changeset
   407
   if not TestCollisionYwithGear(Gear, 1) then
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   408
   begin
498
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 435
diff changeset
   409
   Gear^.Y:= Gear^.Y + _1;
68
cbb93eb90304 Collision-related stuff
unc0rr
parents: 62
diff changeset
   410
   if not TestCollisionYwithGear(Gear, 1) then
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   411
   begin
498
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 435
diff changeset
   412
   Gear^.Y:= Gear^.Y + _1;
68
cbb93eb90304 Collision-related stuff
unc0rr
parents: 62
diff changeset
   413
   if not TestCollisionYwithGear(Gear, 1) then
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   414
   begin
498
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 435
diff changeset
   415
   Gear^.Y:= Gear^.Y + _1;
68
cbb93eb90304 Collision-related stuff
unc0rr
parents: 62
diff changeset
   416
   if not TestCollisionYwithGear(Gear, 1) then
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   417
   begin
498
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 435
diff changeset
   418
   Gear^.Y:= Gear^.Y + _1;
68
cbb93eb90304 Collision-related stuff
unc0rr
parents: 62
diff changeset
   419
   if not TestCollisionYwithGear(Gear, 1) then
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   420
   begin
498
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 435
diff changeset
   421
   Gear^.Y:= Gear^.Y + _1;
68
cbb93eb90304 Collision-related stuff
unc0rr
parents: 62
diff changeset
   422
   if not TestCollisionYwithGear(Gear, 1) then
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   423
      begin
498
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 435
diff changeset
   424
      Gear^.Y:= Gear^.Y - _6;
9c8b385dc9a1 - Get rid of operator := to have GPC support
unc0rr
parents: 435
diff changeset
   425
      Gear^.dY:= _0;
542
ec26095f1bed - Get rid of ammoProp_AttackInFall and gstFalling
unc0rr
parents: 540
diff changeset
   426
      Gear^.State:= Gear^.State or gstMoving;
505
fcba7d7aea0d Fix old bug with grenade(bomd, etc..) not colliding with attacking hedgehog
unc0rr
parents: 498
diff changeset
   427
      exit
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   428
      end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   429
   end
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   430
   end
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   431
   end
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   432
   end
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   433
   end
505
fcba7d7aea0d Fix old bug with grenade(bomd, etc..) not colliding with attacking hedgehog
unc0rr
parents: 498
diff changeset
   434
   end;
fcba7d7aea0d Fix old bug with grenade(bomd, etc..) not colliding with attacking hedgehog
unc0rr
parents: 498
diff changeset
   435
   AddGearCI(Gear)
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   436
   end
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   437
end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   438
303
1659c4aad5ab Now blow torch angle can be changed during blowing :)
unc0rr
parents: 302
diff changeset
   439
procedure HedgehogChAngle(Gear: PGear);
958
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 952
diff changeset
   440
var da: LongWord;
303
1659c4aad5ab Now blow torch angle can be changed during blowing :)
unc0rr
parents: 302
diff changeset
   441
begin
958
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 952
diff changeset
   442
with PHedgehog(Gear^.Hedgehog)^ do
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 952
diff changeset
   443
	if (Ammo^[CurSlot, CurAmmo].AmmoType = amRope)
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 952
diff changeset
   444
	and ((Gear^.State and (gstMoving or gstHHJumping)) = gstMoving) then da:= 2 else da:= 1;
92bb9fa046f9 Aim at high speed when performing rope swinging
unc0rr
parents: 952
diff changeset
   445
1639
89b536a3cf3c Implement precise aiming when pressing left shift
unc0rr
parents: 1629
diff changeset
   446
if (((Gear^.Message and gm_Precise) = 0) or ((GameTicks mod 5) = 1)) then
89b536a3cf3c Implement precise aiming when pressing left shift
unc0rr
parents: 1629
diff changeset
   447
	if ((Gear^.Message and gm_Up) <> 0) and (Gear^.Angle - da >= CurMinAngle) then dec(Gear^.Angle, da)
89b536a3cf3c Implement precise aiming when pressing left shift
unc0rr
parents: 1629
diff changeset
   448
	else
1689
3d0eee01f734 RC Plane
unc0rr
parents: 1682
diff changeset
   449
	if ((Gear^.Message and gm_Down) <> 0) and (Gear^.Angle + da <= CurMaxAngle) then inc(Gear^.Angle, da)
303
1659c4aad5ab Now blow torch angle can be changed during blowing :)
unc0rr
parents: 302
diff changeset
   450
end;
1659c4aad5ab Now blow torch angle can be changed during blowing :)
unc0rr
parents: 302
diff changeset
   451
302
7aca131ecd7f First implementation of Blow Torch
unc0rr
parents: 300
diff changeset
   452
procedure doStepHedgehog(Gear: PGear); forward;
7aca131ecd7f First implementation of Blow Torch
unc0rr
parents: 300
diff changeset
   453
////////////////////////////////////////////////////////////////////////////////
538
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   454
procedure doStepHedgehogMoving(Gear: PGear);
545
f527450337c1 Fix some warnings
unc0rr
parents: 543
diff changeset
   455
var isFalling: boolean;
538
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   456
begin
855
8842c71d16bf - Fix too long delay between shotgun and deagle shots
unc0rr
parents: 854
diff changeset
   457
isFalling:= (Gear^.dY.isNegative) or not TestCollisionYKick(Gear, 1);
542
ec26095f1bed - Get rid of ammoProp_AttackInFall and gstFalling
unc0rr
parents: 540
diff changeset
   458
if isFalling then
538
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   459
   begin
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   460
   if (Gear^.dY.isNegative) and TestCollisionYKick(Gear, -1) then Gear^.dY:= _0;
542
ec26095f1bed - Get rid of ammoProp_AttackInFall and gstFalling
unc0rr
parents: 540
diff changeset
   461
   Gear^.State:= Gear^.State or gstMoving;
538
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   462
   Gear^.dY:= Gear^.dY + cGravity
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   463
   end else
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   464
   begin
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   465
   if ((hwAbs(Gear^.dX) + hwAbs(Gear^.dY)) < _0_55)
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   466
      and ((Gear^.State and gstHHJumping) <> 0) then SetLittle(Gear^.dX);
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   467
540
b06c5aace2fa - Many fixes related to hh switcher
unc0rr
parents: 538
diff changeset
   468
   if not Gear^.dY.isNegative then
b06c5aace2fa - Many fixes related to hh switcher
unc0rr
parents: 538
diff changeset
   469
      begin
b06c5aace2fa - Many fixes related to hh switcher
unc0rr
parents: 538
diff changeset
   470
      CheckHHDamage(Gear);
790
a6f442173822 Make high jump behaviour like in worms (back somersault)
unc0rr
parents: 783
diff changeset
   471
a6f442173822 Make high jump behaviour like in worms (back somersault)
unc0rr
parents: 783
diff changeset
   472
      if ((Gear^.State and gstHHHJump) <> 0) and
a6f442173822 Make high jump behaviour like in worms (back somersault)
unc0rr
parents: 783
diff changeset
   473
         (Gear^.dX.QWordValue < _0_02.QWordValue) then Gear^.dX.isNegative:= not Gear^.dX.isNegative; // landing after high jump
a6f442173822 Make high jump behaviour like in worms (back somersault)
unc0rr
parents: 783
diff changeset
   474
542
ec26095f1bed - Get rid of ammoProp_AttackInFall and gstFalling
unc0rr
parents: 540
diff changeset
   475
      Gear^.State:= Gear^.State and not (gstHHJumping or gstHHHJump);
540
b06c5aace2fa - Many fixes related to hh switcher
unc0rr
parents: 538
diff changeset
   476
      Gear^.dY:= _0;
b06c5aace2fa - Many fixes related to hh switcher
unc0rr
parents: 538
diff changeset
   477
      end else Gear^.dY:= Gear^.dY + cGravity;
538
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   478
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   479
   if ((Gear^.State and gstMoving) <> 0) then Gear^.dX:= Gear^.dX * Gear^.Friction
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   480
   end;
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   481
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   482
if (Gear^.State <> 0) then DeleteCI(Gear);
783
4f59db6f147d - New command 'set weapon'
unc0rr
parents: 614
diff changeset
   483
538
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   484
if (Gear^.State and gstMoving) <> 0 then
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   485
   if TestCollisionXKick(Gear, hwSign(Gear^.dX)) then
542
ec26095f1bed - Get rid of ammoProp_AttackInFall and gstFalling
unc0rr
parents: 540
diff changeset
   486
      if not isFalling then
538
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   487
         if hwAbs(Gear^.dX) > _0_01 then
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   488
            if not TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -1, hwSign(Gear^.dX)) then begin Gear^.X:= Gear^.X + Gear^.dX; Gear^.dX:= Gear^.dX * _0_96; Gear^.Y:= Gear^.Y - _1 end else
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   489
            if not TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -2, hwSign(Gear^.dX)) then begin Gear^.X:= Gear^.X + Gear^.dX; Gear^.dX:= Gear^.dX * _0_93; Gear^.Y:= Gear^.Y - _2 end else
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   490
            if not TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -3, hwSign(Gear^.dX)) then begin Gear^.X:= Gear^.X + Gear^.dX; Gear^.dX:= Gear^.dX * _0_9 ; Gear^.Y:= Gear^.Y - _3 end else
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   491
            if not TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -4, hwSign(Gear^.dX)) then begin Gear^.X:= Gear^.X + Gear^.dX; Gear^.dX:= Gear^.dX * _0_87; Gear^.Y:= Gear^.Y - _4 end else
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   492
            if not TestCollisionXwithXYShift(Gear, int2hwFloat(hwSign(Gear^.dX)) - Gear^.dX, -5, hwSign(Gear^.dX)) then begin Gear^.X:= Gear^.X + Gear^.dX; Gear^.dX:= Gear^.dX * _0_84; Gear^.Y:= Gear^.Y - _5 end else
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   493
            if hwAbs(Gear^.dX) > _0_02 then Gear^.dX:= -Gear^.Elasticity * Gear^.dX
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   494
                                   else begin
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   495
                                        Gear^.State:= Gear^.State and not gstMoving;
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   496
                                        SetLittle(Gear^.dX)
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   497
                                        end
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   498
            else begin
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   499
                 Gear^.State:= Gear^.State and not gstMoving;
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   500
                 SetLittle(Gear^.dX)
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   501
                 end
1518
4e5796fe3aac Fix jump landing after turn end
unc0rr
parents: 1507
diff changeset
   502
         else if (hwAbs(Gear^.dX) > cLittle)
4e5796fe3aac Fix jump landing after turn end
unc0rr
parents: 1507
diff changeset
   503
                and ((Gear^.State and gstHHJumping) = 0)
4e5796fe3aac Fix jump landing after turn end
unc0rr
parents: 1507
diff changeset
   504
                then Gear^.dX:= -Gear^.Elasticity * Gear^.dX
4e5796fe3aac Fix jump landing after turn end
unc0rr
parents: 1507
diff changeset
   505
                else SetLittle(Gear^.dX);
538
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   506
542
ec26095f1bed - Get rid of ammoProp_AttackInFall and gstFalling
unc0rr
parents: 540
diff changeset
   507
if (not isFalling) and
538
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   508
   (hwAbs(Gear^.dX) + hwAbs(Gear^.dY) < _0_03) then
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   509
   begin
1865
ebc6dfca60d4 - nemo's patch: some animations, zero probability for infinite weapons
unc0rr
parents: 1861
diff changeset
   510
   Gear^.State:= Gear^.State and not gstWinner;
538
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   511
   Gear^.State:= Gear^.State and not gstMoving;
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   512
   SetLittle(Gear^.dX);
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   513
   Gear^.dY:= _0
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   514
   end else Gear^.State:= Gear^.State or gstMoving;
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   515
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   516
if (Gear^.State and gstMoving) <> 0 then
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   517
   begin
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   518
   Gear^.State:= Gear^.State and not gstAnimation;
2017
7845c77c8d31 nemo's great patch:
unc0rr
parents: 1964
diff changeset
   519
// ARTILLERY but not being moved by explosions
538
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   520
   Gear^.X:= Gear^.X + Gear^.dX;
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   521
   Gear^.Y:= Gear^.Y + Gear^.dY;
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   522
   if (not Gear^.dY.isNegative) and
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   523
      (not TestCollisionYKick(Gear, 1)) and
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   524
       TestCollisionYwithXYShift(Gear, 0, 1, 1) then
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   525
      begin
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   526
      CheckHHDamage(Gear);
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   527
      Gear^.dY:= _0;
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   528
      Gear^.Y:= Gear^.Y + _1
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   529
      end;
1658
208a3258afdf Fix a bug with visible cursor when hedgehog is dead
unc0rr
parents: 1645
diff changeset
   530
   CheckGearDrowning(Gear);
208a3258afdf Fix a bug with visible cursor when hedgehog is dead
unc0rr
parents: 1645
diff changeset
   531
   if (Gear^.State and gstDrowning) <> 0 then isCursorVisible:= false
538
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   532
   end
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   533
end;
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   534
302
7aca131ecd7f First implementation of Blow Torch
unc0rr
parents: 300
diff changeset
   535
procedure doStepHedgehogDriven(Gear: PGear);
7aca131ecd7f First implementation of Blow Torch
unc0rr
parents: 300
diff changeset
   536
var t: PGear;
1519
7b6adbe5266a More delay after jump, less delay after small fall for hedgehog
unc0rr
parents: 1518
diff changeset
   537
	wasJumping: boolean;
302
7aca131ecd7f First implementation of Blow Torch
unc0rr
parents: 300
diff changeset
   538
begin
558
b2b840eeb10a Fix bug when hedgehog moves not right after it is kicked
unc0rr
parents: 553
diff changeset
   539
if not isInMultiShoot then
b2b840eeb10a Fix bug when hedgehog moves not right after it is kicked
unc0rr
parents: 553
diff changeset
   540
   AllInactive:= false
b2b840eeb10a Fix bug when hedgehog moves not right after it is kicked
unc0rr
parents: 553
diff changeset
   541
else
b2b840eeb10a Fix bug when hedgehog moves not right after it is kicked
unc0rr
parents: 553
diff changeset
   542
   Gear^.Message:= 0;
505
fcba7d7aea0d Fix old bug with grenade(bomd, etc..) not colliding with attacking hedgehog
unc0rr
parents: 498
diff changeset
   543
1035
6f5842bc481b Hopefully done taunts implementation
unc0rr
parents: 1034
diff changeset
   544
if (TurnTimeLeft = 0) or (Gear^.Damage > 0) then
1645
f010d68adbb7 Fix two cursor bugs
unc0rr
parents: 1639
diff changeset
   545
	begin
f010d68adbb7 Fix two cursor bugs
unc0rr
parents: 1639
diff changeset
   546
	TurnTimeLeft:= 0;
f010d68adbb7 Fix two cursor bugs
unc0rr
parents: 1639
diff changeset
   547
	isCursorVisible:= false;
1749
7170f626e9d6 Fix crash when attackbar wasn't deleted, but hedgehog gear was
unc0rr
parents: 1712
diff changeset
   548
	Gear^.State:= Gear^.State and not (gstHHDriven or gstAnimation or gstAttacking);
7170f626e9d6 Fix crash when attackbar wasn't deleted, but hedgehog gear was
unc0rr
parents: 1712
diff changeset
   549
	AttackBar:= 0;
1645
f010d68adbb7 Fix two cursor bugs
unc0rr
parents: 1639
diff changeset
   550
	if Gear^.Damage > 0 then
f010d68adbb7 Fix two cursor bugs
unc0rr
parents: 1639
diff changeset
   551
		Gear^.State:= Gear^.State and not (gstHHJumping or gstHHHJump);
f010d68adbb7 Fix two cursor bugs
unc0rr
parents: 1639
diff changeset
   552
	exit
f010d68adbb7 Fix two cursor bugs
unc0rr
parents: 1639
diff changeset
   553
	end;
1035
6f5842bc481b Hopefully done taunts implementation
unc0rr
parents: 1034
diff changeset
   554
1033
622c5de38d72 Start implementing waves
unc0rr
parents: 1012
diff changeset
   555
if (Gear^.State and gstAnimation) <> 0 then
622c5de38d72 Start implementing waves
unc0rr
parents: 1012
diff changeset
   556
	begin
622c5de38d72 Start implementing waves
unc0rr
parents: 1012
diff changeset
   557
	Gear^.Message:= 0;
622c5de38d72 Start implementing waves
unc0rr
parents: 1012
diff changeset
   558
	inc(Gear^.Timer);
622c5de38d72 Start implementing waves
unc0rr
parents: 1012
diff changeset
   559
	if Gear^.Timer = 125 then
622c5de38d72 Start implementing waves
unc0rr
parents: 1012
diff changeset
   560
		begin
622c5de38d72 Start implementing waves
unc0rr
parents: 1012
diff changeset
   561
		Gear^.Timer:= 0;
622c5de38d72 Start implementing waves
unc0rr
parents: 1012
diff changeset
   562
		inc(Gear^.Pos);
1034
05f003ad3caa Further work on taunts
unc0rr
parents: 1033
diff changeset
   563
		if Gear^.Pos = Wavez[TWave(Gear^.Tag)].FramesCount then
1033
622c5de38d72 Start implementing waves
unc0rr
parents: 1012
diff changeset
   564
			Gear^.State:= Gear^.State and not gstAnimation
622c5de38d72 Start implementing waves
unc0rr
parents: 1012
diff changeset
   565
		end;
622c5de38d72 Start implementing waves
unc0rr
parents: 1012
diff changeset
   566
	exit
622c5de38d72 Start implementing waves
unc0rr
parents: 1012
diff changeset
   567
	end;
622c5de38d72 Start implementing waves
unc0rr
parents: 1012
diff changeset
   568
836
150c7c87e66c - Small formatting changes
unc0rr
parents: 835
diff changeset
   569
if ((Gear^.State and gstMoving) <> 0)
150c7c87e66c - Small formatting changes
unc0rr
parents: 835
diff changeset
   570
    or (StepTicks = cHHStepTicks)
835
6f567934cc44 Automatically use parachute when vertical speed is high enough
unc0rr
parents: 829
diff changeset
   571
	or (CurAmmoGear <> nil) then // we're moving
836
150c7c87e66c - Small formatting changes
unc0rr
parents: 835
diff changeset
   572
	begin
839
1493f697d1bb Fix broken logic for the new parachute feature
unc0rr
parents: 838
diff changeset
   573
	with PHedgehog(Gear^.Hedgehog)^ do
1493f697d1bb Fix broken logic for the new parachute feature
unc0rr
parents: 838
diff changeset
   574
		if (CurAmmoGear = nil)
1493f697d1bb Fix broken logic for the new parachute feature
unc0rr
parents: 838
diff changeset
   575
		and (Gear^.dY > _0_39)
1493f697d1bb Fix broken logic for the new parachute feature
unc0rr
parents: 838
diff changeset
   576
		and (Ammo^[CurSlot, CurAmmo].AmmoType = amParachute) then Gear^.Message:= Gear^.Message or gm_Attack;
836
150c7c87e66c - Small formatting changes
unc0rr
parents: 835
diff changeset
   577
	// check for case with ammo
150c7c87e66c - Small formatting changes
unc0rr
parents: 835
diff changeset
   578
	t:= CheckGearNear(Gear, gtCase, 36, 36);
150c7c87e66c - Small formatting changes
unc0rr
parents: 835
diff changeset
   579
	if t <> nil then
150c7c87e66c - Small formatting changes
unc0rr
parents: 835
diff changeset
   580
		PickUp(Gear, t)
855
8842c71d16bf - Fix too long delay between shotgun and deagle shots
unc0rr
parents: 854
diff changeset
   581
	end;
302
7aca131ecd7f First implementation of Blow Torch
unc0rr
parents: 300
diff changeset
   582
930
3f61bd3b08fd Initial support for attacking from rope
unc0rr
parents: 928
diff changeset
   583
if (CurAmmoGear = nil) then
3f61bd3b08fd Initial support for attacking from rope
unc0rr
parents: 928
diff changeset
   584
	if (((Gear^.Message and gm_Attack) <> 0)
3f61bd3b08fd Initial support for attacking from rope
unc0rr
parents: 928
diff changeset
   585
		or ((Gear^.State and gstAttacking) <> 0)) then
3f61bd3b08fd Initial support for attacking from rope
unc0rr
parents: 928
diff changeset
   586
		Attack(Gear) // should be before others to avoid desync with '/put' msg and changing weapon msgs
3f61bd3b08fd Initial support for attacking from rope
unc0rr
parents: 928
diff changeset
   587
	else
3f61bd3b08fd Initial support for attacking from rope
unc0rr
parents: 928
diff changeset
   588
else with PHedgehog(Gear^.Hedgehog)^ do
1519
7b6adbe5266a More delay after jump, less delay after small fall for hedgehog
unc0rr
parents: 1518
diff changeset
   589
	 if ((CurAmmoGear^.Ammo^.Propz and ammoprop_AltAttack) <> 0)
930
3f61bd3b08fd Initial support for attacking from rope
unc0rr
parents: 928
diff changeset
   590
		and ((Gear^.Message and gm_LJump) <> 0)
931
ab4d98858a40 Fix some bugs with dropping from parachute
unc0rr
parents: 930
diff changeset
   591
		and (((Ammo^[CurSlot, CurAmmo].Propz) and ammoprop_AltUse) <> 0) then
ab4d98858a40 Fix some bugs with dropping from parachute
unc0rr
parents: 930
diff changeset
   592
		begin
ab4d98858a40 Fix some bugs with dropping from parachute
unc0rr
parents: 930
diff changeset
   593
		Gear^.Message:= Gear^.Message and not gm_LJump;
ab4d98858a40 Fix some bugs with dropping from parachute
unc0rr
parents: 930
diff changeset
   594
		Attack(Gear)
ab4d98858a40 Fix some bugs with dropping from parachute
unc0rr
parents: 930
diff changeset
   595
		end;
930
3f61bd3b08fd Initial support for attacking from rope
unc0rr
parents: 928
diff changeset
   596
3f61bd3b08fd Initial support for attacking from rope
unc0rr
parents: 928
diff changeset
   597
if (CurAmmoGear = nil)
3f61bd3b08fd Initial support for attacking from rope
unc0rr
parents: 928
diff changeset
   598
	or ((CurAmmoGear^.Ammo^.Propz and ammoprop_AltAttack) <> 0) then
3f61bd3b08fd Initial support for attacking from rope
unc0rr
parents: 928
diff changeset
   599
	begin
1710
cecb3cc93251 Fix angle restriction applying to rc plane when choosing via ammomenu
unc0rr
parents: 1689
diff changeset
   600
	if ((Gear^.Message and gm_Slot) <> 0) then
cecb3cc93251 Fix angle restriction applying to rc plane when choosing via ammomenu
unc0rr
parents: 1689
diff changeset
   601
		begin
cecb3cc93251 Fix angle restriction applying to rc plane when choosing via ammomenu
unc0rr
parents: 1689
diff changeset
   602
		ChangeAmmo(Gear);
cecb3cc93251 Fix angle restriction applying to rc plane when choosing via ammomenu
unc0rr
parents: 1689
diff changeset
   603
		ApplyAmmoChanges(PHedgehog(Gear^.Hedgehog)^)
cecb3cc93251 Fix angle restriction applying to rc plane when choosing via ammomenu
unc0rr
parents: 1689
diff changeset
   604
		end;
930
3f61bd3b08fd Initial support for attacking from rope
unc0rr
parents: 928
diff changeset
   605
3f61bd3b08fd Initial support for attacking from rope
unc0rr
parents: 928
diff changeset
   606
	if ((Gear^.Message and gm_Weapon) <> 0) then HHSetWeapon(Gear);
3f61bd3b08fd Initial support for attacking from rope
unc0rr
parents: 928
diff changeset
   607
3f61bd3b08fd Initial support for attacking from rope
unc0rr
parents: 928
diff changeset
   608
	if ((Gear^.Message and gm_Timer) <> 0) then HHSetTimer(Gear);
3f61bd3b08fd Initial support for attacking from rope
unc0rr
parents: 928
diff changeset
   609
	end;
3f61bd3b08fd Initial support for attacking from rope
unc0rr
parents: 928
diff changeset
   610
302
7aca131ecd7f First implementation of Blow Torch
unc0rr
parents: 300
diff changeset
   611
if CurAmmoGear <> nil then
7aca131ecd7f First implementation of Blow Torch
unc0rr
parents: 300
diff changeset
   612
   begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   613
   CurAmmoGear^.Message:= Gear^.Message;
302
7aca131ecd7f First implementation of Blow Torch
unc0rr
parents: 300
diff changeset
   614
   exit
7aca131ecd7f First implementation of Blow Torch
unc0rr
parents: 300
diff changeset
   615
   end;
7aca131ecd7f First implementation of Blow Torch
unc0rr
parents: 300
diff changeset
   616
952
9dd48265e0b9 Allow aiming while moving
unc0rr
parents: 941
diff changeset
   617
if not isInMultiShoot then
9dd48265e0b9 Allow aiming while moving
unc0rr
parents: 941
diff changeset
   618
   HedgehogChAngle(Gear);
926
d231e007452a Timer as hedgehog message (avoid possible desync in very rare cases)
unc0rr
parents: 925
diff changeset
   619
542
ec26095f1bed - Get rid of ammoProp_AttackInFall and gstFalling
unc0rr
parents: 540
diff changeset
   620
if (Gear^.State and gstMoving) <> 0 then
1519
7b6adbe5266a More delay after jump, less delay after small fall for hedgehog
unc0rr
parents: 1518
diff changeset
   621
	begin
7b6adbe5266a More delay after jump, less delay after small fall for hedgehog
unc0rr
parents: 1518
diff changeset
   622
	wasJumping:= ((Gear^.State and gstHHJumping) <> 0);
7b6adbe5266a More delay after jump, less delay after small fall for hedgehog
unc0rr
parents: 1518
diff changeset
   623
	
7b6adbe5266a More delay after jump, less delay after small fall for hedgehog
unc0rr
parents: 1518
diff changeset
   624
	if ((Gear^.Message and gm_HJump) <> 0) and
7b6adbe5266a More delay after jump, less delay after small fall for hedgehog
unc0rr
parents: 1518
diff changeset
   625
		wasJumping and
7b6adbe5266a More delay after jump, less delay after small fall for hedgehog
unc0rr
parents: 1518
diff changeset
   626
		((Gear^.State and gstHHHJump) = 0) then
7b6adbe5266a More delay after jump, less delay after small fall for hedgehog
unc0rr
parents: 1518
diff changeset
   627
		if (not (hwAbs(Gear^.dX) > cLittle)) and (Gear^.dY < -_0_02) then
7b6adbe5266a More delay after jump, less delay after small fall for hedgehog
unc0rr
parents: 1518
diff changeset
   628
			begin
7b6adbe5266a More delay after jump, less delay after small fall for hedgehog
unc0rr
parents: 1518
diff changeset
   629
			Gear^.State:= Gear^.State or gstHHHJump or gstMoving;
7b6adbe5266a More delay after jump, less delay after small fall for hedgehog
unc0rr
parents: 1518
diff changeset
   630
			Gear^.dY:= -_0_25;
7b6adbe5266a More delay after jump, less delay after small fall for hedgehog
unc0rr
parents: 1518
diff changeset
   631
			Gear^.dX:= -SignAs(_0_02, Gear^.dX);
1669
b709e061577e Mostly fix voicepack usage
unc0rr
parents: 1658
diff changeset
   632
			PlaySound(sndJump2, false, PHedgehog(Gear^.Hedgehog)^.Team^.voicepack)
1519
7b6adbe5266a More delay after jump, less delay after small fall for hedgehog
unc0rr
parents: 1518
diff changeset
   633
			end;
7b6adbe5266a More delay after jump, less delay after small fall for hedgehog
unc0rr
parents: 1518
diff changeset
   634
	
7b6adbe5266a More delay after jump, less delay after small fall for hedgehog
unc0rr
parents: 1518
diff changeset
   635
	Gear^.Message:= Gear^.Message and not (gm_LJump or gm_HJump);
538
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   636
1519
7b6adbe5266a More delay after jump, less delay after small fall for hedgehog
unc0rr
parents: 1518
diff changeset
   637
	if wasJumping and
7b6adbe5266a More delay after jump, less delay after small fall for hedgehog
unc0rr
parents: 1518
diff changeset
   638
		TestCollisionXwithGear(Gear, hwSign(Gear^.dX)) then SetLittle(Gear^.dX);
538
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   639
1519
7b6adbe5266a More delay after jump, less delay after small fall for hedgehog
unc0rr
parents: 1518
diff changeset
   640
	doStepHedgehogMoving(Gear);
542
ec26095f1bed - Get rid of ammoProp_AttackInFall and gstFalling
unc0rr
parents: 540
diff changeset
   641
1519
7b6adbe5266a More delay after jump, less delay after small fall for hedgehog
unc0rr
parents: 1518
diff changeset
   642
	if ((Gear^.State and (gstMoving or gstDrowning)) = 0) then
7b6adbe5266a More delay after jump, less delay after small fall for hedgehog
unc0rr
parents: 1518
diff changeset
   643
		begin
7b6adbe5266a More delay after jump, less delay after small fall for hedgehog
unc0rr
parents: 1518
diff changeset
   644
		AddGearCI(Gear);
7b6adbe5266a More delay after jump, less delay after small fall for hedgehog
unc0rr
parents: 1518
diff changeset
   645
		if wasJumping then
7b6adbe5266a More delay after jump, less delay after small fall for hedgehog
unc0rr
parents: 1518
diff changeset
   646
			StepTicks:= 410
7b6adbe5266a More delay after jump, less delay after small fall for hedgehog
unc0rr
parents: 1518
diff changeset
   647
		else
7b6adbe5266a More delay after jump, less delay after small fall for hedgehog
unc0rr
parents: 1518
diff changeset
   648
			StepTicks:= 95
7b6adbe5266a More delay after jump, less delay after small fall for hedgehog
unc0rr
parents: 1518
diff changeset
   649
		end;
7b6adbe5266a More delay after jump, less delay after small fall for hedgehog
unc0rr
parents: 1518
diff changeset
   650
	exit
7b6adbe5266a More delay after jump, less delay after small fall for hedgehog
unc0rr
parents: 1518
diff changeset
   651
	end;
302
7aca131ecd7f First implementation of Blow Torch
unc0rr
parents: 300
diff changeset
   652
1033
622c5de38d72 Start implementing waves
unc0rr
parents: 1012
diff changeset
   653
	if not isInMultiShoot then
622c5de38d72 Start implementing waves
unc0rr
parents: 1012
diff changeset
   654
		begin
622c5de38d72 Start implementing waves
unc0rr
parents: 1012
diff changeset
   655
		if StepTicks > 0 then dec(StepTicks);
622c5de38d72 Start implementing waves
unc0rr
parents: 1012
diff changeset
   656
		if (StepTicks = 0) then HedgehogStep(Gear)
622c5de38d72 Start implementing waves
unc0rr
parents: 1012
diff changeset
   657
		end
302
7aca131ecd7f First implementation of Blow Torch
unc0rr
parents: 300
diff changeset
   658
end;
7aca131ecd7f First implementation of Blow Torch
unc0rr
parents: 300
diff changeset
   659
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   660
////////////////////////////////////////////////////////////////////////////////
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   661
procedure doStepHedgehogFree(Gear: PGear);
511
2b5b9e00419d - Further work on new collisions implementation
unc0rr
parents: 505
diff changeset
   662
var prevState: Longword;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   663
begin
511
2b5b9e00419d - Further work on new collisions implementation
unc0rr
parents: 505
diff changeset
   664
prevState:= Gear^.State;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   665
538
74219eadab5e - Various small fixes
unc0rr
parents: 534
diff changeset
   666
doStepHedgehogMoving(Gear);
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   667
1002
14ecd5fd4fab Implement drowning hedgehog sprite
unc0rr
parents: 984
diff changeset
   668
if (Gear^.State and (gstMoving or gstDrowning)) <> 0 then
865
a4a5ec6c61d4 - Fix introduced bug with hh physics
unc0rr
parents: 864
diff changeset
   669
	begin
1012
36b5cc8264e8 Damaged hedgehog animation
unc0rr
parents: 1002
diff changeset
   670
	if Gear^.Damage > 0 then CalcRotationDirAngle(Gear);
865
a4a5ec6c61d4 - Fix introduced bug with hh physics
unc0rr
parents: 864
diff changeset
   671
	AllInactive:= false;
a4a5ec6c61d4 - Fix introduced bug with hh physics
unc0rr
parents: 864
diff changeset
   672
	exit
a4a5ec6c61d4 - Fix introduced bug with hh physics
unc0rr
parents: 864
diff changeset
   673
	end;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   674
863
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   675
if (Gear^.Health = 0) then
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   676
	begin
868
4884bce5e5eb Hedgehog death animation
unc0rr
parents: 866
diff changeset
   677
	if PrvInactive then
864
024369e09a53 Use some more sounds
unc0rr
parents: 863
diff changeset
   678
		begin
024369e09a53 Use some more sounds
unc0rr
parents: 863
diff changeset
   679
		Gear^.Timer:= 0;
868
4884bce5e5eb Hedgehog death animation
unc0rr
parents: 866
diff changeset
   680
		Gear^.State:= Gear^.State or gstHHDeath;
4884bce5e5eb Hedgehog death animation
unc0rr
parents: 866
diff changeset
   681
		Gear^.doStep:= @doStepHedgehogDead;
1347
1102e19780b9 - Set focus to dead hedgehog
unc0rr
parents: 1286
diff changeset
   682
		FollowGear:= Gear;
868
4884bce5e5eb Hedgehog death animation
unc0rr
parents: 866
diff changeset
   683
		PrvInactive:= false;
4884bce5e5eb Hedgehog death animation
unc0rr
parents: 866
diff changeset
   684
		AllInactive:= false
864
024369e09a53 Use some more sounds
unc0rr
parents: 863
diff changeset
   685
		end;
863
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   686
	exit
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   687
	end;
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   688
1033
622c5de38d72 Start implementing waves
unc0rr
parents: 1012
diff changeset
   689
if ((Gear^.State and gstWait) = 0) and
863
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   690
	(prevState <> Gear^.State) then
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   691
	begin
1033
622c5de38d72 Start implementing waves
unc0rr
parents: 1012
diff changeset
   692
	Gear^.State:= gstWait;
863
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   693
	Gear^.Timer:= 150
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   694
	end else
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   695
	begin
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   696
	if Gear^.Timer = 0 then
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   697
		begin
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   698
		Gear^.State:= 0;
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   699
		Gear^.Active:= false;
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   700
		AddGearCI(Gear);
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   701
		exit
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   702
		end else dec(Gear^.Timer)
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   703
	end;
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   704
dfa3aa51ecb5 Merge some more sounds
unc0rr
parents: 855
diff changeset
   705
AllInactive:= false
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   706
end;
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   707
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   708
////////////////////////////////////////////////////////////////////////////////
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   709
procedure doStepHedgehog(Gear: PGear);
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   710
begin
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   711
if (Gear^.Message and gm_Destroy) <> 0 then
1505
3a96e93572cb - Convert small damage tag to visual gears
unc0rr
parents: 1347
diff changeset
   712
	begin
3a96e93572cb - Convert small damage tag to visual gears
unc0rr
parents: 1347
diff changeset
   713
	DeleteGear(Gear);
3a96e93572cb - Convert small damage tag to visual gears
unc0rr
parents: 1347
diff changeset
   714
	exit
3a96e93572cb - Convert small damage tag to visual gears
unc0rr
parents: 1347
diff changeset
   715
	end;
3a96e93572cb - Convert small damage tag to visual gears
unc0rr
parents: 1347
diff changeset
   716
351
29bc9c36ad5f Fixed-point arithmetics in engine.
unc0rr
parents: 304
diff changeset
   717
if (Gear^.State and gstHHDriven) = 0 then doStepHedgehogFree(Gear)
511
2b5b9e00419d - Further work on new collisions implementation
unc0rr
parents: 505
diff changeset
   718
                                     else doStepHedgehogDriven(Gear)
4
bcbd7adb4e4b - set svn:eol-style to native
unc0rr
parents: 1
diff changeset
   719
end;