From 87e20046341a73a0ea6724a2e82d36ad2a499a23 Mon Sep 17 00:00:00 2001 From: Robert Beckebans Date: Thu, 26 Oct 2023 01:52:03 +0200 Subject: [PATCH] Added helper entityDefs for TrenchBroom --- base/_tb/fgd/DOOM-3-all-and-models.fgd | 54 +- base/_tb/fgd/DOOM-3-all.fgd | 54 +- base/_tb/fgd/DOOM-3-multiplayer.fgd | 2 +- base/_tb/fgd/DOOM-3-slim-and-models.fgd | 54 +- base/_tb/fgd/DOOM-3-slim.fgd | 54 +- base/def/_tb_helpers.def | 27 + base/def/_tb_models.def | 2305 ++++++++++++++++++++++- neo/framework/Common_mapconvert.cpp | 59 + neo/framework/DeclManager.cpp | 36 +- neo/idlib/MapFile.cpp | 82 +- neo/idlib/MapFile.h | 2 + 11 files changed, 2668 insertions(+), 61 deletions(-) diff --git a/base/_tb/fgd/DOOM-3-all-and-models.fgd b/base/_tb/fgd/DOOM-3-all-and-models.fgd index e61488cf..8cf1a252 100644 --- a/base/_tb/fgd/DOOM-3-all-and-models.fgd +++ b/base/_tb/fgd/DOOM-3-all-and-models.fgd @@ -1,4 +1,4 @@ -// DOOM 3 BFG game definition file (.fgd) generated by RBDOOM 3 BFG 1.5.0 +// DOOM 3 BFG game definition file (.fgd) generated by RBDOOM 3 BFG 1.5.1 @PointClass base(cin_base) model({ "path": "_tb/models/md5/cinematics/admin/overhearcaseontable.obj" }) = admin_bfgcase : "No description" [ @@ -5804,6 +5804,17 @@ trigger will toggle the activator on and off. Activator will disable itself whe snd_opened(string) : "looping sound for it's opened state." ] +@PointClass base(func_bobbing) size(-8 -8 0, 8 8 16) model({{ + proxymodel -> { "path": proxymodel }, + { "path": model } +}})= func_bobbing_model : "Inherits from a func_bobbing but uses a model and is a FGD PointClass so it displays correctly in TrenchBroom. +Use it to place all kinds of models +" +[ + model(string) : "Model Selection (ex mapobjects/model.obj)" + proxymodel(string) : "A proxy model in OBJ file format automatically set by RBDoom so it can be displayed in TrenchBroom" +] + @PointClass color(0 127 204) size(-16 -16 0, 16 16 32) model({ "path": "_tb/model to use.obj" }) = func_camera_anim : "Camera controlled by animation. " [ @@ -5837,7 +5848,7 @@ trigger will toggle the activator on and off. Activator will disable itself whe spawnfunc(string) : "" : "func_clipmodel" ] -@PointClass color(0 127 204) = func_damagable : "Breakable object. Fires targets and changes shader parms and model when damaged. +@SolidClass color(0 127 204) = func_damagable : "Breakable object. Fires targets and changes shader parms and model when damaged. When damaged, shader parm 3 is set to the current time, and shader parm 7 is set to either a random number from 1 to 'numstates', or to the value in 'forcestate' if it is non-zero. If you want an invisible texture, use common/collision. Make sure @@ -5937,6 +5948,15 @@ Repeat floor1_ height and door info with floor2_ etc.. for as many floors as you statusgui(string) : "entity name to update floor info, can use statusgui2..3..4..etc. for multiple updates. if appended with _num it will target an optional specific gui number on the entity this is handy for models with multiple guis." ] +@PointClass base(func_elevator) size(-8 -8 0, 8 8 16) model({{ + proxymodel -> { "path": proxymodel }, + { "path": model } +}})= func_elevator_model : "Inherits from a func_elevator but uses a model and is a FGD PointClass so it displays correctly in TrenchBroom. +Use it to place all kinds of models +" +[ +] + @PointClass base(func_static) color(0 127 204) size(-12 -12 -12, 12 12 12) model({ "path": "sprites/bonfire.png", "scale": 0.03125 }) = func_emitter : "Inherits from a func_static but is fixed size and shows a rotation arrow. Use it to orient particle models Trigger it to fade it in and/or out @@ -6064,7 +6084,18 @@ Trigger it to fade it in and/or out proxymodel(string) : "A proxy model in OBJ file format automatically set by RBDoom so it can be displayed in TrenchBroom" ] -@PointClass color(0 127 204) = func_pendulum : "Pendulums always swing north / south on unrotated models. Add an angles field to the model to allow rotation in other directions. +@PointClass base(func_mover) size(-8 -8 0, 8 8 16) model({{ + proxymodel -> { "path": proxymodel }, + { "path": model } +}})= func_mover_model : "Inherits from a func_mover but uses a model and is a FGD PointClass so it displays correctly in TrenchBroom. +Use it to place all kinds of models +" +[ + model(string) : "Model Selection (ex mapobjects/model.obj)" + proxymodel(string) : "A proxy model in OBJ file format automatically set by RBDoom so it can be displayed in TrenchBroom" +] + +@SolidClass color(0 127 204) = func_pendulum : "Pendulums always swing north / south on unrotated models. Add an angles field to the model to allow rotation in other directions. Pendulum frequency is a physical constant based on the length of the beam and gravity. " [ @@ -12665,7 +12696,10 @@ PDA's contain vidoes, audio, e-mail, and security clearances. snd_acquire(string) : "" : "videocd_pickup" ] -@PointClass color(0 255 0) size(-8 -8 -8, 8 8 8) model({ "path": "sprites/light-bulb.png", "scale": 0.03125 }) = light : "Light source. If health is set, light becomes breakable and turns off when shot. +@PointClass color(0 255 0) size(-8 -8 -8, 8 8 8) model({{ + proxymodel -> { "path": proxymodel }, + { "path": "sprites/light-bulb.png", "scale": 0.03125 } +}})= light : "Light source. If health is set, light becomes breakable and turns off when shot. " [ style(Choices) : "Appearance" : 0 = @@ -18097,7 +18131,7 @@ Use it to place all kinds of models damageWhenActive(string) : "" : "1" ] -@SolidClass color(0 127 204) = moveable_base : "Moveable object. Will drop to the floor and rest untill activated. +@PointClass color(0 127 204) = moveable_base : "Moveable object. Will drop to the floor and rest untill activated. The visual model set with the 'model' key can also be used for collision detection. However the model may not be too complex. max vertices = 32 @@ -18138,7 +18172,7 @@ model for collision detection. Such a collision model is specified with the broken(string) : "Visual model to be used when the health drops down to or below zero." ] -@SolidClass base(moveable_base) color(255 127 0) size(-8 -8 -8, 8 8 8) = moveable_base_barrel : "Moveable barrel. Works just like a moveable_base. However the barrel +@PointClass base(moveable_base) color(255 127 0) size(-8 -8 -8, 8 8 8) = moveable_base_barrel : "Moveable barrel. Works just like a moveable_base. However the barrel has special handling to make it appear more round. " [ @@ -18149,7 +18183,7 @@ has special handling to make it appear more round. snd_bounce(string) : "" : "barrel_impact" ] -@SolidClass base(moveable_base) = moveable_base_boulder : "No description" +@PointClass base(moveable_base) = moveable_base_boulder : "No description" [ density(string) : "" : "0.05" friction(string) : "" : "0.2" @@ -18165,14 +18199,14 @@ has special handling to make it appear more round. snd_bounce(string) : "" : "stone_impact" ] -@SolidClass base(moveable_base) = moveable_base_domino : "No description" +@PointClass base(moveable_base) = moveable_base_domino : "No description" [ density(string) : "" : "0.005" friction(string) : "" : "0.6" bouncyness(string) : "" : "0.2" ] -@SolidClass base(moveable_base) color(255 127 0) size(-8 -8 -8, 8 8 8) = moveable_base_fixed : "No description" +@PointClass base(moveable_base) color(255 127 0) size(-8 -8 -8, 8 8 8) = moveable_base_fixed : "No description" [ ] @@ -18862,7 +18896,7 @@ Only add model, model_detonate or model_burn or health to override defaults damageWhenActive(string) : "" : "1" ] -@PointClass base(moveable_base_brick) = moveable_guardian_brick : "No description" +@SolidClass base(moveable_base_brick) = moveable_guardian_brick : "No description" [ density(string) : "" : "0.001" friction(string) : "" : "0.2" diff --git a/base/_tb/fgd/DOOM-3-all.fgd b/base/_tb/fgd/DOOM-3-all.fgd index 1335b34a..debb8ea9 100644 --- a/base/_tb/fgd/DOOM-3-all.fgd +++ b/base/_tb/fgd/DOOM-3-all.fgd @@ -1,4 +1,4 @@ -// DOOM 3 BFG game definition file (.fgd) generated by RBDOOM 3 BFG 1.5.0 +// DOOM 3 BFG game definition file (.fgd) generated by RBDOOM 3 BFG 1.5.1 @PointClass base(cin_base) model({ "path": "_tb/models/md5/cinematics/admin/overhearcaseontable.obj" }) = admin_bfgcase : "No description" [ @@ -5804,6 +5804,17 @@ trigger will toggle the activator on and off. Activator will disable itself whe snd_opened(string) : "looping sound for it's opened state." ] +@PointClass base(func_bobbing) size(-8 -8 0, 8 8 16) model({{ + proxymodel -> { "path": proxymodel }, + { "path": model } +}})= func_bobbing_model : "Inherits from a func_bobbing but uses a model and is a FGD PointClass so it displays correctly in TrenchBroom. +Use it to place all kinds of models +" +[ + model(string) : "Model Selection (ex mapobjects/model.obj)" + proxymodel(string) : "A proxy model in OBJ file format automatically set by RBDoom so it can be displayed in TrenchBroom" +] + @PointClass color(0 127 204) size(-16 -16 0, 16 16 32) model({ "path": "_tb/model to use.obj" }) = func_camera_anim : "Camera controlled by animation. " [ @@ -5837,7 +5848,7 @@ trigger will toggle the activator on and off. Activator will disable itself whe spawnfunc(string) : "" : "func_clipmodel" ] -@PointClass color(0 127 204) = func_damagable : "Breakable object. Fires targets and changes shader parms and model when damaged. +@SolidClass color(0 127 204) = func_damagable : "Breakable object. Fires targets and changes shader parms and model when damaged. When damaged, shader parm 3 is set to the current time, and shader parm 7 is set to either a random number from 1 to 'numstates', or to the value in 'forcestate' if it is non-zero. If you want an invisible texture, use common/collision. Make sure @@ -5937,6 +5948,15 @@ Repeat floor1_ height and door info with floor2_ etc.. for as many floors as you statusgui(string) : "entity name to update floor info, can use statusgui2..3..4..etc. for multiple updates. if appended with _num it will target an optional specific gui number on the entity this is handy for models with multiple guis." ] +@PointClass base(func_elevator) size(-8 -8 0, 8 8 16) model({{ + proxymodel -> { "path": proxymodel }, + { "path": model } +}})= func_elevator_model : "Inherits from a func_elevator but uses a model and is a FGD PointClass so it displays correctly in TrenchBroom. +Use it to place all kinds of models +" +[ +] + @PointClass base(func_static) color(0 127 204) size(-12 -12 -12, 12 12 12) model({ "path": "sprites/bonfire.png", "scale": 0.03125 }) = func_emitter : "Inherits from a func_static but is fixed size and shows a rotation arrow. Use it to orient particle models Trigger it to fade it in and/or out @@ -6064,7 +6084,18 @@ Trigger it to fade it in and/or out proxymodel(string) : "A proxy model in OBJ file format automatically set by RBDoom so it can be displayed in TrenchBroom" ] -@PointClass color(0 127 204) = func_pendulum : "Pendulums always swing north / south on unrotated models. Add an angles field to the model to allow rotation in other directions. +@PointClass base(func_mover) size(-8 -8 0, 8 8 16) model({{ + proxymodel -> { "path": proxymodel }, + { "path": model } +}})= func_mover_model : "Inherits from a func_mover but uses a model and is a FGD PointClass so it displays correctly in TrenchBroom. +Use it to place all kinds of models +" +[ + model(string) : "Model Selection (ex mapobjects/model.obj)" + proxymodel(string) : "A proxy model in OBJ file format automatically set by RBDoom so it can be displayed in TrenchBroom" +] + +@SolidClass color(0 127 204) = func_pendulum : "Pendulums always swing north / south on unrotated models. Add an angles field to the model to allow rotation in other directions. Pendulum frequency is a physical constant based on the length of the beam and gravity. " [ @@ -7181,7 +7212,10 @@ PDA's contain vidoes, audio, e-mail, and security clearances. snd_acquire(string) : "" : "videocd_pickup" ] -@PointClass color(0 255 0) size(-8 -8 -8, 8 8 8) model({ "path": "sprites/light-bulb.png", "scale": 0.03125 }) = light : "Light source. If health is set, light becomes breakable and turns off when shot. +@PointClass color(0 255 0) size(-8 -8 -8, 8 8 8) model({{ + proxymodel -> { "path": proxymodel }, + { "path": "sprites/light-bulb.png", "scale": 0.03125 } +}})= light : "Light source. If health is set, light becomes breakable and turns off when shot. " [ style(Choices) : "Appearance" : 0 = @@ -12613,7 +12647,7 @@ Use it to place all kinds of models damageWhenActive(string) : "" : "1" ] -@SolidClass color(0 127 204) = moveable_base : "Moveable object. Will drop to the floor and rest untill activated. +@PointClass color(0 127 204) = moveable_base : "Moveable object. Will drop to the floor and rest untill activated. The visual model set with the 'model' key can also be used for collision detection. However the model may not be too complex. max vertices = 32 @@ -12654,7 +12688,7 @@ model for collision detection. Such a collision model is specified with the broken(string) : "Visual model to be used when the health drops down to or below zero." ] -@SolidClass base(moveable_base) color(255 127 0) size(-8 -8 -8, 8 8 8) = moveable_base_barrel : "Moveable barrel. Works just like a moveable_base. However the barrel +@PointClass base(moveable_base) color(255 127 0) size(-8 -8 -8, 8 8 8) = moveable_base_barrel : "Moveable barrel. Works just like a moveable_base. However the barrel has special handling to make it appear more round. " [ @@ -12665,7 +12699,7 @@ has special handling to make it appear more round. snd_bounce(string) : "" : "barrel_impact" ] -@SolidClass base(moveable_base) = moveable_base_boulder : "No description" +@PointClass base(moveable_base) = moveable_base_boulder : "No description" [ density(string) : "" : "0.05" friction(string) : "" : "0.2" @@ -12681,14 +12715,14 @@ has special handling to make it appear more round. snd_bounce(string) : "" : "stone_impact" ] -@SolidClass base(moveable_base) = moveable_base_domino : "No description" +@PointClass base(moveable_base) = moveable_base_domino : "No description" [ density(string) : "" : "0.005" friction(string) : "" : "0.6" bouncyness(string) : "" : "0.2" ] -@SolidClass base(moveable_base) color(255 127 0) size(-8 -8 -8, 8 8 8) = moveable_base_fixed : "No description" +@PointClass base(moveable_base) color(255 127 0) size(-8 -8 -8, 8 8 8) = moveable_base_fixed : "No description" [ ] @@ -13378,7 +13412,7 @@ Only add model, model_detonate or model_burn or health to override defaults damageWhenActive(string) : "" : "1" ] -@PointClass base(moveable_base_brick) = moveable_guardian_brick : "No description" +@SolidClass base(moveable_base_brick) = moveable_guardian_brick : "No description" [ density(string) : "" : "0.001" friction(string) : "" : "0.2" diff --git a/base/_tb/fgd/DOOM-3-multiplayer.fgd b/base/_tb/fgd/DOOM-3-multiplayer.fgd index e2b2722b..38aabaa0 100644 --- a/base/_tb/fgd/DOOM-3-multiplayer.fgd +++ b/base/_tb/fgd/DOOM-3-multiplayer.fgd @@ -1,4 +1,4 @@ -// DOOM 3 BFG game definition file (.fgd) generated by RBDOOM 3 BFG 1.5.0 +// DOOM 3 BFG game definition file (.fgd) generated by RBDOOM 3 BFG 1.5.1 @PointClass base(ammo_belt_small) = ammo_belt_small_mp : "No description" [ diff --git a/base/_tb/fgd/DOOM-3-slim-and-models.fgd b/base/_tb/fgd/DOOM-3-slim-and-models.fgd index 4b439094..b57ba573 100644 --- a/base/_tb/fgd/DOOM-3-slim-and-models.fgd +++ b/base/_tb/fgd/DOOM-3-slim-and-models.fgd @@ -1,4 +1,4 @@ -// DOOM 3 BFG game definition file (.fgd) generated by RBDOOM 3 BFG 1.5.0 +// DOOM 3 BFG game definition file (.fgd) generated by RBDOOM 3 BFG 1.5.1 @PointClass color(127 76 0) size(-24 -24 0, 24 24 82) model({ "path": "sprites/ai.png", "scale": 0.03125 }) = ai_attackcone : " " @@ -2396,6 +2396,17 @@ trigger will toggle the activator on and off. Activator will disable itself whe snd_opened(string) : "looping sound for it's opened state." ] +@PointClass base(func_bobbing) size(-8 -8 0, 8 8 16) model({{ + proxymodel -> { "path": proxymodel }, + { "path": model } +}})= func_bobbing_model : "Inherits from a func_bobbing but uses a model and is a FGD PointClass so it displays correctly in TrenchBroom. +Use it to place all kinds of models +" +[ + model(string) : "Model Selection (ex mapobjects/model.obj)" + proxymodel(string) : "A proxy model in OBJ file format automatically set by RBDoom so it can be displayed in TrenchBroom" +] + @PointClass color(0 127 204) size(-16 -16 0, 16 16 32) model({ "path": "_tb/model to use.obj" }) = func_camera_anim : "Camera controlled by animation. " [ @@ -2429,7 +2440,7 @@ trigger will toggle the activator on and off. Activator will disable itself whe spawnfunc(string) : "" : "func_clipmodel" ] -@PointClass color(0 127 204) = func_damagable : "Breakable object. Fires targets and changes shader parms and model when damaged. +@SolidClass color(0 127 204) = func_damagable : "Breakable object. Fires targets and changes shader parms and model when damaged. When damaged, shader parm 3 is set to the current time, and shader parm 7 is set to either a random number from 1 to 'numstates', or to the value in 'forcestate' if it is non-zero. If you want an invisible texture, use common/collision. Make sure @@ -2529,6 +2540,15 @@ Repeat floor1_ height and door info with floor2_ etc.. for as many floors as you statusgui(string) : "entity name to update floor info, can use statusgui2..3..4..etc. for multiple updates. if appended with _num it will target an optional specific gui number on the entity this is handy for models with multiple guis." ] +@PointClass base(func_elevator) size(-8 -8 0, 8 8 16) model({{ + proxymodel -> { "path": proxymodel }, + { "path": model } +}})= func_elevator_model : "Inherits from a func_elevator but uses a model and is a FGD PointClass so it displays correctly in TrenchBroom. +Use it to place all kinds of models +" +[ +] + @PointClass base(func_static) color(0 127 204) size(-12 -12 -12, 12 12 12) model({ "path": "sprites/bonfire.png", "scale": 0.03125 }) = func_emitter : "Inherits from a func_static but is fixed size and shows a rotation arrow. Use it to orient particle models Trigger it to fade it in and/or out @@ -2656,7 +2676,18 @@ Trigger it to fade it in and/or out proxymodel(string) : "A proxy model in OBJ file format automatically set by RBDoom so it can be displayed in TrenchBroom" ] -@PointClass color(0 127 204) = func_pendulum : "Pendulums always swing north / south on unrotated models. Add an angles field to the model to allow rotation in other directions. +@PointClass base(func_mover) size(-8 -8 0, 8 8 16) model({{ + proxymodel -> { "path": proxymodel }, + { "path": model } +}})= func_mover_model : "Inherits from a func_mover but uses a model and is a FGD PointClass so it displays correctly in TrenchBroom. +Use it to place all kinds of models +" +[ + model(string) : "Model Selection (ex mapobjects/model.obj)" + proxymodel(string) : "A proxy model in OBJ file format automatically set by RBDoom so it can be displayed in TrenchBroom" +] + +@SolidClass color(0 127 204) = func_pendulum : "Pendulums always swing north / south on unrotated models. Add an angles field to the model to allow rotation in other directions. Pendulum frequency is a physical constant based on the length of the beam and gravity. " [ @@ -8828,7 +8859,10 @@ PDA's contain vidoes, audio, e-mail, and security clearances. snd_acquire(string) : "" : "videocd_pickup" ] -@PointClass color(0 255 0) size(-8 -8 -8, 8 8 8) model({ "path": "sprites/light-bulb.png", "scale": 0.03125 }) = light : "Light source. If health is set, light becomes breakable and turns off when shot. +@PointClass color(0 255 0) size(-8 -8 -8, 8 8 8) model({{ + proxymodel -> { "path": proxymodel }, + { "path": "sprites/light-bulb.png", "scale": 0.03125 } +}})= light : "Light source. If health is set, light becomes breakable and turns off when shot. " [ style(Choices) : "Appearance" : 0 = @@ -12231,7 +12265,7 @@ Use it to place all kinds of models damageWhenActive(string) : "" : "1" ] -@SolidClass color(0 127 204) = moveable_base : "Moveable object. Will drop to the floor and rest untill activated. +@PointClass color(0 127 204) = moveable_base : "Moveable object. Will drop to the floor and rest untill activated. The visual model set with the 'model' key can also be used for collision detection. However the model may not be too complex. max vertices = 32 @@ -12272,7 +12306,7 @@ model for collision detection. Such a collision model is specified with the broken(string) : "Visual model to be used when the health drops down to or below zero." ] -@SolidClass base(moveable_base) color(255 127 0) size(-8 -8 -8, 8 8 8) = moveable_base_barrel : "Moveable barrel. Works just like a moveable_base. However the barrel +@PointClass base(moveable_base) color(255 127 0) size(-8 -8 -8, 8 8 8) = moveable_base_barrel : "Moveable barrel. Works just like a moveable_base. However the barrel has special handling to make it appear more round. " [ @@ -12283,7 +12317,7 @@ has special handling to make it appear more round. snd_bounce(string) : "" : "barrel_impact" ] -@SolidClass base(moveable_base) = moveable_base_boulder : "No description" +@PointClass base(moveable_base) = moveable_base_boulder : "No description" [ density(string) : "" : "0.05" friction(string) : "" : "0.2" @@ -12299,14 +12333,14 @@ has special handling to make it appear more round. snd_bounce(string) : "" : "stone_impact" ] -@SolidClass base(moveable_base) = moveable_base_domino : "No description" +@PointClass base(moveable_base) = moveable_base_domino : "No description" [ density(string) : "" : "0.005" friction(string) : "" : "0.6" bouncyness(string) : "" : "0.2" ] -@SolidClass base(moveable_base) color(255 127 0) size(-8 -8 -8, 8 8 8) = moveable_base_fixed : "No description" +@PointClass base(moveable_base) color(255 127 0) size(-8 -8 -8, 8 8 8) = moveable_base_fixed : "No description" [ ] @@ -12996,7 +13030,7 @@ Only add model, model_detonate or model_burn or health to override defaults damageWhenActive(string) : "" : "1" ] -@PointClass base(moveable_base_brick) = moveable_guardian_brick : "No description" +@SolidClass base(moveable_base_brick) = moveable_guardian_brick : "No description" [ density(string) : "" : "0.001" friction(string) : "" : "0.2" diff --git a/base/_tb/fgd/DOOM-3-slim.fgd b/base/_tb/fgd/DOOM-3-slim.fgd index 9cc5d14e..26a5b7c6 100644 --- a/base/_tb/fgd/DOOM-3-slim.fgd +++ b/base/_tb/fgd/DOOM-3-slim.fgd @@ -1,4 +1,4 @@ -// DOOM 3 BFG game definition file (.fgd) generated by RBDOOM 3 BFG 1.5.0 +// DOOM 3 BFG game definition file (.fgd) generated by RBDOOM 3 BFG 1.5.1 @PointClass color(127 76 0) size(-24 -24 0, 24 24 82) model({ "path": "sprites/ai.png", "scale": 0.03125 }) = ai_attackcone : " " @@ -2396,6 +2396,17 @@ trigger will toggle the activator on and off. Activator will disable itself whe snd_opened(string) : "looping sound for it's opened state." ] +@PointClass base(func_bobbing) size(-8 -8 0, 8 8 16) model({{ + proxymodel -> { "path": proxymodel }, + { "path": model } +}})= func_bobbing_model : "Inherits from a func_bobbing but uses a model and is a FGD PointClass so it displays correctly in TrenchBroom. +Use it to place all kinds of models +" +[ + model(string) : "Model Selection (ex mapobjects/model.obj)" + proxymodel(string) : "A proxy model in OBJ file format automatically set by RBDoom so it can be displayed in TrenchBroom" +] + @PointClass color(0 127 204) size(-16 -16 0, 16 16 32) model({ "path": "_tb/model to use.obj" }) = func_camera_anim : "Camera controlled by animation. " [ @@ -2429,7 +2440,7 @@ trigger will toggle the activator on and off. Activator will disable itself whe spawnfunc(string) : "" : "func_clipmodel" ] -@PointClass color(0 127 204) = func_damagable : "Breakable object. Fires targets and changes shader parms and model when damaged. +@SolidClass color(0 127 204) = func_damagable : "Breakable object. Fires targets and changes shader parms and model when damaged. When damaged, shader parm 3 is set to the current time, and shader parm 7 is set to either a random number from 1 to 'numstates', or to the value in 'forcestate' if it is non-zero. If you want an invisible texture, use common/collision. Make sure @@ -2529,6 +2540,15 @@ Repeat floor1_ height and door info with floor2_ etc.. for as many floors as you statusgui(string) : "entity name to update floor info, can use statusgui2..3..4..etc. for multiple updates. if appended with _num it will target an optional specific gui number on the entity this is handy for models with multiple guis." ] +@PointClass base(func_elevator) size(-8 -8 0, 8 8 16) model({{ + proxymodel -> { "path": proxymodel }, + { "path": model } +}})= func_elevator_model : "Inherits from a func_elevator but uses a model and is a FGD PointClass so it displays correctly in TrenchBroom. +Use it to place all kinds of models +" +[ +] + @PointClass base(func_static) color(0 127 204) size(-12 -12 -12, 12 12 12) model({ "path": "sprites/bonfire.png", "scale": 0.03125 }) = func_emitter : "Inherits from a func_static but is fixed size and shows a rotation arrow. Use it to orient particle models Trigger it to fade it in and/or out @@ -2656,7 +2676,18 @@ Trigger it to fade it in and/or out proxymodel(string) : "A proxy model in OBJ file format automatically set by RBDoom so it can be displayed in TrenchBroom" ] -@PointClass color(0 127 204) = func_pendulum : "Pendulums always swing north / south on unrotated models. Add an angles field to the model to allow rotation in other directions. +@PointClass base(func_mover) size(-8 -8 0, 8 8 16) model({{ + proxymodel -> { "path": proxymodel }, + { "path": model } +}})= func_mover_model : "Inherits from a func_mover but uses a model and is a FGD PointClass so it displays correctly in TrenchBroom. +Use it to place all kinds of models +" +[ + model(string) : "Model Selection (ex mapobjects/model.obj)" + proxymodel(string) : "A proxy model in OBJ file format automatically set by RBDoom so it can be displayed in TrenchBroom" +] + +@SolidClass color(0 127 204) = func_pendulum : "Pendulums always swing north / south on unrotated models. Add an angles field to the model to allow rotation in other directions. Pendulum frequency is a physical constant based on the length of the beam and gravity. " [ @@ -3344,7 +3375,10 @@ PDA's contain vidoes, audio, e-mail, and security clearances. snd_acquire(string) : "" : "videocd_pickup" ] -@PointClass color(0 255 0) size(-8 -8 -8, 8 8 8) model({ "path": "sprites/light-bulb.png", "scale": 0.03125 }) = light : "Light source. If health is set, light becomes breakable and turns off when shot. +@PointClass color(0 255 0) size(-8 -8 -8, 8 8 8) model({{ + proxymodel -> { "path": proxymodel }, + { "path": "sprites/light-bulb.png", "scale": 0.03125 } +}})= light : "Light source. If health is set, light becomes breakable and turns off when shot. " [ style(Choices) : "Appearance" : 0 = @@ -6747,7 +6781,7 @@ Use it to place all kinds of models damageWhenActive(string) : "" : "1" ] -@SolidClass color(0 127 204) = moveable_base : "Moveable object. Will drop to the floor and rest untill activated. +@PointClass color(0 127 204) = moveable_base : "Moveable object. Will drop to the floor and rest untill activated. The visual model set with the 'model' key can also be used for collision detection. However the model may not be too complex. max vertices = 32 @@ -6788,7 +6822,7 @@ model for collision detection. Such a collision model is specified with the broken(string) : "Visual model to be used when the health drops down to or below zero." ] -@SolidClass base(moveable_base) color(255 127 0) size(-8 -8 -8, 8 8 8) = moveable_base_barrel : "Moveable barrel. Works just like a moveable_base. However the barrel +@PointClass base(moveable_base) color(255 127 0) size(-8 -8 -8, 8 8 8) = moveable_base_barrel : "Moveable barrel. Works just like a moveable_base. However the barrel has special handling to make it appear more round. " [ @@ -6799,7 +6833,7 @@ has special handling to make it appear more round. snd_bounce(string) : "" : "barrel_impact" ] -@SolidClass base(moveable_base) = moveable_base_boulder : "No description" +@PointClass base(moveable_base) = moveable_base_boulder : "No description" [ density(string) : "" : "0.05" friction(string) : "" : "0.2" @@ -6815,14 +6849,14 @@ has special handling to make it appear more round. snd_bounce(string) : "" : "stone_impact" ] -@SolidClass base(moveable_base) = moveable_base_domino : "No description" +@PointClass base(moveable_base) = moveable_base_domino : "No description" [ density(string) : "" : "0.005" friction(string) : "" : "0.6" bouncyness(string) : "" : "0.2" ] -@SolidClass base(moveable_base) color(255 127 0) size(-8 -8 -8, 8 8 8) = moveable_base_fixed : "No description" +@PointClass base(moveable_base) color(255 127 0) size(-8 -8 -8, 8 8 8) = moveable_base_fixed : "No description" [ ] @@ -7512,7 +7546,7 @@ Only add model, model_detonate or model_burn or health to override defaults damageWhenActive(string) : "" : "1" ] -@PointClass base(moveable_base_brick) = moveable_guardian_brick : "No description" +@SolidClass base(moveable_base_brick) = moveable_guardian_brick : "No description" [ density(string) : "" : "0.001" friction(string) : "" : "0.2" diff --git a/base/def/_tb_helpers.def b/base/def/_tb_helpers.def index c6f48db9..e947f987 100644 --- a/base/def/_tb_helpers.def +++ b/base/def/_tb_helpers.def @@ -10,6 +10,15 @@ entityDef misc_model "editor_usage1" "Use it to place all kinds of models" } +entityDef func_bobbing_model +{ + "inherit" "func_bobbing" + "editor_mins" "-8 -8 0" + "editor_maxs" "8 8 16" + "editor_usage" "Inherits from a func_bobbing but uses a model and is a FGD PointClass so it displays correctly in TrenchBroom." + "editor_usage1" "Use it to place all kinds of models" +} + entityDef func_door_model { "inherit" "func_door" @@ -19,6 +28,24 @@ entityDef func_door_model "editor_usage1" "Use it to place all kinds of models" } +entityDef func_elevator_model +{ + "inherit" "func_elevator" + "editor_mins" "-8 -8 0" + "editor_maxs" "8 8 16" + "editor_usage" "Inherits from a func_elevator but uses a model and is a FGD PointClass so it displays correctly in TrenchBroom." + "editor_usage1" "Use it to place all kinds of models" +} + +entityDef func_mover_model +{ + "inherit" "func_mover" + "editor_mins" "-8 -8 0" + "editor_maxs" "8 8 16" + "editor_usage" "Inherits from a func_mover but uses a model and is a FGD PointClass so it displays correctly in TrenchBroom." + "editor_usage1" "Use it to place all kinds of models" +} + entityDef func_rotating_model { "inherit" "func_rotating" diff --git a/base/def/_tb_models.def b/base/def/_tb_models.def index dcf87698..6057b7e7 100644 --- a/base/def/_tb_models.def +++ b/base/def/_tb_models.def @@ -1,4 +1,389 @@ -// DOOM 3 BFG models definition file (.def) generated by RBDOOM 3 BFG 1.4.0 +// DOOM 3 BFG models definition file (.def) generated by RBDOOM 3 BFG 1.5.1 + +entityDef genmodel_characters_player_character_helmet_d3xp_cine_helmet_lo +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/characters/player_character/helmet/d3xp_cine_helmet_lo.obj" + "model" "models/characters/player_character/helmet/d3xp_cine_helmet_lo.lwo" +} + +entityDef genmodel_characters_sarge2_w_helmet +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/characters/sarge2/w_helmet.obj" + "model" "models/characters/sarge2/w_helmet.lwo" +} + +entityDef genmodel_ctf_d3ctf2_rockface +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/ctf/d3ctf2/rockface.obj" + "model" "models/ctf/d3ctf2/rockface.ase" +} + +entityDef genmodel_ctf_d3ctf3_hpm +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/ctf/d3ctf3/hpm.obj" + "model" "models/ctf/d3ctf3/hpm.ase" +} + +entityDef genmodel_ctf_d3ctf3_hpm_arm1 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/ctf/d3ctf3/hpm_arm1.obj" + "model" "models/ctf/d3ctf3/hpm_arm1.ase" +} + +entityDef genmodel_ctf_d3ctf3_hpm_arm2 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/ctf/d3ctf3/hpm_arm2.obj" + "model" "models/ctf/d3ctf3/hpm_arm2.ase" +} + +entityDef genmodel_ctf_d3ctf3_hpm_arm3 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/ctf/d3ctf3/hpm_arm3.obj" + "model" "models/ctf/d3ctf3/hpm_arm3.ase" +} + +entityDef genmodel_ctf_d3ctf3_spotlight +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/ctf/d3ctf3/spotlight.obj" + "model" "models/ctf/d3ctf3/spotlight.ase" +} + +entityDef genmodel_ctf_logos_bolt_3d +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/ctf/logos/bolt_3d.obj" + "model" "models/ctf/logos/bolt_3d.ase" +} + +entityDef genmodel_ctf_logos_hammer_3d +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/ctf/logos/hammer_3d.obj" + "model" "models/ctf/logos/hammer_3d.ase" +} + +entityDef genmodel_ctf_blue_flagstand +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/ctf/blue_flagstand.obj" + "model" "models/ctf/blue_flagstand.ase" +} + +entityDef genmodel_ctf_ctf_flag +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/ctf/ctf_flag.obj" + "model" "models/ctf/ctf_flag.ase" +} + +entityDef genmodel_ctf_red_flagstand +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/ctf/red_flagstand.obj" + "model" "models/ctf/red_flagstand.ase" +} + +entityDef genmodel_david_cav_arc +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/david/cav_arc.obj" + "model" "models/david/cav_arc.lwo" +} + +entityDef genmodel_david_cav_arc_c +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/david/cav_arc_c.obj" + "model" "models/david/cav_arc_c.lwo" +} + +entityDef genmodel_david_cav_arc_s +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/david/cav_arc_s.obj" + "model" "models/david/cav_arc_s.lwo" +} + +entityDef genmodel_david_cav_archbar +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/david/cav_archbar.obj" + "model" "models/david/cav_archbar.lwo" +} + +entityDef genmodel_david_cav_archhalf +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/david/cav_archhalf.obj" + "model" "models/david/cav_archhalf.lwo" +} + +entityDef genmodel_david_cav_archshort +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/david/cav_archshort.obj" + "model" "models/david/cav_archshort.lwo" +} + +entityDef genmodel_david_d3xp_shrine_arch +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/david/d3xp_shrine_arch.obj" + "model" "models/david/d3xp_shrine_arch.lwo" +} + +entityDef genmodel_david_erebus_arch +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/david/erebus_arch.obj" + "model" "models/david/erebus_arch.lwo" +} + +entityDef genmodel_david_erebus_arch_c +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/david/erebus_arch_c.obj" + "model" "models/david/erebus_arch_c.lwo" +} + +entityDef genmodel_david_erebus_arcleft +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/david/erebus_arcleft.obj" + "model" "models/david/erebus_arcleft.ase" +} + +entityDef genmodel_david_erebus_arcright +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/david/erebus_arcright.obj" + "model" "models/david/erebus_arcright.ase" +} + +entityDef genmodel_david_erebus_cav4 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/david/erebus_cav4.obj" + "model" "models/david/erebus_cav4.ase" +} + +entityDef genmodel_david_erebus_cols +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/david/erebus_cols.obj" + "model" "models/david/erebus_cols.lwo" +} + +entityDef genmodel_david_erebus_cols2 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/david/erebus_cols2.obj" + "model" "models/david/erebus_cols2.lwo" +} + +entityDef genmodel_david_erebus_pipes1a +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/david/erebus_pipes1a.obj" + "model" "models/david/erebus_pipes1a.ase" +} + +entityDef genmodel_david_erebus_pipes1d +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/david/erebus_pipes1d.obj" + "model" "models/david/erebus_pipes1d.ase" +} + +entityDef genmodel_david_erebus_stairsleft +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/david/erebus_stairsleft.obj" + "model" "models/david/erebus_stairsleft.lwo" +} + +entityDef genmodel_gibs_brain_2x +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/gibs/brain_2x.obj" + "model" "models/gibs/brain_2x.lwo" +} + +entityDef genmodel_gibs_brain_2xb +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/gibs/brain_2xb.obj" + "model" "models/gibs/brain_2xb.lwo" +} + +entityDef genmodel_gibs_gib_left_arm +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/gibs/gib_left_arm.obj" + "model" "models/gibs/gib_left_arm.lwo" +} + +entityDef genmodel_gibs_gib_left_leg +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/gibs/gib_left_leg.obj" + "model" "models/gibs/gib_left_leg.lwo" +} + +entityDef genmodel_gibs_gib_right_foot +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/gibs/gib_right_foot.obj" + "model" "models/gibs/gib_right_foot.lwo" +} + +entityDef genmodel_gibs_gib_right_knee +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/gibs/gib_right_knee.obj" + "model" "models/gibs/gib_right_knee.lwo" +} + +entityDef genmodel_gibs_gib_torso +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/gibs/gib_torso.obj" + "model" "models/gibs/gib_torso.lwo" +} + +entityDef genmodel_gibs_head_pork +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/gibs/head_pork.obj" + "model" "models/gibs/head_pork.lwo" +} + +entityDef genmodel_gibs_heart_2x +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/gibs/heart_2x.obj" + "model" "models/gibs/heart_2x.lwo" +} + +entityDef genmodel_gibs_left_waist_pork +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/gibs/left_waist_pork.obj" + "model" "models/gibs/left_waist_pork.lwo" +} + +entityDef genmodel_gibs_lup_leg_pork +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/gibs/lup_leg_pork.obj" + "model" "models/gibs/lup_leg_pork.lwo" +} + +entityDef genmodel_gibs_pelvis_pork +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/gibs/pelvis_pork.obj" + "model" "models/gibs/pelvis_pork.lwo" +} + +entityDef genmodel_gibs_rup2_leg_pork +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/gibs/rup2_leg_pork.obj" + "model" "models/gibs/rup2_leg_pork.lwo" +} + +entityDef genmodel_gibs_rup_arm_pork +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/gibs/rup_arm_pork.obj" + "model" "models/gibs/rup_arm_pork.lwo" +} + +entityDef genmodel_gibs_rup_leg_pork +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/gibs/rup_leg_pork.obj" + "model" "models/gibs/rup_leg_pork.lwo" +} + +entityDef genmodel_gibs_skull_pork +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/gibs/skull_pork.obj" + "model" "models/gibs/skull_pork.lwo" +} + +entityDef genmodel_gibs_torso_pork +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/gibs/torso_pork.obj" + "model" "models/gibs/torso_pork.lwo" +} + +entityDef genmodel_mal_cavecorner1 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/mal/cavecorner1.obj" + "model" "models/mal/cavecorner1.lwo" +} + +entityDef genmodel_mal_cavecorner2 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/mal/cavecorner2.obj" + "model" "models/mal/cavecorner2.lwo" +} + +entityDef genmodel_mal_cavesupport +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/mal/cavesupport.obj" + "model" "models/mal/cavesupport.lwo" +} + +entityDef genmodel_mal_floorplate +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/mal/floorplate.obj" + "model" "models/mal/floorplate.lwo" +} + +entityDef genmodel_mal_telebase +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/mal/telebase.obj" + "model" "models/mal/telebase.lwo" +} + +entityDef genmodel_mal_utlamp_lights +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/mal/utlamp_lights.obj" + "model" "models/mal/utlamp_lights.lwo" +} + +entityDef genmodel_mal_utlamp_pole +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/mal/utlamp_pole.obj" + "model" "models/mal/utlamp_pole.lwo" +} + +entityDef genmodel_mal_y_utilitylamp +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/mal/y_utilitylamp.obj" + "model" "models/mal/y_utilitylamp.lwo" +} entityDef genmodel_mapobjects_airlock_airlockbrace { @@ -6412,3 +6797,1921 @@ entityDef genmodel_mapobjects_webs_square "model" "models/mapobjects/webs/square.lwo" } +entityDef genmodel_md5_characters_npcs_heads_goggles +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/characters/npcs/heads/goggles.obj" + "model" "models/md5/characters/npcs/heads/goggles.md5mesh" +} + +entityDef genmodel_md5_characters_npcs_heads_h1 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/characters/npcs/heads/h1.obj" + "model" "models/md5/characters/npcs/heads/h1.md5mesh" +} + +entityDef genmodel_md5_characters_npcs_heads_h2 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/characters/npcs/heads/h2.obj" + "model" "models/md5/characters/npcs/heads/h2.md5mesh" +} + +entityDef genmodel_md5_characters_npcs_heads_h3 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/characters/npcs/heads/h3.obj" + "model" "models/md5/characters/npcs/heads/h3.md5mesh" +} + +entityDef genmodel_md5_characters_npcs_heads_h4 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/characters/npcs/heads/h4.obj" + "model" "models/md5/characters/npcs/heads/h4.md5mesh" +} + +entityDef genmodel_md5_characters_npcs_heads_h5 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/characters/npcs/heads/h5.obj" + "model" "models/md5/characters/npcs/heads/h5.md5mesh" +} + +entityDef genmodel_md5_characters_npcs_heads_h6 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/characters/npcs/heads/h6.obj" + "model" "models/md5/characters/npcs/heads/h6.md5mesh" +} + +entityDef genmodel_md5_characters_npcs_heads_hxp1 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/characters/npcs/heads/hxp1.obj" + "model" "models/md5/characters/npcs/heads/hxp1.md5mesh" +} + +entityDef genmodel_md5_characters_npcs_heads_hxp_helmet +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/characters/npcs/heads/hxp_helmet.obj" + "model" "models/md5/characters/npcs/heads/hxp_helmet.md5mesh" +} + +entityDef genmodel_md5_characters_npcs_heads_mhelmet +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/characters/npcs/heads/mhelmet.obj" + "model" "models/md5/characters/npcs/heads/mhelmet.md5mesh" +} + +entityDef genmodel_md5_characters_npcs_heads_shelmet +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/characters/npcs/heads/shelmet.obj" + "model" "models/md5/characters/npcs/heads/shelmet.md5mesh" +} + +entityDef genmodel_md5_characters_npcs_playermoves_mpplayer +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/characters/npcs/playermoves/mpplayer.obj" + "model" "models/md5/characters/npcs/playermoves/mpplayer.md5mesh" +} + +entityDef genmodel_md5_characters_npcs_playermoves_spplayer +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/characters/npcs/playermoves/spplayer.obj" + "model" "models/md5/characters/npcs/playermoves/spplayer.md5mesh" +} + +entityDef genmodel_md5_characters_npcs_zheads_skull +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/characters/npcs/zheads/skull.obj" + "model" "models/md5/characters/npcs/zheads/skull.md5mesh" +} + +entityDef genmodel_md5_characters_npcs_zheads_z1 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/characters/npcs/zheads/z1.obj" + "model" "models/md5/characters/npcs/zheads/z1.md5mesh" +} + +entityDef genmodel_md5_characters_npcs_zheads_z2 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/characters/npcs/zheads/z2.obj" + "model" "models/md5/characters/npcs/zheads/z2.md5mesh" +} + +entityDef genmodel_md5_characters_npcs_zheads_z3 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/characters/npcs/zheads/z3.obj" + "model" "models/md5/characters/npcs/zheads/z3.md5mesh" +} + +entityDef genmodel_md5_characters_npcs_zheads_z4 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/characters/npcs/zheads/z4.obj" + "model" "models/md5/characters/npcs/zheads/z4.md5mesh" +} + +entityDef genmodel_md5_characters_npcs_zheads_z5 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/characters/npcs/zheads/z5.obj" + "model" "models/md5/characters/npcs/zheads/z5.md5mesh" +} + +entityDef genmodel_md5_characters_npcs_zheads_z6 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/characters/npcs/zheads/z6.obj" + "model" "models/md5/characters/npcs/zheads/z6.md5mesh" +} + +entityDef genmodel_md5_characters_npcs_zheads_z7 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/characters/npcs/zheads/z7.obj" + "model" "models/md5/characters/npcs/zheads/z7.md5mesh" +} + +entityDef genmodel_md5_characters_npcs_lanternlabcoatbody +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/characters/npcs/lanternlabcoatbody.obj" + "model" "models/md5/characters/npcs/lanternlabcoatbody.md5mesh" +} + +entityDef genmodel_md5_characters_npcs_lanternskeleton +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/characters/npcs/lanternskeleton.obj" + "model" "models/md5/characters/npcs/lanternskeleton.md5mesh" +} + +entityDef genmodel_md5_characters_player_head_d3xp_head +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/characters/player/head/d3xp_head.obj" + "model" "models/md5/characters/player/head/d3xp_head.md5mesh" +} + +entityDef genmodel_md5_characters_player_mocap_mgplayer +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/characters/player/mocap/mgplayer.obj" + "model" "models/md5/characters/player/mocap/mgplayer.md5mesh" +} + +entityDef genmodel_md5_characters_player_mocap_player +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/characters/player/mocap/player.obj" + "model" "models/md5/characters/player/mocap/player.md5mesh" +} + +entityDef genmodel_md5_characters_player_mocap_wepplayer +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/characters/player/mocap/wepplayer.obj" + "model" "models/md5/characters/player/mocap/wepplayer.md5mesh" +} + +entityDef genmodel_md5_characters_player_d3xp_spplayer +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/characters/player/d3xp_spplayer.obj" + "model" "models/md5/characters/player/d3xp_spplayer.md5mesh" +} + +entityDef genmodel_md5_characters_poppy_poppy +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/characters/poppy/poppy.obj" + "model" "models/md5/characters/poppy/poppy.md5mesh" +} + +entityDef genmodel_md5_chars_campbell_campbell +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/chars/campbell/campbell.obj" + "model" "models/md5/chars/campbell/campbell.md5mesh" +} + +entityDef genmodel_md5_chars_erebus2_spooked +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/chars/erebus2/spooked.obj" + "model" "models/md5/chars/erebus2/spooked.md5mesh" +} + +entityDef genmodel_md5_chars_mcneil_phobos2_mcneil_typing_loopmesh +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/chars/mcneil/phobos2_mcneil_typing_loopmesh.obj" + "model" "models/md5/chars/mcneil/phobos2_mcneil_typing_loopmesh.md5mesh" +} + +entityDef genmodel_md5_chars_receptionist_marscity_receptioncin1_dufflebag +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/chars/receptionist/marscity/receptioncin1_dufflebag.obj" + "model" "models/md5/chars/receptionist/marscity/receptioncin1_dufflebag.md5mesh" +} + +entityDef genmodel_md5_chars_receptionist_marscity_receptioncin1_smallpda +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/chars/receptionist/marscity/receptioncin1_smallpda.obj" + "model" "models/md5/chars/receptionist/marscity/receptioncin1_smallpda.md5mesh" +} + +entityDef genmodel_md5_chars_hazmat +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/chars/hazmat.obj" + "model" "models/md5/chars/hazmat.md5mesh" +} + +entityDef genmodel_md5_chars_jumpsuit +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/chars/jumpsuit.obj" + "model" "models/md5/chars/jumpsuit.md5mesh" +} + +entityDef genmodel_md5_chars_labcoat +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/chars/labcoat.obj" + "model" "models/md5/chars/labcoat.md5mesh" +} + +entityDef genmodel_md5_chars_marine +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/chars/marine.obj" + "model" "models/md5/chars/marine.md5mesh" +} + +entityDef genmodel_md5_chars_marine_w_mgun +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/chars/marine_w_mgun.obj" + "model" "models/md5/chars/marine_w_mgun.md5mesh" +} + +entityDef genmodel_md5_chars_security +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/chars/security.obj" + "model" "models/md5/chars/security.md5mesh" +} + +entityDef genmodel_md5_chars_skeleton +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/chars/skeleton.obj" + "model" "models/md5/chars/skeleton.md5mesh" +} + +entityDef genmodel_md5_chars_skeleton_w_mgun +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/chars/skeleton_w_mgun.obj" + "model" "models/md5/chars/skeleton_w_mgun.md5mesh" +} + +entityDef genmodel_md5_chars_suit +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/chars/suit.obj" + "model" "models/md5/chars/suit.md5mesh" +} + +entityDef genmodel_md5_chars_tshirt +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/chars/tshirt.obj" + "model" "models/md5/chars/tshirt.md5mesh" +} + +entityDef genmodel_md5_cinematics_admin_overhearcaseontable +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/admin/overhearcaseontable.obj" + "model" "models/md5/cinematics/admin/overhearcaseontable.md5mesh" +} + +entityDef genmodel_md5_cinematics_alphalabs1_helldoll +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/alphalabs1/helldoll.obj" + "model" "models/md5/cinematics/alphalabs1/helldoll.md5mesh" +} + +entityDef genmodel_md5_cinematics_caverns2_hkwallmesh +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/caverns2/hkwallmesh.obj" + "model" "models/md5/cinematics/caverns2/hkwallmesh.md5mesh" +} + +entityDef genmodel_md5_cinematics_comm1_sentry_loader +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/comm1/sentry_loader.obj" + "model" "models/md5/cinematics/comm1/sentry_loader.md5mesh" +} + +entityDef genmodel_md5_cinematics_commoutside_goo +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/commoutside/goo.obj" + "model" "models/md5/cinematics/commoutside/goo.md5mesh" +} + +entityDef genmodel_md5_cinematics_commoutside_rover +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/commoutside/rover.obj" + "model" "models/md5/cinematics/commoutside/rover.md5mesh" +} + +entityDef genmodel_md5_cinematics_delta1_scipull_mesh +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/delta1/scipull_mesh.obj" + "model" "models/md5/cinematics/delta1/scipull_mesh.md5mesh" +} + +entityDef genmodel_md5_cinematics_delta2a_teleporter +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/delta2a/teleporter.obj" + "model" "models/md5/cinematics/delta2a/teleporter.md5mesh" +} + +entityDef genmodel_md5_cinematics_delta2b_impwires +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/delta2b/impwires.obj" + "model" "models/md5/cinematics/delta2b/impwires.md5mesh" +} + +entityDef genmodel_md5_cinematics_delta2b_revenant +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/delta2b/revenant.obj" + "model" "models/md5/cinematics/delta2b/revenant.md5mesh" +} + +entityDef genmodel_md5_cinematics_delta2b_revwires +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/delta2b/revwires.obj" + "model" "models/md5/cinematics/delta2b/revwires.md5mesh" +} + +entityDef genmodel_md5_cinematics_delta2b_waterwires +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/delta2b/waterwires.obj" + "model" "models/md5/cinematics/delta2b/waterwires.md5mesh" +} + +entityDef genmodel_md5_cinematics_delta4_hkintro_teleporter +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/delta4/hkintro_teleporter.obj" + "model" "models/md5/cinematics/delta4/hkintro_teleporter.md5mesh" +} + +entityDef genmodel_md5_cinematics_enpro_chair_lostintro +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/enpro/chair_lostintro.obj" + "model" "models/md5/cinematics/enpro/chair_lostintro.md5mesh" +} + +entityDef genmodel_md5_cinematics_enpro_exithelmet +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/enpro/exithelmet.obj" + "model" "models/md5/cinematics/enpro/exithelmet.md5mesh" +} + +entityDef genmodel_md5_cinematics_enpro_lostintro_spine +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/enpro/lostintro_spine.obj" + "model" "models/md5/cinematics/enpro/lostintro_spine.md5mesh" +} + +entityDef genmodel_md5_cinematics_enpro_lostsoul_mesh +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/enpro/lostsoul_mesh.obj" + "model" "models/md5/cinematics/enpro/lostsoul_mesh.md5mesh" +} + +entityDef genmodel_md5_cinematics_enpro_wounded_keycard +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/enpro/wounded_keycard.obj" + "model" "models/md5/cinematics/enpro/wounded_keycard.md5mesh" +} + +entityDef genmodel_md5_cinematics_erebus2_player_grabber +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/erebus2/player_grabber.obj" + "model" "models/md5/cinematics/erebus2/player_grabber.md5mesh" +} + +entityDef genmodel_md5_cinematics_erebus2_player_orb +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/erebus2/player_orb.obj" + "model" "models/md5/cinematics/erebus2/player_orb.md5mesh" +} + +entityDef genmodel_md5_cinematics_erebus2_player_vulgarintro +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/erebus2/player_vulgarintro.obj" + "model" "models/md5/cinematics/erebus2/player_vulgarintro.md5mesh" +} + +entityDef genmodel_md5_cinematics_erebus5_e5_cloud +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/erebus5/e5_cloud.obj" + "model" "models/md5/cinematics/erebus5/e5_cloud.md5mesh" +} + +entityDef genmodel_md5_cinematics_erebus5_e5_player +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/erebus5/e5_player.obj" + "model" "models/md5/cinematics/erebus5/e5_player.md5mesh" +} + +entityDef genmodel_md5_cinematics_erebus5_envirosuit_on +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/erebus5/envirosuit_on.obj" + "model" "models/md5/cinematics/erebus5/envirosuit_on.md5mesh" +} + +entityDef genmodel_md5_cinematics_erebus6_player +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/erebus6/player.obj" + "model" "models/md5/cinematics/erebus6/player.md5mesh" +} + +entityDef genmodel_md5_cinematics_erebus6_player_outro +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/erebus6/player_outro.obj" + "model" "models/md5/cinematics/erebus6/player_outro.md5mesh" +} + +entityDef genmodel_md5_cinematics_erebus6_wallmesh +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/erebus6/wallmesh.obj" + "model" "models/md5/cinematics/erebus6/wallmesh.md5mesh" +} + +entityDef genmodel_md5_cinematics_gravgun_intro_marine_gravmesh +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/gravgun_intro/marine_gravmesh.obj" + "model" "models/md5/cinematics/gravgun_intro/marine_gravmesh.md5mesh" +} + +entityDef genmodel_md5_cinematics_hell_maledict_intro_maledict_hell_intro +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/hell/maledict_intro/maledict_hell_intro.obj" + "model" "models/md5/cinematics/hell/maledict_intro/maledict_hell_intro.md5mesh" +} + +entityDef genmodel_md5_cinematics_hell_maledict_intro_player_maledict_intro +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/hell/maledict_intro/player_maledict_intro.obj" + "model" "models/md5/cinematics/hell/maledict_intro/player_maledict_intro.md5mesh" +} + +entityDef genmodel_md5_cinematics_hell1_guardianintro_soulcube +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/hell1/guardianintro_soulcube.obj" + "model" "models/md5/cinematics/hell1/guardianintro_soulcube.md5mesh" +} + +entityDef genmodel_md5_cinematics_hell1_lstep +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/hell1/lstep.obj" + "model" "models/md5/cinematics/hell1/lstep.md5mesh" +} + +entityDef genmodel_md5_cinematics_hell1_rstep +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/hell1/rstep.obj" + "model" "models/md5/cinematics/hell1/rstep.md5mesh" +} + +entityDef genmodel_md5_cinematics_hellhole_cyberdeath_cyberdemon +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/hellhole/cyberdeath_cyberdemon.obj" + "model" "models/md5/cinematics/hellhole/cyberdeath_cyberdemon.md5mesh" +} + +entityDef genmodel_md5_cinematics_hellhole_cyberrocks +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/hellhole/cyberrocks.obj" + "model" "models/md5/cinematics/hellhole/cyberrocks.md5mesh" +} + +entityDef genmodel_md5_cinematics_intro_imp +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/intro/imp.obj" + "model" "models/md5/cinematics/intro/imp.md5mesh" +} + +entityDef genmodel_md5_cinematics_intro_marine +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/intro/marine.obj" + "model" "models/md5/cinematics/intro/marine.md5mesh" +} + +entityDef genmodel_md5_cinematics_intro_mcneil +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/intro/mcneil.obj" + "model" "models/md5/cinematics/intro/mcneil.md5mesh" +} + +entityDef genmodel_md5_cinematics_intro_player_heartartifact +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/intro/player_heartartifact.obj" + "model" "models/md5/cinematics/intro/player_heartartifact.md5mesh" +} + +entityDef genmodel_md5_cinematics_intro_player_helmet +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/intro/player_helmet.obj" + "model" "models/md5/cinematics/intro/player_helmet.md5mesh" +} + +entityDef genmodel_md5_cinematics_intro_stock_marine +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/intro/stock_marine.obj" + "model" "models/md5/cinematics/intro/stock_marine.md5mesh" +} + +entityDef genmodel_md5_cinematics_intro_stock_marine_detonator +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/intro/stock_marine_detonator.obj" + "model" "models/md5/cinematics/intro/stock_marine_detonator.md5mesh" +} + +entityDef genmodel_md5_cinematics_intro_stock_marine_flashlight +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/intro/stock_marine_flashlight.obj" + "model" "models/md5/cinematics/intro/stock_marine_flashlight.md5mesh" +} + +entityDef genmodel_md5_cinematics_intro_stock_marine_gravitygun +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/intro/stock_marine_gravitygun.obj" + "model" "models/md5/cinematics/intro/stock_marine_gravitygun.md5mesh" +} + +entityDef genmodel_md5_cinematics_intro_stock_marine_pda +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/intro/stock_marine_pda.obj" + "model" "models/md5/cinematics/intro/stock_marine_pda.md5mesh" +} + +entityDef genmodel_md5_cinematics_intro_eric_intro_wall_rocks +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/intro_eric/intro_wall_rocks.obj" + "model" "models/md5/cinematics/intro_eric/intro_wall_rocks.md5mesh" +} + +entityDef genmodel_md5_cinematics_le_hell_post_guardian_cinematic_mesh +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/le_hell_post/guardian_cinematic_mesh.obj" + "model" "models/md5/cinematics/le_hell_post/guardian_cinematic_mesh.md5mesh" +} + +entityDef genmodel_md5_cinematics_le_hell_post_marine_mesh +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/le_hell_post/marine_mesh.obj" + "model" "models/md5/cinematics/le_hell_post/marine_mesh.md5mesh" +} + +entityDef genmodel_md5_cinematics_le_hell_post_meyers_mesh +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/le_hell_post/meyers_mesh.obj" + "model" "models/md5/cinematics/le_hell_post/meyers_mesh.md5mesh" +} + +entityDef genmodel_md5_cinematics_maledict_death_maledict +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/maledict_death/maledict.obj" + "model" "models/md5/cinematics/maledict_death/maledict.md5mesh" +} + +entityDef genmodel_md5_cinematics_maledict_death_player_heartartifact_end +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/maledict_death/player_heartartifact_end.obj" + "model" "models/md5/cinematics/maledict_death/player_heartartifact_end.md5mesh" +} + +entityDef genmodel_md5_cinematics_maledict_death_player_rocketlauncher_end +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/maledict_death/player_rocketlauncher_end.obj" + "model" "models/md5/cinematics/maledict_death/player_rocketlauncher_end.md5mesh" +} + +entityDef genmodel_md5_cinematics_maledict_death_player_turnrun_end +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/maledict_death/player_turnrun_end.obj" + "model" "models/md5/cinematics/maledict_death/player_turnrun_end.md5mesh" +} + +entityDef genmodel_md5_cinematics_maledict_death_skull +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/maledict_death/skull.obj" + "model" "models/md5/cinematics/maledict_death/skull.md5mesh" +} + +entityDef genmodel_md5_cinematics_maledict_intro_maledict +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/maledict_intro/maledict.obj" + "model" "models/md5/cinematics/maledict_intro/maledict.md5mesh" +} + +entityDef genmodel_md5_cinematics_monorail_crash_debris +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/monorail/crash_debris.obj" + "model" "models/md5/cinematics/monorail/crash_debris.md5mesh" +} + +entityDef genmodel_md5_cinematics_phobos2_ai_dummy_deathmesh +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/phobos2/ai_dummy_deathmesh.obj" + "model" "models/md5/cinematics/phobos2/ai_dummy_deathmesh.md5mesh" +} + +entityDef genmodel_md5_cinematics_phobos2_phobos2_mcneil_chair +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/phobos2/phobos2_mcneil_chair.obj" + "model" "models/md5/cinematics/phobos2/phobos2_mcneil_chair.md5mesh" +} + +entityDef genmodel_md5_cinematics_phobos2_player +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/phobos2/player.obj" + "model" "models/md5/cinematics/phobos2/player.md5mesh" +} + +entityDef genmodel_md5_cinematics_phobos2_playeroutro +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/phobos2/playeroutro.obj" + "model" "models/md5/cinematics/phobos2/playeroutro.md5mesh" +} + +entityDef genmodel_md5_cinematics_recycling1_skybridge +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/recycling1/skybridge.obj" + "model" "models/md5/cinematics/recycling1/skybridge.md5mesh" +} + +entityDef genmodel_md5_cinematics_recycling2_mancintro_pipes +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/recycling2/mancintro_pipes.obj" + "model" "models/md5/cinematics/recycling2/mancintro_pipes.md5mesh" +} + +entityDef genmodel_md5_cinematics_revenant_revintro_impact +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/revenant/revintro_impact.obj" + "model" "models/md5/cinematics/revenant/revintro_impact.md5mesh" +} + +entityDef genmodel_md5_cinematics_revenant_revintro_player2 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/revenant/revintro_player2.obj" + "model" "models/md5/cinematics/revenant/revintro_player2.md5mesh" +} + +entityDef genmodel_md5_cinematics_site3_floor_floor +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/site3/floor_floor.obj" + "model" "models/md5/cinematics/site3/floor_floor.md5mesh" +} + +entityDef genmodel_md5_cinematics_underground_chestskull +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/underground/chestskull.obj" + "model" "models/md5/cinematics/underground/chestskull.md5mesh" +} + +entityDef genmodel_md5_cinematics_underground_impstairs +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/underground/impstairs.obj" + "model" "models/md5/cinematics/underground/impstairs.md5mesh" +} + +entityDef genmodel_md5_cinematics_underground_littleskull +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/underground/littleskull.obj" + "model" "models/md5/cinematics/underground/littleskull.md5mesh" +} + +entityDef genmodel_md5_cinematics_underground_underground_impcrawl_door +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/cinematics/underground/underground_impcrawl_door.obj" + "model" "models/md5/cinematics/underground/underground_impcrawl_door.md5mesh" +} + +entityDef genmodel_md5_enviroments_ai_dummy_ai_dummy +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/enviroments/ai_dummy/ai_dummy.obj" + "model" "models/md5/enviroments/ai_dummy/ai_dummy.md5mesh" +} + +entityDef genmodel_md5_environments_pcellgen_pcellgen +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/environments/pcellgen/pcellgen.obj" + "model" "models/md5/environments/pcellgen/pcellgen.md5mesh" +} + +entityDef genmodel_md5_environments_pcellgen_single_pcellgen_single +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/environments/pcellgen_single/pcellgen_single.obj" + "model" "models/md5/environments/pcellgen_single/pcellgen_single.md5mesh" +} + +entityDef genmodel_md5_environments_turret_turretmesh +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/environments/turret/turretmesh.obj" + "model" "models/md5/environments/turret/turretmesh.md5mesh" +} + +entityDef genmodel_md5_environments_airlockdoor +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/environments/airlockdoor.obj" + "model" "models/md5/environments/airlockdoor.md5mesh" +} + +entityDef genmodel_md5_environments_cage_corpse +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/environments/cage_corpse.obj" + "model" "models/md5/environments/cage_corpse.md5mesh" +} + +entityDef genmodel_md5_environments_crane +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/environments/crane.obj" + "model" "models/md5/environments/crane.md5mesh" +} + +entityDef genmodel_md5_environments_env_swinglight_sl128 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/environments/env_swinglight_sl128.obj" + "model" "models/md5/environments/env_swinglight_sl128.md5mesh" +} + +entityDef genmodel_md5_environments_env_swinglight_sl64 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/environments/env_swinglight_sl64.obj" + "model" "models/md5/environments/env_swinglight_sl64.md5mesh" +} + +entityDef genmodel_md5_environments_env_xianbutton_1 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/environments/env_xianbutton_1.obj" + "model" "models/md5/environments/env_xianbutton_1.md5mesh" +} + +entityDef genmodel_md5_environments_evilmeat +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/environments/evilmeat.obj" + "model" "models/md5/environments/evilmeat.md5mesh" +} + +entityDef genmodel_md5_environments_hellchain +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/environments/hellchain.obj" + "model" "models/md5/environments/hellchain.md5mesh" +} + +entityDef genmodel_md5_environments_impdoorbreak +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/environments/impdoorbreak.obj" + "model" "models/md5/environments/impdoorbreak.md5mesh" +} + +entityDef genmodel_md5_environments_inviso +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/environments/inviso.obj" + "model" "models/md5/environments/inviso.md5mesh" +} + +entityDef genmodel_md5_environments_mcuplatform +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/environments/mcuplatform.obj" + "model" "models/md5/environments/mcuplatform.md5mesh" +} + +entityDef genmodel_md5_environments_mummy +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/environments/mummy.obj" + "model" "models/md5/environments/mummy.md5mesh" +} + +entityDef genmodel_md5_environments_platform +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/environments/platform.obj" + "model" "models/md5/environments/platform.md5mesh" +} + +entityDef genmodel_md5_environments_railing +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/environments/railing.obj" + "model" "models/md5/environments/railing.md5mesh" +} + +entityDef genmodel_md5_environments_storagecabinet +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/environments/storagecabinet.obj" + "model" "models/md5/environments/storagecabinet.md5mesh" +} + +entityDef genmodel_md5_environments_storagecabinet2 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/environments/storagecabinet2.obj" + "model" "models/md5/environments/storagecabinet2.md5mesh" +} + +entityDef genmodel_md5_environments_swinglight_long_wbulbs +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/environments/swinglight_long_wbulbs.obj" + "model" "models/md5/environments/swinglight_long_wbulbs.md5mesh" +} + +entityDef genmodel_md5_environments_swinglight_long_wbulbs_128 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/environments/swinglight_long_wbulbs_128.obj" + "model" "models/md5/environments/swinglight_long_wbulbs_128.md5mesh" +} + +entityDef genmodel_md5_environments_swinglight_long_wbulbs_192 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/environments/swinglight_long_wbulbs_192.obj" + "model" "models/md5/environments/swinglight_long_wbulbs_192.md5mesh" +} + +entityDef genmodel_md5_environments_swinglight_long_wbulbs_32 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/environments/swinglight_long_wbulbs_32.obj" + "model" "models/md5/environments/swinglight_long_wbulbs_32.md5mesh" +} + +entityDef genmodel_md5_environments_swinglight_round +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/environments/swinglight_round.obj" + "model" "models/md5/environments/swinglight_round.md5mesh" +} + +entityDef genmodel_md5_gibs_leftarmgib +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/gibs/leftarmgib.obj" + "model" "models/md5/gibs/leftarmgib.md5mesh" +} + +entityDef genmodel_md5_gibs_leftleggib +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/gibs/leftleggib.obj" + "model" "models/md5/gibs/leftleggib.md5mesh" +} + +entityDef genmodel_md5_gibs_rtlolegstumpgib +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/gibs/rtlolegstumpgib.obj" + "model" "models/md5/gibs/rtlolegstumpgib.md5mesh" +} + +entityDef genmodel_md5_gibs_rtuplegstumpgib +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/gibs/rtuplegstumpgib.obj" + "model" "models/md5/gibs/rtuplegstumpgib.md5mesh" +} + +entityDef genmodel_md5_gibs_ruparmstubgib +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/gibs/ruparmstubgib.obj" + "model" "models/md5/gibs/ruparmstubgib.md5mesh" +} + +entityDef genmodel_md5_gibs_spinegib +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/gibs/spinegib.obj" + "model" "models/md5/gibs/spinegib.md5mesh" +} + +entityDef genmodel_md5_gibs_torsogib +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/gibs/torsogib.obj" + "model" "models/md5/gibs/torsogib.md5mesh" +} + +entityDef genmodel_md5_heads_betruger_betruger +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/heads/betruger/betruger.obj" + "model" "models/md5/heads/betruger/betruger.md5mesh" +} + +entityDef genmodel_md5_heads_campbell_campbell +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/heads/campbell/campbell.obj" + "model" "models/md5/heads/campbell/campbell.md5mesh" +} + +entityDef genmodel_md5_heads_head02young_h2_cinematic +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/heads/head02young/h2_cinematic.obj" + "model" "models/md5/heads/head02young/h2_cinematic.md5mesh" +} + +entityDef genmodel_md5_heads_player_player +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/heads/player/player.obj" + "model" "models/md5/heads/player/player.md5mesh" +} + +entityDef genmodel_md5_heads_sarge_sarge +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/heads/sarge/sarge.obj" + "model" "models/md5/heads/sarge/sarge.md5mesh" +} + +entityDef genmodel_md5_heads_security_goggles_goggles +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/heads/security_goggles/goggles.obj" + "model" "models/md5/heads/security_goggles/goggles.md5mesh" +} + +entityDef genmodel_md5_heads_swann_swann +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/heads/swann/swann.obj" + "model" "models/md5/heads/swann/swann.md5mesh" +} + +entityDef genmodel_md5_items_bfgcase_bfgcase +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/items/bfgcase/bfgcase.obj" + "model" "models/md5/items/bfgcase/bfgcase.md5mesh" +} + +entityDef genmodel_md5_items_flashlight_view_viewflashlight +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/items/flashlight_view/viewflashlight.obj" + "model" "models/md5/items/flashlight_view/viewflashlight.md5mesh" +} + +entityDef genmodel_md5_items_flashlight_world_worldflashlight +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/items/flashlight_world/worldflashlight.obj" + "model" "models/md5/items/flashlight_world/worldflashlight.md5mesh" +} + +entityDef genmodel_md5_items_pda_view_idle +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/items/pda_view/idle.obj" + "model" "models/md5/items/pda_view/idle.md5mesh" +} + +entityDef genmodel_md5_items_pda_world_worldpda +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/items/pda_world/worldpda.obj" + "model" "models/md5/items/pda_world/worldpda.md5mesh" +} + +entityDef genmodel_md5_items_turret1_turret +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/items/turret1/turret.obj" + "model" "models/md5/items/turret1/turret.md5mesh" +} + +entityDef genmodel_md5_monsters_archvile_archvile +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/archvile/archvile.obj" + "model" "models/md5/monsters/archvile/archvile.md5mesh" +} + +entityDef genmodel_md5_monsters_cacodemon_cacodemon +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/cacodemon/cacodemon.obj" + "model" "models/md5/monsters/cacodemon/cacodemon.md5mesh" +} + +entityDef genmodel_md5_monsters_cherub_cherub +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/cherub/cherub.obj" + "model" "models/md5/monsters/cherub/cherub.md5mesh" +} + +entityDef genmodel_md5_monsters_cyberdemon_cyberdemon +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/cyberdemon/cyberdemon.obj" + "model" "models/md5/monsters/cyberdemon/cyberdemon.md5mesh" +} + +entityDef genmodel_md5_monsters_d3xp_bruiser_d3xp_bruiser +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/d3xp_bruiser/d3xp_bruiser.obj" + "model" "models/md5/monsters/d3xp_bruiser/d3xp_bruiser.md5mesh" +} + +entityDef genmodel_md5_monsters_d3xp_invul_d3xp_invul +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/d3xp_invul/d3xp_invul.obj" + "model" "models/md5/monsters/d3xp_invul/d3xp_invul.md5mesh" +} + +entityDef genmodel_md5_monsters_d3xp_maledict_maledict +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/d3xp_maledict/maledict.obj" + "model" "models/md5/monsters/d3xp_maledict/maledict.md5mesh" +} + +entityDef genmodel_md5_monsters_forgotten_forgotten +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/forgotten/forgotten.obj" + "model" "models/md5/monsters/forgotten/forgotten.md5mesh" +} + +entityDef genmodel_md5_monsters_forgotten2_forgotten2 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/forgotten2/forgotten2.obj" + "model" "models/md5/monsters/forgotten2/forgotten2.md5mesh" +} + +entityDef genmodel_md5_monsters_gseeker_gseeker +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/gseeker/gseeker.obj" + "model" "models/md5/monsters/gseeker/gseeker.md5mesh" +} + +entityDef genmodel_md5_monsters_guardian_guardian +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/guardian/guardian.obj" + "model" "models/md5/monsters/guardian/guardian.md5mesh" +} + +entityDef genmodel_md5_monsters_hellknight_hellknight +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/hellknight/hellknight.obj" + "model" "models/md5/monsters/hellknight/hellknight.md5mesh" +} + +entityDef genmodel_md5_monsters_hunter_berzerk_berzerk_makemesh +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/hunter_berzerk/berzerk_makemesh.obj" + "model" "models/md5/monsters/hunter_berzerk/berzerk_makemesh.md5mesh" +} + +entityDef genmodel_md5_monsters_hunter_berzerk_idle +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/hunter_berzerk/idle.obj" + "model" "models/md5/monsters/hunter_berzerk/idle.md5mesh" +} + +entityDef genmodel_md5_monsters_hunter_helltime_helltime +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/hunter_helltime/helltime.obj" + "model" "models/md5/monsters/hunter_helltime/helltime.md5mesh" +} + +entityDef genmodel_md5_monsters_imp_imp +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/imp/imp.obj" + "model" "models/md5/monsters/imp/imp.md5mesh" +} + +entityDef genmodel_md5_monsters_lostsoul_lostsoul +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/lostsoul/lostsoul.obj" + "model" "models/md5/monsters/lostsoul/lostsoul.md5mesh" +} + +entityDef genmodel_md5_monsters_maggot3_maggot3 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/maggot3/maggot3.obj" + "model" "models/md5/monsters/maggot3/maggot3.md5mesh" +} + +entityDef genmodel_md5_monsters_maledict_debris +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/maledict/debris.obj" + "model" "models/md5/monsters/maledict/debris.md5mesh" +} + +entityDef genmodel_md5_monsters_maledict_maledict +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/maledict/maledict.obj" + "model" "models/md5/monsters/maledict/maledict.md5mesh" +} + +entityDef genmodel_md5_monsters_mancubus_james_mancubus +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/mancubus/james/mancubus.obj" + "model" "models/md5/monsters/mancubus/james/mancubus.md5mesh" +} + +entityDef genmodel_md5_monsters_pinky_pinky +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/pinky/pinky.obj" + "model" "models/md5/monsters/pinky/pinky.md5mesh" +} + +entityDef genmodel_md5_monsters_revenant_james_revenant +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/revenant/james/revenant.obj" + "model" "models/md5/monsters/revenant/james/revenant.md5mesh" +} + +entityDef genmodel_md5_monsters_sabaoth_sabaoth +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/sabaoth/sabaoth.obj" + "model" "models/md5/monsters/sabaoth/sabaoth.md5mesh" +} + +entityDef genmodel_md5_monsters_sentry_sentry +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/sentry/sentry.obj" + "model" "models/md5/monsters/sentry/sentry.md5mesh" +} + +entityDef genmodel_md5_monsters_skeleton_skeleton +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/skeleton/skeleton.obj" + "model" "models/md5/monsters/skeleton/skeleton.md5mesh" +} + +entityDef genmodel_md5_monsters_tick_tick +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/tick/tick.obj" + "model" "models/md5/monsters/tick/tick.md5mesh" +} + +entityDef genmodel_md5_monsters_trite_trite +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/trite/trite.obj" + "model" "models/md5/monsters/trite/trite.md5mesh" +} + +entityDef genmodel_md5_monsters_vagary_vagary +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/vagary/vagary.obj" + "model" "models/md5/monsters/vagary/vagary.md5mesh" +} + +entityDef genmodel_md5_monsters_vulgar_vulgar +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/vulgar/vulgar.obj" + "model" "models/md5/monsters/vulgar/vulgar.md5mesh" +} + +entityDef genmodel_md5_monsters_wraith_wraith +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/wraith/wraith.obj" + "model" "models/md5/monsters/wraith/wraith.md5mesh" +} + +entityDef genmodel_md5_monsters_zcc_zcc +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/zcc/zcc.obj" + "model" "models/md5/monsters/zcc/zcc.md5mesh" +} + +entityDef genmodel_md5_monsters_zct_zct +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/zct/zct.obj" + "model" "models/md5/monsters/zct/zct.md5mesh" +} + +entityDef genmodel_md5_monsters_zfat_zfat +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/zfat/zfat.obj" + "model" "models/md5/monsters/zfat/zfat.md5mesh" +} + +entityDef genmodel_md5_monsters_zombies_bernie_bernie +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/zombies/bernie/bernie.obj" + "model" "models/md5/monsters/zombies/bernie/bernie.md5mesh" +} + +entityDef genmodel_md5_monsters_zombies_boney_boney +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/zombies/boney/boney.obj" + "model" "models/md5/monsters/zombies/boney/boney.md5mesh" +} + +entityDef genmodel_md5_monsters_zombies_hazmat_zombie_hazmat_zombie +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/zombies/hazmat_zombie/hazmat_zombie.obj" + "model" "models/md5/monsters/zombies/hazmat_zombie/hazmat_zombie.md5mesh" +} + +entityDef genmodel_md5_monsters_zombies_morgue_morgue +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/zombies/morgue/morgue.obj" + "model" "models/md5/monsters/zombies/morgue/morgue.md5mesh" +} + +entityDef genmodel_md5_monsters_zombies_sawyer_sawyer +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/zombies/sawyer/sawyer.obj" + "model" "models/md5/monsters/zombies/sawyer/sawyer.md5mesh" +} + +entityDef genmodel_md5_monsters_zombies_zmaint_zmaint +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/zombies/zmaint/zmaint.obj" + "model" "models/md5/monsters/zombies/zmaint/zmaint.md5mesh" +} + +entityDef genmodel_md5_monsters_zombies_zsec_machinegun_zsecmachinegun +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/zombies/zsec_machinegun/zsecmachinegun.obj" + "model" "models/md5/monsters/zombies/zsec_machinegun/zsecmachinegun.md5mesh" +} + +entityDef genmodel_md5_monsters_zombies_zsec_pistol_zsecpistol +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/zombies/zsec_pistol/zsecpistol.obj" + "model" "models/md5/monsters/zombies/zsec_pistol/zsecpistol.md5mesh" +} + +entityDef genmodel_md5_monsters_zombies_zsec_shotgun_zsecshotgun +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/zombies/zsec_shotgun/zsecshotgun.obj" + "model" "models/md5/monsters/zombies/zsec_shotgun/zsecshotgun.md5mesh" +} + +entityDef genmodel_md5_monsters_zombies_jumpsuitzombie +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/zombies/jumpsuitzombie.obj" + "model" "models/md5/monsters/zombies/jumpsuitzombie.md5mesh" +} + +entityDef genmodel_md5_monsters_zombies_labcoatzombie +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/zombies/labcoatzombie.obj" + "model" "models/md5/monsters/zombies/labcoatzombie.md5mesh" +} + +entityDef genmodel_md5_monsters_zombies_suitzombie +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/zombies/suitzombie.obj" + "model" "models/md5/monsters/zombies/suitzombie.md5mesh" +} + +entityDef genmodel_md5_monsters_zombies_tshirtzombie +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/monsters/zombies/tshirtzombie.obj" + "model" "models/md5/monsters/zombies/tshirtzombie.md5mesh" +} + +entityDef genmodel_md5_phobos2_tram +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/phobos2/tram.obj" + "model" "models/md5/phobos2/tram.md5mesh" +} + +entityDef genmodel_md5_props_adrenaline +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/props/adrenaline.obj" + "model" "models/md5/props/adrenaline.md5mesh" +} + +entityDef genmodel_md5_props_dufflebag +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/props/dufflebag.obj" + "model" "models/md5/props/dufflebag.md5mesh" +} + +entityDef genmodel_md5_props_foamcup +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/props/foamcup.obj" + "model" "models/md5/props/foamcup.md5mesh" +} + +entityDef genmodel_md5_props_leftflashlight +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/props/leftflashlight.obj" + "model" "models/md5/props/leftflashlight.md5mesh" +} + +entityDef genmodel_md5_props_machinegun +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/props/machinegun.obj" + "model" "models/md5/props/machinegun.md5mesh" +} + +entityDef genmodel_md5_props_metal_lounge_chair +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/props/metal_lounge_chair.obj" + "model" "models/md5/props/metal_lounge_chair.md5mesh" +} + +entityDef genmodel_md5_props_pistol +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/props/pistol.obj" + "model" "models/md5/props/pistol.md5mesh" +} + +entityDef genmodel_md5_props_soft_desk_chair2 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/props/soft_desk_chair2.obj" + "model" "models/md5/props/soft_desk_chair2.md5mesh" +} + +entityDef genmodel_md5_props_wrench +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/props/wrench.obj" + "model" "models/md5/props/wrench.md5mesh" +} + +entityDef genmodel_md5_weapons_artifact_world_artifactworld +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/weapons/artifact_world/artifactworld.obj" + "model" "models/md5/weapons/artifact_world/artifactworld.md5mesh" +} + +entityDef genmodel_md5_weapons_bfg_view_viewbfg +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/weapons/bfg_view/viewbfg.obj" + "model" "models/md5/weapons/bfg_view/viewbfg.md5mesh" +} + +entityDef genmodel_md5_weapons_bfg_world_worldbfg +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/weapons/bfg_world/worldbfg.obj" + "model" "models/md5/weapons/bfg_world/worldbfg.md5mesh" +} + +entityDef genmodel_md5_weapons_blood_orb_view_new_bloodorb +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/weapons/blood_orb_view/new/bloodorb.obj" + "model" "models/md5/weapons/blood_orb_view/new/bloodorb.md5mesh" +} + +entityDef genmodel_md5_weapons_chaingun_view_viewchaingun +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/weapons/chaingun_view/viewchaingun.obj" + "model" "models/md5/weapons/chaingun_view/viewchaingun.md5mesh" +} + +entityDef genmodel_md5_weapons_chaingun_world_worldchaingun +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/weapons/chaingun_world/worldchaingun.obj" + "model" "models/md5/weapons/chaingun_world/worldchaingun.md5mesh" +} + +entityDef genmodel_md5_weapons_chainsaw_view_viewchainsaw +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/weapons/chainsaw_view/viewchainsaw.obj" + "model" "models/md5/weapons/chainsaw_view/viewchainsaw.md5mesh" +} + +entityDef genmodel_md5_weapons_chainsaw_world_worldchainsaw +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/weapons/chainsaw_world/worldchainsaw.obj" + "model" "models/md5/weapons/chainsaw_world/worldchainsaw.md5mesh" +} + +entityDef genmodel_md5_weapons_doublebarrel_view_new_dbviewmesh +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/weapons/doublebarrel_view/new/dbviewmesh.obj" + "model" "models/md5/weapons/doublebarrel_view/new/dbviewmesh.md5mesh" +} + +entityDef genmodel_md5_weapons_fists_view_fists +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/weapons/fists_view/fists.obj" + "model" "models/md5/weapons/fists_view/fists.md5mesh" +} + +entityDef genmodel_md5_weapons_grabber_view_idleopen +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/weapons/grabber_view/idleopen.obj" + "model" "models/md5/weapons/grabber_view/idleopen.md5mesh" +} + +entityDef genmodel_md5_weapons_grabber_world_worldgrabber +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/weapons/grabber_world/worldgrabber.obj" + "model" "models/md5/weapons/grabber_world/worldgrabber.md5mesh" +} + +entityDef genmodel_md5_weapons_grenade_view_viewgrenade +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/weapons/grenade_view/viewgrenade.obj" + "model" "models/md5/weapons/grenade_view/viewgrenade.md5mesh" +} + +entityDef genmodel_md5_weapons_grenade_world_worldgrenade +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/weapons/grenade_world/worldgrenade.obj" + "model" "models/md5/weapons/grenade_world/worldgrenade.md5mesh" +} + +entityDef genmodel_md5_weapons_machinegun_view_viewmachinegun +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/weapons/machinegun_view/viewmachinegun.obj" + "model" "models/md5/weapons/machinegun_view/viewmachinegun.md5mesh" +} + +entityDef genmodel_md5_weapons_machinegun_world_worldmachinegun +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/weapons/machinegun_world/worldmachinegun.obj" + "model" "models/md5/weapons/machinegun_world/worldmachinegun.md5mesh" +} + +entityDef genmodel_md5_weapons_pistol_view_viewpistol +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/weapons/pistol_view/viewpistol.obj" + "model" "models/md5/weapons/pistol_view/viewpistol.md5mesh" +} + +entityDef genmodel_md5_weapons_pistol_world_worldpistol +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/weapons/pistol_world/worldpistol.obj" + "model" "models/md5/weapons/pistol_world/worldpistol.md5mesh" +} + +entityDef genmodel_md5_weapons_plasmagun_view_viewplasmagun +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/weapons/plasmagun_view/viewplasmagun.obj" + "model" "models/md5/weapons/plasmagun_view/viewplasmagun.md5mesh" +} + +entityDef genmodel_md5_weapons_plasmagun_world_worldplasmagun +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/weapons/plasmagun_world/worldplasmagun.obj" + "model" "models/md5/weapons/plasmagun_world/worldplasmagun.md5mesh" +} + +entityDef genmodel_md5_weapons_rocketlauncher_view_viewrocketlauncher +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/weapons/rocketlauncher_view/viewrocketlauncher.obj" + "model" "models/md5/weapons/rocketlauncher_view/viewrocketlauncher.md5mesh" +} + +entityDef genmodel_md5_weapons_rocketlauncher_world_worldrocketlauncher +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/weapons/rocketlauncher_world/worldrocketlauncher.obj" + "model" "models/md5/weapons/rocketlauncher_world/worldrocketlauncher.md5mesh" +} + +entityDef genmodel_md5_weapons_shotgun_double_world_worlddbshotgun +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/weapons/shotgun_double_world/worlddbshotgun.obj" + "model" "models/md5/weapons/shotgun_double_world/worlddbshotgun.md5mesh" +} + +entityDef genmodel_md5_weapons_shotgun_view_viewshotgun +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/weapons/shotgun_view/viewshotgun.obj" + "model" "models/md5/weapons/shotgun_view/viewshotgun.md5mesh" +} + +entityDef genmodel_md5_weapons_shotgun_world_worldshotgun +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/weapons/shotgun_world/worldshotgun.obj" + "model" "models/md5/weapons/shotgun_world/worldshotgun.md5mesh" +} + +entityDef genmodel_md5_weapons_soulcube_view_soulcube +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/weapons/soulcube_view/soulcube.obj" + "model" "models/md5/weapons/soulcube_view/soulcube.md5mesh" +} + +entityDef genmodel_md5_weapons_soulcube_world_worldsoulcube +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/md5/weapons/soulcube_world/worldsoulcube.obj" + "model" "models/md5/weapons/soulcube_world/worldsoulcube.md5mesh" +} + +entityDef genmodel_monsters_cyberdemon_cdrocket +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/monsters/cyberdemon/cdrocket.obj" + "model" "models/monsters/cyberdemon/cdrocket.lwo" +} + +entityDef genmodel_monsters_gseeker_gseeker_flare_on_orig +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/monsters/gseeker/gseeker_flare_on_orig.obj" + "model" "models/monsters/gseeker/gseeker_flare_on_orig.lwo" +} + +entityDef genmodel_monsters_spawn_redspawn +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/monsters/spawn/redspawn.obj" + "model" "models/monsters/spawn/redspawn.lwo" +} + +entityDef genmodel_monsters_spawn_spawn +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/monsters/spawn/spawn.obj" + "model" "models/monsters/spawn/spawn.lwo" +} + +entityDef genmodel_monsters_spawn_spawnlightning +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/monsters/spawn/spawnlightning.obj" + "model" "models/monsters/spawn/spawnlightning.lwo" +} + +entityDef genmodel_monsters_zsecurity_zsheild +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/monsters/zsecurity/zsheild.obj" + "model" "models/monsters/zsecurity/zsheild.lwo" +} + +entityDef genmodel_outdoors_alphalabs2_alphalabs2_outside +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/outdoors/alphalabs2/alphalabs2_outside.obj" + "model" "models/outdoors/alphalabs2/alphalabs2_outside.lwo" +} + +entityDef genmodel_outdoors_d3dm4_d3dm4_b +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/outdoors/d3dm4/d3dm4_b.obj" + "model" "models/outdoors/d3dm4/d3dm4_b.lwo" +} + +entityDef genmodel_outdoors_d3dm4_d3dm4_c +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/outdoors/d3dm4/d3dm4_c.obj" + "model" "models/outdoors/d3dm4/d3dm4_c.lwo" +} + +entityDef genmodel_outdoors_dm_dm_outside +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/outdoors/dm/dm_outside.obj" + "model" "models/outdoors/dm/dm_outside.lwo" +} + +entityDef genmodel_outdoors_dm_terrain_d3dm2_small_sd +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/outdoors/dm/terrain_d3dm2_small_sd.obj" + "model" "models/outdoors/dm/terrain_d3dm2_small_sd.lwo" +} + +entityDef genmodel_outdoors_tram_haha +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/outdoors/tram/haha.obj" + "model" "models/outdoors/tram/haha.lwo" +} + +entityDef genmodel_outdoors_tram_test +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/outdoors/tram/test.obj" + "model" "models/outdoors/tram/test.lwo" +} + +entityDef genmodel_outdoors_tram_tram_brokentrack +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/outdoors/tram/tram_brokentrack.obj" + "model" "models/outdoors/tram/tram_brokentrack.lwo" +} + +entityDef genmodel_outdoors_tram_tram_door2 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/outdoors/tram/tram_door2.obj" + "model" "models/outdoors/tram/tram_door2.lwo" +} + +entityDef genmodel_outdoors_tram_tram_door3 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/outdoors/tram/tram_door3.obj" + "model" "models/outdoors/tram/tram_door3.lwo" +} + +entityDef genmodel_outdoors_tram_tram_door_noglass +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/outdoors/tram/tram_door_noglass.obj" + "model" "models/outdoors/tram/tram_door_noglass.lwo" +} + +entityDef genmodel_patj_hell_vortex +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/patj/hell_vortex.obj" + "model" "models/patj/hell_vortex.lwo" +} + +entityDef genmodel_patj_meteor1 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/patj/meteor1.obj" + "model" "models/patj/meteor1.lwo" +} + +entityDef genmodel_patj_meteor2 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/patj/meteor2.obj" + "model" "models/patj/meteor2.lwo" +} + +entityDef genmodel_patj_meteor3 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/patj/meteor3.obj" + "model" "models/patj/meteor3.lwo" +} + +entityDef genmodel_patj_meteor_huge +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/patj/meteor_huge.obj" + "model" "models/patj/meteor_huge.lwo" +} + +entityDef genmodel_patj_wallmonitor1 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/patj/wallmonitor1.obj" + "model" "models/patj/wallmonitor1.lwo" +} + +entityDef genmodel_seneca_reactor_reactorlaser1 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/seneca/reactor/reactorlaser1.obj" + "model" "models/seneca/reactor/reactorlaser1.lwo" +} + +entityDef genmodel_seneca_reactor_reactorspinner +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/seneca/reactor/reactorspinner.obj" + "model" "models/seneca/reactor/reactorspinner.ase" +} + +entityDef genmodel_seneca_reactor_reactortube +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/seneca/reactor/reactortube.obj" + "model" "models/seneca/reactor/reactortube.ase" +} + +entityDef genmodel_seneca_xianroom_xbridge1 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/seneca/xianroom/xbridge1.obj" + "model" "models/seneca/xianroom/xbridge1.lwo" +} + +entityDef genmodel_seneca_xianroom_xbridge2 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/seneca/xianroom/xbridge2.obj" + "model" "models/seneca/xianroom/xbridge2.lwo" +} + +entityDef genmodel_seneca_xianroom_xbridge3a +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/seneca/xianroom/xbridge3a.obj" + "model" "models/seneca/xianroom/xbridge3a.lwo" +} + +entityDef genmodel_seneca_xianroom_xbridge3a2 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/seneca/xianroom/xbridge3a2.obj" + "model" "models/seneca/xianroom/xbridge3a2.lwo" +} + +entityDef genmodel_seneca_xianroom_xianroom1 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/seneca/xianroom/xianroom1.obj" + "model" "models/seneca/xianroom/xianroom1.lwo" +} + +entityDef genmodel_ted_erebus2_erebus_deb2 +{ + "inherit" "misc_model" + "proxymodel" "_tb/models/ted/erebus2/erebus_deb2.obj" + "model" "models/ted/erebus2/erebus_deb2.ase" +} + diff --git a/neo/framework/Common_mapconvert.cpp b/neo/framework/Common_mapconvert.cpp index 33c63489..a1701e58 100644 --- a/neo/framework/Common_mapconvert.cpp +++ b/neo/framework/Common_mapconvert.cpp @@ -739,6 +739,65 @@ CONSOLE_COMMAND( convertMapToValve220, "Convert .map file to the Valve 220 map f common->SetRefreshOnPrint( false ); } +CONSOLE_COMMAND( checkMapsForBrushEntities, "List all brush entities in all .map files", idCmdSystem::ArgCompletion_MapNameNoJson ) +{ + //int totalImagesCount = 0; + + idFileList* files = fileSystem->ListFilesTree( "maps/game", ".map", true, true ); + + idDict classTypeOverview; + + for( int f = 0; f < files->GetList().Num(); f++ ) + { + idStr mapName = files->GetList()[ f ]; + + idMapFile map; + if( map.Parse( mapName, true, false ) ) + { + map.ClassifyEntitiesForTrenchBroom( classTypeOverview ); + } + } + + fileSystem->FreeFileList( files ); + + int n = classTypeOverview.GetNumKeyVals(); + + idLib::Printf( "BrushClasses:\n" ); + for( int i = 0; i < n; i++ ) + { + const idKeyValue* kv = classTypeOverview.GetKeyVal( i ); + + if( kv->GetValue() == "BrushClass" ) + { + idLib::Printf( "'%s'\n", kv->GetKey().c_str() ); + } + } + + /* + idLib::Printf( "\nPointClasses:\n" ); + for( int i = 0; i < n; i++ ) + { + const idKeyValue* kv = classTypeOverview.GetKeyVal( i ); + + if( kv->GetValue() == "PointClass" ) + { + idLib::Printf( "'%s'\n", kv->GetKey().c_str() ); + } + } + */ + + idLib::Printf( "\nMixedClasses:\n" ); + for( int i = 0; i < n; i++ ) + { + const idKeyValue* kv = classTypeOverview.GetKeyVal( i ); + + if( kv->GetValue() == "Mixed" ) + { + idLib::Printf( "'%s'\n", kv->GetKey().c_str() ); + } + } +} + CONSOLE_COMMAND( convertMapQuakeToDoom, "Convert Quake .map in Valve 220 map format for Doom 3 BFG", idCmdSystem::ArgCompletion_MapNameNoJson ) { diff --git a/neo/framework/DeclManager.cpp b/neo/framework/DeclManager.cpp index ad358fd9..5d3adc6c 100644 --- a/neo/framework/DeclManager.cpp +++ b/neo/framework/DeclManager.cpp @@ -2225,21 +2225,31 @@ void idDeclManagerLocal::ExportEntityDefsToTrenchBroom_f( const idCmdArgs& args idStrList solidClassNames; solidClassNames.AddUnique( "worldspawn" ); + solidClassNames.AddUnique( "func_aas_obstacle" ); solidClassNames.AddUnique( "func_aas_portal" ); + solidClassNames.AddUnique( "func_clipmodel" ); + solidClassNames.AddUnique( "func_damagable" ); solidClassNames.AddUnique( "func_forcefield" ); solidClassNames.AddUnique( "func_fracture" ); solidClassNames.AddUnique( "func_liquid" ); - solidClassNames.AddUnique( "func_plat" ); - solidClassNames.AddUnique( "func_rotating" ); solidClassNames.AddUnique( "func_splinemover" ); - solidClassNames.AddUnique( "func_static" ); - solidClassNames.AddUnique( "func_mover" ); - solidClassNames.AddUnique( "func_door" ); - solidClassNames.AddUnique( "moveable_base" ); + solidClassNames.AddUnique( "func_pendulum" ); + solidClassNames.AddUnique( "func_plat" ); + + solidClassNames.AddUnique( "moveable_base_brick" ); + solidClassNames.AddUnique( "moveable_guardian_brick" ); + solidClassNames.AddUnique( "trigger_" ); + // mixed classes that need extra _model pendants + solidClassNames.AddUnique( "func_door" ); + solidClassNames.AddUnique( "func_mover" ); + solidClassNames.AddUnique( "func_rotating" ); + + solidClassNames.AddUnique( "func_static" ); // misc_model + for( int f = 0; f < filenames.Num(); f++ ) { int totalEntitiesCount = 0; @@ -2515,7 +2525,9 @@ void idDeclManagerLocal::ExportEntityDefsToTrenchBroom_f( const idCmdArgs& args if( idStr::Icmp( decl->GetName(), "light" ) == 0 || idStr::Icmp( decl->GetName(), "misc_model" ) == 0 || + idStr::Icmp( decl->GetName(), "func_bobbing_model" ) == 0 || idStr::Icmp( decl->GetName(), "func_door_model" ) == 0 || + idStr::Icmp( decl->GetName(), "func_mover_model" ) == 0 || idStr::Icmp( decl->GetName(), "func_mover_amodel" ) == 0 || idStr::Icmp( decl->GetName(), "func_plat_model" ) == 0 || idStr::Icmp( decl->GetName(), "func_rotating_model" ) == 0 ) @@ -2604,7 +2616,10 @@ void idDeclManagerLocal::ExportEntityDefsToTrenchBroom_f( const idCmdArgs& args if( idStr::Icmp( decl->GetName(), "light" ) != 0 && idStr::Icmp( decl->GetName(), "misc_model" ) != 0 && + idStr::Icmp( decl->GetName(), "func_bobbing_model" ) != 0 && idStr::Icmp( decl->GetName(), "func_door_model" ) != 0 && + idStr::Icmp( decl->GetName(), "func_elevator_model" ) != 0 && + idStr::Icmp( decl->GetName(), "func_mover_model" ) != 0 && idStr::Icmp( decl->GetName(), "func_mover_amodel" ) != 0 && idStr::Icmp( decl->GetName(), "func_plat_model" ) != 0 && idStr::Icmp( decl->GetName(), "func_rotating_model" ) != 0 ) @@ -2649,7 +2664,10 @@ void idDeclManagerLocal::ExportEntityDefsToTrenchBroom_f( const idCmdArgs& args file->Printf( "model({ \"path\": \"%s\" }) ", exportedModelFileName.c_str() ); } else if( idStr::Icmp( decl->GetName(), "misc_model" ) == 0 || + idStr::Icmp( decl->GetName(), "func_bobbing_model" ) == 0 || idStr::Icmp( decl->GetName(), "func_door_model" ) == 0 || + idStr::Icmp( decl->GetName(), "func_elevator_model" ) == 0 || + idStr::Icmp( decl->GetName(), "func_mover_model" ) == 0 || idStr::Icmp( decl->GetName(), "func_mover_amodel" ) == 0 || idStr::Icmp( decl->GetName(), "func_plat_model" ) == 0 || idStr::Icmp( decl->GetName(), "func_rotating_model" ) == 0 ) @@ -2660,7 +2678,9 @@ void idDeclManagerLocal::ExportEntityDefsToTrenchBroom_f( const idCmdArgs& args else if( idStr::Icmp( decl->GetName(), "light" ) == 0 ) { // default light sprite for TB editor sprites branch - file->Printf( "model({ \"path\": \"sprites/light-bulb.png\", \"scale\": 0.03125 }) " ); + //file->Printf( "model({ \"path\": \"sprites/light-bulb.png\", \"scale\": 0.03125 }) " ); + + file->Printf( "model({{\n\tproxymodel -> { \"path\": proxymodel },\n\t{ \"path\": \"sprites/light-bulb.png\", \"scale\": 0.03125 }\n}})" ); } else if( idStr::Icmp( decl->GetName(), "speaker" ) == 0 ) { @@ -3149,7 +3169,7 @@ void idDeclManagerLocal::ExportModelsToTrenchBroom_f( const idCmdArgs& args ) // make an OBJ version of the model for TrenchBroom idRenderModel* renderModel = renderModelManager->FindModel( modelName ); -#if 1 +#if 0 if( idStr::Icmpn( modelName, "models/mapobjects", 17 ) != 0 ) { continue; diff --git a/neo/idlib/MapFile.cpp b/neo/idlib/MapFile.cpp index 2bbd000f..84f21c03 100644 --- a/neo/idlib/MapFile.cpp +++ b/neo/idlib/MapFile.cpp @@ -2973,13 +2973,17 @@ bool idMapFile::ConvertToValve220Format() ent->epairs.Set( "proxymodel", model ); } #endif + + // TODO if light purge flare patches + + bool isBrushModel = ( ent->GetNumPrimitives() > 0 ) && ( idStr::Icmp( model.c_str(), name.c_str() ) == 0 ); + // is this oldschool brushes & patches? - if( ent->GetNumPrimitives() > 0 ) + if( isBrushModel ) { bool removedOrigin = false; -#if 1 if( !transform.IsIdentity() && - idStr::Icmp( classname, "func_static" ) != 0 && + //idStr::Icmp( classname, "func_static" ) != 0 && idStr::Icmp( classname, "light" ) != 0 ) { ent->epairs.Delete( "origin" ); @@ -2989,12 +2993,6 @@ bool idMapFile::ConvertToValve220Format() removedOrigin = true; } -#endif - - if( idStr::Icmp( classname, "func_static" ) == 0 && idStr::Icmp( model.c_str(), classname.c_str() ) == 0 ) - { - ent->epairs.Delete( "model" ); - } // convert brushes for( int i = 0; i < ent->GetNumPrimitives(); i++ ) @@ -3052,10 +3050,18 @@ bool idMapFile::ConvertToValve220Format() { ent->epairs.Set( "classname", "misc_model" ); } + else if( idStr::Icmp( classname, "func_bobbing" ) == 0 && idStr::Icmp( model.c_str(), classname.c_str() ) != 0 ) + { + ent->epairs.Set( "classname", "func_bobbing_model" ); + } else if( idStr::Icmp( classname, "func_door" ) == 0 && idStr::Icmp( model.c_str(), classname.c_str() ) != 0 ) { ent->epairs.Set( "classname", "func_door_model" ); } + else if( idStr::Icmp( classname, "func_elevator" ) == 0 && idStr::Icmp( model.c_str(), classname.c_str() ) != 0 ) + { + ent->epairs.Set( "classname", "func_elevator_model" ); + } else if( idStr::Icmp( classname, "func_mover" ) == 0 && idStr::Icmp( model.c_str(), classname.c_str() ) != 0 ) { ent->epairs.Set( "classname", "func_mover_amodel" ); @@ -3152,6 +3158,57 @@ bool idMapFile::ConvertToValve220Format() return true; } +void idMapFile::ClassifyEntitiesForTrenchBroom( idDict& classTypeOverview ) +{ + int count = GetNumEntities(); + for( int j = 0; j < count; j++ ) + { + idMapEntity* ent = GetEntity( j ); + if( ent ) + { + idStr classname = ent->epairs.GetString( "classname" ); + idStr name = ent->epairs.GetString( "name" ); + + const idKeyValue* modelPair = ent->epairs.FindKey( "model" ); + idStr model = ent->epairs.GetString( "model" ); + + bool isBrushModel = ( ent->GetNumPrimitives() > 0 ) && ( idStr::Icmp( model.c_str(), name.c_str() ) == 0 ); + + // is this oldschool brushes & patches? + if( isBrushModel ) + { + const idKeyValue* kv = classTypeOverview.FindKey( classname ); + if( kv && kv->GetValue().Length() ) + { + if( idStr::Icmp( kv->GetValue().c_str(), "PointClass" ) == 0 && idStr::Icmp( kv->GetValue().c_str(), "Mixed" ) != 0 ) + { + classTypeOverview.Set( classname, "Mixed" ); + } + } + else + { + classTypeOverview.Set( classname, "BrushClass" ); + } + } + else + { + const idKeyValue* kv = classTypeOverview.FindKey( classname ); + if( kv && kv->GetValue().Length() ) + { + if( idStr::Icmp( kv->GetValue().c_str(), "BrushClass" ) == 0 && idStr::Icmp( kv->GetValue().c_str(), "Mixed" ) != 0 ) + { + classTypeOverview.Set( classname, "Mixed" ); + } + } + else + { + classTypeOverview.Set( classname, "PointClass" ); + } + } + } + } +} + bool idMapFile::ConvertQuakeToDoom() { idDict classTypeOverview; @@ -3234,8 +3291,11 @@ bool idMapFile::ConvertQuakeToDoom() if( ent->GetNumPrimitives() > 0 ) { - const idKeyValue* namePair = ent->epairs.FindKey( "name" ); - ent->epairs.Set( "model", namePair->GetValue() ); + if( j > 0 ) + { + const idKeyValue* namePair = ent->epairs.FindKey( "name" ); + ent->epairs.Set( "model", namePair->GetValue() ); + } // map Wad brushes names to proper Doom 3 compatible material names for( int i = 0; i < ent->GetNumPrimitives(); i++ ) diff --git a/neo/idlib/MapFile.h b/neo/idlib/MapFile.h index c5105b18..a1a492f8 100644 --- a/neo/idlib/MapFile.h +++ b/neo/idlib/MapFile.h @@ -504,6 +504,8 @@ public: bool ConvertToPolygonMeshFormat(); bool ConvertToValve220Format(); + void ClassifyEntitiesForTrenchBroom( idDict& classTypeOverview ); + // converts Wad texture names to valid Doom 3 materials and gives every entity a unique name bool ConvertQuakeToDoom(); // RB end