2 ITEM(mine
, itemtrap
<materialcontainer
>)
5 virtual void StepOnEffect(character
*);
6 virtual truth
ReceiveDamage(character
*, int, int, int);
7 virtual truth
Apply(character
* User
);
8 virtual truth
IsDangerous(ccharacter
* Stepper
) const { return WillExplode(Stepper
); }
9 virtual truth
WillExplode(ccharacter
*) const;
10 virtual truth
CheckPickUpEffect(character
*);
12 virtual truth
AddAdjective(festring
&, truth
) const;
20 truth
mine::AddAdjective(festring
& String
, truth Articled
) const { return IsActive() && AddActiveAdjective(String
, Articled
); }
24 truth
mine::ReceiveDamage(character
* Damager
, int Damage
, int Type
, int)
26 if((Type
& (FIRE
|ENERGY
) && Damage
&& (Damage
> 50 || !(RAND() % (100 / Damage
)))) || (Type
& (PHYSICAL_DAMAGE
|SOUND
) && WillExplode(0)))
28 festring DeathMsg
= CONST_S("killed by an explosion of ");
29 AddName(DeathMsg
, INDEFINITE
);
32 DeathMsg
<< " caused @bk";
34 if(GetSquareUnder()->CanBeSeenByPlayer(true))
35 ADD_MESSAGE("%s explodes!", GetExtendedDescription().CStr());
37 lsquare
* Square
= GetLSquareUnder();
40 Square
->GetLevel()->Explosion(Damager
, DeathMsg
, Square
->GetPos(), GetSecondaryMaterial()->GetTotalExplosivePower());
49 void mine::StepOnEffect(character
* Stepper
)
51 if(!WillExplode(Stepper
))
54 if(Stepper
->IsPlayer())
56 cchar
* SenseVerb
= Stepper
->CanHear() ? "hear" : "sense";
58 if(GetLSquareUnder()->IsDark())
59 ADD_MESSAGE("You %s a faint thump. You try to look down, but it is too dark to see anything.", SenseVerb
);
61 ADD_MESSAGE("You %s a faint thump. You look down. You see %s.", SenseVerb
, CHAR_NAME(INDEFINITE
));
63 else if(Stepper
->CanBeSeenByPlayer())
64 ADD_MESSAGE("%s steps on %s.", Stepper
->CHAR_NAME(DEFINITE
), CHAR_NAME(INDEFINITE
));
65 else if(GetSquareUnder()->CanBeSeenByPlayer(true))
66 ADD_MESSAGE("Something explodes!");
69 SendNewDrawAndMemorizedUpdateRequest();
71 if (Stepper
->IsPlayer()) game::AskForEscPress(CONST_S("Trap activated!"));
73 lsquare
* Square
= GetLSquareUnder();
76 Square
->GetLevel()->Explosion(0, "killed by a land mine", Square
->GetPos(), GetSecondaryMaterial()->GetTotalExplosivePower());
81 truth
mine::Apply(character
* User
)
83 if(User
->IsPlayer() && !game::TruthQuestion(CONST_S("Are you sure you want to plant ") + GetName(DEFINITE
) + "? [y/N]"))
86 room
* Room
= GetRoom();
89 Room
->HostileAction(User
);
92 ADD_MESSAGE("%s is now %sactive.", CHAR_NAME(DEFINITE
), IsActive() ? "in" : "");
94 SetIsActive(!IsActive());
95 User
->DexterityAction(10);
99 Team
= User
->GetTeam()->GetID();
101 User
->GetStackUnder()->AddItem(this);
109 truth
mine::WillExplode(ccharacter
* Stepper
) const
111 return IsActive() && GetSecondaryMaterial() && GetSecondaryMaterial()->IsExplosive() && (!Stepper
|| Stepper
->GetWeight() > 5000);
116 truth
mine::CheckPickUpEffect(character
*)
120 lsquare
* Square
= GetLSquareUnder();
122 if(Square
->CanBeSeenByPlayer(true))
123 ADD_MESSAGE("%s explodes!", GetExtendedDescription().CStr());
127 Square
->GetLevel()->Explosion(0, "killed by a land mine", Square
->GetPos(), GetSecondaryMaterial()->GetTotalExplosivePower());