my Companion is not Friendly

Ask about ACS, DECORATE, ZScript, or any other scripting questions here!

Moderator: GZDoom Developers

Forum rules
Before asking on how to use a ZDoom feature, read the ZDoom wiki first. If you still don't understand how to use a feature, then ask here.

Please bear in mind that the people helping you do not automatically know how much you know. You may be asked to upload your project file to look at. Don't be afraid to ask questions about what things mean, but also please be patient with the people trying to help you. (And helpers, please be patient with the person you're trying to help!)
Post Reply
User avatar
JuliusKoolius
Posts: 56
Joined: Tue Apr 07, 2020 4:20 pm
Location: Even I don't know

my Companion is not Friendly

Post by JuliusKoolius »

Can someone please tell me how to make it so that your companion in your companion mod is friendly towards the player? because whenever I try to make my companion friendly and test it, he is still hostile to me.
User avatar
JuliusKoolius
Posts: 56
Joined: Tue Apr 07, 2020 4:20 pm
Location: Even I don't know

Re: my Companion is not Friendly

Post by JuliusKoolius »

Here is the current code that I have (and yes I know that it is just an edited version of Brutal Friends)

ACTOR FriendHissy : SwitchableDecoration
{
Scale 1.0
Health 9999999
Radius 16
Height 56
Mass 400
MaxTargetRange 2000
Speed 9
FastSpeed 20
PainChance 250
Species "Marines"
+FLOATBOB
MONSTER
+ismonster
+FRIENDLY
+LOOKALLAROUND
+FLOORCLIP
-FASTER
+MTHRUSPECIES
+THRUSPECIES
+DONTHURTSPECIES
+NOBLOCKMONST
+USESPECIAL
-CANNOTPUSH
-COUNTKILL
+FLOAT
+NOGRAVITY
+THRUACTORS
-SHOOTABLE
+NODAMAGETHRUST
-SOLID
+NOBLOCKMONST
+INVULNERABLE
+NOBLOOD

Damage 10
MaxStepHeight 48
MaxDropOffHeight 48
MeleeDamage 6
States
{


Spawn:
CACB A 1
TNT1 A 0 A_ChangeFLag("FRIENDLY", 1)
CACB A 1 A_Look
Loop


ForgetTarget:
TNT1 A 0 A_ClearTarget
Goto See



Idle:
See:
TNT1 A 0
TNT1 A 0 A_ChangeFlag("NODROPOFF", 0)
TNT1 A 0 A_ChangeFLag("FRIENDLY", 1)
TNT1 A 0 A_JumpIfInTargetInventory("TargetIsAMarine", 1, "FollowPLayer")//



TNT1 A 0 A_ChangeFlag("MISSILEMORE", 1)
TNT1 A 0 A_ChangeFlag("MISSILEEVENMORE", 1)
TNT1 A 0

TNT1 A 0 A_JumpIfInTargetInventory("TargetIsAMarine", 1, "FollowPLayer")//
CACB AA 1 A_Chase
TNT1 A 0 A_ChangeFlag("FASTER", 0)
TNT1 A 0
TNT1 A 0 A_JumpIfInTargetInventory("TargetIsAMarine", 1, "FollowPLayer")//
TNT1 A 0 A_JumpIfInTargetInventory("IsPlayer", 1, "FollowPLayer")//
CACB AA 1 A_Chase
NULL A 0
TNT1 A 0
TNT1 A 0 A_JumpIfInTargetInventory("TargetIsAMarine", 1, "FollowPLayer")//
CACB AA 1 A_Chase
TNT1 A 0 A_ChangeFLag("FRIENDLY", 0)
TNT1 A 0
TNT1 A 0 A_JumpIfInTargetInventory("TargetIsAMarine", 1, "FollowPLayer")//
CACB AA 1 A_Chase
NULL A 0
TNT1 A 0 A_ChangeFLag("FRIENDLY", 1)
TNT1 A 0
TNT1 A 0 A_JumpIfInTargetInventory("TargetIsAMarine", 1, "FollowPLayer")//
CACB AA 1 A_Chase
TNT1 A 0
TNT1 A 0 A_JumpIfInTargetInventory("TargetIsAMarine", 1, "FollowPLayer")//
CACB AA 1 A_Chase

TNT1 A 0
TNT1 A 0 A_JumpIfInTargetInventory("TargetIsAMarine", 1, "FollowPLayer")//
CACB AA 1 A_Chase
TNT1 A 0
TNT1 A 0 A_CheckSight("ForgetTarget")
TNT1 A 0 A_JumpIfInTargetInventory("TargetIsAMarine", 1, "FollowPLayer")//
TNT1 A 0 A_CheckSight("FollowPLayer")
TNT1 A 0 A_ChangeFLag("FRIENDLY", 0)

CACB AA 1 A_Chase
NULL A 0
TNT1 A 0
TNT1 A 0 A_JumpIfCloser(200, "Waits")
TNT1 A 0 A_CheckSight("CheckIfPlayerSee")

CACB AA 1 A_Chase
TNT1 A 0
TNT1 A 0 A_JumpIfInTargetInventory("IsPlayer", 1, "FollowPlayer")
TNT1 A 0 A_JumpIfCloser(200, "Waits")
TNT1 A 0 A_CheckSight("CheckIfPlayerSee")

CACB AA 1 A_Chase
NULL A 0
TNT1 A 0
TNT1 A 0 A_JumpIfInTargetInventory("IsPlayer", 1, "FollowPlayer")
TNT1 A 0 A_JumpIfCloser(200, "Waits")
TNT1 A 0 A_CheckSight("CheckIfPlayerSee")

CACB AA 1 A_Chase
TNT1 A 0

TNT1 A 0 A_JumpIfInTargetInventory("IsPlayer", 1, "FollowPlayer")
TNT1 A 0 A_JumpIfCloser(200, "Waits")
TNT1 A 0 A_CheckSight("CheckIfPlayerSee")


TNT1 A 0 A_JumpIfCloser(200, "Waits")
TNT1 A 0 A_JumpIfInTargetInventory("IsPlayer", 1, "FollowPlayer")
Goto See



FollowPlayer:
TNT1 A 0 A_ChangeFlag("FRIENDLY", 0)
TNT1 A 0 A_ChangeFlag("FASTER", 1)
TNT1 A 0 A_JumpIfCloser(150, "Waits")
TNT1 A 0 A_ChangeFlag("MISSILEMORE", 0)
TNT1 A 0 A_ChangeFlag("MISSILEEVENMORE", 0)
CACB A 1 A_Chase

TNT1 A 0
TNT1 A 0
CACB AA 1 A_Chase
TNT1 A 0
CACB AA 1 A_Chase
TNT1 A 0 A_CheckSight("CheckIfPlayerSee")
NULL A 0
TNT1 A 0
CACB AA 1 A_Chase
TNT1 A 0
CACB AA 1 A_Chase
NULL A 0
TNT1 A 0
CACB AA 1 A_Chase
TNT1 A 0
CACB AA 1 A_Chase

TNT1 A 0
CACB AA 1 A_Chase
TNT1 A 0 A_CheckSight("CheckIfPlayerSee")
TNT1 A 0

CACB AA 1 A_Chase
TNT1 A 0
NULL A 0
CACB AA 1 A_Chase
TNT1 A 0
CACB AA 1 A_Chase
NULL A 0
TNT1 A 0
CACB AA 1 A_Chase
TNT1 A 0 A_CheckSight("CheckIfPlayerSee")
TNT1 A 0
CACB AA 1 A_Chase

TNT1 A 0
CACB AA 1 A_Chase
TNT1 A 0
CACB AA 1 A_Chase
NULL A 0
TNT1 A 0

TNT1 A 0 A_ChangeFlag("FRIENDLY", 1)
TNT1 A 0 A_JumpIfTargetInLOS("See")
TNT1 A 0 A_ChangeFlag("FRIENDLY", 0)


TNT1 A 0 A_CheckSight("CheckIfPlayerSee")
Loop

CheckRangeToWait:
TNT1 A 0
TNT1 A 0 A_JumpIfCloser(150, "Waits")
Goto FollowPLayer

CheckIfPlayerSee:
TNT1 A 0
CACB AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 0 A_FastChase
TNT1 A 0 A_ChangeFLag("FRIENDLY", 0)
////TNT1 A 0 Thing_Hate(94, 0, 0)
TNT1 A 0 A_JumpIfCloser(1000, 2)
Goto Pathfind
TNT1 AAA 0
Goto FollowPlayer

Pathfind:
TNT1 A 0
TNT1 A 0 A_ChangeFLag("FRIENDLY", 0)
TNT1 A 0 A_JumpIFInTargetInventory("IsPLayer", 1, 1)
Goto FollowPLayer
//TNT1 A 1 A_Chase("", "")
TNT1 A 0 A_ChangeFlag("NOBLOCKMAP", 1)
TNT1 A 0 A_ChangeFlag("NOCLIP", 1)
TNT1 A 0 A_ChangeFlag("SOLID", 0)
TNT1 A 0 A_Noblocking
TNT1 A 0 A_SpawnItemEx ("FriendHissyPathfinder",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
Stop

Waits:
CACB A 1
TNT1 A 0 A_JumpIfInTargetInventory("IsPlayer", 1, 2)
TNT1 A 0 A_ClearTarget
Goto See
TNT1 A 0 A_ChangeFlag("FRIENDLY", 0)
TNT1 A 0 A_ChangeFlag("MISSILEMORE", 1)
TNT1 A 0 A_ChangeFlag("MISSILEEVENMORE", 1)
TNT1 A 0 A_ChangeFlag("SOLID", 0)
TNT1 A 0 A_JumpIfInTargetInventory("TargetIsAMarine", 1, "BecomeEnemy23")
TNT1 A 0 A_Jump(32, "Waits2")
TNT1 A 0 A_Jump(32, "Waits3")

CACB A 4 A_Stop
CACB A 4 A_Stop
TNT1 A 0 A_Stop
TNT1 A 0 A_CheckSight("FollowPlayer")
TNT1 A 0 A_ChangeFLag("FRIENDLY", 1)
TNT1 A 0 A_ClearTarget

CACB A 0 A_Look
TNT1 A 0 A_ChangeFLag("FRIENDLY", 0)
CACB A 1 A_LookEx(0, 0, 0, 0, 0, "FollowPlayer")
TNT1 A 0 A_CheckSIght("FollowPlayer")
TNT1 A 0 A_JumpIfCloser(200, "Waits")
Goto FollowPlayer

Waits2:
TNT1 A 0 A_SetAngle(random(90, -90) + angle)
CACB A 6 A_Stop
TNT1 A 0 //A_PlaySound("MRNWT", 2)
CACB A 6 A_Stop
TNT1 A 0 A_CheckSight("FollowPlayer")
TNT1 A 0 A_ChangeFLag("FRIENDLY", 1)
TNT1 A 0 A_ClearTarget
CACB A 0 A_Look
TNT1 A 0 A_ChangeFLag("FRIENDLY", 0)
CACB A 1 A_LookEx(0, 0, 0, 0, 0, "FollowPlayer")
TNT1 A 0 A_CheckSIght("FollowPlayer")
TNT1 A 0 A_JumpIfCloser(300, "Waits")
Goto FollowPLayer

Waits3:
TNT1 A 0
//TNT1 A 0 A_JumpIfInTargetInventory("Clip2", 40, 3)
//Goto GiveAmmo
TNT1 AAA 0
TNT1 A 0 A_SetAngle(random(90, -90) + angle)
CACB A 4 A_Stop
TNT1 A 0 //A_PlaySound("MRNWC", 2)
CACB A 4 A_Stop
CACB DED 1 A_Stop
TNT1 A 0 A_CheckSight("FollowPlayer")
TNT1 A 0 A_ChangeFLag("FRIENDLY", 1)
TNT1 A 0 A_ClearTarget

CACB A 0 A_Look
TNT1 A 0 A_ChangeFLag("FRIENDLY", 0)
CACB A 1 A_LookEx(0, 0, 0, 0, 0, "FollowPlayer")
TNT1 A 0 A_CheckSIght("FollowPlayer")
TNT1 A 0 A_JumpIfCloser(300, "Waits")
Goto FollowPLayer

//Disabled
GiveAmmo:
TNT1 A 0
MR7S A 10 A_FaceTarget
TNT1 A 0 //A_PlaySound("MRNGI1")
MR8S CD 15
TNT1 A 0 A_GiveToTarget("Clip2", 50)
//TNT1 A 0 A_SpawnItemEx("Stimpack", 40, 0)
Goto Waits

Missile:
TNT1 A 0 A_ChangeFLag("FRIENDLY", 1)
TNT1 A 0
TNT1 A 0 A_ChangeFlag("NODROPOFF", 1)
TNT1 A 0 A_JumpIfInTargetInventory("TargetIsACyberdemon", 1, "CheckRetreat") // Brutal Doom-friendly realistic AI.
TNT1 A 0 A_JumpIfInTargetInventory("TargetIsAMastermind", 1, "CheckRetreat")//...
TNT1 A 0 A_JumpIfInTargetInventory("TargetIsABaronOfHell", 1, "CheckRetreat")//...
TNT1 A 0 A_JumpIfInTargetInventory("TargetIsAMancubus", 1, "CheckRetreat")//...
TNT1 A 0 A_JumpIfInTargetInventory("TargetIsAMarine", 1, "FollowPlayer")////Never remove this one!
TNT1 A 0 A_JumpIfInTargetInventory("IsPlayer", 1, "CheckRangeToWait")
TNT1 A 0 A_ChangeFlag("SOLID", 1)

TNT1 A 0 A_JumpIfCloser(200, "Retreat")

TNT1 A 0 A_FaceTarget
CACB A 1 A_Chase ("","")
TNT1 A 0 A_JumpIfInTargetInventory("IsPlayer", 1, "CheckRangeToWait")

ActualFireState:
CACB B 4 A_FaceTarget
TNT1 A 0 A_CustomMissile("HissyFireball",6,0)
CACB CB 4 A_Facetarget
Goto See

CheckRetreat:
TNT1 A 0
TNT1 A 0 A_JumpIfCloser(300, "Retreat")
Goto ActualFireState
Active:
TNT1 A 0
TNT1 A 0 A_CustomMissile ("OrderTitle2", 10, 0, 0, 2, 90)
TNT1 A 0 A_PlaySound("BabyCaco/Sight", 4)
CACB BCBA 4 A_FaceTarget
TNT1 A 0 A_ChangeFLag("FRIENDLY", 0)
TNT1 A 0 A_ChangeFlag("NOBLOCKMAP", 1)
TNT1 A 0 A_ChangeFlag("USESPECIAL", 0)
TNT1 A 0 A_SpawnItemEx ("FriendHissy_Guarding",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
TNT1 A 1
TNT1 A -1
Stop

Death:
TNT1 A 0
TNT1 A 0 A_ChangeFlag("USESPECIAL", 0) //Always add this line on every death animation, to prevent the player from resurrecting the actor by pressing use.
TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0)
CACB E 6 A_NoBlocking
TNT1 A 0 A_SetFloorClip
TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)
TNT1 A 0 A_PlaySound("BabyCaco/death", 4)
CACB FGHIJ 6
CACB K -1
Stop
}
}



ACTOR FriendHissy_Guarding : FriendHissy
{
Speed 0
FastSpeed 0
+FRIENDLY
Mass 500
States
{


Spawn:
TNT1 A 0
TNT1 A 0 A_GiveInventory("TargetIsAMarine", 1)
CACB A 4
TNT1 A 0 A_ChangeFLag("FRIENDLY", 1)
TNT1 A 0 A_GiveInventory("TargetIsAMarine")//Stops multiple sentries from firing at each other.
CACB A 4 A_Look
Loop



See:
TNT1 A 0
TNT1 A 0 A_ClearTarget
CACB AAAAAAAAAAAAAAAAAAAAAAAAAAAAADED 1 A_Chase
TNT1 A 0 A_FaceTarget
Loop

See2:
CACB A 2
TNT1 A 0 A_ClearTarget
Goto See

Missile:
TNT1 A 0
TNT1 A 0 A_ChangeFlag("NODROPOFF", 1)
TNT1 A 0 A_JumpIfInTargetInventory("TargetIsACyberdemon", 1, "CheckRetreat") // Brutal Doom-friendly realistic AI.
TNT1 A 0 A_JumpIfInTargetInventory("TargetIsAMastermind", 1, "CheckRetreat")//...
TNT1 A 0 A_JumpIfInTargetInventory("TargetIsABaronOfHell", 1, "CheckRetreat")//...
TNT1 A 0 A_JumpIfInTargetInventory("TargetIsAMancubus", 1, "CheckRetreat")//...
TNT1 A 0 A_JumpIfInTargetInventory("TargetIsAMarine", 1, "FollowPlayer")////Never remove this one!
TNT1 A 0 A_JumpIfInTargetInventory("IsPlayer", 1, "CheckRangeToWait")
TNT1 A 0 A_ChangeFlag("SOLID", 1)

TNT1 A 0 A_JumpIfCloser(200, "Retreat")
TNT1 A 0 A_JumpIfInTargetInventory("IsPlayer", 1, "CheckRangeToWait")

ActualFireState:
CACB B 4 A_FaceTarget
TNT1 A 0 A_CustomMissile("HissyFireball",6,0)
CACB CB 4 A_Facetarget
Goto See

CheckRetreat:
TNT1 A 0
TNT1 A 0 A_JumpIfCloser(300, "Retreat")
Goto ActualFireState

Retreat:
TNT1 A 0

CACB A 2 A_Recoil(1)
TNT1 A 0 A_FaceTarget
NULL A 0
CACB B 2 A_Recoil(1)
TNT1 A 0 A_FaceTarget
NULL A 0
CACB C 2 A_Recoil(1)
TNT1 A 0 A_FaceTarget

CACB D 2 A_Recoil(1)
TNT1 A 0 A_FaceTarget
Goto ActualFireState


Pain:
CACB D 2
TNT1 A 0 A_PlaySound("BabyCaco/pain", 4)
CACB E 2 A_Pain
Goto See + 1


Death:
TNT1 A 0
TNT1 A 0 A_ChangeFlag("USESPECIAL", 0) //Always add this line on every death animation, to prevent the player from resurrecting the actor by pressing use.
TNT1 A 0 A_ChangeFlag("NOGRAVITY", 0)
CACB E 6 A_NoBlocking
TNT1 A 0 A_SetFloorClip
TNT1 A 0 A_ChangeFlag("FLOATBOB", 0)
TNT1 A 0 A_PlaySound("BabyCaco/death", 4)
CACB FGHIJ 6
CACB K -1
Stop

Active:
TNT1 A 0
TNT1 A 0 A_PlaySound("BabyCaco/pain", 4)
TNT1 A 0 A_CustomMissile ("OrderTitle1", 10, 0, 0, 2, 90)
CACB BCBA 4 A_FaceTarget
TNT1 A 0 A_ChangeFLag("FRIENDLY", 0)
TNT1 A 0 A_ChangeFlag("NOBLOCKMAP", 1)
TNT1 A 0 A_ChangeFlag("USESPECIAL", 0)
TNT1 A 0 A_SpawnItemEx ("FriendHissy",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
TNT1 A 1
TNT1 A -1
Stop
}
}













ACTOR FriendHissyPathfinder
{
Radius 32
Height 56
Speed 20
Health 9999
PainChance 255
MaxTargetRange 150
Monster
damagefactor "SpawnMarine", 99999.0
MaxDropOffHeight 1200
MaxStepHeight 1200
-COUNTKILL
+NOTARGET
+THRUACTORS
+MISSILEMORE
+MISSILEEVENMORE
+FASTER
+DONTSPLASH
-FRIENDLY
+NOCLIP
+LOOKALLAROUND
+NOINFIGHTING
States
{
Spawn:
Pain:
See:
TNT1 A 0 A_ChangeFlag("FRIENDLY", 0)
//TNT1 A 0 Thing_ChangeTID(0,98)
//TNT1 A 0 Thing_Hate(98, 0, 0)
TNT1 A 0
TNT1 A 0 A_GiveInventory("TargetIsAMarine", 1)
TNT1 AAAAA 1 A_Chase
//TNT1 A 0 Thing_Hate(98, 0, 0)
TNT1 A 0
TNT1 A 0 A_GiveInventory("TargetIsAMarine", 1)
TNT1 A 0 A_FaceTarget
Loop
//Missile:
TNT1 A 2
TNT1 A 0 A_SpawnItem("MarineSpawnChecker")
TNT1 A 5
Goto See
Death:
Missile:
TNT1 A 0
TNT1 A 1 A_FaceTarget
TNT1 A 0 A_Recoil(-6)
TNT1 A 4
TNT1 A 0 A_Scream
TNT1 A 0 A_NoBlocking
TNT1 A 0 A_SpawnItemEx("FriendHissy",0,0,0,0,0,0,0,SXF_NOCHECKPOSITION,0)
TNT1 A 0 A_SpawnItem("TeleportFog")
Stop
}
}

ACTOR HissyFireball
{
Radius 13
Height 8
Speed 25
Damage 10
Projectile
+RANDOMIZE
+THRUSPECIES
+MTHRUSPECIES
RenderStyle Add
Species "Marines"
Alpha 0.99
Scale 1.6
SeeSound "imp/attack"
DeathSound "imp/shotx"
Obituary "$OB_MPPLASMARIFLE"
Damagetype "Plasma"
States
{
Spawn:
BCAB AB 6 Bright
Loop
Death:
BCAB CDE 4 Bright
Stop
}
}
Post Reply

Return to “Scripting”