void JFW_Obelisk_Weapon_CnC::Damaged(GameObject *obj,GameObject *damager,float damage) { Commands->Set_Health(obj,Commands->Get_Max_Health(obj)); Commands->Set_Shield_Strength(obj,Commands->Get_Max_Shield_Strength(obj)); } void JFW_Obelisk_Weapon_CnC::Created(GameObject *obj) { Vector3 v; GameObject *object; attack = false; range = 150.0f; effectid = 0; attackid = 0; EnemySeen = true; Commands->Set_Player_Type(obj,0); Commands->Set_Is_Rendered(obj,false); Commands->Enable_Enemy_Seen(obj,true); Commands->Enable_Hibernation(obj,false); Commands->Innate_Enable(obj); v = Commands->Get_Position(obj); object = Commands->Create_Object("Obelisk Effect",v); if (object) { effectid = Commands->Get_ID(object); Commands->Set_Animation_Frame(object,"OBL_POWERUP.OBL_POWERUP",0); } } void JFW_Obelisk_Weapon_CnC::Custom(GameObject *obj,int message,int param,GameObject *sender) { Vector3 pos,pos2; float distance; GameObject *object; switch(message) { case 1: if (!param) { Commands->Enable_Enemy_Seen(obj,false); EnemySeen = false; ActionParamsStruct params; params.Set_Basic(this,100,0); params.Set_Attack(obj,0,0,true); Commands->Action_Attack(obj,params); Commands->Action_Reset(obj,100); if (effectid) { object = Commands->Find_Object(effectid); if (object) { Commands->Set_Animation_Frame(object,"OBL_POWERUP.OBL_POWERUP",0); } } } else { Commands->Enable_Enemy_Seen(obj,true); EnemySeen = true; } break; case 2: if (!attack && EnemySeen) { object = Commands->Find_Object(param); if (object) { pos = Commands->Get_Position(obj); pos2 = Commands->Get_Position(object); distance = Commands->Get_Distance(pos,pos2); pos.Z = 0; pos2.Z = 0; if ((Commands->Get_Distance(pos,pos2) > 15) && (range >= distance)) { attackid = param; EnemySeen = false; Commands->Start_Timer(obj,this,2.0,1); object = Commands->Find_Object(effectid); if (object) { Commands->Set_Animation_Frame(object,"OBL_POWERUP.OBL_POWERUP",1); } pos2.Z -= 20; Commands->Create_Sound("Obelisk_Warm_Up",pos2,obj); } else { if (effectid) { object = Commands->Find_Object(effectid); if (object) { Commands->Set_Animation_Frame(object,"OBL_POWERUP.OBL_POWERUP",0); } } Commands->Action_Reset(obj,100); } } } break; case 3: attack = true; if (effectid) { object = Commands->Find_Object(effectid); if (object) { Commands->Set_Animation_Frame(object,"OBL_POWERUP.OBL_POWERUP",0); } } Commands->Action_Reset(obj,100); break; } } void JFW_Obelisk_Weapon_CnC::Enemy_Seen(GameObject *obj,GameObject *seen) { int id; if (!attack) { id = Commands->Get_ID(seen); Commands->Send_Custom_Event(obj,obj,2,id,0); } } void JFW_Obelisk_Weapon_CnC::Timer_Expired(GameObject *obj,int number) { GameObject *object; Vector3 pos,pos2; float distance; if (!attack) { if (number == 1) { object = Commands->Find_Object(attackid); if (object) { pos = Commands->Get_Position(obj); pos2 = Commands->Get_Position(object); distance = Commands->Get_Distance(pos,pos2); pos.Z = 0; pos2.Z = 0; if ((Commands->Get_Distance(pos,pos2) > 15) && (range >= distance)) { ActionParamsStruct params; params.Set_Basic(this,100,0); //params.Set_Attack(object,range,0,true); //testing with this commented out if (Is_Soldier(object)) { params.Set_Attack_Position(Commands->Get_Bone_Position(object,"c R Foot"),range,0,true); } //target feet else { params.Set_Attack(object,range,0,true); } Commands->Action_Attack(obj,params); attackid = 0; Commands->Start_Timer(obj,this,2.0,2); } else { if (effectid) { object = Commands->Find_Object(effectid); if (object) { Commands->Set_Animation_Frame(object,"OBL_POWERUP.OBL_POWERUP",0); } } Commands->Action_Reset(obj,100); EnemySeen = true; } } else { if (effectid) { object = Commands->Find_Object(effectid); if (object) { Commands->Set_Animation_Frame(object,"OBL_POWERUP.OBL_POWERUP",0); } } Commands->Action_Reset(obj,100); EnemySeen = true; } } else { if (number == 2) { if (effectid) { object = Commands->Find_Object(effectid); if (object) { Commands->Set_Animation_Frame(object,"OBL_POWERUP.OBL_POWERUP",0); } } EnemySeen = true; } } } } void JFW_Obelisk_Weapon_CnC::Register_Auto_Save_Variables() { Auto_Save_Variable(1,1,&EnemySeen); Auto_Save_Variable(2,4,&attackid); Auto_Save_Variable(3,4,&effectid); Auto_Save_Variable(4,4,&range); Auto_Save_Variable(5,1,&attack); }