/****************************************************** * Objects for Siberia * ******************************************************/ #include "g_local.h" #include "g_obj.h" // For snowcat #define SNOWCAT_LIGHTS 4 #define FLARE_STARTOFF 4 #define FLARE_BLUE 8 #define HLTH_GEN_LIGHT_BEAM 250 #define HLTH_SIBERIA_CARTON1 500 #define HLTH_SIBERIA_CARTON2 10000 #define HLTH_SIBERIA_CARTON3 10000 #define HLTH_SIBERIA_CARTON4 10000 #define HLTH_SIBERIA_FLAG 500 #define HLTH_SIBERIA_ICICLES 10000 #define HLTH_SIBERIA_ROADFLARE 500 #define HLTH_SIBERIA_SEARCHLIGHT 500 #define HLTH_SIBERIA_SNOWCAT 10000 // misc_siberia... void SP_misc_siberia_carton1 (edict_t *ent); void SP_misc_siberia_carton2 (edict_t *ent); void SP_misc_siberia_carton3 (edict_t *ent); void SP_misc_siberia_carton4 (edict_t *ent); void SP_misc_siberia_flag (edict_t *ent); void SP_misc_siberia_icicles (edict_t *ent); void SP_misc_siberia_roadflare (edict_t *ent); void SP_misc_siberia_searchlight (edict_t *ent); void SP_misc_siberia_snowcat (edict_t *ent); spawn_t siberiaSpawns[] = { // misc_siberia. . . {"misc_siberia_carton1", SP_misc_siberia_carton1}, {"misc_siberia_carton2", SP_misc_siberia_carton2}, {"misc_siberia_carton3", SP_misc_siberia_carton3}, {"misc_siberia_carton4", SP_misc_siberia_carton4}, {"misc_siberia_flag", SP_misc_siberia_flag}, {"misc_siberia_icicles", SP_misc_siberia_icicles}, {"misc_siberia_roadflare", SP_misc_siberia_roadflare}, {"misc_siberia_searchlight", SP_misc_siberia_searchlight}, {"misc_siberia_snowcat", SP_misc_siberia_snowcat}, {NULL, NULL}, }; typedef enum { OBJ_CARTON1 = 0, OBJ_CARTON2, OBJ_CARTON3, OBJ_CARTON4, OBJ_FLAG, OBJ_ICICLES, OBJ_LIGHT_BEAM, OBJ_ROADFLARE, OBJ_SEARCHLIGHT, OBJ_SEARCHLIGHTARM, OBJ_SNOWCAT, MAX_OBJS }; modelSpawnData_t siberiaModelData[MD_SIBERIA_SIZE] = { // dir file surfaceType material health solid material file cnt scale "objects/siberia/carton1", "carton1", SURF_METAL, MAT_METAL_DGREY, HLTH_SIBERIA_CARTON1, SOLID_BBOX, NULL, 0, 0.0, NULL, // OBJ_CARTON1 "objects/siberia/carton2", "carton2", SURF_METAL, MAT_METAL_DGREY, HLTH_SIBERIA_CARTON2, SOLID_BBOX, NULL, 0, 0.0, NULL, // OBJ_CARTON2 "objects/siberia/carton3", "carton3", SURF_METAL, MAT_METAL_DGREY, HLTH_SIBERIA_CARTON3, SOLID_BBOX, NULL, 0, 0.0, NULL, // OBJ_CARTON3 "objects/siberia/carton4", "carton4", SURF_METAL, MAT_METAL_DGREY, HLTH_SIBERIA_CARTON4, SOLID_BBOX, NULL, 0, 0.0, NULL, // OBJ_CARTON4 "objects/siberia/flag", "flag", SURF_DEFAULT, MAT_DEFAULT, HLTH_SIBERIA_FLAG, SOLID_BBOX, NULL, 0, 0.0, NULL, // OBJ_FLAG "objects/siberia/icicles", "icicles", SURF_DEFAULT, MAT_DEFAULT, HLTH_SIBERIA_ICICLES, SOLID_BBOX, NULL, 0, 0.0, NULL, // OBJ_ICICLES "objects/generic/beam", "beam", SURF_NONE, MAT_NONE, HLTH_GEN_LIGHT_BEAM, SOLID_NOT, NULL, 0, 0.0, NULL, // OBJ_LIGHT_BEAM "objects/siberia/flare", "null", SURF_NONE, MAT_NONE, HLTH_SIBERIA_ROADFLARE, SOLID_NOT, NULL, 0, 0.0, NULL, // OBJ_ROADFLARE "objects/siberia/searchlight", "lamp", SURF_METAL, MAT_METAL_DGREY, HLTH_SIBERIA_SNOWCAT, SOLID_BBOX, NULL, 0, 0.0, NULL, // OBJ_SEARCHLIGHT "objects/siberia/searchlight", "arm", SURF_METAL, MAT_METAL_DGREY, HLTH_SIBERIA_SNOWCAT, SOLID_BBOX, NULL, 0, 0.0, NULL, // OBJ_SEARCHLIGHT_ARM "objects/siberia/snowcat", "snowcat", SURF_METAL, MAT_METAL_DGREY, HLTH_SIBERIA_SNOWCAT, SOLID_BBOX, NULL, 0, 0.0, NULL, // OBJ_SNOWCAT }; /*QUAKED misc_siberia_carton1 (1 .5 0) (-15 -15 -15) (15 15 15) INVULNERABLE NOPUSH x x x x FLUFF A funky looking carton. 30 x 30 x 30 ------ SPAWNFLAGS ------ INVULNERABLE - can't be damaged. NOPUSH - can't be pushed FLUFF - won't show if gl_pictip is set */ void SP_misc_siberia_carton1 (edict_t *ent) { VectorSet (ent->mins, -15, -15, -15); VectorSet (ent->maxs, 15, 15, 15); SimpleModelInit2(ent,&siberiaModelData[OBJ_CARTON1],NULL,NULL); } /*QUAKED misc_siberia_carton2 (1 .5 0) (-8 -8 -7) (8 8 7) INVULNERABLE NOPUSH x x x x FLUFF A square carton. 16 x 16 x 14 ------ SPAWNFLAGS ------ INVULNERABLE - can't be damaged. NOPUSH - can't be pushed FLUFF - won't show if gl_pictip is set */ void SP_misc_siberia_carton2 (edict_t *ent) { VectorSet (ent->mins, -8, -8, -7); VectorSet (ent->maxs, 8, 8, 7); SimpleModelInit2(ent,&siberiaModelData[OBJ_CARTON2],NULL,NULL); } /*QUAKED misc_siberia_carton3 (1 .5 0) (-3 -3 -4) (3 3 4) INVULNERABLE NOPUSH x x x x FLUFF A tiny carton - looks like a soup thermos. 6 x 6 x 8 ------ SPAWNFLAGS ------ INVULNERABLE - can't be damaged. NOPUSH - can't be pushed FLUFF - won't show if gl_pictip is set */ void SP_misc_siberia_carton3 (edict_t *ent) { VectorSet (ent->mins, -3, -3, -3); // the -3 here is correct. leave the -4 in the QUAKED line. VectorSet (ent->maxs, 3, 3, 4); SimpleModelInit2(ent,&siberiaModelData[OBJ_CARTON3],NULL,NULL); } /*QUAKED misc_siberia_carton4 (1 .5 0) (-10 -10 -15) (10 10 15) INVULNERABLE NOPUSH x x x x FLUFF A barrel shaped carton. 20 x 20 x 30 ------ SPAWNFLAGS ------ INVULNERABLE - can't be damaged. NOPUSH - can't be pushed FLUFF - won't show if gl_pictip is set */ void SP_misc_siberia_carton4 (edict_t *ent) { VectorSet (ent->mins, -10, -10, -15); VectorSet (ent->maxs, 10, 10, 15); SimpleModelInit2(ent,&siberiaModelData[OBJ_CARTON4],NULL,NULL); } /*QUAKED misc_siberia_icicles (1 .5 0) (-1 -41 -41) (1 41 41) INVULNERABLE NOPUSH NOANIMATE x x x FLUFF Icicles ------ SPAWNFLAGS ------ INVULNERABLE - can't be damaged. NOPUSH - N/A, can't be pushed NOANIMATE - won't animate FLUFF - won't show if gl_pictip is set */ void SP_misc_siberia_icicles (edict_t *ent) { VectorSet (ent->mins, -1, -41, -41); VectorSet (ent->maxs, 1, 41, 41); ent->spawnflags |= SF_NOPUSH; SimpleModelInit2(ent,&siberiaModelData[OBJ_ICICLES],NULL,NULL); } /*QUAKED misc_siberia_flag (1 .5 0) (-16 -1 -1) (1 1 79) INVULNERABLE NOPUSH x x x x FLUFF A flag ------ SPAWNFLAGS ------ INVULNERABLE - can't be damaged. NOPUSH - N/A can't be pushed FLUFF - won't show if gl_pictip is set */ void SP_misc_siberia_flag (edict_t *ent) { VectorSet (ent->mins, -16, -1, -1); VectorSet (ent->maxs, 1, 1, 79); ent->spawnflags |= SF_NOPUSH; SimpleModelInit2(ent,&siberiaModelData[OBJ_FLAG],NULL,NULL); } void roadflare_use (edict_t *ent, edict_t *other, edict_t *activator) { if (ent->spawnflags & FLARE_STARTOFF) // It was off { ent->spawnflags &= ~FLARE_STARTOFF; // Now it's on ent->s.sound = gi.soundindex("Ambient/Gen/FireFX/FlareLP.wav"); ent->s.sound_data = (255 & ENT_VOL_MASK) | SND_LOOPATTN; if (ent->spawnflags & FLARE_BLUE) { fxRunner.execContinualEffect("environ/roadflare_blue", ent); } else { fxRunner.execContinualEffect("environ/roadflare", ent); } } else // It was on { ent->spawnflags |= FLARE_STARTOFF; // Now it's off ent->s.sound = NULL; if (ent->spawnflags & FLARE_BLUE) { fxRunner.stopContinualEffect("environ/roadflare_blue", ent); } else { fxRunner.stopContinualEffect("environ/roadflare", ent); } } } /*QUAKED misc_siberia_roadflare (1 .5 0) (-2 -2 -2) (2 2 2) INVULNERABLE NOPUSH STARTOFF BLUE x x FLUFF A flaming, sputtering road flare ------ SPAWNFLAGS ------ INVULNERABLE - can't be damaged. NOPUSH - N/A, can't be pushed FLUFF - won't show if gl_pictip is set BLUE - it'll be blue. defaults to red if this flag not set */ void SP_misc_siberia_roadflare (edict_t *ent) { VectorSet (ent->mins, -2, -2, -2); VectorSet (ent->maxs, 2, 2, 2); ent->spawnflags |= SF_NOPUSH; SimpleModelInit2(ent,&siberiaModelData[OBJ_ROADFLARE],NULL,NULL); SimpleModelTurnOnOff(ent->ghoulInst, false); if (!(ent->spawnflags & FLARE_STARTOFF)) { ent->s.sound = gi.soundindex("Ambient/Gen/FireFX/FlareLP.wav"); ent->s.sound_data = (255 & ENT_VOL_MASK) | SND_LOOPATTN; if (ent->spawnflags & FLARE_BLUE) { fxRunner.execContinualEffect("environ/roadflare_blue", ent); } else { fxRunner.execContinualEffect("environ/roadflare", ent); } } gi.soundindex("Ambient/Gen/FireFX/FlareLP.wav"); ent->use = roadflare_use; } /*QUAKED misc_siberia_searchlight (1 .5 0) (-10 -10 -8) (10 10 12) INVULNERABLE NOPUSH STARTOFF x x x FLUFF A small search light ------ SPAWNFLAGS ------ INVULNERABLE - can't be damaged. NOPUSH - N/A, can't be pushed FLUFF - won't show if gl_pictip is set */ void SP_misc_siberia_searchlight (edict_t *ent) { boltonOrientation_c boltonInfo; IGhoulInst* lampInst = NULL, *armInst = NULL; GhoulID lampBolt; VectorSet (ent->mins, -10, -10, -8); VectorSet (ent->maxs, 10, 10, 12); ent->spawnflags |= SF_NOPUSH; SimpleModelInit2(ent,&siberiaModelData[OBJ_SEARCHLIGHTARM],NULL,NULL); ent->touch = NULL; SimpleModelAddBolt(ent,siberiaModelData[OBJ_SEARCHLIGHTARM],"DUMMY02", siberiaModelData[OBJ_SEARCHLIGHT],"DUMMY02",NULL); lampInst = SimpleModelGetBolt(ent, 1); armInst = ent->ghoulInst; // ******************************************************************************************** // Find my target entity and then orient myself to look at it. // ******************************************************************************************** ent->targetEnt=G_Find(NULL,FOFS(targetname),ent->target); boltonInfo.root = ent; if (ent->targetEnt) { if (lampInst && lampInst->GetGhoulObject()) { lampBolt = lampInst->GetGhoulObject()->FindPart("DUMMY02"); } if (!lampBolt) { return; } // yaw the entity boltonInfo.boltonInst = armInst; boltonInfo.parentInst = NULL; VectorCopy(ent->targetEnt->s.origin, boltonInfo.vTarget); boltonInfo.fMinPitch = 0; boltonInfo.fMaxPitch = 0; boltonInfo.fMinYaw = -4000; boltonInfo.fMaxYaw = 4000; boltonInfo.fMaxTurnSpeed = 4000; boltonInfo.bUsePitch = false; boltonInfo.bUseYaw = true; boltonInfo.bToRoot = true; boltonInfo.OrientEnt(); // pitch the gun { boltonInfo.boltonInst = lampInst; boltonInfo.boltonID = lampBolt; boltonInfo.parentInst = lampInst->GetParent(); boltonInfo.parentID = lampInst->GetParent()->GetGhoulObject()->FindPart("DUMMY02"); VectorCopy(ent->targetEnt->s.origin, boltonInfo.vTarget); boltonInfo.fMinPitch = -4000; boltonInfo.fMaxPitch = 4000; boltonInfo.fMinYaw = 0; boltonInfo.fMaxYaw = 0; boltonInfo.fMaxTurnSpeed = 4000; boltonInfo.bUsePitch = true; boltonInfo.bUseYaw = false; boltonInfo.bToRoot = true; boltonInfo.OrientBolton(); } } // ent->think = searchlight_think; // ent->nextthink = level.time + FRAMETIME; } /*QUAKED misc_siberia_snowcat (1 .5 0) (-91 -66 -33) (91 66 58) INVULNERABLE NOPUSH LIGHTS x x x FLUFF Large Immobile Snowcat with turret. ------ SPAWNFLAGS ------ INVULNERABLE - can't be damaged. NOPUSH - N/A can't be pushed LIGHTS - turns on headlights FLUFF - won't show if gl_pictip is set */ void SP_misc_siberia_snowcat (edict_t *ent) { VectorSet (ent->mins, -91, -66, -33); VectorSet (ent->maxs, 91, 66, 58); ent->spawnflags |= SF_NOPUSH; SimpleModelInit2(ent,&siberiaModelData[OBJ_SNOWCAT],NULL,NULL); if (ent->spawnflags & SNOWCAT_LIGHTS) { SimpleModelAddBolt(ent,siberiaModelData[OBJ_SNOWCAT],"HEADLIGHT01", siberiaModelData[OBJ_LIGHT_BEAM],"to_headlight",NULL); SimpleModelAddBolt(ent,siberiaModelData[OBJ_SNOWCAT],"HEADLIGHT02", siberiaModelData[OBJ_LIGHT_BEAM],"to_headlight",NULL); } }