CompModels.cpp 47 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024
  1. /* Copyright (c) 2002-2012 Croteam Ltd.
  2. This program is free software; you can redistribute it and/or modify
  3. it under the terms of version 2 of the GNU General Public License as published by
  4. the Free Software Foundation
  5. This program is distributed in the hope that it will be useful,
  6. but WITHOUT ANY WARRANTY; without even the implied warranty of
  7. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  8. GNU General Public License for more details.
  9. You should have received a copy of the GNU General Public License along
  10. with this program; if not, write to the Free Software Foundation, Inc.,
  11. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
  12. #include "StdAfx.h"
  13. #include "LCDDrawing.h"
  14. #define DECL_DLL
  15. #include "EntitiesMP/Common/Particles.h"
  16. #include "Models/Enemies/Headman/Headman.h"
  17. #include "Models/Enemies/Eyeman/Eyeman.h"
  18. #include "Models/Enemies/Boneman/Boneman.h"
  19. #include "Models/Enemies/Werebull/Werebull.h"
  20. #include "Models/Enemies/Scorpman/Scorpman.h"
  21. #include "Models/Enemies/Walker/Walker.h"
  22. #include "Models/Enemies/Woman/Woman.h"
  23. #include "Models/Enemies/Gizmo/Gizmo.h"
  24. #include "Models/Enemies/Fish/Fish.h"
  25. #include "Models/Enemies/Beast/Beast.h"
  26. #include "Models/Enemies/Devil/Devil.h"
  27. #include "Models/Enemies/ElementalLava/ElementalLava.h"
  28. #include "ModelsMP/Enemies/Guffy/Guffy.h"
  29. #include "ModelsMP/Enemies/Grunt/Grunt.h"
  30. #include "ModelsMP/Enemies/Demon/Demon.h"
  31. #include "ModelsMP/Enemies/ChainsawFreak/Freak.h"
  32. #include "ModelsMP/Enemies/CannonStatic/Turret.h"
  33. #include "ModelsMP/Enemies/CannonRotating/Turret.h"
  34. #include "ModelsMP/Enemies/CannonRotating/RotatingMechanism.h"
  35. #include "ModelsMP/Enemies/Summoner/Summoner.h"
  36. #include "ModelsMP/Enemies/ExotechLarva/Body.h"
  37. #include "ModelsMP/Enemies/ExotechLarva/ExotechLarva.h"
  38. #include "ModelsMP/Enemies/ExotechLarva/Arm.h"
  39. #include "ModelsMP/Enemies/ExotechLarva/BackArms.h"
  40. #include "ModelsMP/Enemies/AirElemental/Elemental.h"
  41. #include "Models/Weapons/Knife/KnifeItem.h"
  42. #include "Models/Weapons/Colt/ColtItem.h"
  43. #include "Models/Weapons/SingleShotgun/SingleShotgunItem.h"
  44. #include "Models/Weapons/DoubleShotgun/DoubleShotgunItem.h"
  45. #include "Models/Weapons/Minigun/MinigunItem.h"
  46. #include "Models/Weapons/Tommygun/TommygunItem.h"
  47. #include "Models/Weapons/RocketLauncher/RocketLauncherItem.h"
  48. #include "Models/Weapons/GrenadeLauncher/GrenadeLauncherItem.h"
  49. #include "Models/Weapons/Laser/LaserItem.h"
  50. #include "Models/Weapons/Cannon/Cannon.h"
  51. #include "ModelsMP/Weapons/Sniper/SniperItem.h"
  52. #include "ModelsMP/Weapons/ChainSaw/ChainSawItem.h"
  53. #include "ModelsMP/Weapons/ChainSaw/BladeForPlayer.h"
  54. #include "ModelsMP/Weapons/Flamer/FlamerItem.h"
  55. #define PARTICLES_NONE (0L)
  56. #define PARTICLES_AIR_ELEMENTAL (1L<<1)
  57. #define PARTICLES_LAVA_ELEMENTAL (1L<<2)
  58. // model's data
  59. static CModelObject _moModel;
  60. static CModelObject _moFloor;
  61. static CPlacement3D _plModel;
  62. static ANGLE3D _aRotation;
  63. static BOOL _bHasFloor = FALSE;
  64. static FLOAT _fFloorY = 0.0f;
  65. static FLOAT _fFOV = 90.0f;
  66. static FLOAT3D _vLightDir = FLOAT3D( -0.2f, -0.2f, -0.2f);
  67. static COLOR _colLight = C_GRAY;
  68. static COLOR _colAmbient = C_vdGRAY;
  69. static COLOR _iParticleType = PARTICLES_NONE;
  70. // model setting values
  71. static CTString _strLastModel = "";
  72. static BOOL _bModelOK = FALSE;
  73. extern FLOAT _fMsgAppearFade;
  74. CModelObject *AddAttachment_t(CModelObject *pmoParent, INDEX iPosition,
  75. const CTFileName &fnmModel, INDEX iAnim,
  76. const CTFileName &fnmTexture,
  77. const CTFileName &fnmReflection=CTFILENAME(""),
  78. const CTFileName &fnmSpecular=CTFILENAME(""))
  79. {
  80. CAttachmentModelObject *pamo = pmoParent->AddAttachmentModel(iPosition);
  81. ASSERT(pamo!=NULL);
  82. pamo->amo_moModelObject.SetData_t(fnmModel);
  83. pamo->amo_moModelObject.PlayAnim(iAnim, AOF_LOOPING);
  84. pamo->amo_moModelObject.mo_toTexture.SetData_t(fnmTexture);
  85. pamo->amo_moModelObject.mo_toReflection.SetData_t(fnmReflection);
  86. pamo->amo_moModelObject.mo_toSpecular.SetData_t(fnmSpecular);
  87. return &pamo->amo_moModelObject;
  88. }
  89. extern void SetupCompModel_t(const CTString &strName)
  90. {
  91. CModelObject *pmo = &_moModel;
  92. _aRotation = ANGLE3D(0,0,0);
  93. _bHasFloor = FALSE;
  94. _fFloorY = 0.0f;
  95. _fFOV = 90.0f;
  96. _vLightDir = FLOAT3D( -0.2f, -0.2f, -0.2f);
  97. _colLight = C_GRAY;
  98. _colAmbient = C_vdGRAY;
  99. _iParticleType = PARTICLES_NONE;
  100. _moFloor.SetData_t(CTFILENAME("ModelsMP\\Computer\\Floor.mdl"));
  101. _moFloor.mo_toTexture.SetData_t(CTFILENAME("Models\\Computer\\Floor.tex"));
  102. pmo->mo_colBlendColor = 0xFFFFFFFF;
  103. if (strName=="Rocketman") {
  104. pmo->SetData_t(CTFILENAME("Models\\Enemies\\Headman\\Headman.mdl"));
  105. pmo->PlayAnim(HEADMAN_ANIM_COMPUTERKAMIKAZE, AOF_LOOPING);
  106. pmo->mo_toTexture.SetData_t(CTFILENAME("Models\\Enemies\\Headman\\Rocketman.tex"));
  107. _plModel = CPlacement3D(FLOAT3D(0,-1.0,-1.75), ANGLE3D(210,0,0));
  108. AddAttachment_t(pmo, HEADMAN_ATTACHMENT_HEAD,
  109. CTFILENAME("Models\\Enemies\\Headman\\Head.mdl"), 0,
  110. CTFILENAME("Models\\Enemies\\Headman\\Head.tex"));
  111. AddAttachment_t(pmo, HEADMAN_ATTACHMENT_ROCKET_LAUNCHER,
  112. CTFILENAME("Models\\Enemies\\Headman\\RocketLauncher.mdl"), 0,
  113. CTFILENAME("Models\\Enemies\\Headman\\RocketLauncher.tex"));
  114. pmo->StretchModel(FLOAT3D(1.25f,1.25f,1.25f));
  115. _bHasFloor = TRUE;
  116. } else if (strName=="Firecracker") {
  117. pmo->SetData_t(CTFILENAME("Models\\Enemies\\Headman\\Headman.mdl"));
  118. pmo->PlayAnim(HEADMAN_ANIM_COMPUTERKAMIKAZE, AOF_LOOPING);
  119. pmo->mo_toTexture.SetData_t(CTFILENAME("Models\\Enemies\\Headman\\Firecracker.tex"));
  120. _plModel = CPlacement3D(FLOAT3D(0,-1.0,-1.75), ANGLE3D(210,0,0));
  121. AddAttachment_t(pmo, HEADMAN_ATTACHMENT_HEAD,
  122. CTFILENAME("Models\\Enemies\\Headman\\FirecrackerHead.mdl"), 0,
  123. CTFILENAME("Models\\Enemies\\Headman\\FirecrackerHead.tex"));
  124. AddAttachment_t(pmo, HEADMAN_ATTACHMENT_CHAINSAW,
  125. CTFILENAME("Models\\Enemies\\Headman\\Chainsaw.mdl"), 0,
  126. CTFILENAME("Models\\Enemies\\Headman\\Chainsaw.tex"));
  127. pmo->StretchModel(FLOAT3D(1.25f,1.25f,1.25f));
  128. _bHasFloor = TRUE;
  129. } else if (strName=="Bomberman") {
  130. pmo->SetData_t(CTFILENAME("Models\\Enemies\\Headman\\Headman.mdl"));
  131. pmo->PlayAnim(HEADMAN_ANIM_COMPUTERKAMIKAZE, AOF_LOOPING);
  132. pmo->mo_toTexture.SetData_t(CTFILENAME("Models\\Enemies\\Headman\\Bomberman.tex"));
  133. _plModel = CPlacement3D(FLOAT3D(0,-1.0,-1.75), ANGLE3D(210,0,0));
  134. AddAttachment_t(pmo, HEADMAN_ATTACHMENT_HEAD,
  135. CTFILENAME("Models\\Enemies\\Headman\\Head.mdl"), 0,
  136. CTFILENAME("Models\\Enemies\\Headman\\Head.tex"));
  137. pmo->StretchModel(FLOAT3D(1.25f,1.25f,1.25f));
  138. _bHasFloor = TRUE;
  139. } else if (strName=="Kamikaze") {
  140. pmo->SetData_t(CTFILENAME("Models\\Enemies\\Headman\\Headman.mdl"));
  141. pmo->PlayAnim(HEADMAN_ANIM_COMPUTERKAMIKAZE, AOF_LOOPING);
  142. pmo->mo_toTexture.SetData_t(CTFILENAME("Models\\Enemies\\Headman\\Kamikaze.tex"));
  143. _plModel = CPlacement3D(FLOAT3D(0,-1.0,-1.75), ANGLE3D(210,0,0));
  144. AddAttachment_t(pmo, HEADMAN_ATTACHMENT_BOMB_RIGHT_HAND,
  145. CTFILENAME("Models\\Enemies\\Headman\\Projectile\\Bomb.mdl"), 0,
  146. CTFILENAME("Models\\Enemies\\Headman\\Projectile\\Bomb.tex"));
  147. AddAttachment_t(pmo, HEADMAN_ATTACHMENT_BOMB_LEFT_HAND,
  148. CTFILENAME("Models\\Enemies\\Headman\\Projectile\\Bomb.mdl"), 0,
  149. CTFILENAME("Models\\Enemies\\Headman\\Projectile\\Bomb.tex"));
  150. pmo->StretchModel(FLOAT3D(1.25f,1.25f,1.25f));
  151. _bHasFloor = TRUE;
  152. } else if (strName=="EyemanPurple") {
  153. pmo->SetData_t(CTFILENAME("Models\\Enemies\\Eyeman\\Eyeman.mdl"));
  154. pmo->PlayAnim(EYEMAN_ANIM_WALK, AOF_LOOPING);
  155. pmo->mo_toTexture.SetData_t(CTFILENAME("Models\\Enemies\\Eyeman\\Eyeman4.tex"));
  156. _plModel = CPlacement3D(FLOAT3D(0,-0.9f,-1.5), ANGLE3D(210,0,0));
  157. pmo->StretchModel(FLOAT3D(1,1,1));
  158. _bHasFloor = TRUE;
  159. } else if (strName=="EyemanGreen") {
  160. pmo->SetData_t(CTFILENAME("Models\\Enemies\\Eyeman\\Eyeman.mdl"));
  161. pmo->PlayAnim(EYEMAN_ANIM_WALK, AOF_LOOPING);
  162. pmo->mo_toTexture.SetData_t(CTFILENAME("Models\\Enemies\\Eyeman\\Eyeman5.tex"));
  163. _plModel = CPlacement3D(FLOAT3D(0,-1.2f,-2.0), ANGLE3D(210,0,0));
  164. pmo->StretchModel(FLOAT3D(1.3f, 1.3f, 1.3f));
  165. _bHasFloor = TRUE;
  166. } else if (strName=="Boneman") {
  167. pmo->SetData_t(CTFILENAME("Models\\Enemies\\Boneman\\Boneman.mdl"));
  168. pmo->PlayAnim(BONEMAN_ANIM_WALKCOMPUTER, AOF_LOOPING);
  169. pmo->mo_toTexture.SetData_t(CTFILENAME("Models\\Enemies\\Boneman\\Boneman.tex"));
  170. _plModel = CPlacement3D(FLOAT3D(0,-1.0f,-3.0), ANGLE3D(210,0,0));
  171. pmo->StretchModel(FLOAT3D(1,1,1));
  172. _bHasFloor = TRUE;
  173. } else if (strName=="Bull") {
  174. pmo->SetData_t(CTFILENAME("Models\\Enemies\\Werebull\\Werebull.mdl"));
  175. pmo->PlayAnim(WEREBULL_ANIM_WALK, AOF_LOOPING);
  176. pmo->mo_toTexture.SetData_t(CTFILENAME("Models\\Enemies\\Werebull\\Werebull.tex"));
  177. _plModel = CPlacement3D(FLOAT3D(0.0f,-1.5f,-4.0), ANGLE3D(-110,0,0));
  178. pmo->StretchModel(FLOAT3D(1,1,1));
  179. _bHasFloor = TRUE;
  180. } else if (strName=="ScorpmanSoldier") {
  181. pmo->SetData_t(CTFILENAME("Models\\Enemies\\Scorpman\\Scorpman.mdl"));
  182. pmo->mo_toSpecular.SetData_t(CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  183. pmo->PlayAnim(SCORPMAN_ANIM_WALK, AOF_LOOPING);
  184. pmo->mo_toTexture.SetData_t(CTFILENAME("Models\\Enemies\\Scorpman\\Soldier.tex"));
  185. // _plModel = CPlacement3D(FLOAT3D(0+0.2f*2,-2,-13), ANGLE3D(150,0,0));
  186. // _fFOV = 30;
  187. _plModel = CPlacement3D(FLOAT3D(0+0.5f*3,-3.0f,-7.0)*2/3, ANGLE3D(135,0,0));
  188. _vLightDir = FLOAT3D( 0.2f, -0.2f, -0.2f);
  189. _colLight = C_lGRAY;
  190. _colAmbient = C_vdGRAY;
  191. AddAttachment_t(pmo, SCORPMAN_ATTACHMENT_MINIGUN,
  192. CTFILENAME("Models\\Enemies\\Scorpman\\Gun.mdl"), 0,
  193. CTFILENAME("Models\\Enemies\\Scorpman\\Gun.tex"));
  194. pmo->StretchModel(FLOAT3D(2.0f,2.0f,2.0f));
  195. _bHasFloor = TRUE;
  196. } else if (strName=="ScorpmanGeneral") {
  197. pmo->SetData_t(CTFILENAME("Models\\Enemies\\Scorpman\\Scorpman.mdl"));
  198. pmo->PlayAnim(SCORPMAN_ANIM_WALK, AOF_LOOPING);
  199. pmo->mo_toTexture.SetData_t(CTFILENAME("Models\\Enemies\\Scorpman\\General.tex"));
  200. pmo->mo_toSpecular.SetData_t(CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  201. // _plModel = CPlacement3D(FLOAT3D(0+0.2f*3,-4,-19), ANGLE3D(150,0,0));
  202. // _fFOV = 30;
  203. _plModel = CPlacement3D(FLOAT3D(0+0.5f*3,-3.0f,-7.0), ANGLE3D(135,0,0));
  204. _vLightDir = FLOAT3D( 0.2f, -0.2f, -0.2f);
  205. _colLight = C_lGRAY;
  206. _colAmbient = C_vdGRAY;
  207. AddAttachment_t(pmo, SCORPMAN_ATTACHMENT_MINIGUN,
  208. CTFILENAME("Models\\Enemies\\Scorpman\\Gun.mdl"), 0,
  209. CTFILENAME("Models\\Enemies\\Scorpman\\Gun.tex"));
  210. pmo->StretchModel(FLOAT3D(3.0f,3.0f,3.0f));
  211. _bHasFloor = TRUE;
  212. } else if (strName=="WalkerSmall") {
  213. pmo->SetData_t(CTFILENAME("Models\\Enemies\\Walker\\Walker.mdl"));
  214. pmo->PlayAnim(WALKER_ANIM_WALKBIG, AOF_LOOPING);
  215. pmo->mo_toTexture.SetData_t(CTFILENAME("Models\\Enemies\\Walker\\Walker02.tex"));
  216. AddAttachment_t(pmo, WALKER_ATTACHMENT_ROCKETLAUNCHER_LT,
  217. CTFILENAME("Models\\Enemies\\Walker\\RocketLauncher.mdl"), 0,
  218. CTFILENAME("Models\\Enemies\\Walker\\RocketLauncher.tex"),
  219. CTFILENAME(""),
  220. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  221. AddAttachment_t(pmo, WALKER_ATTACHMENT_ROCKETLAUNCHER_RT,
  222. CTFILENAME("Models\\Enemies\\Walker\\RocketLauncher.mdl"), 0,
  223. CTFILENAME("Models\\Enemies\\Walker\\RocketLauncher.tex"),
  224. CTFILENAME(""),
  225. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  226. _plModel = CPlacement3D(FLOAT3D(0,-2.0f,-5.0), ANGLE3D(210,0,0));
  227. pmo->StretchModel(FLOAT3D(0.5,0.5,0.5));
  228. _bHasFloor = TRUE;
  229. _colLight = C_lGRAY;
  230. _colAmbient = C_vdGRAY;
  231. } else if (strName=="WalkerBig") {
  232. pmo->SetData_t(CTFILENAME("Models\\Enemies\\Walker\\Walker.mdl"));
  233. pmo->PlayAnim(WALKER_ANIM_WALKBIG, AOF_LOOPING);
  234. pmo->mo_toTexture.SetData_t(CTFILENAME("Models\\Enemies\\Walker\\Walker01.tex"));
  235. AddAttachment_t(pmo, WALKER_ATTACHMENT_ROCKETLAUNCHER_LT,
  236. CTFILENAME("Models\\Enemies\\Walker\\RocketLauncher.mdl"), 0,
  237. CTFILENAME("Models\\Enemies\\Walker\\RocketLauncher.tex"),
  238. CTFILENAME(""),
  239. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  240. AddAttachment_t(pmo, WALKER_ATTACHMENT_ROCKETLAUNCHER_RT,
  241. CTFILENAME("Models\\Enemies\\Walker\\RocketLauncher.mdl"), 0,
  242. CTFILENAME("Models\\Enemies\\Walker\\RocketLauncher.tex"),
  243. CTFILENAME(""),
  244. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  245. _plModel = CPlacement3D(FLOAT3D(0,-4.0f,-10.0), ANGLE3D(210,0,0));
  246. pmo->StretchModel(FLOAT3D(1,1,1));
  247. _bHasFloor = TRUE;
  248. } else if (strName=="Woman") {
  249. pmo->SetData_t(CTFILENAME("Models\\Enemies\\Woman\\Woman.mdl"));
  250. pmo->PlayAnim(WOMAN_ANIM_AIRSTAND, AOF_LOOPING);
  251. pmo->mo_toTexture.SetData_t(CTFILENAME("Models\\Enemies\\Woman\\Woman.tex"));
  252. _plModel = CPlacement3D(FLOAT3D(0,0.0f,-2.0), ANGLE3D(210,30,0));
  253. pmo->StretchModel(FLOAT3D(1,1,1));
  254. _bHasFloor = TRUE;
  255. _fFloorY = -1.5f;
  256. } else if (strName=="Gizmo") {
  257. pmo->SetData_t(CTFILENAME("Models\\Enemies\\Gizmo\\Gizmo.mdl"));
  258. pmo->PlayAnim(GIZMO_ANIM_IDLE, AOF_LOOPING);
  259. pmo->mo_toTexture.SetData_t(CTFILENAME("Models\\Enemies\\Gizmo\\Gizmo.tex"));
  260. _plModel = CPlacement3D(FLOAT3D(0,-0.5f,-1.2f), ANGLE3D(150,0,0));
  261. pmo->StretchModel(FLOAT3D(1,1,1));
  262. _fFloorY = 0.0f;
  263. _bHasFloor = TRUE;
  264. } else if (strName=="Fish") {
  265. pmo->SetData_t(CTFILENAME("Models\\Enemies\\Fish\\Fish.mdl"));
  266. pmo->PlayAnim(FISH_ANIM_IDLE, AOF_LOOPING);
  267. pmo->mo_toTexture.SetData_t(CTFILENAME("Models\\Enemies\\Fish\\Fish1.tex"));
  268. pmo->mo_toSpecular.SetData_t(CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  269. _plModel = CPlacement3D(FLOAT3D(-0.2f,-0.5f,-3.0), ANGLE3D(250,0,0));
  270. pmo->StretchModel(FLOAT3D(1,1,1));
  271. _bHasFloor = TRUE;
  272. _fFloorY = -1.0f;
  273. } else if (strName=="BeastNormal") {
  274. pmo->SetData_t(CTFILENAME("Models\\Enemies\\Beast\\Beast.mdl"));
  275. pmo->PlayAnim(BEAST_ANIM_IDLECOMPUTER, AOF_LOOPING);
  276. pmo->mo_toTexture.SetData_t(CTFILENAME("Models\\Enemies\\Beast\\Beast.tex"));
  277. _plModel = CPlacement3D(FLOAT3D(0,-2.0f,-6.0), ANGLE3D(170,0,0));
  278. pmo->StretchModel(FLOAT3D(2,2,2));
  279. _bHasFloor = TRUE;
  280. } else if (strName=="BeastBig") {
  281. pmo->SetData_t(CTFILENAME("Models\\Enemies\\Beast\\Beast.mdl"));
  282. pmo->PlayAnim(BEAST_ANIM_IDLECOMPUTER, AOF_LOOPING);
  283. pmo->mo_toTexture.SetData_t(CTFILENAME("Models\\Enemies\\Beast\\BeastBig.tex"));
  284. _plModel = CPlacement3D(FLOAT3D(0,-6.5f,-18.0), ANGLE3D(170,0,0));
  285. //_plModel = CPlacement3D(FLOAT3D(tmp_af[5],tmp_af[6],tmp_af[7]), ANGLE3D(tmp_af[8],0,0));
  286. //_fFOV = tmp_af[9];
  287. //CPrintF("%f %f %f : %f : %f\n", tmp_af[5],tmp_af[6],tmp_af[7], tmp_af[8], tmp_af[9]);
  288. pmo->StretchModel(FLOAT3D(6,6,6));
  289. _bHasFloor = TRUE;
  290. } else if (strName=="ElementalLava") {
  291. pmo->SetData_t(CTFILENAME("Models\\Enemies\\ElementalLava\\ElementalLava.mdl"));
  292. pmo->PlayAnim(ELEMENTALLAVA_ANIM_WALKCOMPUTER, AOF_LOOPING);
  293. pmo->mo_toTexture.SetData_t(CTFILENAME("Models\\Enemies\\ElementalLava\\Lava04Fx.tex"));
  294. pmo->mo_toBump.SetData_t(CTFILENAME("Models\\Enemies\\ElementalLava\\Detail.tex"));
  295. AddAttachment_t(pmo, ELEMENTALLAVA_ATTACHMENT_BODY_FLARE,
  296. CTFILENAME("Models\\Enemies\\ElementalLava\\BodyFlare.mdl"), 0,
  297. CTFILENAME("Models\\Enemies\\ElementalLava\\Flare.tex"));
  298. AddAttachment_t(pmo, ELEMENTALLAVA_ATTACHMENT_RIGHT_HAND_FLARE,
  299. CTFILENAME("Models\\Enemies\\ElementalLava\\HandFlare.mdl"), 0,
  300. CTFILENAME("Models\\Enemies\\ElementalLava\\Flare.tex"));
  301. AddAttachment_t(pmo, ELEMENTALLAVA_ATTACHMENT_LEFT_HAND_FLARE,
  302. CTFILENAME("Models\\Enemies\\ElementalLava\\HandFlare.mdl"), 0,
  303. CTFILENAME("Models\\Enemies\\ElementalLava\\Flare.tex"));
  304. _plModel = CPlacement3D(FLOAT3D(0,-5.0f,-8.0), ANGLE3D(150,0,0));
  305. pmo->StretchModel(FLOAT3D(4,4,4));
  306. _bHasFloor = TRUE;
  307. _iParticleType = PARTICLES_LAVA_ELEMENTAL;
  308. } else if (strName=="Devil") {
  309. pmo->SetData_t(CTFILENAME("Models\\Enemies\\Devil\\Devil.mdl"));
  310. pmo->PlayAnim(DEVIL_ANIM_WALK, AOF_LOOPING);
  311. pmo->mo_toTexture.SetData_t(CTFILENAME("Models\\Enemies\\Devil\\Devil.tex"));
  312. _plModel = CPlacement3D(FLOAT3D(0,-12.0f,-25.0), ANGLE3D(150,0,0));
  313. pmo->StretchModel(FLOAT3D(12,12,12));
  314. _bHasFloor = TRUE;
  315. } else if (strName=="Guffy") {
  316. pmo->SetData_t(CTFILENAME("ModelsMP\\Enemies\\Guffy\\Guffy.mdl"));
  317. pmo->PlayAnim(GUFFY_ANIM_IDLE, AOF_LOOPING);
  318. pmo->mo_toTexture.SetData_t(CTFILENAME("ModelsMP\\Enemies\\Guffy\\Guffy.tex"));
  319. AddAttachment_t(pmo, GUFFY_ATTACHMENT_GUNRIGHT,
  320. CTFILENAME("ModelsMP\\Enemies\\Guffy\\Gun.mdl"), 0,
  321. CTFILENAME("ModelsMP\\Enemies\\Guffy\\Gun.tex"));
  322. AddAttachment_t(pmo, GUFFY_ATTACHMENT_GUNLEFT,
  323. CTFILENAME("ModelsMP\\Enemies\\Guffy\\Gun.mdl"), 0,
  324. CTFILENAME("ModelsMP\\Enemies\\Guffy\\Gun.tex"));
  325. CModelObject *pmoRight = &pmo->GetAttachmentModel(GUFFY_ATTACHMENT_GUNRIGHT)->amo_moModelObject;
  326. pmoRight->StretchModel(FLOAT3D(-1,1,1));
  327. _plModel = CPlacement3D(FLOAT3D(0.0f,-2.0f,-5.75f), ANGLE3D(210,0,0));
  328. _fFOV = 70.0f;
  329. _vLightDir = FLOAT3D( -0.1f, -0.1f, -0.175f);
  330. //_plModel = CPlacement3D(FLOAT3D(tmp_af[5],tmp_af[6],tmp_af[7]), ANGLE3D(tmp_af[8],0,0));
  331. //_fFOV = tmp_af[9];
  332. //CPrintF("%f %f %f : %f : %f\n", tmp_af[5],tmp_af[6],tmp_af[7], tmp_af[8], tmp_af[9]);
  333. pmo->StretchModel(FLOAT3D(1.5f, 1.5f, 1.5f));
  334. _bHasFloor = TRUE;
  335. } else if (strName=="GruntSoldier") {
  336. pmo->SetData_t(CTFILENAME("ModelsMP\\Enemies\\Grunt\\Grunt.mdl"));
  337. pmo->PlayAnim(GRUNT_ANIM_IDLEPATROL, AOF_LOOPING);
  338. pmo->mo_toTexture.SetData_t(CTFILENAME("ModelsMP\\Enemies\\Grunt\\Soldier.tex"));
  339. AddAttachment_t(pmo, GRUNT_ATTACHMENT_GUN_SMALL,
  340. CTFILENAME("ModelsMP\\Enemies\\Grunt\\Gun.mdl"), 0,
  341. CTFILENAME("ModelsMP\\Enemies\\Grunt\\Gun.tex"));
  342. _plModel = CPlacement3D(FLOAT3D(0.0f,-1.5f,-3.7f), ANGLE3D(165.0f,0.0f,0.0f));
  343. _fFOV = 70.0f;
  344. _vLightDir = FLOAT3D( -0.1f, -0.2f, -0.2f);
  345. //_vLightDir = FLOAT3D( tmp_af[2], tmp_af[3], tmp_af[4]);
  346. pmo->StretchModel(FLOAT3D(1.2f, 1.2f, 1.2f));
  347. _fFloorY = 0.0f;
  348. _bHasFloor = TRUE;
  349. } else if (strName=="GruntCommander") {
  350. pmo->SetData_t(CTFILENAME("ModelsMP\\Enemies\\Grunt\\Grunt.mdl"));
  351. pmo->PlayAnim(GRUNT_ANIM_IDLEPATROL, AOF_LOOPING);
  352. pmo->mo_toTexture.SetData_t(CTFILENAME("ModelsMP\\Enemies\\Grunt\\Commander.tex"));
  353. AddAttachment_t(pmo, GRUNT_ATTACHMENT_GUN_COMMANDER,
  354. CTFILENAME("ModelsMP\\Enemies\\Grunt\\Gun_Commander.mdl"), 0,
  355. CTFILENAME("ModelsMP\\Enemies\\Grunt\\Gun_Commander.tex"));
  356. _plModel = CPlacement3D(FLOAT3D(0.0f,-1.65f,-3.9f), ANGLE3D(165.0f,0.0f,0.0f));
  357. _fFOV = 70.0f;
  358. _vLightDir = FLOAT3D( -0.1f, -0.2f, -0.2f);
  359. pmo->StretchModel(FLOAT3D(1.4f, 1.4f, 1.4f));
  360. _fFloorY = 0.0f;
  361. _bHasFloor = TRUE;
  362. } else if (strName=="Demon") {
  363. pmo->SetData_t(CTFILENAME("ModelsMP\\Enemies\\Demon\\Demon.mdl"));
  364. pmo->PlayAnim(DEMON_ANIM_IDLE, AOF_LOOPING);
  365. pmo->mo_toTexture.SetData_t(CTFILENAME("ModelsMP\\Enemies\\Demon\\Demon.tex"));
  366. _plModel = CPlacement3D(FLOAT3D(0.0f, -1.25f, -2.25f), ANGLE3D(160.0f, 0.0f, 0.0f));
  367. pmo->StretchModel(FLOAT3D(1.4f, 1.4f, 1.4f));
  368. _fFloorY = 0.0f;
  369. _bHasFloor = TRUE;
  370. } else if (strName=="Chainsaw Freak") {
  371. pmo->SetData_t(CTFILENAME("ModelsMP\\Enemies\\ChainsawFreak\\Freak.mdl"));
  372. pmo->PlayAnim(FREAK_ANIM_IDLE, AOF_LOOPING);
  373. pmo->mo_toTexture.SetData_t(CTFILENAME("ModelsMP\\Enemies\\ChainsawFreak\\Freak.tex"));
  374. AddAttachment_t(pmo, FREAK_ATTACHMENT_CHAINSAW,
  375. CTFILENAME("ModelsMP\\Enemies\\ChainsawFreak\\Saw.mdl"), 0,
  376. CTFILENAME("ModelsMP\\Enemies\\ChainsawFreak\\Saw.tex"));
  377. _plModel = CPlacement3D(FLOAT3D(-0.25f, -2.0f, -3.75f), ANGLE3D(200.0f, 0.0f, 0.0f));
  378. pmo->StretchModel(FLOAT3D(1.4f, 1.4f, 1.4f));
  379. _fFloorY = 0.0f;
  380. _bHasFloor = TRUE;
  381. } else if (strName=="Cannon Static") {
  382. pmo->SetData_t(CTFILENAME("ModelsMP\\Enemies\\CannonStatic\\Turret.mdl"));
  383. pmo->PlayAnim(TURRET_ANIM_DEFAULT, AOF_LOOPING);
  384. pmo->mo_toTexture.SetData_t(CTFILENAME("ModelsMP\\Enemies\\CannonStatic\\Turret.tex"));
  385. AddAttachment_t(pmo, TURRET_ATTACHMENT_CANNON,
  386. CTFILENAME("ModelsMP\\Enemies\\CannonStatic\\Cannon.mdl"), 0,
  387. CTFILENAME("ModelsMP\\Enemies\\CannonStatic\\Cannon.tex"));
  388. CAttachmentModelObject *pmoMuzzle = pmo->GetAttachmentModel(TURRET_ATTACHMENT_CANNON);
  389. pmoMuzzle->amo_plRelative.pl_OrientationAngle(2) = 10.0f;
  390. _plModel = CPlacement3D(FLOAT3D(0.4f, -1.0f, -2.75), ANGLE3D(125.0f, 0.0f, 0.0f));
  391. pmo->StretchModel(FLOAT3D(1.4f, 1.4f, 1.4f));
  392. _fFloorY = 0.0f;
  393. _bHasFloor = TRUE;
  394. } else if (strName=="Cannon Rotating") {
  395. pmo->SetData_t(CTFILENAME("ModelsMP\\Enemies\\CannonRotating\\Turret.mdl"));
  396. pmo->PlayAnim(TURRET_ANIM_DEFAULT, AOF_LOOPING);
  397. pmo->mo_toTexture.SetData_t(CTFILENAME("ModelsMP\\Enemies\\CannonRotating\\Turret.tex"));
  398. AddAttachment_t(pmo, TURRET_ATTACHMENT_ROTATORHEADING,
  399. CTFILENAME("ModelsMP\\Enemies\\CannonRotating\\RotatingMechanism.mdl"), 0,
  400. CTFILENAME("ModelsMP\\Enemies\\CannonRotating\\RotatingMechanism.tex"));
  401. CModelObject *pmoRotator = &pmo->GetAttachmentModel(TURRET_ATTACHMENT_ROTATORHEADING)->amo_moModelObject;
  402. AddAttachment_t(pmoRotator, ROTATINGMECHANISM_ATTACHMENT_CANNON,
  403. CTFILENAME("ModelsMP\\Enemies\\CannonStatic\\Cannon.mdl"), 0,
  404. CTFILENAME("ModelsMP\\Enemies\\CannonStatic\\Cannon.tex"));
  405. CAttachmentModelObject *pmoMuzzle = pmoRotator->GetAttachmentModel(ROTATINGMECHANISM_ATTACHMENT_CANNON);
  406. pmoMuzzle->amo_plRelative.pl_OrientationAngle(2) = 10.0f;
  407. _plModel = CPlacement3D(FLOAT3D(0.4f, -1.0f, -2.75f), ANGLE3D(125.0f, 0.0f, 0.0f));
  408. pmo->StretchModel(FLOAT3D(1.4f, 1.4f, 1.4f));
  409. _fFloorY = 0.0f;
  410. _bHasFloor = TRUE;
  411. } else if (strName=="Summoner") {
  412. pmo->SetData_t(CTFILENAME("ModelsMP\\Enemies\\Summoner\\Summoner.mdl"));
  413. pmo->PlayAnim(SUMMONER_ANIM_IDLE, AOF_LOOPING);
  414. pmo->mo_toTexture.SetData_t(CTFILENAME("ModelsMP\\Enemies\\Summoner\\Summoner.tex"));
  415. pmo->mo_toBump.SetData_t(CTFILENAME("TexturesMP\\Detail\\Crumples04.tex"));
  416. AddAttachment_t(pmo, SUMMONER_ATTACHMENT_STAFF,
  417. CTFILENAME("ModelsMP\\Enemies\\Summoner\\Staff.mdl"), 0,
  418. CTFILENAME("ModelsMP\\Enemies\\Summoner\\Staff.tex"));
  419. _plModel = CPlacement3D(FLOAT3D(0.25f, -7.0f, -31.0f), ANGLE3D(160.0f, 0.0f, 0.0f));
  420. _fFOV = 50.0f;
  421. _vLightDir = FLOAT3D( 0.1f, -0.3f, -0.2f);
  422. pmo->StretchModel(FLOAT3D(7.0f, 7.0f, 7.0f));
  423. _fFloorY = 0.0f;
  424. _bHasFloor = TRUE;
  425. } else if (strName=="Exotech Larva") {
  426. pmo->SetData_t(CTFILENAME("ModelsMP\\Enemies\\ExotechLarva\\Body.mdl"));
  427. pmo->PlayAnim(BODY_ANIM_IDLECOMPUTER, AOF_LOOPING);
  428. pmo->mo_toTexture.SetData_t(CTFILENAME("ModelsMP\\Enemies\\ExotechLarva\\Body.tex"));
  429. pmo->StretchModel(FLOAT3D(1.0f, 1.0f, 1.0f));
  430. CModelObject *pmoAtt;
  431. // left side
  432. AddAttachment_t(pmo, BODY_ATTACHMENT_ARM_LEFT,
  433. CTFILENAME("ModelsMP\\Enemies\\ExotechLarva\\Arm.mdl"), 0,
  434. CTFILENAME("ModelsMP\\Enemies\\ExotechLarva\\Arm.tex"));
  435. pmoAtt = &pmo->GetAttachmentModel(BODY_ATTACHMENT_ARM_LEFT)->amo_moModelObject;
  436. AddAttachment_t(pmoAtt, ARM_ATTACHMENT_PLASMAGUN,
  437. CTFILENAME("ModelsMP\\Enemies\\ExotechLarva\\Weapons\\PlasmaGun.mdl"), 0,
  438. CTFILENAME("ModelsMP\\Enemies\\ExotechLarva\\Weapons\\PlasmaGun.tex"));
  439. // right side
  440. AddAttachment_t(pmo, BODY_ATTACHMENT_ARM_RIGHT,
  441. CTFILENAME("ModelsMP\\Enemies\\ExotechLarva\\Arm.mdl"), 0,
  442. CTFILENAME("ModelsMP\\Enemies\\ExotechLarva\\Arm.tex"));
  443. pmoAtt = &pmo->GetAttachmentModel(BODY_ATTACHMENT_ARM_RIGHT)->amo_moModelObject;
  444. pmoAtt->StretchModel(FLOAT3D(-1,1,1));
  445. AddAttachment_t(pmoAtt, ARM_ATTACHMENT_PLASMAGUN,
  446. CTFILENAME("ModelsMP\\Enemies\\ExotechLarva\\Weapons\\PlasmaGun.mdl"), 0,
  447. CTFILENAME("ModelsMP\\Enemies\\ExotechLarva\\Weapons\\PlasmaGun.tex"));
  448. CModelObject *pmoAtt2;
  449. pmoAtt2 = &pmoAtt->GetAttachmentModel(ARM_ATTACHMENT_PLASMAGUN)->amo_moModelObject;
  450. pmoAtt2->StretchModel(FLOAT3D(-1,1,1));
  451. // blades
  452. AddAttachment_t(pmo, BODY_ATTACHMENT_BACKARMS,
  453. CTFILENAME("ModelsMP\\Enemies\\ExotechLarva\\BackArms.mdl"), 0,
  454. CTFILENAME("ModelsMP\\Enemies\\ExotechLarva\\Body.tex"));
  455. CModelObject *pmoAtt3;
  456. pmoAtt3 = &pmo->GetAttachmentModel(BODY_ATTACHMENT_BACKARMS)->amo_moModelObject;
  457. pmoAtt3->PlayAnim(BACKARMS_ANIM_ACTIVE, AOF_LOOPING);
  458. // holder
  459. AddAttachment_t(pmo, BODY_ATTACHMENT_EXOTECHLARVA,
  460. CTFILENAME("ModelsMP\\Enemies\\ExotechLarva\\ExotechLarva.mdl"), 0,
  461. CTFILENAME("ModelsMP\\Enemies\\ExotechLarva\\ExotechLarva.tex"));
  462. pmoAtt = &pmo->GetAttachmentModel(BODY_ATTACHMENT_EXOTECHLARVA)->amo_moModelObject;
  463. AddAttachment_t(pmoAtt, EXOTECHLARVA_ATTACHMENT_BEAM,
  464. CTFILENAME("ModelsMP\\Enemies\\ExotechLarva\\Beam.mdl"), 0,
  465. CTFILENAME("ModelsMP\\Effects\\Laser\\Laser.tex"));
  466. AddAttachment_t(pmoAtt, EXOTECHLARVA_ATTACHMENT_ENERGYBEAMS,
  467. CTFILENAME("ModelsMP\\Enemies\\ExotechLarva\\EnergyBeams.mdl"), 0,
  468. CTFILENAME("ModelsMP\\Enemies\\ExotechLarva\\EnergyBeams.tex"));
  469. AddAttachment_t(pmoAtt, EXOTECHLARVA_ATTACHMENT_FLARE,
  470. CTFILENAME("ModelsMP\\Enemies\\ExotechLarva\\EffectFlare.mdl"), 0,
  471. CTFILENAME("ModelsMP\\Enemies\\ExotechLarva\\EffectFlare.tex"));
  472. _plModel = CPlacement3D(FLOAT3D(0.5f, -8.0f, -21.0f), ANGLE3D(165.0f, 0.0f, 0.0f));
  473. _fFOV = 70.0f;
  474. _aRotation = ANGLE3D( 10.0f, 0, 0 );
  475. _vLightDir = FLOAT3D( -0.1f, -0.2f, -0.2f);
  476. pmo->StretchModelRelative(FLOAT3D(2.5f, 2.5f, 2.5f));
  477. //pmo->StretchModel(FLOAT3D(2.5f, 2.5f, 2.5f));
  478. _fFloorY = -2.0f;
  479. _bHasFloor = TRUE;
  480. } else if (strName=="Air Elemental") {
  481. pmo->SetData_t(CTFILENAME("ModelsMP\\Enemies\\AirElemental\\Elemental.mdl"));
  482. pmo->PlayAnim(ELEMENTAL_ANIM_IDLE, AOF_LOOPING);
  483. pmo->mo_colBlendColor = 0;
  484. _plModel = CPlacement3D(FLOAT3D(-1.0f, -13.0f, -52.0f), ANGLE3D(170.0f, 0.0f, 0.0f));
  485. _fFOV = 50.0f;
  486. //_plModel = CPlacement3D(FLOAT3D(tmp_af[5],tmp_af[6],tmp_af[7]), ANGLE3D(tmp_af[8],0,0));
  487. //_fFOV = tmp_af[9];
  488. //CPrintF("%f %f %f : %f : %f\n", tmp_af[5],tmp_af[6],tmp_af[7], tmp_af[8], tmp_af[9]);
  489. //_vLightDir = FLOAT3D( tmp_af[2], tmp_af[3], tmp_af[4]);
  490. pmo->StretchModel(FLOAT3D(14.0f, 14.0f, 14.0f));
  491. _fFloorY = -2.0f;
  492. _bHasFloor = TRUE;
  493. _iParticleType = PARTICLES_AIR_ELEMENTAL;
  494. } else if (strName=="BeastHuge") {
  495. pmo->SetData_t(CTFILENAME("Models\\Enemies\\Beast\\Beast.mdl"));
  496. pmo->PlayAnim(BEAST_ANIM_IDLECOMPUTER, AOF_LOOPING);
  497. pmo->mo_toTexture.SetData_t(CTFILENAME("ModelsMP\\Enemies\\Beast\\BeastBiggest.tex"));
  498. _plModel = CPlacement3D(FLOAT3D(-0.5f, -12.0f, -30.0f), ANGLE3D(170.0f, 0.0f, 0.0f));
  499. _vLightDir = FLOAT3D( -0.1f, -0.3f, -0.2f);
  500. pmo->StretchModel(FLOAT3D(11.0f, 11.0f, 11.0f));
  501. _fFloorY = 0.0f;
  502. _bHasFloor = TRUE;
  503. } else if (strName=="Knife") {
  504. pmo->SetData_t(CTFILENAME("Models\\Weapons\\Knife\\KnifeItem.mdl"));
  505. pmo->mo_toTexture.SetData_t(CTFILENAME("Models\\Weapons\\Knife\\KnifeItem.tex"));
  506. pmo->PlayAnim(KNIFEITEM_ANIM_COMPUTER, AOF_LOOPING);
  507. _plModel = CPlacement3D(FLOAT3D(0,-0.5f,-2.0), ANGLE3D(0,10,0));
  508. _aRotation = ANGLE3D(100,0,0);
  509. pmo->StretchModel(FLOAT3D(4,4,4));
  510. _bHasFloor = TRUE;
  511. _fFloorY = -1.0f;
  512. } else if (strName=="Colt") {
  513. pmo->SetData_t(CTFILENAME("Models\\Weapons\\Colt\\ColtItem.mdl"));
  514. pmo->mo_toTexture.SetData_t(CTFILENAME("Models\\Weapons\\Colt\\ColtMain.tex"));
  515. _plModel = CPlacement3D(FLOAT3D(0,-0.5f,-2.0), ANGLE3D(0,10,0));
  516. _aRotation = ANGLE3D(100,0,0);
  517. AddAttachment_t(pmo, COLTITEM_ATTACHMENT_BULLETS,
  518. CTFILENAME("Models\\Weapons\\Colt\\ColtBullets.mdl"), 0,
  519. CTFILENAME("Models\\Weapons\\Colt\\ColtBullets.tex"),
  520. CTFILENAME("Models\\ReflectionTextures\\LightBlueMetal01.tex"),
  521. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  522. AddAttachment_t(pmo, COLTITEM_ATTACHMENT_COCK,
  523. CTFILENAME("Models\\Weapons\\Colt\\ColtCock.mdl"), 0,
  524. CTFILENAME("Models\\Weapons\\Colt\\ColtCock.tex"),
  525. CTFILENAME("Models\\ReflectionTextures\\LightBlueMetal01.tex"),
  526. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  527. AddAttachment_t(pmo, COLTITEM_ATTACHMENT_BODY,
  528. CTFILENAME("Models\\Weapons\\Colt\\ColtMain.mdl"), 0,
  529. CTFILENAME("Models\\Weapons\\Colt\\ColtMain.tex"),
  530. CTFILENAME("Models\\ReflectionTextures\\LightBlueMetal01.tex"),
  531. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  532. pmo->StretchModel(FLOAT3D(4,4,4));
  533. _bHasFloor = TRUE;
  534. _fFloorY = -1.0f;
  535. } else if (strName=="SingleShotgun") {
  536. pmo->SetData_t(CTFILENAME("Models\\Weapons\\SingleShotgun\\SingleShotgunItem.mdl"));
  537. pmo->mo_toTexture.SetData_t(CTFILENAME("Models\\Weapons\\SingleShotgun\\Handle.tex"));
  538. _plModel = CPlacement3D(FLOAT3D(0,-0.5f,-3.0), ANGLE3D(0,10,0));
  539. _aRotation = ANGLE3D(100,0,0);
  540. AddAttachment_t(pmo, SINGLESHOTGUNITEM_ATTACHMENT_BARRELS,
  541. CTFILENAME("Models\\Weapons\\SingleShotgun\\Barrels.mdl"), 0,
  542. CTFILENAME("Models\\Weapons\\SingleShotgun\\Barrels.tex"),
  543. CTFILENAME("Models\\ReflectionTextures\\DarkMetal.tex"),
  544. CTFILENAME("Models\\SpecularTextures\\Weak.tex"));
  545. AddAttachment_t(pmo, SINGLESHOTGUNITEM_ATTACHMENT_HANDLE,
  546. CTFILENAME("Models\\Weapons\\SingleShotgun\\Handle.mdl"), 0,
  547. CTFILENAME("Models\\Weapons\\SingleShotgun\\Handle.tex"),
  548. CTFILENAME("Models\\ReflectionTextures\\DarkMetal.tex"),
  549. CTFILENAME("Models\\SpecularTextures\\Weak.tex"));
  550. AddAttachment_t(pmo, SINGLESHOTGUNITEM_ATTACHMENT_SLIDER,
  551. CTFILENAME("Models\\Weapons\\SingleShotgun\\Slider.mdl"), 0,
  552. CTFILENAME("Models\\Weapons\\SingleShotgun\\Barrels.tex"),
  553. CTFILENAME("Models\\ReflectionTextures\\DarkMetal.tex"),
  554. CTFILENAME("Models\\SpecularTextures\\Weak.tex"));
  555. pmo->StretchModel(FLOAT3D(3.5,3.5,3.5));
  556. _bHasFloor = TRUE;
  557. _fFloorY = -1.0f;
  558. } else if (strName=="DoubleShotgun") {
  559. pmo->SetData_t(CTFILENAME("Models\\Weapons\\DoubleShotgun\\DoubleShotgunItem.mdl"));
  560. pmo->mo_toTexture.SetData_t(CTFILENAME("Models\\Weapons\\DoubleShotgun\\Handle.tex"));
  561. _plModel = CPlacement3D(FLOAT3D(0,-0.5f,-4.0), ANGLE3D(0,10,0));
  562. _aRotation = ANGLE3D(100,0,0);
  563. AddAttachment_t(pmo, DOUBLESHOTGUNITEM_ATTACHMENT_BARRELS,
  564. CTFILENAME("Models\\Weapons\\DoubleShotgun\\DshotgunBarrels.mdl"), 0,
  565. CTFILENAME("Models\\Weapons\\DoubleShotgun\\Barrels.tex"),
  566. CTFILENAME("Models\\ReflectionTextures\\BWRiples01.tex"),
  567. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  568. AddAttachment_t(pmo, DOUBLESHOTGUNITEM_ATTACHMENT_HANDLE,
  569. CTFILENAME("Models\\Weapons\\DoubleShotgun\\DshotgunHandle.mdl"), 0,
  570. CTFILENAME("Models\\Weapons\\DoubleShotgun\\Handle.tex"),
  571. CTFILENAME("Models\\ReflectionTextures\\LightMetal01.tex"),
  572. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  573. AddAttachment_t(pmo, DOUBLESHOTGUNITEM_ATTACHMENT_SWITCH,
  574. CTFILENAME("Models\\Weapons\\DoubleShotgun\\Switch.mdl"), 0,
  575. CTFILENAME("Models\\Weapons\\DoubleShotgun\\Switch.tex"),
  576. CTFILENAME("Models\\ReflectionTextures\\LightMetal01.tex"),
  577. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  578. pmo->StretchModel(FLOAT3D(3.0,3.0,3.0));
  579. _bHasFloor = TRUE;
  580. _fFloorY = -1.0f;
  581. } else if (strName=="Tommygun") {
  582. pmo->SetData_t(CTFILENAME("Models\\Weapons\\Tommygun\\TommygunItem.mdl"));
  583. pmo->mo_toTexture.SetData_t(CTFILENAME("Models\\Weapons\\Tommygun\\Body.tex"));
  584. _plModel = CPlacement3D(FLOAT3D(0,-0.8f,-1.8f), ANGLE3D(0,10,0));
  585. _aRotation = ANGLE3D(100,0,0);
  586. AddAttachment_t(pmo, TOMMYGUNITEM_ATTACHMENT_BODY,
  587. CTFILENAME("Models\\Weapons\\Tommygun\\Body.mdl"), 0,
  588. CTFILENAME("Models\\Weapons\\Tommygun\\Body.tex"),
  589. CTFILENAME("Models\\ReflectionTextures\\LightMetal01.tex"),
  590. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  591. AddAttachment_t(pmo, TOMMYGUNITEM_ATTACHMENT_SLIDER,
  592. CTFILENAME("Models\\Weapons\\Tommygun\\Slider.mdl"), 0,
  593. CTFILENAME("Models\\Weapons\\Tommygun\\Body.tex"),
  594. CTFILENAME("Models\\ReflectionTextures\\LightMetal01.tex"),
  595. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  596. pmo->StretchModel(FLOAT3D(2.0,2.0,2.0));
  597. _bHasFloor = TRUE;
  598. _fFloorY = -0.5f;
  599. } else if (strName=="Sniper") {
  600. pmo->SetData_t(CTFILENAME("ModelsMP\\Weapons\\Sniper\\Sniper.mdl"));
  601. pmo->mo_toTexture.SetData_t(CTFILENAME("ModelsMP\\Weapons\\Sniper\\Body.tex"));
  602. _plModel = CPlacement3D(FLOAT3D(0,-0.4f,-4.0f), ANGLE3D(0,10,0));
  603. _aRotation = ANGLE3D(100,0,0);
  604. _fFOV = 50.0f;
  605. _vLightDir = FLOAT3D( -0.1f, -0.2f, -0.2f);
  606. AddAttachment_t(pmo, SNIPERITEM_ATTACHMENT_BODY,
  607. CTFILENAME("ModelsMP\\Weapons\\Sniper\\Body.mdl"), 0,
  608. CTFILENAME("ModelsMP\\Weapons\\Sniper\\Body.tex"),
  609. CTFILENAME("Models\\ReflectionTextures\\LightMetal01.tex"),
  610. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  611. pmo->StretchModel(FLOAT3D(1.5,1.5,1.5));
  612. _bHasFloor = TRUE;
  613. _fFloorY = -0.5f;
  614. } else if (strName=="ChainSaw") {
  615. pmo->SetData_t(CTFILENAME("ModelsMP\\Weapons\\Chainsaw\\ChainsawItem.mdl"));
  616. pmo->mo_toTexture.SetData_t(CTFILENAME("ModelsMP\\Weapons\\Chainsaw\\Body.tex"));
  617. _plModel = CPlacement3D(FLOAT3D(0,-0.4f,-3.0f), ANGLE3D(0,10,0));
  618. _aRotation = ANGLE3D(100,0,0);
  619. _fFOV = 60.0f;
  620. _vLightDir = FLOAT3D( -0.1f, -0.2f, -0.2f);
  621. AddAttachment_t(pmo, CHAINSAWITEM_ATTACHMENT_CHAINSAW,
  622. CTFILENAME("ModelsMP\\Weapons\\Chainsaw\\BodyForPlayer.mdl"), 0,
  623. CTFILENAME("ModelsMP\\Weapons\\Chainsaw\\Body.tex"),
  624. CTFILENAME("Models\\ReflectionTextures\\LightMetal01.tex"),
  625. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  626. AddAttachment_t(pmo, CHAINSAWITEM_ATTACHMENT_BLADE,
  627. CTFILENAME("ModelsMP\\Weapons\\Chainsaw\\Blade.mdl"), 0,
  628. CTFILENAME("ModelsMP\\Weapons\\Chainsaw\\Blade.tex"),
  629. CTFILENAME("Models\\ReflectionTextures\\LightMetal01.tex"),
  630. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  631. CAttachmentModelObject *amo = pmo->GetAttachmentModel(CHAINSAWITEM_ATTACHMENT_BLADE);
  632. AddAttachment_t(pmo, BLADEFORPLAYER_ATTACHMENT_TEETH,
  633. CTFILENAME("ModelsMP\\Weapons\\Chainsaw\\Teeth.mdl"), 0,
  634. CTFILENAME("ModelsMP\\Weapons\\Chainsaw\\Teeth.tex"),
  635. CTFILENAME("Models\\ReflectionTextures\\LightMetal01.tex"),
  636. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  637. pmo->StretchModel(FLOAT3D(1.0,1.0,1.0));
  638. _bHasFloor = TRUE;
  639. _fFloorY = -0.5f;
  640. } else if (strName=="Flamer") {
  641. pmo->SetData_t(CTFILENAME("ModelsMP\\Weapons\\Flamer\\FlamerItem.mdl"));
  642. pmo->mo_toTexture.SetData_t(CTFILENAME("ModelsMP\\Weapons\\Flamer\\Body.tex"));
  643. _plModel = CPlacement3D(FLOAT3D(0,-0.4f,-2.2f), ANGLE3D(0,10,0));
  644. _aRotation = ANGLE3D(100,0,0);
  645. _fFOV = 70.0f;
  646. _vLightDir = FLOAT3D( -0.1f, -0.2f, -0.2f);
  647. AddAttachment_t(pmo, FLAMERITEM_ATTACHMENT_BODY,
  648. CTFILENAME("ModelsMP\\Weapons\\Flamer\\Body.mdl"), 0,
  649. CTFILENAME("ModelsMP\\Weapons\\Flamer\\Body.tex"),
  650. CTFILENAME("Models\\ReflectionTextures\\LightMetal01.tex"),
  651. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  652. AddAttachment_t(pmo, FLAMERITEM_ATTACHMENT_FUEL,
  653. CTFILENAME("ModelsMP\\Weapons\\Flamer\\FuelReservoir.mdl"), 0,
  654. CTFILENAME("ModelsMP\\Weapons\\Flamer\\FuelReservoir.tex"),
  655. CTFILENAME("Models\\ReflectionTextures\\LightMetal01.tex"),
  656. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  657. pmo->StretchModel(FLOAT3D(1.5,1.5,1.5));
  658. _bHasFloor = TRUE;
  659. _fFloorY = -0.5f;
  660. } else if (strName=="serious bomb") {
  661. pmo->SetData_t(CTFILENAME("ModelsMP\\Items\\PowerUps\\SeriousBomb\\SeriousBomb.mdl"));
  662. pmo->mo_toTexture.SetData_t(CTFILENAME("ModelsMP\\Items\\PowerUps\\SeriousBomb\\SeriousBomb.tex"));
  663. _plModel = CPlacement3D(FLOAT3D(0.0f, -1.0f, -6.0f), ANGLE3D(0,-10.0f,0));
  664. _aRotation = ANGLE3D(60,0,0);
  665. _fFOV = 40.0f;
  666. /*_plModel = CPlacement3D(FLOAT3D(tmp_af[5],tmp_af[6],tmp_af[7]), ANGLE3D(0,tmp_af[8],0));
  667. _fFOV = tmp_af[9];
  668. CPrintF("%f %f %f : %f : %f\n", tmp_af[5],tmp_af[6],tmp_af[7], tmp_af[8], tmp_af[9]);*/
  669. pmo->StretchModel(FLOAT3D(3.0f, 3.0f, 3.0f));
  670. _bHasFloor = TRUE;
  671. _fFloorY = 0.0f;
  672. } else if (strName=="Minigun") {
  673. pmo->SetData_t(CTFILENAME("Models\\Weapons\\Minigun\\MinigunItem.mdl"));
  674. pmo->mo_toTexture.SetData_t(CTFILENAME("Models\\Weapons\\Minigun\\Minigun.tex"));
  675. _plModel = CPlacement3D(FLOAT3D(0,-0.5f,-3.75f), ANGLE3D(0,10,0));
  676. _aRotation = ANGLE3D(100,0,0);
  677. AddAttachment_t(pmo, MINIGUNITEM_ATTACHMENT_BARRELS,
  678. CTFILENAME("Models\\Weapons\\Minigun\\Barrels.mdl"), 0,
  679. CTFILENAME("Models\\Weapons\\Minigun\\Barrels.tex"),
  680. CTFILENAME("Models\\ReflectionTextures\\LightMetal01.tex"),
  681. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  682. AddAttachment_t(pmo, MINIGUNITEM_ATTACHMENT_BODY,
  683. CTFILENAME("Models\\Weapons\\Minigun\\Body.mdl"), 0,
  684. CTFILENAME("Models\\Weapons\\Minigun\\Body.tex"),
  685. CTFILENAME("Models\\ReflectionTextures\\LightMetal01.tex"),
  686. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  687. AddAttachment_t(pmo, MINIGUNITEM_ATTACHMENT_ENGINE,
  688. CTFILENAME("Models\\Weapons\\Minigun\\Engine.mdl"), 0,
  689. CTFILENAME("Models\\Weapons\\Minigun\\Barrels.tex"),
  690. CTFILENAME("Models\\ReflectionTextures\\LightMetal01.tex"),
  691. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  692. pmo->StretchModel(FLOAT3D(1.75,1.75,1.75));
  693. _bHasFloor = TRUE;
  694. _fFloorY = -1.0f;
  695. } else if (strName=="RocketLauncher") {
  696. pmo->SetData_t(CTFILENAME("Models\\Weapons\\RocketLauncher\\RocketLauncherItem.mdl"));
  697. pmo->mo_toTexture.SetData_t(CTFILENAME("Models\\Weapons\\RocketLauncher\\Body.tex"));
  698. _plModel = CPlacement3D(FLOAT3D(0,-1.0f,-3.0), ANGLE3D(0,10,0));
  699. _aRotation = ANGLE3D(100,0,0);
  700. AddAttachment_t(pmo, ROCKETLAUNCHERITEM_ATTACHMENT_BODY,
  701. CTFILENAME("Models\\Weapons\\RocketLauncher\\Body.mdl"), 0,
  702. CTFILENAME("Models\\Weapons\\RocketLauncher\\Body.tex"),
  703. CTFILENAME("Models\\ReflectionTextures\\LightMetal01.tex"),
  704. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  705. AddAttachment_t(pmo, ROCKETLAUNCHERITEM_ATTACHMENT_ROTATINGPART,
  706. CTFILENAME("Models\\Weapons\\RocketLauncher\\RotatingPart.mdl"), 0,
  707. CTFILENAME("Models\\Weapons\\RocketLauncher\\RotatingPart.tex"),
  708. CTFILENAME("Models\\ReflectionTextures\\LightMetal01.tex"),
  709. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  710. AddAttachment_t(pmo, ROCKETLAUNCHERITEM_ATTACHMENT_ROCKET1,
  711. CTFILENAME("Models\\Weapons\\RocketLauncher\\Projectile\\Rocket.mdl"), 0,
  712. CTFILENAME("Models\\Weapons\\RocketLauncher\\Projectile\\Rocket.tex"),
  713. CTFILENAME("Models\\ReflectionTextures\\LightMetal01.tex"),
  714. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  715. AddAttachment_t(pmo, ROCKETLAUNCHERITEM_ATTACHMENT_ROCKET2,
  716. CTFILENAME("Models\\Weapons\\RocketLauncher\\Projectile\\Rocket.mdl"), 0,
  717. CTFILENAME("Models\\Weapons\\RocketLauncher\\Projectile\\Rocket.tex"),
  718. CTFILENAME("Models\\ReflectionTextures\\LightMetal01.tex"),
  719. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  720. AddAttachment_t(pmo, ROCKETLAUNCHERITEM_ATTACHMENT_ROCKET3,
  721. CTFILENAME("Models\\Weapons\\RocketLauncher\\Projectile\\Rocket.mdl"), 0,
  722. CTFILENAME("Models\\Weapons\\RocketLauncher\\Projectile\\Rocket.tex"),
  723. CTFILENAME("Models\\ReflectionTextures\\LightMetal01.tex"),
  724. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  725. AddAttachment_t(pmo, ROCKETLAUNCHERITEM_ATTACHMENT_ROCKET4,
  726. CTFILENAME("Models\\Weapons\\RocketLauncher\\Projectile\\Rocket.mdl"), 0,
  727. CTFILENAME("Models\\Weapons\\RocketLauncher\\Projectile\\Rocket.tex"),
  728. CTFILENAME("Models\\ReflectionTextures\\LightMetal01.tex"),
  729. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  730. pmo->StretchModel(FLOAT3D(2.5,2.5,2.5));
  731. _bHasFloor = TRUE;
  732. _fFloorY = -1.0f;
  733. } else if (strName=="GrenadeLauncher") {
  734. pmo->SetData_t(CTFILENAME("Models\\Weapons\\GrenadeLauncher\\GrenadeLauncherItem.mdl"));
  735. pmo->mo_toTexture.SetData_t(CTFILENAME("Models\\Weapons\\GrenadeLauncher\\Body.tex"));
  736. _plModel = CPlacement3D(FLOAT3D(0,-1.0f,-4.0), ANGLE3D(0,10,0));
  737. _aRotation = ANGLE3D(100,0,0);
  738. AddAttachment_t(pmo, GRENADELAUNCHERITEM_ATTACHMENT_BODY,
  739. CTFILENAME("Models\\Weapons\\GrenadeLauncher\\Body.mdl"), 0,
  740. CTFILENAME("Models\\Weapons\\GrenadeLauncher\\Body.tex"),
  741. CTFILENAME("Models\\ReflectionTextures\\LightMetal01.tex"),
  742. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  743. AddAttachment_t(pmo, GRENADELAUNCHERITEM_ATTACHMENT_MOVING_PART,
  744. CTFILENAME("Models\\Weapons\\GrenadeLauncher\\MovingPipe.mdl"), 0,
  745. CTFILENAME("Models\\Weapons\\GrenadeLauncher\\MovingPipe.tex"),
  746. CTFILENAME("Models\\ReflectionTextures\\LightMetal01.tex"),
  747. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  748. AddAttachment_t(pmo, GRENADELAUNCHERITEM_ATTACHMENT_GRENADE,
  749. CTFILENAME("Models\\Weapons\\GrenadeLauncher\\GrenadeBack.mdl"), 0,
  750. CTFILENAME("Models\\Weapons\\GrenadeLauncher\\MovingPipe.tex"),
  751. CTFILENAME("Models\\ReflectionTextures\\LightMetal01.tex"),
  752. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  753. pmo->StretchModel(FLOAT3D(2.5,2.5,2.5));
  754. _bHasFloor = TRUE;
  755. _fFloorY = -1.0f;
  756. } else if (strName=="Laser") {
  757. pmo->SetData_t(CTFILENAME("Models\\Weapons\\Laser\\LaserItem.mdl"));
  758. pmo->mo_toTexture.SetData_t(CTFILENAME("Models\\Weapons\\Laser\\Body.tex"));
  759. _plModel = CPlacement3D(FLOAT3D(0,-1.0f,-3.0), ANGLE3D(0,10,0));
  760. _aRotation = ANGLE3D(100,0,0);
  761. AddAttachment_t(pmo, LASERITEM_ATTACHMENT_BODY,
  762. CTFILENAME("Models\\Weapons\\Laser\\Body.mdl"), 0,
  763. CTFILENAME("Models\\Weapons\\Laser\\Body.tex"),
  764. CTFILENAME("Models\\ReflectionTextures\\LightMetal01.tex"),
  765. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  766. AddAttachment_t(pmo, LASERITEM_ATTACHMENT_LEFTUP,
  767. CTFILENAME("Models\\Weapons\\Laser\\Barrel.mdl"), 0,
  768. CTFILENAME("Models\\Weapons\\Laser\\Barrel.tex"),
  769. CTFILENAME("Models\\ReflectionTextures\\LightMetal01.tex"),
  770. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  771. AddAttachment_t(pmo, LASERITEM_ATTACHMENT_LEFTDOWN,
  772. CTFILENAME("Models\\Weapons\\Laser\\Barrel.mdl"), 0,
  773. CTFILENAME("Models\\Weapons\\Laser\\Barrel.tex"),
  774. CTFILENAME("Models\\ReflectionTextures\\LightMetal01.tex"),
  775. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  776. AddAttachment_t(pmo, LASERITEM_ATTACHMENT_RIGHTUP,
  777. CTFILENAME("Models\\Weapons\\Laser\\Barrel.mdl"), 0,
  778. CTFILENAME("Models\\Weapons\\Laser\\Barrel.tex"),
  779. CTFILENAME("Models\\ReflectionTextures\\LightMetal01.tex"),
  780. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  781. AddAttachment_t(pmo, LASERITEM_ATTACHMENT_RIGHTDOWN,
  782. CTFILENAME("Models\\Weapons\\Laser\\Barrel.mdl"), 0,
  783. CTFILENAME("Models\\Weapons\\Laser\\Barrel.tex"),
  784. CTFILENAME("Models\\ReflectionTextures\\LightMetal01.tex"),
  785. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  786. pmo->StretchModel(FLOAT3D(2.5,2.5,2.5));
  787. _bHasFloor = TRUE;
  788. _fFloorY = -1.0f;
  789. } else if (strName=="Cannon") {
  790. pmo->SetData_t(CTFILENAME("Models\\Weapons\\Cannon\\Cannon.mdl"));
  791. pmo->mo_toTexture.SetData_t(CTFILENAME("Models\\Weapons\\Cannon\\Body.tex"));
  792. _plModel = CPlacement3D(FLOAT3D(0,-1.0f,-3.0), ANGLE3D(0,10,0));
  793. _aRotation = ANGLE3D(100,0,0);
  794. AddAttachment_t(pmo, CANNON_ATTACHMENT_BODY,
  795. CTFILENAME("Models\\Weapons\\Cannon\\Body.mdl"), 0,
  796. CTFILENAME("Models\\Weapons\\Cannon\\Body.tex"),
  797. CTFILENAME("Models\\ReflectionTextures\\LightMetal01.tex"),
  798. CTFILENAME("Models\\SpecularTextures\\Medium.tex"));
  799. pmo->StretchModel(FLOAT3D(2.5,2.5,2.5));
  800. _bHasFloor = TRUE;
  801. _fFloorY = -1.0f;
  802. } else {
  803. ThrowF_t(TRANS("Unknown model '%s'"), strName);
  804. }
  805. }
  806. void RenderMessageModel(CDrawPort *pdp, const CTString &strModel)
  807. {
  808. // if new model
  809. if (_strLastModel!=strModel) {
  810. _strLastModel=strModel;
  811. _bModelOK = FALSE;
  812. // try to
  813. try {
  814. // load model
  815. SetupCompModel_t(strModel);
  816. _bModelOK = TRUE;
  817. // if failed
  818. } catch(char *strError) {
  819. // report error
  820. CPrintF("Cannot setup model '%s':\n%s\n", strModel, strError);
  821. // do nothing
  822. return;
  823. }
  824. }
  825. // if model is not loaded ok
  826. if (!_bModelOK) {
  827. // do nothing
  828. return;
  829. }
  830. // for each eye
  831. for (INDEX iEye=STEREO_LEFT; iEye<=(Stereo_IsEnabled()?STEREO_RIGHT:STEREO_LEFT); iEye++) {
  832. // prepare projection
  833. CRenderModel rm;
  834. CPerspectiveProjection3D pr;
  835. pr.FOVL() = AngleDeg(_fFOV);
  836. pr.ScreenBBoxL() = FLOATaabbox2D(
  837. FLOAT2D(0.0f, 0.0f),
  838. FLOAT2D((float)pdp->GetWidth(), (float)pdp->GetHeight())
  839. );
  840. pr.AspectRatioL() = 1.0f;
  841. pr.FrontClipDistanceL() = 0.3f;
  842. pr.ViewerPlacementL() = CPlacement3D(FLOAT3D(0,0,0), ANGLE3D(0,0,0));
  843. // setup stereo rendering
  844. Stereo_SetBuffer(iEye);
  845. Stereo_AdjustProjection(pr, iEye, 0.16f);
  846. pdp->FillZBuffer(1.0f);
  847. // initialize rendering
  848. CAnyProjection3D apr;
  849. apr = pr;
  850. BeginModelRenderingView(apr, pdp);
  851. rm.rm_vLightDirection = _vLightDir;
  852. const FLOAT fDistance = 1+ 10*(1/(_fMsgAppearFade+0.01) - 1/(1+0.01));
  853. // if model needs floor
  854. if( _bHasFloor) {
  855. // set floor's position
  856. CPlacement3D pl = _plModel;
  857. pl.pl_OrientationAngle = ANGLE3D(0,0,0);
  858. pl.pl_PositionVector = _plModel.pl_PositionVector;
  859. pl.pl_PositionVector(2) += _fFloorY;
  860. pl.pl_PositionVector(3) *= fDistance;
  861. rm.SetObjectPlacement(pl);
  862. // render the floor
  863. rm.rm_colLight = C_WHITE;
  864. rm.rm_colAmbient = C_WHITE;
  865. rm.rm_fDistanceFactor = -999;
  866. _moFloor.SetupModelRendering(rm);
  867. _moFloor.RenderModel(rm);
  868. }
  869. // set model's position
  870. CPlacement3D pl;
  871. pl.pl_OrientationAngle = _plModel.pl_OrientationAngle + _aRotation*_pTimer->GetLerpedCurrentTick();
  872. pl.pl_PositionVector = _plModel.pl_PositionVector;
  873. pl.pl_PositionVector(3) *= fDistance / pdp->dp_fWideAdjustment;
  874. rm.SetObjectPlacement(pl);
  875. // render the model
  876. rm.rm_colLight = _colLight;
  877. rm.rm_colAmbient = _colAmbient;
  878. rm.rm_fDistanceFactor = -999; // force highest mip disregarding stretch factors
  879. _moModel.SetupModelRendering(rm);
  880. FLOATplane3D plFloorPlane = FLOATplane3D( FLOAT3D( 0.0f, 1.0f, 0.0f), _plModel.pl_PositionVector(2)+_fFloorY);
  881. CPlacement3D plLightPlacement = CPlacement3D( _plModel.pl_PositionVector
  882. + rm.rm_vLightDirection * _plModel.pl_PositionVector(3) *5, ANGLE3D(0,0,0));
  883. _moModel.RenderShadow( rm, plLightPlacement, 200.0f, 200.0f, 1.0f, plFloorPlane);
  884. _moModel.RenderModel(rm);
  885. // render particles
  886. if (_iParticleType!=PARTICLES_NONE) {
  887. Particle_PrepareSystem(pdp, apr);
  888. Particle_PrepareEntity( 1, 0, 0, NULL);
  889. switch(_iParticleType) {
  890. case PARTICLES_AIR_ELEMENTAL:
  891. Particles_AirElemental_Comp(&_moModel, 1.0f, 1.0f, pl);
  892. break;
  893. case PARTICLES_LAVA_ELEMENTAL:
  894. Particles_Burning_Comp(&_moModel, 0.25f, pl);
  895. break;
  896. }
  897. Particle_EndSystem();
  898. }
  899. EndModelRenderingView();
  900. }
  901. Stereo_SetBuffer(STEREO_BOTH);
  902. }