X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_player.pas;h=aab6b385b7658f3650a1880468bea002a799d92e;hb=55f201758f237cac6c889e98572e6eda7c4067fc;hp=db438329dd146c0de2d43eb20ec662bc99002c09;hpb=23a883f6c44413c380997e61b00a756bda95bc03;p=d2df-sdl.git diff --git a/src/game/g_player.pas b/src/game/g_player.pas index db43832..aab6b38 100644 --- a/src/game/g_player.pas +++ b/src/game/g_player.pas @@ -74,10 +74,6 @@ const TEAM_BLUE = 2; TEAM_COOP = 3; - SHELL_BULLET = 0; - SHELL_SHELL = 1; - SHELL_DBLSHELL = 2; - ANGLE_NONE = Low(SmallInt); CORPSE_STATE_REMOVEME = 0; @@ -201,8 +197,10 @@ type FIncCamOld: Integer; FIncCam: Integer; FSlopeOld: Integer; - FShellTimer: Integer; - FShellType: Byte; + {$IFDEF ENABLE_SHELLS} + FShellTimer: Integer; + FShellType: Byte; + {$ENDIF} FSawSound: TPlayableSound; FSawSoundIdle: TPlayableSound; FSawSoundHit: TPlayableSound; @@ -501,37 +499,6 @@ type procedure LoadState (st: TStream); override; end; - PGib = ^TGib; - TGib = record - alive: Boolean; - RAngle: Integer; - Color: TRGB; - Obj: TObj; - - ModelID: Integer; - GibID: Integer; - - procedure getMapBox (out x, y, w, h: Integer); inline; - procedure moveBy (dx, dy: Integer); inline; - - procedure positionChanged (); inline; //WARNING! call this after entity position was changed, or coldet will not work right! - end; - - - PShell = ^TShell; - TShell = record - alive: Boolean; - SType: Byte; - RAngle: Integer; - Timeout: Cardinal; - Obj: TObj; - - procedure getMapBox (out x, y, w, h: Integer); inline; - procedure moveBy (dx, dy: Integer); inline; - - procedure positionChanged (); inline; //WARNING! call this after entity position was changed, or coldet will not work right! - end; - TCorpse = class{$IFDEF USE_MEMPOOL}(TPoolObject){$ENDIF} private FMess: Boolean; @@ -570,8 +537,6 @@ type var gPlayers: Array of TPlayer; gCorpses: Array of TCorpse; - gGibs: Array of TGib; - gShells: Array of TShell; gTeamStat: TTeamStat; gFly: Boolean = False; gAimLine: Boolean = False; @@ -583,16 +548,11 @@ var gSpectLatchPID2: Word = 0; MAX_RUNVEL: Integer = 8; VEL_JUMP: Integer = 10; - SHELL_TIMEOUT: Cardinal = 60000; function Lerp(X, Y, Factor: Integer): Integer; -procedure g_Gibs_SetMax(Count: Word); -function g_Gibs_GetMax(): Word; procedure g_Corpses_SetMax(Count: Word); function g_Corpses_GetMax(): Word; -procedure g_Shells_SetMax(Count: Word); -function g_Shells_GetMax(): Word; procedure g_Player_Init(); procedure g_Player_Free(); @@ -609,8 +569,6 @@ function g_Player_GetCount(): Byte; function g_Player_GetStats(): TPlayerStatArray; function g_Player_ValidName(Name: String): Boolean; function g_Player_CreateCorpse(Player: TPlayer): Integer; -procedure g_Player_CreateGibs (fX, fY, mid: Integer; fColor: TRGB); -procedure g_Player_CreateShell(fX, fY, dX, dY: Integer; T: Byte); procedure g_Player_UpdatePhysicalObjects(); procedure g_Player_RemoveAllCorpses(); procedure g_Player_Corpses_SaveState (st: TStream); @@ -636,6 +594,12 @@ uses {$IFDEF ENABLE_GFX} g_gfx, {$ENDIF} + {$IFDEF ENABLE_GIBS} + g_gibs, + {$ENDIF} + {$IFDEF ENABLE_SHELLS} + g_shells, + {$ENDIF} e_log, g_map, g_items, g_console, Math, g_options, g_triggers, g_game, g_grid, e_res, wadreader, g_monsters, CONFIG, g_language, @@ -709,11 +673,7 @@ const BOTLIST_FILENAME = 'botlist.txt'; var - MaxGibs: Word = 150; MaxCorpses: Word = 20; - MaxShells: Word = 300; - CurrentGib: Integer = 0; - CurrentShell: Integer = 0; BotNames: Array of String; BotList: Array of TBotProfile; SavedStates: Array of TPlayerSavedState; @@ -739,35 +699,6 @@ begin Result := g_Player_Get(UID1).FTeam = g_Player_Get(UID2).FTeam; end; -procedure g_Gibs_SetMax(Count: Word); -begin - MaxGibs := Count; - SetLength(gGibs, Count); - - if CurrentGib >= Count then - CurrentGib := 0; -end; - -function g_Gibs_GetMax(): Word; -begin - Result := MaxGibs; -end; - -procedure g_Shells_SetMax(Count: Word); -begin - MaxShells := Count; - SetLength(gShells, Count); - - if CurrentShell >= Count then - CurrentShell := 0; -end; - -function g_Shells_GetMax(): Word; -begin - Result := MaxShells; -end; - - procedure g_Corpses_SetMax(Count: Word); begin MaxCorpses := Count; @@ -1553,7 +1484,13 @@ begin with Player do begin - if (FHealth >= -50) or (gGibsCount = 0) then +{$IFDEF ENABLE_GIBS} + if (FHealth < -50) and (gGibsCount > 0) then + begin + g_Gibs_Create(FObj.X + PLAYER_RECT_CX, FObj.Y + PLAYER_RECT_CY, FModel.id, FModel.Color); + end + else +{$ENDIF} begin if (gCorpses = nil) or (Length(gCorpses) = 0) then Exit; @@ -1577,174 +1514,12 @@ begin Result := find_id; end - else - g_Player_CreateGibs(FObj.X + PLAYER_RECT_CX, FObj.Y + PLAYER_RECT_CY, FModel.id, FModel.Color); end; end; -procedure g_Player_CreateShell(fX, fY, dX, dY: Integer; T: Byte); -begin - if (gShells = nil) or (Length(gShells) = 0) then - Exit; - - with gShells[CurrentShell] do - begin - g_Obj_Init(@Obj); - Obj.Rect.X := 0; - Obj.Rect.Y := 0; - if T = SHELL_BULLET then - begin - Obj.Rect.Width := 4; - Obj.Rect.Height := 2; - end - else - begin - Obj.Rect.Width := 7; - Obj.Rect.Height := 3; - end; - SType := T; - alive := True; - Obj.X := fX; - Obj.Y := fY; - g_Obj_Push(@Obj, dX + Random(4)-Random(4), dY-Random(4)); - positionChanged(); // this updates spatial accelerators - RAngle := Random(360); - Timeout := gTime + SHELL_TIMEOUT; - - if CurrentShell >= High(gShells) then - CurrentShell := 0 - else - Inc(CurrentShell); - end; -end; - -procedure g_Player_CreateGibs (fX, fY, mid: Integer; fColor: TRGB); -var - a: Integer; - GibsArray: TGibsArray; - {$IFDEF ENABLE_GFX} - Blood: TModelBlood; - {$ENDIF} -begin - if mid = -1 then - Exit; - if (gGibs = nil) or (Length(gGibs) = 0) then - Exit; - if not g_PlayerModel_GetGibs(mid, GibsArray) then - Exit; - - {$IFDEF ENABLE_GFX} - Blood := PlayerModelsArray[mid].Blood; - {$ENDIF} - - for a := 0 to High(GibsArray) do - with gGibs[CurrentGib] do - begin - ModelID := mid; - GibID := GibsArray[a]; - Color := fColor; - alive := True; - g_Obj_Init(@Obj); - {$IFNDEF HEADLESS} - Obj.Rect := r_Render_GetGibRect(ModelID, GibID); - {$ELSE} - Obj.Rect.X := 16; - Obj.Rect.Y := 16; - Obj.Rect.Width := 16; - Obj.Rect.Height := 16; - {$ENDIF} - Obj.X := fX - Obj.Rect.X - (Obj.Rect.Width div 2); - Obj.Y := fY - Obj.Rect.Y - (Obj.Rect.Height div 2); - g_Obj_PushA(@Obj, 25 + Random(10), Random(361)); - positionChanged(); // this updates spatial accelerators - RAngle := Random(360); - - {$IFDEF ENABLE_GFX} - if gBloodCount > 0 then - begin - g_GFX_Blood( - fX, - fY, - 16 * gBloodCount + Random(5 * gBloodCount), - -16 + Random(33), - -16 + Random(33), - Random(48), - Random(48), - Blood.R, - Blood.G, - Blood.B, - Blood.Kind - ); - end; - {$ENDIF} - - if CurrentGib >= High(gGibs) then - CurrentGib := 0 - else - Inc(CurrentGib); - end; -end; - procedure g_Player_UpdatePhysicalObjects(); -var - i: Integer; - vel: TPoint2i; - mr: Word; - - procedure ShellSound_Bounce(X, Y: Integer; T: Byte); - var - k: Integer; - begin - k := 1 + Random(2); - if T = SHELL_BULLET then - g_Sound_PlayExAt('SOUND_PLAYER_CASING' + IntToStr(k), X, Y) - else - g_Sound_PlayExAt('SOUND_PLAYER_SHELL' + IntToStr(k), X, Y); - end; - + var i: Integer; begin -// Куски мяса: - if gGibs <> nil then - for i := 0 to High(gGibs) do - if gGibs[i].alive then - with gGibs[i] do - begin - Obj.oldX := Obj.X; - Obj.oldY := Obj.Y; - - vel := Obj.Vel; - mr := g_Obj_Move(@Obj, True, False, True); - positionChanged(); // this updates spatial accelerators - - if WordBool(mr and MOVE_FALLOUT) then - begin - alive := False; - Continue; - end; - - // Отлетает от удара о стену/потолок/пол: - if WordBool(mr and MOVE_HITWALL) then - Obj.Vel.X := -(vel.X div 2); - if WordBool(mr and (MOVE_HITCEIL or MOVE_HITLAND)) then - Obj.Vel.Y := -(vel.Y div 2); - - if (Obj.Vel.X >= 0) then - begin // Clockwise - RAngle := RAngle + Abs(Obj.Vel.X)*6 + Abs(Obj.Vel.Y); - if RAngle >= 360 then - RAngle := RAngle mod 360; - end else begin // Counter-clockwise - RAngle := RAngle - Abs(Obj.Vel.X)*6 - Abs(Obj.Vel.Y); - if RAngle < 0 then - RAngle := (360 - (Abs(RAngle) mod 360)) mod 360; - end; - - // Сопротивление воздуха для куска трупа: - if gTime mod (GAME_TICK*3) = 0 then - Obj.Vel.X := z_dec(Obj.Vel.X, 1); - end; - -// Трупы: if gCorpses <> nil then for i := 0 to High(gCorpses) do if gCorpses[i] <> nil then @@ -1755,112 +1530,21 @@ begin end else gCorpses[i].Update(); - -// Гильзы: - if gShells <> nil then - for i := 0 to High(gShells) do - if gShells[i].alive then - with gShells[i] do - begin - Obj.oldX := Obj.X; - Obj.oldY := Obj.Y; - - vel := Obj.Vel; - mr := g_Obj_Move(@Obj, True, False, True); - positionChanged(); // this updates spatial accelerators - - if WordBool(mr and MOVE_FALLOUT) or (gShells[i].Timeout < gTime) then - begin - alive := False; - Continue; - end; - - // Отлетает от удара о стену/потолок/пол: - if WordBool(mr and MOVE_HITWALL) then - begin - Obj.Vel.X := -(vel.X div 2); - if not WordBool(mr and MOVE_INWATER) then - ShellSound_Bounce(Obj.X, Obj.Y, SType); - end; - if WordBool(mr and (MOVE_HITCEIL or MOVE_HITLAND)) then - begin - Obj.Vel.Y := -(vel.Y div 2); - if Obj.Vel.X <> 0 then Obj.Vel.X := Obj.Vel.X div 2; - if (Obj.Vel.X = 0) and (Obj.Vel.Y = 0) then - begin - if RAngle mod 90 <> 0 then - RAngle := (RAngle div 90) * 90; - end - else if not WordBool(mr and MOVE_INWATER) then - ShellSound_Bounce(Obj.X, Obj.Y, SType); - end; - - if (Obj.Vel.X >= 0) then - begin // Clockwise - RAngle := RAngle + Abs(Obj.Vel.X)*8 + Abs(Obj.Vel.Y); - if RAngle >= 360 then - RAngle := RAngle mod 360; - end else begin // Counter-clockwise - RAngle := RAngle - Abs(Obj.Vel.X)*8 - Abs(Obj.Vel.Y); - if RAngle < 0 then - RAngle := (360 - (Abs(RAngle) mod 360)) mod 360; - end; - end; -end; - - -procedure TGib.getMapBox (out x, y, w, h: Integer); inline; -begin - x := Obj.X+Obj.Rect.X; - y := Obj.Y+Obj.Rect.Y; - w := Obj.Rect.Width; - h := Obj.Rect.Height; end; -procedure TGib.moveBy (dx, dy: Integer); inline; -begin - if (dx <> 0) or (dy <> 0) then - begin - Obj.X += dx; - Obj.Y += dy; - positionChanged(); - end; -end; - - -procedure TShell.getMapBox (out x, y, w, h: Integer); inline; -begin - x := Obj.X; - y := Obj.Y; - w := Obj.Rect.Width; - h := Obj.Rect.Height; -end; - -procedure TShell.moveBy (dx, dy: Integer); inline; -begin - if (dx <> 0) or (dy <> 0) then - begin - Obj.X += dx; - Obj.Y += dy; - positionChanged(); - end; -end; - - -procedure TGib.positionChanged (); inline; begin end; -procedure TShell.positionChanged (); inline; begin end; - - procedure g_Player_RemoveAllCorpses(); -var - i: Integer; + var i: Integer; begin - gGibs := nil; - gShells := nil; - SetLength(gGibs, MaxGibs); - SetLength(gShells, MaxGibs); - CurrentGib := 0; - CurrentShell := 0; + {$IFDEF ENABLE_GIBS} + i := g_Gibs_GetMax(); + g_Gibs_SetMax(0); + g_Gibs_SetMax(i); + {$ENDIF} + {$IFDEF ENABLE_SHELLS} + i := g_Shells_GetMax(); + g_Shells_SetMax(0); + g_Shells_SetMax(i); + {$ENDIF} if gCorpses <> nil then for i := 0 to High(gCorpses) do @@ -2119,7 +1803,9 @@ begin FPing := 0; FLoss := 0; FSavedStateNum := -1; - FShellTimer := -1; + {$IFDEF ENABLE_SHELLS} + FShellTimer := -1; + {$ENDIF} FFireTime := 0; FFirePainTime := 0; FFireAttacker := 0; @@ -2388,8 +2074,9 @@ begin FFireAngle := FAngle; f := True; DidFire := True; - g_Player_CreateShell(GameX+PLAYER_RECT_CX, GameY+PLAYER_RECT_CX, - GameVelX, GameVelY-2, SHELL_BULLET); + {$IFDEF ENABLE_SHELLS} + g_Shells_Create(GameX + PLAYER_RECT_CX, GameY + PLAYER_RECT_CX, GameVelX, GameVelY - 2, SHELL_BULLET); + {$ENDIF} end; WEAPON_SHOTGUN1: @@ -2402,8 +2089,10 @@ begin FFireAngle := FAngle; f := True; DidFire := True; - FShellTimer := 10; - FShellType := SHELL_SHELL; + {$IFDEF ENABLE_SHELLS} + FShellTimer := 10; + FShellType := SHELL_SHELL; + {$ENDIF} end; WEAPON_SHOTGUN2: @@ -2415,8 +2104,10 @@ begin FFireAngle := FAngle; f := True; DidFire := True; - FShellTimer := 13; - FShellType := SHELL_DBLSHELL; + {$IFDEF ENABLE_SHELLS} + FShellTimer := 13; + FShellType := SHELL_DBLSHELL; + {$ENDIF} end; WEAPON_CHAINGUN: @@ -2429,8 +2120,9 @@ begin FFireAngle := FAngle; f := True; DidFire := True; - g_Player_CreateShell(GameX+PLAYER_RECT_CX, GameY+PLAYER_RECT_CX, - GameVelX, GameVelY-2, SHELL_BULLET); + {$IFDEF ENABLE_SHELLS} + g_Shells_Create(GameX + PLAYER_RECT_CX, GameY + PLAYER_RECT_CX, GameVelX, GameVelY - 2, SHELL_BULLET); + {$ENDIF} end; WEAPON_ROCKETLAUNCHER: @@ -2475,8 +2167,9 @@ begin FFireAngle := FAngle; f := True; DidFire := True; - g_Player_CreateShell(GameX+PLAYER_RECT_CX, GameY+PLAYER_RECT_CX, - GameVelX, GameVelY-2, SHELL_SHELL); + {$IFDEF ENABLE_SHELLS} + g_Shells_Create(GameX + PLAYER_RECT_CX, GameY + PLAYER_RECT_CX, GameVelX, GameVelY - 2, SHELL_SHELL); + {$ENDIF} end; WEAPON_FLAMETHROWER: @@ -2705,7 +2398,10 @@ begin FPhysics := True; FAlive := False; end; - FShellTimer := -1; + + {$IFDEF ENABLE_SHELLS} + FShellTimer := -1; + {$ENDIF} if (gGameSettings.MaxLives > 0) and Srv and (gLMSRespawn = LMS_RESPAWN_NONE) then begin @@ -3735,7 +3431,9 @@ begin FIncCamOld := 0; FIncCam := 0; FBFGFireCounter := -1; - FShellTimer := -1; + {$IFDEF ENABLE_SHELLS} + FShellTimer := -1; + {$ENDIF} FPain := 0; FLastHit := 0; FLastFrag := 0; @@ -3818,7 +3516,9 @@ begin FIncCamOld := 0; FIncCam := 0; FBFGFireCounter := -1; - FShellTimer := -1; + {$IFDEF ENABLE_SHELLS} + FShellTimer := -1; + {$ENDIF} FPain := 0; FLastHit := 0; FSpawnInvul := 0; @@ -4045,8 +3745,9 @@ begin end; procedure TPlayer.Run(Direction: TDirection); -var - a, b: Integer; + {$IFDEF ENABLE_GIBS} + var a, b: Integer; + {$ENDIF} begin if MAX_RUNVEL > 8 then FlySmoke(); @@ -4061,30 +3762,32 @@ begin if FObj.Vel.X < MAX_RUNVEL then FObj.Vel.X := FObj.Vel.X + (MAX_RUNVEL shr 3); -// Возможно, пинаем куски: - if (FObj.Vel.X <> 0) and (gGibs <> nil) then - begin - b := Abs(FObj.Vel.X); - if b > 1 then b := b * (Random(8 div b) + 1); - for a := 0 to High(gGibs) do + {$IFDEF ENABLE_GIBS} + // Возможно, пинаем куски: + if (FObj.Vel.X <> 0) and (gGibs <> nil) then begin - if gGibs[a].alive and - g_Obj_Collide(FObj.X+FObj.Rect.X, FObj.Y+FObj.Rect.Y+FObj.Rect.Height-4, - FObj.Rect.Width, 8, @gGibs[a].Obj) and (Random(3) = 0) then + b := Abs(FObj.Vel.X); + if b > 1 then b := b * (Random(8 div b) + 1); + for a := 0 to High(gGibs) do begin - // Пинаем куски - if FObj.Vel.X < 0 then + if gGibs[a].alive and + g_Obj_Collide(FObj.X+FObj.Rect.X, FObj.Y+FObj.Rect.Y+FObj.Rect.Height-4, + FObj.Rect.Width, 8, @gGibs[a].Obj) and (Random(3) = 0) then begin - g_Obj_PushA(@gGibs[a].Obj, b, Random(61)+120) // налево - end - else - begin - g_Obj_PushA(@gGibs[a].Obj, b, Random(61)); // направо + // Пинаем куски + if FObj.Vel.X < 0 then + begin + g_Obj_PushA(@gGibs[a].Obj, b, Random(61)+120) // налево + end + else + begin + g_Obj_PushA(@gGibs[a].Obj, b, Random(61)); // направо + end; + gGibs[a].positionChanged(); // this updates spatial accelerators end; - gGibs[a].positionChanged(); // this updates spatial accelerators end; end; - end; + {$ENDIF} SetAction(A_WALK); end; @@ -4558,21 +4261,23 @@ begin else Dec(FReloading[b]); +{$IFDEF ENABLE_SHELLS} if FShellTimer > -1 then if FShellTimer = 0 then begin if FShellType = SHELL_SHELL then - g_Player_CreateShell(GameX+PLAYER_RECT_CX, GameY+PLAYER_RECT_CX, + g_Shells_Create(GameX+PLAYER_RECT_CX, GameY+PLAYER_RECT_CX, GameVelX, GameVelY-2, SHELL_SHELL) else if FShellType = SHELL_DBLSHELL then begin - g_Player_CreateShell(GameX+PLAYER_RECT_CX, GameY+PLAYER_RECT_CX, + g_Shells_Create(GameX+PLAYER_RECT_CX, GameY+PLAYER_RECT_CX, GameVelX+1, GameVelY-2, SHELL_SHELL); - g_Player_CreateShell(GameX+PLAYER_RECT_CX, GameY+PLAYER_RECT_CX, + g_Shells_Create(GameX+PLAYER_RECT_CX, GameY+PLAYER_RECT_CX, GameVelX-1, GameVelY-2, SHELL_SHELL); end; FShellTimer := -1; end else Dec(FShellTimer); +{$ENDIF} if (FBFGFireCounter > -1) then if FBFGFireCounter = 0 then @@ -4890,8 +4595,9 @@ begin g_Sound_PlayExAt('SOUND_WEAPON_FIREPISTOL', GameX, Gamey); FFireAngle := FAngle; f := True; - g_Player_CreateShell(GameX+PLAYER_RECT_CX, GameY+PLAYER_RECT_CX, - GameVelX, GameVelY-2, SHELL_BULLET); + {$IFDEF ENABLE_SHELLS} + g_Shells_Create(GameX + PLAYER_RECT_CX, GameY + PLAYER_RECT_CX, GameVelX, GameVelY - 2, SHELL_BULLET); + {$ENDIF} end; WEAPON_SHOTGUN1: @@ -4899,8 +4605,10 @@ begin g_Sound_PlayExAt('SOUND_WEAPON_FIRESHOTGUN', Gamex, Gamey); FFireAngle := FAngle; f := True; - FShellTimer := 10; - FShellType := SHELL_SHELL; + {$IFDEF ENABLE_SHELLS} + FShellTimer := 10; + FShellType := SHELL_SHELL; + {$ENDIF} end; WEAPON_SHOTGUN2: @@ -4908,8 +4616,10 @@ begin g_Sound_PlayExAt('SOUND_WEAPON_FIRESHOTGUN2', Gamex, Gamey); FFireAngle := FAngle; f := True; - FShellTimer := 13; - FShellType := SHELL_DBLSHELL; + {$IFDEF ENABLE_SHELLS} + FShellTimer := 13; + FShellType := SHELL_DBLSHELL; + {$ENDIF} end; WEAPON_CHAINGUN: @@ -4917,8 +4627,9 @@ begin g_Sound_PlayExAt('SOUND_WEAPON_FIRECGUN', Gamex, Gamey); FFireAngle := FAngle; f := True; - g_Player_CreateShell(GameX+PLAYER_RECT_CX, GameY+PLAYER_RECT_CX, - GameVelX, GameVelY-2, SHELL_BULLET); + {$IFDEF ENABLE_SHELLS} + g_Shells_Create(GameX + PLAYER_RECT_CX, GameY + PLAYER_RECT_CX, GameVelX, GameVelY - 2, SHELL_BULLET); + {$ENDIF} end; WEAPON_ROCKETLAUNCHER: @@ -4947,8 +4658,9 @@ begin g_Sound_PlayExAt('SOUND_WEAPON_FIRESHOTGUN', Gamex, Gamey); FFireAngle := FAngle; f := True; - g_Player_CreateShell(GameX+PLAYER_RECT_CX, GameY+PLAYER_RECT_CX, - GameVelX, GameVelY-2, SHELL_SHELL); + {$IFDEF ENABLE_SHELLS} + g_Shells_Create(GameX + PLAYER_RECT_CX, GameY + PLAYER_RECT_CX, GameVelX, GameVelY - 2, SHELL_SHELL); + {$ENDIF} end; WEAPON_FLAMETHROWER: @@ -5827,13 +5539,14 @@ begin FDamage := FDamage + Value; +{$IFDEF ENABLE_GIBS} if FDamage > 150 then begin if FModel <> nil then begin FState := CORPSE_STATE_REMOVEME; - g_Player_CreateGibs( + g_Gibs_Create( FObj.X + FObj.Rect.X + (FObj.Rect.Width div 2), FObj.Y + FObj.Rect.Y + (FObj.Rect.Height div 2), FModel.id, @@ -5853,17 +5566,18 @@ begin end end else - begin - FObj.Vel.X := FObj.Vel.X + vx; - FObj.Vel.Y := FObj.Vel.Y + vy; - {$IFDEF ENABLE_GFX} - Blood := FModel.GetBlood(); - g_GFX_Blood(FObj.X+PLAYER_CORPSERECT.X+(PLAYER_CORPSERECT.Width div 2), - FObj.Y+PLAYER_CORPSERECT.Y+(PLAYER_CORPSERECT.Height div 2), - Value, vx, vy, 16, (PLAYER_CORPSERECT.Height*2) div 3, - Blood.R, Blood.G, Blood.B, Blood.Kind); - {$ENDIF} - end; +{$ENDIF} + begin + FObj.Vel.X := FObj.Vel.X + vx; + FObj.Vel.Y := FObj.Vel.Y + vy; + {$IFDEF ENABLE_GFX} + Blood := FModel.GetBlood(); + g_GFX_Blood(FObj.X+PLAYER_CORPSERECT.X+(PLAYER_CORPSERECT.Width div 2), + FObj.Y+PLAYER_CORPSERECT.Y+(PLAYER_CORPSERECT.Height div 2), + Value, vx, vy, 16, (PLAYER_CORPSERECT.Height*2) div 3, + Blood.R, Blood.G, Blood.B, Blood.Kind); + {$ENDIF} + end; end; procedure TCorpse.Update();