/*QUAKED monster_parasite (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight */ void CParasite::Spawn () { Sounds[SOUND_PAIN1] = SoundIndex ("parasite/parpain1.wav"); Sounds[SOUND_PAIN2] = SoundIndex ("parasite/parpain2.wav"); Sounds[SOUND_DIE] = SoundIndex ("parasite/pardeth1.wav"); Sounds[SOUND_LAUNCH] = SoundIndex("parasite/paratck1.wav"); Sounds[SOUND_IMPACT] = SoundIndex("parasite/paratck2.wav"); Sounds[SOUND_SUCK] = SoundIndex("parasite/paratck3.wav"); Sounds[SOUND_REELIN] = SoundIndex("parasite/paratck4.wav"); Sounds[SOUND_SIGHT] = SoundIndex("parasite/parsght1.wav"); Sounds[SOUND_TAP] = SoundIndex("parasite/paridle1.wav"); Sounds[SOUND_SCRATCH] = SoundIndex("parasite/paridle2.wav"); Sounds[SOUND_SEARCH] = SoundIndex("parasite/parsrch1.wav"); Entity->State.GetModelIndex() = ModelIndex ("models/monsters/parasite/tris.md2"); Entity->GetMins().Set (-16, -16, -24); Entity->GetMaxs().Set (16, 16, 24); Entity->GetSolid() = SOLID_BBOX; Entity->Health = 175; Entity->GibHealth = -50; Entity->Mass = 250; MonsterFlags |= (MF_HAS_ATTACK | MF_HAS_IDLE | MF_HAS_SIGHT); Entity->Link (); CurrentMove = &ParasiteMoveStand; WalkMonsterStart (); Entity->ViewHeight = 12; }
Protocol::ModelIndex fromQModelIndex(const QModelIndex& index) { if (!index.isValid()) return ModelIndex(); ModelIndex result = fromQModelIndex(index.parent()); result.push_back(qMakePair(index.row(), index.column())); return result; }
//----------------------------------------------------------------------------// ModelIndex TreeView::indexAtWithAction(const glm::vec2& position, TreeViewItemAction action) { if (d_itemModel == 0) return ModelIndex(); //TODO: add prepareForLayout() as a cheaper operation alternative? prepareForRender(); glm::vec2 window_position = CoordConverter::screenToWindow(*this, position); Rectf render_area(getViewRenderer()->getViewRenderArea()); if (!render_area.isPointInRect(window_position)) return ModelIndex(); float cur_height = render_area.d_min.d_y - getVertScrollbar()->getScrollPosition(); bool handled = false; return indexAtRecursive(d_rootItemState, cur_height, window_position, handled, action); }
static void Spawn (CPlayerEntity *Player, vec3f Start, vec3f AimDir, int DamageMultiplier, int Speed) { vec3f dir = AimDir.ToAngles(); anglef angles = dir.ToVectors (); CProx *Prox = QNewEntityOf CProx; Prox->State.GetOrigin() = Start; Prox->Velocity = (AimDir * Speed) .MultiplyAngles (200 + crand() * 10.0f, angles.Up) .MultiplyAngles (crand() * 10.0f, angles.Right); Prox->State.GetAngles() = dir - vec3f(90, 0, 0); Prox->PhysicsType = PHYSICS_BOUNCE; Prox->GetSolid() = SOLID_BBOX; Prox->State.GetEffects() |= FX_GRENADE; Prox->GetClipmask() = CONTENTS_MASK_SHOT|CONTENTS_LAVA|CONTENTS_SLIME; Prox->State.GetRenderEffects() |= RF_IR_VISIBLE; Prox->GetMins().Set (-6, -6, -6); Prox->GetMaxs().Set (6, 6, 6); Prox->State.GetModelIndex() = ModelIndex ("models/weapons/g_prox/tris.md2"); Prox->SetOwner(Player); Prox->Firer = Player; Prox->Touchable = true; Prox->ThinkType = PROXTHINK_EXPLODE; Prox->Damage = PROX_DAMAGE * DamageMultiplier; Prox->ClassName = "prox"; switch (DamageMultiplier) { case 1: Prox->NextThink = Level.Frame + PROX_TIME_TO_LIVE; break; case 2: Prox->NextThink = Level.Frame + 300; break; case 4: Prox->NextThink = Level.Frame + 150; break; case 8: Prox->NextThink = Level.Frame + 100; break; default: Prox->NextThink = Level.Frame + PROX_TIME_TO_LIVE; break; } Prox->Link (); }
//----------------------------------------------------------------------------// ModelIndex TreeView::indexAtRecursive(TreeViewItemRenderingState& item, float& cur_height, const glm::vec2& window_position, bool& handled, TreeViewItemAction action) { float next_height = cur_height + item.d_size.d_height; if (window_position.y >= cur_height && window_position.y <= next_height) { handled = true; float expander_width = getViewRenderer()->getSubtreeExpanderSize().d_width; float base_x = getViewRenderer()->getSubtreeExpanderXIndent(item.d_nestedLevel); base_x -= getHorzScrollbar()->getScrollPosition(); if (window_position.x >= base_x && window_position.x <= base_x + expander_width) { (this->*action)(item, true); return ModelIndex(); } (this->*action)(item, false); return ModelIndex(d_itemModel->makeIndex(item.d_childId, item.d_parentIndex)); } cur_height = next_height; for (size_t i = 0; i < item.d_renderedChildren.size(); ++i) { ModelIndex index = indexAtRecursive(*item.d_renderedChildren.at(i), cur_height, window_position, handled, action); if (handled) return index; } return ModelIndex(); }
void CMaiden::Spawn () { Entity->GetSolid() = SOLID_BBOX; Entity->State.GetModelIndex() = ModelIndex("models/monsters/bitch/tris.md2"); Entity->GetMins().Set (-16, -16, 0); Entity->GetMaxs().Set (16, 16, 56); Sounds[SOUND_MISSILE_PRELAUNCH] = SoundIndex ("chick/chkatck1.wav"); Sounds[SOUND_MISSILE_LAUNCH] = SoundIndex ("chick/chkatck2.wav"); Sounds[SOUND_MELEE_SWING] = SoundIndex ("chick/chkatck3.wav"); Sounds[SOUND_MELEE_HIT] = SoundIndex ("chick/chkatck4.wav"); Sounds[SOUND_MISSILE_RELOAD] = SoundIndex ("chick/chkatck5.wav"); Sounds[SOUND_DEATH1] = SoundIndex ("chick/chkdeth1.wav"); Sounds[SOUND_DEATH2] = SoundIndex ("chick/chkdeth2.wav"); Sounds[SOUND_FALL_DOWN] = SoundIndex ("chick/chkfall1.wav"); Sounds[SOUND_IDLE1] = SoundIndex ("chick/chkidle1.wav"); Sounds[SOUND_IDLE2] = SoundIndex ("chick/chkidle2.wav"); Sounds[SOUND_PAIN1] = SoundIndex ("chick/chkpain1.wav"); Sounds[SOUND_PAIN2] = SoundIndex ("chick/chkpain2.wav"); Sounds[SOUND_PAIN3] = SoundIndex ("chick/chkpain3.wav"); Sounds[SOUND_SIGHT] = SoundIndex ("chick/chksght1.wav"); Sounds[SOUND_SEARCH] = SoundIndex ("chick/chksrch1.wav"); Entity->Health = 175; Entity->GibHealth = -70; Entity->Mass = 200; MonsterFlags = (MF_HAS_MELEE | MF_HAS_ATTACK | MF_HAS_IDLE | MF_HAS_SIGHT #if ROGUE_FEATURES | MF_HAS_DODGE | MF_HAS_DUCK | MF_HAS_UNDUCK | MF_HAS_SIDESTEP #endif ); #if ROGUE_FEATURES BlindFire = true; #endif Entity->Link (); CurrentMove = &ChickMoveStand; WalkMonsterStart (); }
void CItemEntity::Think () { switch (ThinkState) { case ITS_DROPTOFLOOR: ThinkState = ITS_NONE; { GetMins().Set (-15); GetMaxs().Set (15); State.GetModelIndex() = ModelIndex((!Model.IsNullOrEmpty()) ? Model.CString() : LinkedItem->WorldModel); GetSolid() = SOLID_TRIGGER; Touchable = true; PhysicsType = PHYSICS_TOSS; vec3f end = (State.GetOrigin() + vec3f(0,0,-128)); CTrace tr (State.GetOrigin(), GetMins(), GetMaxs(), end, this, CONTENTS_MASK_SOLID); if (tr.StartSolid) { MapPrint (MAPPRINT_WARNING, this, State.GetOrigin(), "Entity origin is in solid\n"); Free (); return; } State.GetOrigin() = tr.EndPosition; if (Team.HasTeam) { GetSvFlags() |= SVF_NOCLIENT; GetSolid() = SOLID_NOT; if (Team.Master == this) { NextThink = Level.Frame + ServerFramesPerSecond; ThinkState = ITS_RESPAWN; } } if (SpawnFlags & ITEM_NO_TOUCH) { GetSolid() = SOLID_BBOX; Touchable = false; State.GetEffects() &= ~FX_ROTATE; State.GetRenderEffects() &= ~RF_GLOW; } if (SpawnFlags & ITEM_TRIGGER_SPAWN) { GetSvFlags() |= SVF_NOCLIENT; GetSolid() = SOLID_NOT; Usable = true; } if (CvarList[CV_MAP_DEBUG].Boolean()) { GetSolid() = SOLID_BBOX; GetSvFlags() = (SVF_MONSTER|SVF_DEADMONSTER); } Link (); } break; case ITS_RESPAWN: ThinkState = ITS_NONE; { IBaseEntity *RespawnedEntity = this; if (Team.HasTeam) { IBaseEntity *Master = Team.Master; #if CLEANCTF_ENABLED //ZOID //in ctf, when we are weapons stay, only the master of a team of weapons //is spawned if ((Game.GameMode & GAME_CTF) && DeathmatchFlags.dfWeaponsStay.IsEnabled() && entity_cast<CItemEntity>(Master)->LinkedItem && (entity_cast<CItemEntity>(Master)->LinkedItem->Flags & ITEMFLAG_WEAPON)) RespawnedEntity = Master; else //ZOID #endif RespawnedEntity = GetRandomTeamMember(entity_cast<CItemEntity>(Master)); } RespawnedEntity->GetSvFlags() &= ~SVF_NOCLIENT; RespawnedEntity->GetSolid() = SOLID_TRIGGER; RespawnedEntity->Link (); // send an effect RespawnedEntity->State.GetEvent() = EV_ITEM_RESPAWN; } break; case ITS_FREE: ThinkState = ITS_NONE; Free(); break; }; }
/*QUAKED monster_carrier (1 .5 0) (-56 -56 -44) (56 56 44) Ambush Trigger_Spawn Sight */ void CCarrier::Spawn () { Sounds[SOUND_PAIN1] = SoundIndex ("carrier/pain_md.wav"); Sounds[SOUND_PAIN2] = SoundIndex ("carrier/pain_lg.wav"); Sounds[SOUND_PAIN3] = SoundIndex ("carrier/pain_sm.wav"); Sounds[SOUND_DEATH] = SoundIndex ("carrier/death.wav"); Sounds[SOUND_RAIL] = SoundIndex ("gladiator/railgun.wav"); Sounds[SOUND_SIGHT] = SoundIndex ("carrier/sight.wav"); Sounds[SOUND_SPAWN] = SoundIndex ("medic_commander/monsterspawn1.wav"); Entity->State.GetSound() = SoundIndex ("bosshovr/bhvengn1.wav"); Entity->PhysicsType = PHYSICS_STEP; Entity->GetSolid() = SOLID_BBOX; Entity->State.GetModelIndex() = ModelIndex ("models/monsters/carrier/tris.md2"); Entity->GetMins().Set (-56, -56, -44); Entity->GetMaxs().Set (56, 56, 44); // 2000 - 4000 health Entity->Health = Max<> (2000, 2000 + 1000*((CvarList[CV_SKILL].Integer())-1)); // add health in coop (500 * skill) if (Game.GameMode & GAME_COOPERATIVE) Entity->Health += 500*(CvarList[CV_SKILL].Integer()); Entity->GibHealth = -200; Entity->Mass = 1000; OriginalYawSpeed = YawSpeed = 15; AIFlags |= AI_IGNORE_SHOTS; MonsterFlags |= (MF_HAS_ATTACK | MF_HAS_SIGHT); Entity->Link (); CurrentMove = &CarrierMoveStand; SoundIndex ("flyer/flysght1.wav"); SoundIndex ("flyer/flysrch1.wav"); SoundIndex ("flyer/flypain1.wav"); SoundIndex ("flyer/flypain2.wav"); SoundIndex ("flyer/flyatck2.wav"); SoundIndex ("flyer/flyatck1.wav"); SoundIndex ("flyer/flydeth1.wav"); SoundIndex ("flyer/flyatck3.wav"); SoundIndex ("flyer/flyidle1.wav"); SoundIndex ("weapons/rockfly.wav"); SoundIndex ("infantry/infatck1.wav"); SoundIndex ("gunner/gunatck3.wav"); SoundIndex ("weapons/grenlb1b.wav"); SoundIndex ("tank/rocket.wav"); ModelIndex ("models/monsters/flyer/tris.md2"); ModelIndex ("models/objects/rocket/tris.md2"); ModelIndex ("models/objects/debris2/tris.md2"); ModelIndex ("models/objects/grenade/tris.md2"); ModelIndex("models/items/spawngro/tris.md2"); ModelIndex("models/items/spawngro2/tris.md2"); ModelIndex ("models/objects/gibs/sm_metal/tris.md2"); ModelIndex ("models/objects/gibs/gear/tris.md2"); FlyMonsterStart (); AttackFinished = 0; switch (CvarList[CV_SKILL].Integer()) { case 0: MonsterSlots = 3; break; case 1: case 2: MonsterSlots = 6; break; case 3: MonsterSlots = 9; break; default: MonsterSlots = 6; break; } }