From bc7567fd30943c14f59c4de501d04201af458b2b Mon Sep 17 00:00:00 2001 From: Denis Pauk Date: Sat, 26 Oct 2024 18:27:17 +0300 Subject: [PATCH] game: Add Dawn of Darkness entities description --- CMakeLists.txt | 1 + Makefile | 1 + README.md | 3 + src/game/g_obj.c | 132 ++++++++++++++++++++++ src/game/savegame/tables/gamefunc_decs.h | 2 + src/game/savegame/tables/gamefunc_list.h | 2 + src/game/savegame/tables/spawnfunc_decs.h | 3 + src/game/savegame/tables/spawnfunc_list.h | 3 + src/server/sv_cmd.c | 12 +- stuff/models/entity.dat | 120 ++++++++++++++++++++ 10 files changed, 277 insertions(+), 2 deletions(-) create mode 100644 src/game/g_obj.c diff --git a/CMakeLists.txt b/CMakeLists.txt index ffa07bae..2fba8fc9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -355,6 +355,7 @@ set(Game-Source ${GAME_SRC_DIR}/g_newtarg.c ${GAME_SRC_DIR}/g_newtrig.c ${GAME_SRC_DIR}/g_newweap.c + ${GAME_SRC_DIR}/g_obj.c ${GAME_SRC_DIR}/g_phys.c ${GAME_SRC_DIR}/g_spawn.c ${GAME_SRC_DIR}/g_sphere.c diff --git a/Makefile b/Makefile index df9d1566..d26b013f 100644 --- a/Makefile +++ b/Makefile @@ -965,6 +965,7 @@ GAME_OBJS_ = \ src/game/g_newtarg.o \ src/game/g_newtrig.o \ src/game/g_newweap.o \ + src/game/g_obj.o \ src/game/g_phys.o \ src/game/g_spawn.o \ src/game/g_sphere.o \ diff --git a/README.md b/README.md index b65f04a3..8ee0642a 100644 --- a/README.md +++ b/README.md @@ -111,6 +111,9 @@ Games: * SDK: * SDK: * SDK: +* Dawn of Darkness: + * Docs: + * Demo: [Episode 1](https://www.moddb.com/mods/dawn-of-darkness1/downloads/dawn-of-darkness-episode-1) Games check videos: diff --git a/src/game/g_obj.c b/src/game/g_obj.c new file mode 100644 index 00000000..4dd27663 --- /dev/null +++ b/src/game/g_obj.c @@ -0,0 +1,132 @@ +/* + * Copyright (C) 1997-2001 Id Software, Inc. + * Copyright (c) ZeniMax Media Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or (at + * your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA + * 02111-1307, USA. + * + * ======================================================================= + * + * Objects implementations + * + * ======================================================================= + */ + +#include "header/local.h" + +/* + * QUAKED object_flame1 (1 .5 .5) (-3 -3 -6) (3 3 11) + * + * "sounds" + * 0) no sound (default) + * 1) sound torch + * 2) sound campfire + */ +void +object_flame1_think(edict_t *self) +{ + self->s.frame = (self->s.frame + 1) % 64; + self->nextthink = level.time + FRAMETIME; +} + +void +SP_object_flame1(edict_t *self) +{ + self->movetype = MOVETYPE_NONE; + self->solid = SOLID_NOT; + self->think = object_flame1_think; + self->nextthink = level.time + FRAMETIME; + + self->s.frame = 0; + + switch (self->sounds) { + case 1: + self->s.sound = gi.soundindex("objects/fire/torchburn.wav"); + break; + case 2: + self->s.sound = gi.soundindex("objects/fire/campfire.wav"); + break; + default: + self->s.sound = 0; + break; + } + + gi.linkentity(self); +} + +/* + * QUAKED object_big_fire (1 .5 .5) (-3 -3 -6) (3 3 11) + * + * "sounds" + * 0) no sound (default) + * 1) sound campfire + */ +void +object_big_fire_think(edict_t *self) +{ + self->s.frame = (self->s.frame + 1) % 60; + self->nextthink = level.time + FRAMETIME; +} + +void +SP_object_big_fire(edict_t *self) +{ + self->movetype = MOVETYPE_NONE; + self->solid = SOLID_NOT; + self->think = object_big_fire_think; + self->nextthink = level.time + FRAMETIME; + + self->s.frame = 0; + + switch (self->sounds) { + case 1: + self->s.sound = gi.soundindex("objects/fire/torchburn.wav"); + break; + default: + self->s.sound = 0; + break; + } + + gi.linkentity(self); +} + +/* + * QUAKED object_campfire (1 .5 .5) (-10 -10 -5) (10 10 5) + * + * + * "sounds" + * 0) no sound (default) + * 1) sound campfire +*/ +void +SP_object_campfire(edict_t *self) +{ + self->movetype = MOVETYPE_NONE; + self->solid = SOLID_NOT; + + self->s.frame = 0; + + switch (self->sounds) { + case 1: + self->s.sound = gi.soundindex("objects/fire/campfire.wav"); + break; + default: + self->s.sound = 0; + break; + } + + gi.linkentity(self); +} diff --git a/src/game/savegame/tables/gamefunc_decs.h b/src/game/savegame/tables/gamefunc_decs.h index 7e526dc6..205810c3 100644 --- a/src/game/savegame/tables/gamefunc_decs.h +++ b/src/game/savegame/tables/gamefunc_decs.h @@ -1088,6 +1088,8 @@ extern void mutant_walk ( edict_t * self ) ; extern void mutant_walk_loop ( edict_t * self ) ; extern void nuke_bounce ( edict_t * ent , edict_t * other , cplane_t * plane , csurface_t * surf ) ; extern void nuke_die ( edict_t * self , edict_t * inflictor , edict_t * attacker , int damage , vec3_t point ) ; +extern void object_big_fire_think ( edict_t * ent ) ; +extern void object_flame1_think ( edict_t * ent ) ; extern void object_repair_dead ( edict_t * ent ) ; extern void object_repair_fx ( edict_t * ent ) ; extern void object_repair_sparks ( edict_t * ent ) ; diff --git a/src/game/savegame/tables/gamefunc_list.h b/src/game/savegame/tables/gamefunc_list.h index 18fc4de0..12d347aa 100644 --- a/src/game/savegame/tables/gamefunc_list.h +++ b/src/game/savegame/tables/gamefunc_list.h @@ -1073,6 +1073,8 @@ {"mutant_walk_loop", (byte *)mutant_walk_loop}, {"nuke_bounce", (byte *)nuke_bounce}, {"nuke_die", (byte *)nuke_die}, +{"object_big_fire_think", (byte *)object_big_fire_think}, +{"object_flame1_think", (byte *)object_flame1_think}, {"object_repair_dead", (byte *)object_repair_dead}, {"object_repair_fx", (byte *)object_repair_fx}, {"object_repair_sparks", (byte *)object_repair_sparks}, diff --git a/src/game/savegame/tables/spawnfunc_decs.h b/src/game/savegame/tables/spawnfunc_decs.h index ae01c9aa..4981a760 100644 --- a/src/game/savegame/tables/spawnfunc_decs.h +++ b/src/game/savegame/tables/spawnfunc_decs.h @@ -155,6 +155,9 @@ extern void SP_monster_widow(edict_t * self); extern void SP_monster_widow2(edict_t * self); extern void SP_monster_wizard(edict_t * self); extern void SP_monster_zombie(edict_t * self); +extern void SP_object_big_fire ( edict_t * ent ) ; +extern void SP_object_campfire ( edict_t * ent ) ; +extern void SP_object_flame1 ( edict_t * ent ) ; extern void SP_object_repair ( edict_t * ent ) ; extern void SP_path_corner(edict_t * self); extern void SP_point_combat(edict_t * self); diff --git a/src/game/savegame/tables/spawnfunc_list.h b/src/game/savegame/tables/spawnfunc_list.h index 75a49ad9..d1e08128 100644 --- a/src/game/savegame/tables/spawnfunc_list.h +++ b/src/game/savegame/tables/spawnfunc_list.h @@ -162,6 +162,9 @@ {"monster_widow2", SP_monster_widow2}, {"monster_wizard", SP_monster_wizard}, {"monster_zombie", SP_monster_zombie}, +{"object_big_fire", SP_object_big_fire}, +{"object_campfire", SP_object_campfire}, +{"object_flame1", SP_object_flame1}, {"path_corner", SP_path_corner}, {"point_combat", SP_point_combat}, {"rotating_light", SP_rotating_light}, diff --git a/src/server/sv_cmd.c b/src/server/sv_cmd.c index e3bfab8d..827f145f 100644 --- a/src/server/sv_cmd.c +++ b/src/server/sv_cmd.c @@ -175,7 +175,7 @@ SV_DemoMap_f(void) static void SV_GameMap_f(void) { - char *map; + char *map, mapvalue[MAX_QPATH]; int i; client_t *cl; qboolean *savedInuse; @@ -186,12 +186,20 @@ SV_GameMap_f(void) return; } + if (strlen(Cmd_Argv(1)) >= sizeof(mapvalue)) + { + Com_Printf("gamemap is too long\n"); + return; + } + + Com_DPrintf("%s(%s)\n", __func__, Cmd_Argv(1)); FS_CreatePath(va("%s/save/current/", FS_Gamedir())); /* check for clearing the current savegame */ - map = Cmd_Argv(1); + strcpy(mapvalue, Cmd_Argv(1)); + map = mapvalue; if (map[0] == '*') { diff --git a/stuff/models/entity.dat b/stuff/models/entity.dat index ebb4f099..6cb9961a 100644 --- a/stuff/models/entity.dat +++ b/stuff/models/entity.dat @@ -899,3 +899,123 @@ trigger_playerusepuzzle||1.0|1.0|1.0|general|0.0|0.0|0.0|0.0|0.0|0.0|shadow|0|0. trigger_puzzle||1.0|1.0|1.0|general|-8|-8|-8|8|8|8|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Relay that requires puzzle piece|.5|.5|.5 trigger_quake||1.0|1.0|1.0|general|0.0|0.0|0.0|0.0|0.0|0.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Earthquake|0.5|0.5|0.5 trigger_quit_to_menu||1.0|1.0|1.0|general|0.0|0.0|0.0|0.0|0.0|0.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Quit to menu|.5|.5|.5 + +// Dawn of Darkness +ammo_arrows|models/weapons/ammo/g_arrow.md2|1.0|1.0|1.0|general|-16.0|-16.0|-16.0|16.0|16.0|16.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Arrows Ammo|0.3|0.3|1.0 +ammo_bolts|models/weapons/ammo/g_bolt.md2|1.0|1.0|1.0|general|-16.0|-16.0|-16.0|16.0|16.0|16.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Bolts Ammo|0.3|0.3|1.0 +ammo_dballs|models/weapons/ammo/g_dballs.md2|1.0|1.0|1.0|general|-16.0|-16.0|-16.0|16.0|16.0|16.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Dragon Balls Ammo|0.3|0.3|1.0 +ammo_ebolts|models/weapons/ammo/g_ebolt.md2|1.0|1.0|1.0|general|-16.0|-16.0|-16.0|16.0|16.0|16.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Explosive Bolts|0.3|0.3|1.0 +ammo_farrows|models/weapons/ammo/g_farrow.md2|1.0|1.0|1.0|general|-16.0|-16.0|-16.0|16.0|16.0|16.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Fire Arrows|0.3|0.3|1.0 +animal_camel|models/animals/camel.md2|1.0|1.0|1.0|general|-8.0|-16.0|-20.0|8.0|16.0|0.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Camel|1.0|0.0|0.0 +animal_fish|models/animals/fish1.md2|1.0|1.0|1.0|general|-4.0|-8.0|-4.0|4.0|8.0|4.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Fish|1.0|0.0|0.0 +animal_goat|models/animals/goat.md2|1.0|1.0|1.0|general|-8.0|-8.0|-8.0|8.0|8.0|8.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Goat|1.0|0.0|0.0 +animal_vulture|models/animals/vulture.md2|1.0|1.0|1.0|general|-8.0|-16.0|-12.0|8.0|16.0|12.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Vulture|1.0|0.0|0.0 +cam_aim||1.0|1.0|1.0|general|-8.0|-8.0|-8.0|8.0|8.0|8.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Cam Aim|0.5|0.5|0.5 +cam_position||1.0|1.0|1.0|general|-8.0|-8.0|-8.0|8.0|8.0|8.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Cam Position|0.5|0.5|0.5 +corpse_male1|models/npcs/mcorps.md2|1.0|1.0|1.0|general|-6.0|-6.0|-34.0|6.0|6.0|27.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Male Corpse 1|1.0|0.5|0.5 +corpse_male2|models/npcs/mcorps.md2|1.0|1.0|1.0|general|-18.0|-11.0|-30.0|16.0|3.0|-13.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Male Corpse 2|1.0|0.5|0.5 +corpse_male3|models/npcs/mcorps.md2|1.0|1.0|1.0|general|-30.0|-10.0|-30.0|32.0|10.0|-12.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Male Corpse 3|1.0|0.5|0.5 +corpse_male4|models/npcs/mcorps.md2|1.0|1.0|1.0|general|-19.0|-11.0|-30.0|17.0|11.0|0.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Male Corpse 4|1.0|0.5|0.5 +corpse_male5|models/npcs/mcorps.md2|1.0|1.0|1.0|general|-27.0|-16.0|-29.0|26.0|11.0|-11.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Male Corpse 5|1.0|0.5|0.5 +corpse_male6|models/npcs/mcorps.md2|1.0|1.0|1.0|general|-30.0|-14.0|-30.0|30.0|14.0|17.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Male Corpse 6|1.0|0.5|0.5 +corpse_male7|models/npcs/mcorps.md2|1.0|1.0|1.0|general|-8.0|-12.0|-34.0|5.0|12.0|31.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Male Corpse 7|1.0|0.5|0.5 +effect_ripple|models/effects/ripple.md2|1.0|1.0|1.0|general|-8.0|-8.0|-8.0|8.0|8.0|8.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Effects Ripple|1.0|1.0|0.0 +effect_spirting||1.0|1.0|1.0|general|-8.0|-8.0|-8.0|8.0|8.0|8.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Effects Spirting|1.0|1.0|0.0 +func_dig||1.0|1.0|1.0|general|0|0|0|0|0|0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Diggable brush|0.0|0.5|0.8 +item_armor||1.0|1.0|1.0|general|-16.0|-16.0|-16.0|16.0|16.0|16.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Ancestral Armor|0.3|0.3|1.0 +item_b_flask|models/objects/flask.md2|1.0|1.0|1.0|general|-4.0|-4.0|-6.0|4.0|4.0|6.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Bile Flask|0.3|0.3|1.0 +item_bl_flask|models/objects/flask.md2|1.0|1.0|1.0|general|-4.0|-4.0|-6.0|4.0|4.0|6.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Blur Flask|0.3|0.3|1.0 +item_book1|models/objects/book1.md2|1.0|1.0|1.0|general|-4.0|-6.0|-2.0|4.0|6.0|2.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Book|0.3|0.3|1.0 +item_bottle1|models/objects/bottle1.md2|1.0|1.0|1.0|general|-2.0|-2.0|-6.0|2.0|2.0|6.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Bottle|0.3|0.3|1.0 +item_bowl|models/objects/bowl.md2|1.0|1.0|1.0|general|-8.0|-8.0|-5.0|8.0|8.0|5.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Bowl|0.3|0.3|1.0 +item_bread|models/objects/bread.md2|1.0|1.0|1.0|general|-4.0|-6.0|-4.0|4.0|6.0|4.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Bread|0.3|0.3|1.0 +item_h_flask|models/objects/flask.md2|1.0|1.0|1.0|general|-4.0|-4.0|-6.0|4.0|4.0|6.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Health Flask|0.3|0.3|1.0 +item_leather||1.0|1.0|1.0|general|-16.0|-16.0|-16.0|16.0|16.0|16.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Leather Armor|0.3|0.3|1.0 +item_o_flask|models/objects/flask.md2|1.0|1.0|1.0|general|-4.0|-4.0|-6.0|4.0|4.0|6.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Oil Flask|0.3|0.3|1.0 +item_p_flask|models/objects/flask.md2|1.0|1.0|1.0|general|-4.0|-4.0|-6.0|4.0|4.0|6.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Poison Flask|0.3|0.3|1.0 +item_q_flask|models/objects/flask.md2|1.0|1.0|1.0|general|-4.0|-4.0|-6.0|4.0|4.0|6.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Quickness Flask|0.3|0.3|1.0 +item_r_flask|models/objects/flask.md2|1.0|1.0|1.0|general|-4.0|-4.0|-6.0|4.0|4.0|6.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Rejuvination Flask|0.3|0.3|1.0 +item_scalemail||1.0|1.0|1.0|general|-16.0|-16.0|-16.0|16.0|16.0|16.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Scalemail Armor|0.3|0.3|1.0 +item_shovel|models/objects/shovel.md2|1.0|1.0|1.0|general|-6.0|-6.0|-18.0|6.0|6.0|18.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Shovel|0.3|0.3|1.0 +item_torch||1.0|1.0|1.0|general|-4.0|-4.0|-6.0|4.0|4.0|6.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Torch|0.3|0.3|1.0 +item_vase1|models/objects/vase1.md2|1.0|1.0|1.0|general|-6.0|-6.0|-8.0|6.0|6.0|8.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Vase|0.3|0.3|1.0 +item_w_flask|models/objects/flask.md2|1.0|1.0|1.0|general|-4.0|-4.0|-6.0|4.0|4.0|6.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Water Flask|0.3|0.3|1.0 +key_glass|models/objects/key.md2|1.0|1.0|1.0|general|-2.0|-2.0|-4.0|2.0|2.0|4.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Glass Key|0.3|0.3|1.0 +key_gold|models/objects/key.md2|1.0|1.0|1.0|general|-2.0|-2.0|-4.0|2.0|2.0|4.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Gold Key|0.3|0.3|1.0 +key_metal|models/objects/key.md2|1.0|1.0|1.0|general|-2.0|-2.0|-4.0|2.0|2.0|4.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Metal Key|0.3|0.3|1.0 +key_silver|models/objects/key.md2|1.0|1.0|1.0|general|-2.0|-2.0|-4.0|2.0|2.0|4.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Silver Key|0.3|0.3|1.0 +keys_xxx||1.0|1.0|1.0|general|-16|-16|-16|16|16|16|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none||.5|.3|0 +monster_agath|models/monsters/agath.md2|1.0|1.0|1.0|general|-16.0|-16.0|-24.0|16.0|16.0|32.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Agathodaemon|1.0|0.0|0.0 +monster_apprentice|models/monsters/necro.md2|1.0|1.0|1.0|general|-16.0|-16.0|-24.0|16.0|16.0|32.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Apprentice|1.0|0.0|0.0 +monster_captain|models/monsters/captain.md2|1.0|1.0|1.0|general|-16.0|-16.0|-24.0|16.0|16.0|32.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Captain|1.0|0.0|0.0 +monster_carnivean|models/monsters/carniv.md2|1.0|1.0|1.0|general|-16.0|-16.0|-24.0|16.0|16.0|32.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Carnivean|1.0|0.0|0.0 +monster_crescent|models/monsters/crescent.md2|1.0|1.0|1.0|general|-16.0|-16.0|-24.0|16.0|16.0|32.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Crescent|1.0|0.0|0.0 +monster_dweller|models/monsters/dweller.md2|1.0|1.0|1.0|general|-16.0|-16.0|-24.0|16.0|16.0|32.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Dweller|1.0|0.0|0.0 +monster_hellhound|models/monsters/hhound.md2|1.0|1.0|1.0|general|-15|-15|-23|15|15|16|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none||1|0|0 +monster_merc_axe|models/monsters/merc_a.md2|1.0|1.0|1.0|general|-16.0|-16.0|-24.0|16.0|16.0|32.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Mercenary Axe|1.0|0.0|0.0 +monster_merc_sword|models/monsters/merc_s.md2|1.0|1.0|1.0|general|-16.0|-16.0|-24.0|16.0|16.0|32.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Mercenary Sword|1.0|0.0|0.0 +monster_merc_xbow|models/monsters/merc_x.md2|1.0|1.0|1.0|general|-16.0|-16.0|-24.0|16.0|16.0|32.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Mercenary Crossbow|1.0|0.0|0.0 +monster_necromancer|models/monsters/necro.md2|1.0|1.0|1.0|general|-16.0|-16.0|-24.0|16.0|16.0|32.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Necromancer|1.0|0.0|0.0 +monster_outrider|models/monsters/outrider.md2|1.0|1.0|1.0|general|-16.0|-16.0|-24.0|16.0|16.0|32.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Outrider|1.0|0.0|0.0 +monster_pilot|models/monsters/crescent.md2|1.0|1.0|1.0|general|-16.0|-16.0|-24.0|16.0|16.0|32.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Pilot|1.0|0.0|0.0 +monster_scout|models/monsters/scout.md2|1.0|1.0|1.0|general|-16.0|-16.0|-24.0|16.0|16.0|32.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Scout|1.0|0.0|0.0 +monster_sultan|models/npcs/insnvlg.md2|1.0|1.0|1.0|general|-16.0|-16.0|-24.0|16.0|16.0|32.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Sultan|1.0|0.0|0.0 +monster_tenebrion|models/monsters/teneb.md2|1.0|1.0|1.0|general|-16.0|-16.0|-24.0|16.0|16.0|32.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Tenebrion|1.0|0.0|0.0 +monster_tormentor|models/monsters/torment.md2|1.0|1.0|1.0|general|-16.0|-16.0|-24.0|16.0|16.0|32.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Tormentor|1.0|0.0|0.0 +monster_wraith|models/monsters/wraith.md2|1.0|1.0|1.0|general|-16.0|-16.0|-24.0|16.0|16.0|32.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Wraith|1.0|0.0|0.0 +npc_boy|models/npcs/boy.md2|1.0|1.0|1.0|general|-12.0|-12.0|-24.0|12.0|12.0|32.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|NPC Boy|1.0|0.5|0.0 +npc_femvilgr|models/npcs/femvilg.md2|1.0|1.0|1.0|general|-12.0|-12.0|-24.0|12.0|12.0|32.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|NPC Female Villager|1.0|0.5|0.0 +npc_fslave|models/npcs/fslave.md2|1.0|1.0|1.0|general|-12.0|-12.0|-24.0|12.0|12.0|32.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|NPC Female Slave|1.0|0.5|0.0 +npc_girl|models/npcs/girl.md2|1.0|1.0|1.0|general|-12.0|-12.0|-24.0|12.0|12.0|32.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|NPC Girl|1.0|0.5|0.0 +npc_insvilgr|models/npcs/insnvlg.md2|1.0|1.0|1.0|general|-12.0|-12.0|-24.0|12.0|12.0|32.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|NPC Insane Villager|1.0|0.5|0.0 +npc_malvilgr|models/npcs/malvilg.md2|1.0|1.0|1.0|general|-12.0|-12.0|-24.0|12.0|12.0|32.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|NPC Male Villager|1.0|0.5|0.0 +npc_moktosk|models/npcs/moktosk.md2|1.0|1.0|1.0|general|-12.0|-12.0|-24.0|12.0|12.0|32.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|NPC Moktar or Ratatosk|1.0|0.5|0.0 +npc_mslave|models/npcs/mslave.md2;models/npcs/pickaxe.md2|1.0|1.0|1.0|general|-12.0|-12.0|-24.0|12.0|12.0|32.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|NPC Male Slave|1.0|0.5|0.0 +npc_worker|models/npcs/mslave.md2|1.0|1.0|1.0|general|-12.0|-12.0|-24.0|12.0|12.0|32.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|NPC Worker|1.0|0.5|0.0 +object_banner|models/objects/banner.md2|1.0|1.0|1.0|general|-2.0|-4.0|-52.0|2.0|4.0|52.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Banner|1.0|0.0|0.0 +object_barrel|models/objects/barrel.md2|1.0|1.0|1.0|general|-10.0|-10.0|-14.0|10.0|10.0|14.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Barrel|0.3|0.3|1.0 +object_big_fire|models/objects/bigfire.md2|1.0|1.0|1.0|general|-10.0|-10.0|-9.0|10.0|10.0|4.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Big Fire|1.0|0.0|0.0 +object_campfire|models/objects/campfire.md2|1.0|1.0|1.0|general|-10.0|-10.0|-5.0|10.0|10.0|5.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Campfire|0.3|0.3|1.0 +object_cart||1.0|1.0|1.0|general|-20.0|-20.0|-20.0|20.0|20.0|20.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Cart|0.3|0.3|1.0 +object_cauldron|models/objects/cauldron.md2|1.0|1.0|1.0|general|-8.0|-11.0|-8.0|8.0|11.0|8.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Cauldron|0.3|0.3|1.0 +object_chest1|models/objects/chest1.md2|1.0|1.0|1.0|general|-7.0|-12.0|-7.0|7.0|12.0|7.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Chest|0.3|0.3|1.0 +object_demonorb|models/objects/demonorb.md2|1.0|1.0|1.0|general|-8|-8|-8|8|8|8|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none||1|0|0 +object_flag|models/objects/flag.md2|1.0|1.0|1.0|general|-20.0|-4.0|-8.0|20.0|4.0|8.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Flag|1.0|1.0|0.0 +object_flame1|models/objects/flame1.md2|1.0|1.0|1.0|general|-3.0|-3.0|-6.0|3.0|3.0|11.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Flame|1.0|1.0|0.0 +object_goyle1|models/objects/goyle.md2|1.0|1.0|1.0|general|-18|-18|-45|18|18|17|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none||1|.5|.5 +object_goyle2|models/objects/goyle.md2|1.0|1.0|1.0|general|-16|-16|-45|16|16|8|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none||1|.5|.5 +object_goyle3|models/objects/goyle.md2|1.0|1.0|1.0|general|-12|-12|-45|12|12|35|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none||1|.5|.5 +object_goyle4|models/objects/goyle.md2|1.0|1.0|1.0|general|-12|-12|-45|12|12|35|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none||1|.5|.5 +object_goyle5|models/objects/goyle.md2|1.0|1.0|1.0|general|-20|-20|-45|20|20|0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none||1|.5|.5 +object_pennant|models/objects/pennant.md2|1.0|1.0|1.0|general|-8.0|-50.0|-14.0|8.0|50.0|4.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Pennant|1.0|0.0|0.0 +object_statue|models/objects/statue.md2|1.0|1.0|1.0|general|-12.0|-12.0|-44.0|12.0|12.0|44.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Statue|1.0|0.0|0.0 +object_throne|models/objects/throne.md2|1.0|1.0|1.0|general|-22.0|-22.0|-35.0|22.0|22.0|35.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Throne|1.0|0.0|0.0 +object_torch|models/objects/torch.md2|1.0|1.0|1.0|general|-2.0|-3.0|-6.0|2.0|4.0|6.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Torch|1.0|1.0|0.0 +plant_deadtree1|models/plants/deadtree1.md2|1.0|1.0|1.0|general|-6.0|-6.0|-47.0|6.0|6.0|47.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Dead Tree 1|0.0|1.0|0.0 +plant_deadtree2|models/plants/deadtree2.md2|1.0|1.0|1.0|general|-6.0|-6.0|-40.0|6.0|6.0|45.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Dead Tree 2|0.0|1.0|0.0 +plant_deadtree3|models/plants/deadtree3.md2|1.0|1.0|1.0|general|-8.0|-8.0|-78.0|4.0|4.0|80.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Dead Tree 3|0.0|1.0|0.0 +plant_deadtree4|models/plants/deadtree4.md2|1.0|1.0|1.0|general|-8.0|-8.0|-80.0|8.0|8.0|84.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Dead Tree 4|0.0|1.0|0.0 +plant_plant1|models/plants/plant.md2|1.0|1.0|1.0|general|-12.0|-5.0|-14.0|11.0|6.0|13.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Plant 1|0.0|1.0|0.0 +plant_plant2|models/plants/plant.md2|1.0|1.0|1.0|general|-9.0|-9.0|-9.0|9.0|9.0|9.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Plant 2|0.0|1.0|0.0 +plant_plant3|models/plants/plant.md2|1.0|1.0|1.0|general|-19.0|-19.0|-1.0|19.0|19.0|1.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Plant 3|0.0|1.0|0.0 +plant_plant4|models/plants/plant.md2|1.0|1.0|1.0|general|-24.0|-14.0|-1.0|24.0|14.0|1.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Plant 4|0.0|1.0|0.0 +plant_plant5|models/plants/plant.md2|1.0|1.0|1.0|general|-1.0|-24.0|-12.0|1.0|24.0|12.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Plant 5|0.0|1.0|0.0 +plant_plant6|models/plants/plant.md2|1.0|1.0|1.0|general|-1.0|-8.0|-20.0|1.0|8.0|20.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Plant 6|0.0|1.0|0.0 +plant_plant7|models/plants/plant.md2|1.0|1.0|1.0|general|-20.0|-20.0|-12.0|20.0|20.0|12.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Plant 7|0.0|1.0|0.0 +plant_plant8|models/plants/plant.md2|1.0|1.0|1.0|general|-10.0|-20.0|-8.0|10.0|20.0|8.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Plant 8|0.0|1.0|0.0 +plant_tallbush|models/plants/tallbush.md2|1.0|1.0|1.0|general|-17.0|-19.0|-27.0|17.0|19.0|27.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Tall Bush|0.0|1.0|0.0 +plant_tree1|models/plants/tree1.md2|1.0|1.0|1.0|general|-3.0|-3.0|-46.0|10.0|10.0|44.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Tree 1|0.0|1.0|0.0 +plant_tree2|models/plants/tree2.md2|1.0|1.0|1.0|general|-10.0|-10.0|-94.0|10.0|10.0|90.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Tree 2|0.0|1.0|0.0 +plant_widebush|models/plants/widebush.md2|1.0|1.0|1.0|general|-17.0|-17.0|-15.0|17.0|17.0|15.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Wide Bush|0.0|1.0|0.0 +point_flee||1.0|1.0|1.0|general|-8.0|-8.0|-8.0|8.0|8.0|8.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Point Flee|0.5|0.3|0.0 +target_debris||1.0|1.0|1.0|general|-8.0|-8.0|-8.0|8.0|8.0|8.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Target debris|1.0|0.0|0.0 +target_gsm||1.0|1.0|1.0|general|-8.0|-8.0|-8.0|8.0|8.0|8.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Target GSM|0.39|0.78|0.2 +target_interaction||1.0|1.0|1.0|general|-8.0|-8.0|-8.0|8.0|8.0|8.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Spawn conversation session|1.0|0.0|1.0 +trap_arrow||1.0|1.0|1.0|general|0|0|0|0|0|0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Arrow Trap|0.0|0.5|0.88 +trigger_cam||1.0|1.0|1.0|general|0|0|0|0|0|0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Cam trigger|0.5|0.5|0.5 +trigger_GSM||1.0|1.0|1.0|general|0|0|0|0|0|0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|GSM Trigger|0.5|0.5|0.5 +weapon_3gun|models/weapons/g_3gun.md2|1.0|1.0|1.0|general|-16.0|-16.0|-16.0|16.0|16.0|16.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Triple Flintlock|1.0|0.5|0.0 +weapon_bow|models/weapons/g_bow.md2|1.0|1.0|1.0|general|-16.0|-16.0|-16.0|16.0|16.0|16.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Bow|1.0|0.5|0.0 +weapon_rifle|models/weapons/g_rifle.md2|1.0|1.0|1.0|general|-16.0|-16.0|-16.0|16.0|16.0|16.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Blunderbuss|1.0|0.5|0.0 +weapon_sword|models/weapons/g_sword.md2|1.0|1.0|1.0|general|-16.0|-16.0|-16.0|16.0|16.0|16.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Ancestral Sword|1.0|0.5|0.0 +weapon_xbow|models/weapons/g_xbow.md2|1.0|1.0|1.0|general|-16.0|-16.0|-16.0|16.0|16.0|16.0|shadow|0|0.0|0.0|0|0|0|0:0|0|0|none|Crossbow|1.0|0.5|0.0