changeset 13147 | 7040506c831f |
parent 13140 | e330feceb662 |
child 13151 | deab88f1f6f7 |
13146:9655072d0286 | 13147:7040506c831f |
---|---|
1136 DeleteGear(Gear); |
1136 DeleteGear(Gear); |
1137 AfterAttack |
1137 AfterAttack |
1138 end |
1138 end |
1139 end; |
1139 end; |
1140 |
1140 |
1141 procedure CreateShellForGear(Gear: PGear; startFrame: Longword); |
|
1142 var |
|
1143 shell: PVisualGear; |
|
1144 begin |
|
1145 shell := AddVisualGear(hwRound(Gear^.x), hwRound(Gear^.y), vgtShell); |
|
1146 if shell <> nil then |
|
1147 begin |
|
1148 shell^.dX := gear^.dX.QWordValue / -17179869184; |
|
1149 if (gear^.dX.isNegative) then |
|
1150 shell^.dX := -shell^.dX; |
|
1151 shell^.dY := gear^.dY.QWordValue / -17179869184; |
|
1152 shell^.Frame := startFrame; |
|
1153 end; |
|
1154 end; |
|
1155 |
|
1141 procedure doStepShotgunShot(Gear: PGear); |
1156 procedure doStepShotgunShot(Gear: PGear); |
1142 var |
1157 var |
1143 i: LongWord; |
1158 i: LongWord; |
1144 shell: PVisualGear; |
|
1145 begin |
1159 begin |
1146 AllInactive := false; |
1160 AllInactive := false; |
1147 |
1161 |
1148 if ((Gear^.State and gstAnimation) = 0) then |
1162 if ((Gear^.State and gstAnimation) = 0) then |
1149 begin |
1163 begin |
1150 dec(Gear^.Timer); |
1164 dec(Gear^.Timer); |
1151 if Gear^.Timer = 0 then |
1165 if Gear^.Timer = 0 then |
1152 begin |
1166 begin |
1153 PlaySound(sndShotgunFire); |
1167 PlaySound(sndShotgunFire); |
1154 shell := AddVisualGear(hwRound(Gear^.x), hwRound(Gear^.y), vgtShell); |
1168 CreateShellForGear(Gear, 0); |
1155 if shell <> nil then |
|
1156 begin |
|
1157 shell^.dX := gear^.dX.QWordValue / -17179869184; |
|
1158 shell^.dY := gear^.dY.QWordValue / -17179869184; |
|
1159 shell^.Frame := 0 |
|
1160 end; |
|
1161 Gear^.State := Gear^.State or gstAnimation |
1169 Gear^.State := Gear^.State or gstAnimation |
1162 end; |
1170 end; |
1163 exit |
1171 exit |
1164 end else |
1172 end else |
1165 if(Gear^.Hedgehog^.Gear = nil) or ((Gear^.Hedgehog^.Gear^.State and gstMoving) <> 0) then |
1173 if(Gear^.Hedgehog^.Gear = nil) or ((Gear^.Hedgehog^.Gear^.State and gstMoving) <> 0) then |
1406 Gear^.doStep := @doStepBulletWork |
1414 Gear^.doStep := @doStepBulletWork |
1407 end; |
1415 end; |
1408 |
1416 |
1409 procedure doStepSniperRifleShot(Gear: PGear); |
1417 procedure doStepSniperRifleShot(Gear: PGear); |
1410 var HHGear: PGear; |
1418 var HHGear: PGear; |
1411 shell: PVisualGear; |
|
1412 begin |
1419 begin |
1413 |
1420 |
1414 HHGear := Gear^.Hedgehog^.Gear; |
1421 HHGear := Gear^.Hedgehog^.Gear; |
1415 if (Gear^.Hedgehog^.Effects[heArtillery] <> 1) then |
1422 if (Gear^.Hedgehog^.Effects[heArtillery] <> 1) then |
1416 Gear^.Hedgehog^.Effects[heArtillery]:= 2; |
1423 Gear^.Hedgehog^.Effects[heArtillery]:= 2; |
1435 dec(HHGear^.Angle,32) |
1442 dec(HHGear^.Angle,32) |
1436 end; |
1443 end; |
1437 |
1444 |
1438 if (HHGear^.Message and gmAttack) <> 0 then |
1445 if (HHGear^.Message and gmAttack) <> 0 then |
1439 begin |
1446 begin |
1440 shell := AddVisualGear(hwRound(Gear^.x), hwRound(Gear^.y), vgtShell); |
1447 CreateShellForGear(Gear, 1); |
1441 if shell <> nil then |
|
1442 begin |
|
1443 shell^.dX := gear^.dX.QWordValue / -8589934592; |
|
1444 shell^.dY := gear^.dY.QWordValue / -8589934592; |
|
1445 shell^.Frame := 1 |
|
1446 end; |
|
1447 Gear^.State := Gear^.State or gstAnimation; |
1448 Gear^.State := Gear^.State or gstAnimation; |
1448 Gear^.dX := SignAs(AngleSin(HHGear^.Angle), HHGear^.dX) * _0_5; |
1449 Gear^.dX := SignAs(AngleSin(HHGear^.Angle), HHGear^.dX) * _0_5; |
1449 Gear^.dY := -AngleCos(HHGear^.Angle) * _0_5; |
1450 Gear^.dY := -AngleCos(HHGear^.Angle) * _0_5; |
1450 PlaySound(sndGun); |
1451 PlaySound(sndGun); |
1451 // add 2 initial steps to avoid problem with ammoshove related to calculation of radius + 1 radius as gear widths, and also just weird angles |
1452 // add 2 initial steps to avoid problem with ammoshove related to calculation of radius + 1 radius as gear widths, and also just weird angles |
6624 end; |
6625 end; |
6625 |
6626 |
6626 //////////////////////////////////////////////////////////////////////////////// |
6627 //////////////////////////////////////////////////////////////////////////////// |
6627 procedure doStepMinigunWork(Gear: PGear); |
6628 procedure doStepMinigunWork(Gear: PGear); |
6628 var HHGear: PGear; |
6629 var HHGear: PGear; |
6629 shell: PVisualGear; |
|
6630 bullet: PGear; |
6630 bullet: PGear; |
6631 rx, ry: hwFloat; |
6631 rx, ry: hwFloat; |
6632 gX, gY: LongInt; |
6632 gX, gY: LongInt; |
6633 begin |
6633 begin |
6634 AllInactive:= false; |
6634 AllInactive:= false; |
6655 bullet:= AddGear(gx, gy, gtMinigunBullet, 0, SignAs(AngleSin(HHGear^.Angle) * _0_8, HHGear^.dX) + rx, AngleCos(HHGear^.Angle) * ( - _0_8) + ry, 0); |
6655 bullet:= AddGear(gx, gy, gtMinigunBullet, 0, SignAs(AngleSin(HHGear^.Angle) * _0_8, HHGear^.dX) + rx, AngleCos(HHGear^.Angle) * ( - _0_8) + ry, 0); |
6656 bullet^.CollisionMask:= lfNotCurrentMask; |
6656 bullet^.CollisionMask:= lfNotCurrentMask; |
6657 bullet^.WDTimer := Gear^.WDTimer; |
6657 bullet^.WDTimer := Gear^.WDTimer; |
6658 Inc(Gear^.WDTimer); |
6658 Inc(Gear^.WDTimer); |
6659 |
6659 |
6660 shell := AddVisualGear(hwRound(Gear^.x), hwRound(Gear^.y), vgtShell); |
6660 CreateShellForGear(Gear, Gear^.Tag and 1); |
6661 if shell <> nil then |
|
6662 begin |
|
6663 shell^.dX := gear^.dX.QWordValue / -17179869184; |
|
6664 shell^.dY := gear^.dY.QWordValue / -17179869184; |
|
6665 shell^.Frame := 0 |
|
6666 end; |
|
6667 end; |
6661 end; |
6668 |
6662 |
6669 if (Gear^.Timer = 0) or ((HHGear^.State and gstHHDriven) = 0) then |
6663 if (Gear^.Timer = 0) or ((HHGear^.State and gstHHDriven) = 0) then |
6670 begin |
6664 begin |
6671 HHGear^.State := HHGear^.State and (not gstNotKickable); |
6665 HHGear^.State := HHGear^.State and (not gstNotKickable); |