/****************************************************************************** TRAINYARD - Episode specific code *******************************************************************************/ #include "g_local.h" #include "voice_punk.h" #include "voice_bitch.h" void misc_ty_afraid_think (edict_t *self); qboolean EP_Trainyard_CastSight ( edict_t *self, edict_t *other, cast_memory_t *mem ) { return false; } qboolean EP_Trainyard_CastUse (edict_t *self, edict_t *other, edict_t *activator) { return false; } qboolean EP_Trainyard_EventSpeech (edict_t *self, edict_t *other, int saywhat) { cast_memory_t *mem; mem = level.global_cast_memory[ self->character_index ][ other->character_index ]; switch (saywhat) { case say_neutral: if (self->name_index == NAME_LUKE && other->client) { if (!(other->episode_flags & EP_TY_LUKE_CLUE1)) { EP_Skidrow_Register_EPFLAG (other, EP_TY_LUKE_CLUE1); EP_Skidrow_Register_EPFLAG (other, EP_TY_TAKETHESEWER); Voice_Specific (self, other, ty_luke, 0); } else if (!(other->episode_flags & EP_TY_LUKE_CLUE2)) { EP_Skidrow_Register_EPFLAG (other, EP_TY_LUKE_CLUE2); Voice_Specific (self, other, ty_luke, 1); } else Voice_Random (self, other, &ty_luke[2], 4); return true; } if (self->name_index == NAME_HANN && other->client) { if (!(other->episode_flags & EP_TY_HANN_CLUE1)) { EP_Skidrow_Register_EPFLAG (other, EP_TY_HANN_CLUE1); EP_Skidrow_Register_EPFLAG (other, EP_TY_TAKETHESEWER); Voice_Specific (self, other, ty_hann, 0); } else if (!(other->episode_flags & EP_TY_HANN_CLUE2)) { EP_Skidrow_Register_EPFLAG (other, EP_TY_HANN_CLUE2); Voice_Specific (self, other, ty_hann, 1); } else Voice_Random (self, other, &ty_hann[2], 4); return true; } return false; break; case say_hostile: if (self->name_index == NAME_LUKE && other->client) { if (other->client->ps.stats[STAT_HUD_SELF_TALK] == TT_POSITIVE) { mem = level.global_cast_memory [self->character_index][other->character_index]; mem->flags &= ~MEMORY_ASSHOLE; Voice_Random (self, other, &ty_luke[2], 4); return true; } else { // just do a random curse at the player Voice_Random (self, other, &ty_luke[6], 3); return true; } } if (self->name_index == NAME_HANN && other->client) { if (other->client->ps.stats[STAT_HUD_SELF_TALK] == TT_POSITIVE) { mem = level.global_cast_memory [self->character_index][other->character_index]; mem->flags &= ~MEMORY_ASSHOLE; Voice_Random (self, other, &ty_hann[2], 4); return true; } else { // just do a random curse at the player Voice_Random (self, other, &ty_hann[6], 3); return true; } } return false; break; } return false; } void EP_Trainyard_ItemPickup ( edict_t *self, edict_t *other ) { } void EP_Trainyard_Script( edict_t *ent, char *scriptname ) { } int EP_Trainyard_HiredGuysFlags (edict_t *player, edict_t *self) { return (1); } void EP_TrainyardFlags (edict_t *self) { } qboolean EP_Trainyard_DoKey (edict_t *self, edict_t *other) { return false; } void EP_Trainyard_Check_DoKey (edict_t *self, edict_t *ent) { } void EP_Trainyard_ReachedDoKey (edict_t *self) { } void EP_Trainyard_EndDoKey (edict_t *self) { } qboolean EP_Trainyard_UnlockDoorFlag (edict_t *ent) { return false; } void EP_Trainyard_HiredGuysRegisterFlags (edict_t *ent, edict_t *other) { } extern mmove_t punk_move_walk_dokey; extern mmove_t punk_move_crch_dokey; extern mmove_t runt_move_walk_dokey; extern mmove_t runt_move_crch_dokey; extern mmove_t bitch_move_walk_dokey; /*QUAKED misc_ty_afraid (.5 .5 1) (-16 -16 -24) (16 16 48) used as the location mo will run to before larry and curly attack him */ void misc_ty_afraid_think (edict_t *self) { } void SP_misc_ty_afraid (edict_t *self) { if (deathmatch->value) { G_FreeEdict(self); return; } self->movetype = MOVETYPE_NONE; self->solid = SOLID_NOT; VectorSet (self->mins, -16, -16, -24); VectorSet (self->maxs, 16, 16, 48); self->cast_info.aiflags |= AI_RUN_LIKE_HELL; AI_Ent_droptofloor( self ); gi.linkentity (self); } /*QUAKED ai_ty_mo_boundry (.5 .5 1) ? touching this brush will cause mo larry and curly to attack */ void ai_mo_boundry_touch (edict_t *self, edict_t *other, cplane_t *plane, csurface_t *surf) { // vec3_t vec; // if (!(other->svflags & SVF_MONSTER) && !(other->client)) if (!(other->client)) return; } void SP_ty_mo_boundry ( edict_t *ent ) { if (deathmatch->value) { G_FreeEdict(ent); return; } ent->solid = SOLID_TRIGGER; ent->touch = ai_mo_boundry_touch; ent->svflags |= SVF_NOCLIENT; gi.setmodel (ent, ent->model); gi.linkentity (ent); } /*QUAKED ai_ty_fuseblown (.5 .5 1) ? This will set the EP_TY_FUSEBLOWN flag */ void ai_ty_fuseblown_touch (edict_t *self, edict_t *other, cplane_t *plane, csurface_t *surf) { if (!(other->client)) return; if (!(other->episode_flags & EP_TY_FUSEBLOWN)) { EP_Skidrow_Register_EPFLAG (other, EP_TY_FUSEBLOWN); gi.sound(other, CHAN_VOICE, gi.soundindex("scenaric/need_fuse.wav"), 1, ATTN_NORM, 0); } // FIXME // we need to play a wav file } void SP_ty_fuseblown ( edict_t *ent ) { if (deathmatch->value) { G_FreeEdict(ent); return; } ent->solid = SOLID_TRIGGER; ent->touch = ai_ty_fuseblown_touch; ent->svflags |= SVF_NOCLIENT; gi.setmodel (ent, ent->model); gi.linkentity (ent); } /*QUAKED ai_ty_valvehandle (.5 .5 1) ? */ void ai_ty_valvehandle_touch (edict_t *self, edict_t *other, cplane_t *plane, csurface_t *surf) { int index; gitem_t *item; if (!(other->client)) return; item = FindItem ("Valve"); index = ITEM_INDEX (item); if (!(other->client->pers.inventory[ index ])) { gi.sound(other, CHAN_VOICE, gi.soundindex("scenaric/need_valvehandle.wav"), 1, ATTN_NORM, 0); self->touch = NULL; } } void SP_ty_valvehandle ( edict_t *ent ) { if (deathmatch->value) { G_FreeEdict(ent); return; } ent->solid = SOLID_TRIGGER; ent->touch = ai_ty_valvehandle_touch; ent->svflags |= SVF_NOCLIENT; gi.setmodel (ent, ent->model); gi.linkentity (ent); } #include "ep_log.h" extern int the_log_page; void EP_Trainyard_Player_Log (edict_t *self, int page) { int len; int i; int cnt = 0; int select = 0; len = 0; Com_sprintf (game.helpmessage1, sizeof(game.helpmessage1), ""); Com_sprintf (game.helpmessage2, sizeof(game.helpmessage2), ""); the_log_page += page; if (the_log_page < 0) the_log_page = 0; else if (the_log_page >= NUM_TY_PLAYER_LOG) the_log_page = 0; for (i=1; iclient->pers.episode_flags & ep_ty_player_log[i].ep_flag) cnt++; if (cnt == the_log_page) { select = i; break; } } if (!page || !the_log_page) for (i=0; i