// XXX_InitItem, XXX要大寫 void TEST_InitItem(int id) { SetItemAttrib(id, ITEM_PHYSICS, ITEM_PHYSICS_NONE); SetItemAttrib(id, ITEM_LIFTABLE, 0); SetItemAttrib(id, ITEM_PICKABLE, 0); SetItemAttrib(id, ITEM_MODEL, "uitem05"); } void TEST_OnUse(int id, int c) { Print("item ", id, " is used by ", c, "\n"); } void TEST_OnAttack(int id, int c, int damage) { Print("item ", id, " is attacked by ", c, "\n"); } void TEST_OnTouch(int id, int c) { Print("item ", id, " is touched by ", c, "\n"); } void TEST_OnTrod(int id, int c) { Print("item ", id, " is trod by ", c, "\n"); } void TEST_OnHitChara(int id, int c) { Print("item ", id, " hit chara ", c, "\n"); } void TEST_OnHitItem(int id, int item) { Print("item ", id, " hit item ", item, "\n"); } void TEST_OnHitWall(int id) { Print("item ", id, " hit wall\n"); } int IsScenarioNPC(int c) { return GetCharaPlayer(c)==0 && var_rule==RULE_SCENARIO; } void OnRespawnItem(string name, float t) { int LocID = FindSceneItem(name); if (LocID >= 0) { Print("respawn ", name, "\n"); float x, y, z, dx, dy, dz; GetSceneItemPos(LocID, x, y, z); GetSceneItemRot(LocID, dx, dy, dz); int ObjectID = SpawnItem(name, x, y, z, dx, dy, dz); SuspendItem(ObjectID, t); } } // called by GameChara.cpp void OnRespawnWeapon(string name) { if (var_rule == RULE_ONE_ON_ONE) OnRespawnItem(name, 5); else OnRespawnItem(name, 30); } void OnRespawnDart(string name) { OnRespawnItem(name, 30); } void ResetWeapon(int id) { OnRespawnWeapon(GetItemName(id)); Destroy(id); } void ResetDart(int id) { OnRespawnDart(GetItemName(id)); Destroy(id); } void ResetItem(int id) { OnRespawnItem(GetItemName(id), 30); Destroy(id); } void SetWeaponItemAttrib(int id, string model, int wpn) { if (var_demoVersion && (wpn!=20 && wpn!=40 && wpn!=50 && wpn!=70)) { Destroy(id); return; } SetItemAttrib(id, ITEM_PHYSICS, ITEM_PHYSICS_ROTATE); SetItemAttrib(id, ITEM_LIFTABLE, 0); SetItemAttrib(id, ITEM_PICKABLE, 1); SetItemAttrib(id, ITEM_MODEL, model); SetItemAttrib(id, ITEM_WEAPON_ID, wpn); SetItemAttrib(id, ITEM_LIGHT_SFX, "OBJ_Weapon"); SetItemCallback(id, ITEM_ONTIMER, "ResetWeapon"); } void SetDartItemAttrib(int id, string model, int prjId, int count) { SetItemAttrib(id, ITEM_MODEL, model); SetItemAttrib(id, ITEM_PHYSICS, ITEM_PHYSICS_ROTATE); SetItemAttrib(id, ITEM_LIFTABLE, 0); SetItemAttrib(id, ITEM_PICKABLE, 1); SetItemAttrib(id, ITEM_DART_ID, prjId); SetItemAttrib(id, ITEM_COUNT, count); SetItemAttrib(id, ITEM_LIGHT_SFX, "OBJ_Dart_Normal"); SetItemCallback(id, ITEM_ONTIMER, "ResetDart"); } void SetEquipmentItemAttrib(int id, string model, int rage) { SetItemAttrib(id, ITEM_MODEL, model); SetItemAttrib(id, ITEM_ICON, "icon_"+model); SetItemAttrib(id, ITEM_PHYSICS, ITEM_PHYSICS_ROTATE); SetItemAttrib(id, ITEM_LIFTABLE, 0); SetItemAttrib(id, ITEM_PICKABLE, 1); SetItemAttrib(id, ITEM_EQUIPMENT_RAGE, rage); SetItemAttrib(id, ITEM_LIGHT_SFX, "OBJ_Chi_Others"); SetItemCallback(id, ITEM_ONTIMER, "ResetItem"); } void SetPowerUpItemAttrib(int id, string model) { SetItemAttrib(id, ITEM_MODEL, model); SetItemAttrib(id, ITEM_PHYSICS, ITEM_PHYSICS_ROTATE); SetItemAttrib(id, ITEM_LIFTABLE, 0); SetItemAttrib(id, ITEM_PICKABLE, 0); SetItemAttrib(id, ITEM_LIGHT_SFX, "OBJ_Chi_Others"); } void SetLiftableItemAttrib(int id, string model) { SetItemAttrib(id, ITEM_MODEL, model); SetItemAttrib(id, ITEM_PHYSICS, ITEM_PHYSICS_SLEEP); SetItemAttrib(id, ITEM_MASS, 1.0); SetItemAttrib(id, ITEM_BOUNCE, 0.1); SetItemAttrib(id, ITEM_LIFTABLE, 1); SetItemAttrib(id, ITEM_PICKABLE, 0); SetItemAttrib(id, ITEM_HP, 100); SetItemAttrib(id, ITEM_DAMAGE, 100); } void SetMachineItemAttrib(int id, string model) { SetItemAttrib(id, ITEM_MODEL, model); SetItemAttrib(id, ITEM_LIFTABLE, 0); SetItemAttrib(id, ITEM_PICKABLE, 0); SetItemAttrib(id, ITEM_PHYSICS, ITEM_PHYSICS_MACHINE); } void TRIGGER_InitItem(int id) { SetItemAttrib(id, ITEM_PHYSICS, ITEM_PHYSICS_NONE); SetItemAttrib(id, ITEM_LIFTABLE, 0); SetItemAttrib(id, ITEM_PICKABLE, 0); SetItemAttrib(id, ITEM_SIZE, 20, 20, 10); } void BOX01_InitItem(int id) { SetLiftableItemAttrib(id, "Box01"); SetItemAttrib(id, ITEM_MASS, 2.5); SetItemAttrib(id, ITEM_BOUNCE, 0.15); SetItemAttrib(id, ITEM_GRAVITY, -500); SetItemAttrib(id, ITEM_FRICTION, 0.7); SetItemAttrib(id, ITEM_FADESPEED, 80); SetItemAttrib(id, ITEM_ATTACKDATA, 7); SetItemAttrib(id, ITEM_FLY_SFX, "OBJ_Box01Drag"); SetItemAttrib(id, ITEM_HITWALL_SFX, "OBJ_Box01Down"); } void BOX01_OnAttack(int id, int c, int damage) { if (damage <= 1) return; int force = damage * 2; if (force > 400) force = 400; BreakItem(id, force); SpawnSFXOnEntity("OBJ_Box01", id); } void BOX01_OnHitWall(int id) { BreakItem(id, 150); SpawnSFXOnEntity("OBJ_Box01", id); } void BOX01_OnHitItem(int id, int item) { BreakItem(id, 150); SpawnSFXOnEntity("OBJ_Box01", id); } void BOX01_OnHitChara(int id, int c) { BreakItem(id, 150); SpawnSFXOnEntity("OBJ_Box01", id); } // --------- // Bomb // --------- void SHELL_InitItem(int id) { SetLiftableItemAttrib(id, "boom"); SetItemAttrib(id, ITEM_MASS, 4.7); SetItemAttrib(id, ITEM_GRAVITY, -1000); SetItemAttrib(id, ITEM_BOUNCE, 0.1); SetItemAttrib(id, ITEM_FRICTION, 0.5); SetItemAttrib(id, ITEM_DAMAGE, 25); // OLD 50 SetItemAttrib(id, ITEM_NOHURTTIME, 2); // SetItemAttrib(id, ITEM_LIGHT_SFX, "OBJ_Dart_Normal"); SetItemAttrib(id, ITEM_FLY_SFX, "OBJ_Bomb01Drag"); SetItemAttrib(id, ITEM_HITWALL_SFX, "OBJ_Bomb01Down"); } void BombExplode(int id) { float x, y, z; GetEntityPos(id, x, y, z); SpawnAttackSFX("OBJ_Bomb01", x, y, z, 2, 200, 0, GetItemThrower(id)); OnRespawnItem(GetItemName(id), 60); Destroy(id); // BreakItem(id, 500); } void SHELL_OnHitWall(int id) { BombExplode(id); } void SHELL_OnHitItem(int id, int item) { BombExplode(id); } void SHELL_OnHitChara(int id, int c) { BombExplode(id); } void SHELL_OnAttack(int id, int c, int damage) { if (damage > 5) BombExplode(id); } void PHOENIXSTONE_InitItem(int id) { SetItemAttrib(id, ITEM_MODEL, "phoenixstone"); SetItemAttrib(id, ITEM_PHYSICS, ITEM_PHYSICS_ROTATE); } void PHOENIXSTONE_OnTouch(int id, int c) { if (IsScenarioNPC(c)) return; if (IsCharaDead(c)) return; SetCharaNumPhoenixStones(c, GetCharaNumPhoenixStones(c)+1); SpawnSFXOnEntity("USE_Stone", c); Destroy(id); } // 小補血 void ITEM01_InitItem(int id) { SetPowerUpItemAttrib(id, "item01"); SetItemAttrib(id, ITEM_LIGHT_SFX, "OBJ_HP_up"); } void ITEM01_OnTouch(int id, int c) { if (IsScenarioNPC(c)) return; if (IsCharaDead(c)) return; if (GetCharaAttrib(c, CHARA_HP) < GetCharaAttrib(c, CHARA_MAX_HP)) { SetCharaAttrib(c, CHARA_HP, GetCharaAttrib(c, CHARA_HP)+150); SpawnSFXOnEntity("USE_HP_up", c); OnRespawnItem(GetItemName(id), 60); Destroy(id); } } void ITEM02_InitItem(int id) { SetPowerUpItemAttrib(id, "item02"); SetItemAttrib(id, ITEM_LIGHT_SFX, "OBJ_HP_up"); } void ITEM02_OnTouch(int id, int c) { if (IsScenarioNPC(c)) return; if (IsCharaDead(c)) return; if (GetCharaAttrib(c, CHARA_HP)