forked from Mirrors/openclonk
102 lines
2.1 KiB
C
102 lines
2.1 KiB
C
/**
|
|
Helmet
|
|
Protective head armor.
|
|
|
|
@author: pluto, Clonkonaut
|
|
*/
|
|
|
|
#include Library_Wearable
|
|
|
|
/*-- Engine Callbacks --*/
|
|
|
|
func Hit()
|
|
{
|
|
Sound("Hits::Materials::Metal::DullMetalHit?");
|
|
}
|
|
|
|
/*-- Usage --*/
|
|
|
|
public func ControlUse(object clonk)
|
|
{
|
|
if (IsWorn())
|
|
TakeOff();
|
|
else
|
|
PutOn(clonk);
|
|
|
|
return true;
|
|
}
|
|
|
|
// Helmet effect: 20% less damage
|
|
func OnDamage(int damage, int cause, int by_player)
|
|
{
|
|
// Do nothing on energy gained
|
|
if (damage > 0) return damage;
|
|
// Doesn't protect against all damage
|
|
if (cause == FX_Call_EngBlast || cause == FX_Call_EngFire || cause == FX_Call_EngAsphyxiation || cause == FX_Call_EngCorrosion)
|
|
return damage;
|
|
|
|
return damage - (damage*20/100);
|
|
}
|
|
|
|
/*-- Production --*/
|
|
|
|
public func IsWeapon() { return true; }
|
|
public func IsArmoryProduct() { return true; }
|
|
|
|
/*-- Display --*/
|
|
|
|
public func GetWearPlace()
|
|
{
|
|
return WEARABLE_Head;
|
|
}
|
|
|
|
public func GetWearBone()
|
|
{
|
|
return "Main";
|
|
}
|
|
|
|
public func GetWearTransform()
|
|
{
|
|
return Trans_Mul(Trans_Rotate(90, 0, 0, 1), Trans_Translate(0, -300));
|
|
}
|
|
|
|
public func GetCarryMode(object clonk, bool secondary)
|
|
{
|
|
if (IsWorn() || display_disabled)
|
|
return CARRY_None;
|
|
if (secondary || !clonk->~HasHandAction(false, true))
|
|
return CARRY_Back;
|
|
return CARRY_BothHands;
|
|
}
|
|
|
|
public func GetCarryPhase(object clonk)
|
|
{
|
|
return 550;
|
|
}
|
|
|
|
public func GetCarryBone(object clonk, bool secondary)
|
|
{
|
|
return "Main";
|
|
}
|
|
|
|
public func GetCarryTransform(object clonk, bool secondary, bool no_hand, bool on_back)
|
|
{
|
|
if (secondary)
|
|
return Trans_Mul(Trans_Rotate(180, 1), Trans_Rotate(0, 0, 1), Trans_Rotate(90, 0, 0, 1), Trans_Translate(-4000));
|
|
if (no_hand || on_back)
|
|
return Trans_Mul(Trans_Rotate(0, 1), Trans_Rotate(0, 0, 1), Trans_Rotate(90, 0, 0, 1), Trans_Translate(-4000));
|
|
|
|
return Trans_Mul(Trans_Rotate(80, 0, 0, 1), Trans_Rotate(-90, 0, 1), Trans_Rotate(-45, 0, 0, 1), Trans_Translate(-1000, 4000));
|
|
}
|
|
|
|
func Definition(def)
|
|
{
|
|
SetProperty("PictureTransformation", Trans_Mul(Trans_Rotate(45, 0, 1), Trans_Rotate(10, 0, 0, 1)),def);
|
|
}
|
|
|
|
/*-- Properties --*/
|
|
|
|
local Name = "$Name$";
|
|
local Description = "$Description$";
|
|
local Collectible = true;
|
|
local Components = {Wood = 1, Metal = 1}; |