index af85837aaa8a16e9c88514b2bdf1e5de26c6be97..6ba81745efde669846f1f91ad94c9593174d7b59 100644 (file)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
+ * the Free Software Foundation, version 3 of the License ONLY.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
uses
{$IFDEF USE_MEMPOOL}mempool,{$ENDIF}
- MAPDEF, g_textures, g_basic, g_weapons, e_graphics, utils,
+ MAPDEF, g_textures, g_basic, g_weapons, e_graphics, utils, g_gfx,
ImagingTypes, Imaging, ImagingUtility;
const
A_ATTACKDOWN = 8;
A_PAIN = 9;
// EXTENDED
- A_WALKATTACK = 10;
- A_WALKSEEUP = 11;
- A_WALKSEEDOWN = 12;
- A_WALKATTACKUP = 13;
- A_WALKATTACKDOWN = 14;
- A_FISTSTAND = 15;
- A_FISTWALK = 16;
- A_FISTATTACK = 17;
- A_FISTWALKATTACK = 18;
- A_FISTSEEUP = 19;
- A_FISTSEEDOWN = 20;
- A_FISTATTACKUP = 21;
- A_FISTATTACKDOWN = 22;
+ A_WALKATTACK = 10;
+ A_WALKSEEUP = 11;
+ A_WALKSEEDOWN = 12;
+ A_WALKATTACKUP = 13;
+ A_WALKATTACKDOWN = 14;
+ A_MELEESTAND = 15;
+ A_MELEEWALK = 16;
+ A_MELEEATTACK = 17;
+ A_MELEEWALKATTACK = 18;
+ A_MELEESEEUP = 19;
+ A_MELEESEEDOWN = 20;
+ A_MELEEATTACKUP = 21;
+ A_MELEEATTACKDOWN = 22;
A_LASTBASE = A_PAIN;
- A_LASTEXT = A_FISTATTACKDOWN;
+ A_LASTEXT = A_MELEEATTACKDOWN;
A_LAST = A_LASTEXT;
MODELSOUND_PAIN = 0;
HaveWeapon: Boolean;
end;
+ TModelBlood = record
+ R, G, B, Kind: Byte;
+ end;
+
TModelSound = record
ID: DWORD;
Level: Byte;
FName: String;
FDirection: TDirection;
FColor: TRGB;
+ FBlood: TModelBlood;
FCurrentAnimation: Byte;
FAnim: Array [TDirection.D_LEFT..TDirection.D_RIGHT] of Array [A_STAND..A_LAST] of TAnimation;
FMaskAnim: Array [TDirection.D_LEFT..TDirection.D_RIGHT] of Array [A_STAND..A_LAST] of TAnimation;
public
property Color: TRGB read FColor write FColor;
+ property Blood: TModelBlood read FBlood;
end;
procedure g_PlayerModel_LoadData();
function g_PlayerModel_Load(FileName: String): Boolean;
function g_PlayerModel_GetNames(): SSArray;
function g_PlayerModel_GetInfo(ModelName: String): TModelInfo;
+function g_PlayerModel_GetBlood(ModelName: String): TModelBlood;
function g_PlayerModel_Get(ModelName: String): TPlayerModel;
function g_PlayerModel_GetAnim(ModelName: String; Anim: Byte; var _Anim, _Mask: TAnimation): Boolean;
function g_PlayerModel_GetGibs(ModelName: String; var Gibs: TGibsArray): Boolean;
PainSounds: TModelSoundArray;
DieSounds: TModelSoundArray;
SlopSound: Byte;
+ Blood: TModelBlood;
end;
const
'SeeUpAnim','SeeDownAnim','AttackUpAnim','AttackDownAnim','PainAnim',
// EXTENDED
'WalkAttackAnim', 'WalkSeeUpAnim', 'WalkSeeDownAnim',
- 'WalkAttackUpAnim', 'WalkAttackDownAnim', 'FistStandAnim', 'FistWalkAnim',
- 'FistAttackAnim', 'FistWalkAttackAnim', 'FistSeeUpAnim', 'FistSeeDownAnim',
- 'FistAttackUpAnim', 'FistAttackDownAnim');
+ 'WalkAttackUpAnim', 'WalkAttackDownAnim', 'MeleeStandAnim', 'MeleeWalkAnim',
+ 'MeleeAttackAnim', 'MeleeWalkAttackAnim', 'MeleeSeeUpAnim', 'MeleeSeeDownAnim',
+ 'MeleeAttackUpAnim', 'MeleeAttackDownAnim');
WeapNames: Array [WP_FIRST + 1..WP_LAST] of String =
('csaw', 'hgun', 'sg', 'ssg', 'mgun', 'rkt', 'plz', 'bfg', 'spl', 'flm');
prefix: string;
ok, chk: Boolean;
begin
- e_WriteLog(Format('Loading player model: %s', [ExtractFileName(FileName)]), TMsgType.Notify);
+ e_WriteLog(Format('Loading player model "%s"...', [FileName]), TMsgType.Notify);
Result := False;
Description := config.ReadStr('Model', 'description', '');
end;
+ with PlayerModelsArray[ID] do
+ begin
+ Blood.R := MAX(0, MIN(255, config.ReadInt('Blood', 'R', 150)));
+ Blood.G := MAX(0, MIN(255, config.ReadInt('Blood', 'G', 0)));
+ Blood.B := MAX(0, MIN(255, config.ReadInt('Blood', 'B', 0)));
+ case config.ReadStr('Blood', 'Kind', 'NORMAL') of
+ 'NORMAL': Blood.Kind := BLOOD_NORMAL;
+ 'SPARKS': Blood.Kind := BLOOD_CSPARKS;
+ 'COMBINE': Blood.Kind := BLOOD_COMBINE;
+ else
+ Blood.Kind := BLOOD_NORMAL
+ end
+ end;
+
for b := A_STAND to A_LAST do
begin
aname := s+'_RIGHTANIM'+IntToStr(b);
with PlayerModelsArray[a] do
begin
Result.FName := Info.Name;
+ Result.FBlood := Blood;
for b := A_STAND to A_LAST do
begin
end;
end;
+function g_PlayerModel_GetBlood(ModelName: string): TModelBlood;
+var
+ a: Integer;
+begin
+ Result.R := 150;
+ Result.G := 0;
+ Result.B := 0;
+ Result.Kind := BLOOD_NORMAL;
+ if PlayerModelsArray = nil then Exit;
+
+ for a := 0 to High(PlayerModelsArray) do
+ if PlayerModelsArray[a].Info.Name = ModelName then
+ begin
+ Result := PlayerModelsArray[a].Blood;
+ Break;
+ end;
+end;
+
procedure g_PlayerModel_FreeData();
var
i: DWORD;