How do i prevent homing missiles homing in on the player.
I did not really know how to make "spell" attacks so i just tested it attached directly to the melee punch in the Player.txt file:
Code: Select all
Punch:
PLA1 H 1
NULL A 0 A_SpawnItemEx("MagicAttack", 0, 0, 0)
//NULL A 0 HealThing(-1, 1)
NULL A 0 A_JumpIfHealthLower(2, "Death.Fire")
NULL A 0 HealThing(-1, 1)
NULL A 0 A_TakeInventory("Punching", 1)
NULL A 7
That spawn this actor:
Code: Select all
Actor MagicAttack 15004 // summon MagicAttack
{
+NOGRAVITY
+NOBLOCKMAP
+Missile
+FORCEXYBILLBOARD
+SEEKERMISSILE
+RIPPER
+FLOAT
+DROPOFF
Health 1
Damage 100
Renderstyle add
Scale 0.1
states
{
Spawn:
TNT1 A 1
SPKO A 1 A_SpawnItemEx("UserSpawner1", 0, -75, 40, 0, -9, 0, -90)
TNT1 A 1
/*TNT1 A 0
SPKO A 1 A_SpawnItemEx("UserSpawner1", -1, -50, 40, 0, -9, 0, -85)
TNT1 A 0
SPKO A 1 A_SpawnItemEx("UserSpawner1", 1, -50, 40, 0, -9, 0, -95)
TNT1 A 0*/
Death:
stop
}
}
That spawns this projectile spawner:
Code: Select all
Actor UserSpawner1 15001 // summon UserSpawner1
{
+NOGRAVITY
+NOBLOCKMAP
+THRUACTORS
+FORCEXYBILLBOARD
+TOUCHY
+RIPPER
+SEEKERMISSILE
+FLOAT
+DROPOFF
SpawnId 25000
Speed 3
Height 5
Damage 100
Renderstyle add
Scale 0.1
var int user_test;
var int user_angle;
var int user_pitch;
var int user_times;
States
{
Spawn:
TNT1 A 0
SPKO A 1 A_SeekerMissile(45, 90, SMF_LOOK | SMF_PRECISE, 127, 3)
TNT1 A 0 A_SetUserVar("user_test", 0)
TNT1 A 0 A_SetUserVar("user_angle", 0)
TNT1 A 0 A_SetUserVar("user_pitch", 0)
TNT1 A 0 A_SetUserVar("user_times", 0)
TNT1 A 1 A_JumpIf(user_test == 0, "Setd1")
TNT1 A 1 A_CustomMissile("Thing1", 0, 0, user_angle, 2, user_pitch)
stop
Setd1:
TNT1 A 0
SPKO A 0 A_SeekerMissile(12, 24, SMF_LOOK | SMF_PRECISE, 127, 3)
TNT1 A 0 ACS_Execute(15005)
TNT1 A 0 A_JumpIf(user_test == 1, "Spawn")
SPKO A 1 A_SeekerMissile(12, 24, SMF_LOOK | SMF_PRECISE, 127, 3)
TNT1 A 0 ACS_Execute(15005)
TNT1 A 0 A_SetUserVar("user_times", user_times + 1)
SPKO A 0 A_SeekerMissile(12, 24, SMF_LOOK | SMF_PRECISE, 127, 3)
TNT1 A 0 ACS_Execute(15005)
TNT1 A 0 A_SetUserVar("user_angle", 0)
SPKO A 0 A_SeekerMissile(12, 24, SMF_LOOK | SMF_PRECISE, 127, 3)
TNT1 A 0 ACS_Execute(15005)
TNT1 A 0 A_SetUserVar("user_pitch", 90)
SPKO A 1 A_SeekerMissile(12, 24, SMF_LOOK | SMF_PRECISE, 127, 3)
TNT1 A 0 ACS_Execute(15005)
SPKO A 0 A_CustomMissile("Thing1", 0, 0, user_angle, 2, user_pitch)
SPKO A 0 A_SeekerMissile(12, 24, SMF_LOOK | SMF_PRECISE, 127, 3)
TNT1 A 0
Right:
SPKO A 0 A_SeekerMissile(45, 90, SMF_LOOK | SMF_PRECISE, 127, 3)
TNT1 A 0 ACS_Execute(15005)
TNT1 A 0 A_SetUserVar("user_pitch", user_pitch - 19)
SPKO A 1 A_SeekerMissile(12, 24, SMF_LOOK | SMF_PRECISE, 127, 3)
TNT1 A 0 ACS_Execute(15005)
TNT1 A 0 A_SetUserVar("user_times", user_times + 1)
SPKO A 0 A_SeekerMissile(12, 24, SMF_LOOK | SMF_PRECISE, 127, 3)
TNT1 A 0 ACS_Execute(15005)
SPKO A 1 A_CustomMissile("Thing1", 0, 0, user_angle, 2, user_pitch)
SPKO A 0 A_SeekerMissile(12, 24, SMF_LOOK | SMF_PRECISE, 127, 3)
TNT1 A 0 ACS_Execute(15005)
TNT1 A 0 A_JumpIf(user_pitch <= -71, "Setd2")
SPKO A 0 A_SeekerMissile(12, 24, SMF_LOOK | SMF_PRECISE, 127, 3)
TNT1 A 0 ACS_Execute(15005)
loop
Setd2:
SPKO A 0 A_SeekerMissile(12, 24, SMF_LOOK | SMF_PRECISE, 127, 3)
TNT1 A 0
TNT1 A 0 A_JumpIf(user_test == 1, "Spawn")
SPKO A 1 A_SeekerMissile(12, 24, SMF_LOOK | SMF_PRECISE, 127, 3)
TNT1 A 0
TNT1 A 0 A_SetUserVar("user_times", user_times + 1)
SPKO A 0 A_SeekerMissile(12, 24, SMF_LOOK | SMF_PRECISE, 127, 3)
TNT1 A 0
TNT1 A 0 A_SetUserVar("user_angle", 180)
SPKO A 0 A_SeekerMissile(12, 24, SMF_LOOK | SMF_PRECISE, 127, 3)
TNT1 A 0
TNT1 A 0 A_SetUserVar("user_pitch", -90)
SPKO A 0 A_SeekerMissile(12, 24, SMF_LOOK | SMF_PRECISE, 127, 3)
TNT1 A 0
SPKO A 1 A_CustomMissile("Thing1", 0, 0, user_angle, 2, user_pitch)
Left:
SPKO A 0 A_SeekerMissile(12, 24, SMF_LOOK | SMF_PRECISE, 127, 3)
TNT1 A 0 ACS_Execute(15005)
TNT1 A 0 A_SetUserVar("user_pitch", user_pitch + 19)
SPKO A 0 A_SeekerMissile(12, 24, SMF_LOOK | SMF_PRECISE, 127, 3)
TNT1 A 0 ACS_Execute(15005)
TNT1 A 0 A_SetUserVar("user_times", user_times + 1)
SPKO A 0 A_SeekerMissile(12, 24, SMF_LOOK | SMF_PRECISE, 127, 3)
TNT1 A 0 ACS_Execute(15005)
SPKO A 1 A_CustomMissile("Thing1", 0, 0, user_angle, 2, user_pitch)
SPKO A 0 A_SeekerMissile(12, 24, SMF_LOOK | SMF_PRECISE, 127, 3)
TNT1 A 0 ACS_Execute(15005)
TNT1 A 0 A_JumpIf(user_pitch >= 71, "Setd1")
SPKO A 0 A_SeekerMissile(12, 24, SMF_LOOK | SMF_PRECISE, 127, 3)
TNT1 A 0 ACS_Execute(15005)
TNT1 A 0 A_JumpIf(user_times >= 90, "RandomExp")
SPKO A 0 A_SeekerMissile(12, 24, SMF_LOOK | SMF_PRECISE, 127, 3)
TNT1 A 0 ACS_Execute(15005)
loop
RandomExp:
TNT1 A 0 A_Playsound("SPIRACT")
TNT1 A 0 A_Explode(50, 50)
TNT1 A 0 A_SetUserVar("user_times", user_times + 1)
SPKO A 0 A_CustomMissile("Thing1", 0, -15, Random (0 ,360), 2, Random (0 ,360))
SPKO A 0 A_CustomMissile("Thing1", 0, -25, Random (0 ,360), 2, Random (0 ,360))
SPKO A 0 A_CustomMissile("Thing1", 0, -35, Random (0 ,360), 2, Random (0 ,360))
TNT1 A 0 A_JumpIf(user_times >= 100, "Death")
loop
Death:
TNT1 A 1 A_Explode(50, 50)
stop
}
}
That spawns a bunch of these but they home on in the player so i need a way to prevent that.
Code: Select all
ACTOR Thing1
{
speed 1
//mass 1
+NoGravity
//+FLOAT
Gravity 1.0
//Friction 1.0
+Missile
+FORCEXYBILLBOARD
Scale 0.05
+DOOMBOUNCE
+DONTSPLASH
+RIPPER
+NoBlockMap
+SEEKERMISSILE
+FRIENDLY
//+THRUACTORS
BounceFactor 1
Health 1
Damage 2
alpha 1.0
renderstyle Add
var int user_times;
var int user_dmg;
states
{
Spawn:
TNT1 A 0
SPKO A 0 A_SeekerMissile(12, 24, SMF_LOOK | SMF_PRECISE, 64, 1)
TNT1 A 0 A_SetUserVar("user_times", 0)
SPKO A 0 A_SeekerMissile(12, 24, SMF_LOOK | SMF_PRECISE, 64, 1)
TNT1 A 0 A_SetUserVar("user_dmg", 80)
SPKO A 0 A_SeekerMissile(12, 24, SMF_LOOK | SMF_PRECISE, 64, 1)
TNT1 A 1 A_Playsound("SPIRACT")
SPKO A 0 A_SeekerMissile(12, 24, SMF_LOOK | SMF_PRECISE, 64, 1)
Fire:
TNT1 A 0
SPKO A 0 A_SeekerMissile(45, 90, SMF_LOOK | SMF_PRECISE, 64, 1)
TNT1 A 0 A_SetUserVar("user_times", user_times + 1)
SPKO A 0 A_SeekerMissile(45, 90, SMF_LOOK | SMF_PRECISE, 64, 1)
SPKO A 1 Bright A_Explode(user_dmg, 3)
SPKO A 0 A_SeekerMissile(45, 90, SMF_LOOK | SMF_PRECISE, 64, 1)
TNT1 A 0 A_SetUserVar("user_dmg", user_dmg - 1)
SPKO A 0 A_SeekerMissile(45, 90, SMF_LOOK | SMF_PRECISE, 64, 1)
TNT1 A 0 A_JumpIf(user_times == 40, "Death")
SPKO A 0 A_SeekerMissile(45, 90, SMF_LOOK | SMF_PRECISE, 64, 1)
loop
Death:
TNT1 A 1 A_Explode(3, 3)
stop
}
}
I would also like to know if it is possible to restrict the homing in target to a specific type or species, or by excluding a certain monster or player class, TID id would only work for one player so it's not a good solution, and i have not figured out how to give a tid to the projectile spawner either as i wanted to guide the userspawner1 with acs by messaging its height over the floor to prevent it crashing into it if possible, as a side not these projectiles can't be manually aimed up or down yet.