Advertisement
scroton

Untitled

Nov 26th, 2014
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.97 KB | None | 0 0
  1. //acs
  2. //switched to condense but extra functionality if uses all three args, can clamp zvelocity
  3.  
  4. case WEEB_DEC_JUMPATTACK:
  5. int WeebActorOldTid = ActivatorTID();
  6. int WeebTargetTid = unusedTID(6000,8000);
  7. int WeebActorTid = unusedTID(8001,10000);
  8. int WeebDummyProjectileTid = unusedTID(10001,12001);
  9. int WeebDummyProjectileSpeed = (a1 * 8);
  10.  
  11. if (a1 == 0) { a1 = 30; }
  12. if (a2 == 0) { a2 = 0x7FFFFFFF; }
  13. int a3; //whoops forgot I could only use 3 args, but might come in handy in another script, remove this line if get arg back
  14. if (a3 == 0) { a3 = 8; }
  15.  
  16. int ActorX = GetActorX(0) / 65536;
  17. int Actory = GetActorY(0) / 65536;
  18. int ActorZ = GetActorZ(0) / 65536;
  19.  
  20. GiveInventory("JumpFlagsOn", 1);
  21. ACS_Execute(267,0,21);
  22. Thing_ChangeTID(0,WeebActorTid);
  23.  
  24. SetActivatorToTarget(0);
  25. int WeebTargetOldTid = ActivatorTID();
  26.  
  27. if (ClassifyActor(0) == ACTOR_PLAYER) { WeebTargetTid = ActivatorTID(); }
  28. else if (ActivatorTID() == !0) { if (ThingCount(T_NONE,ActivatorTID()) == 1) { WeebTargetTid = ActivatorTID(); }}
  29. else { Thing_ChangeTID(0,WeebTargetTid); }
  30.  
  31. Thing_ProjectileIntercept(WeebActorTid,200,WeebDummyProjectileSpeed,0,WeebDummyProjectileTid);
  32. int WeebDummyProjectileAngle = GetActorAngle(WeebDummyProjectileTid);
  33. SetActorAngle(WeebActorTid,WeebDummyProjectileAngle);
  34.  
  35. int TargetX = GetActorX(0) / 65536;
  36. int Targety = GetActorY(0) / 65536;
  37. int TargetZ = GetActorZ(0) / 65536;
  38. int DiffX = (TargetX - ActorX);
  39. int DiffY = (TargetY - ActorY);
  40. int DiffZ = (TargetZ - ActorZ);
  41. int DiffSquaredX = abs(DiffX * DiffX);
  42. int DiffSquaredY = abs(DiffY * DiffY);
  43.  
  44. int FlatDistance = sqrt_i(DiffSquaredX + DiffSquaredY);
  45. int TimeToHit = abs(FlatDistance / a1);
  46. if (TimeToHit <= 0) { TimeToHit = 1; }
  47. int ExtraPep = ( FlatDistance ) / 150;
  48. if (ExtraPep > a3) { ExtraPep = a3; }
  49. int GravityToOvercome = (GetActorProperty(WeebActorTid,APROP_Gravity) * TimeToHit) / 65536;
  50.  
  51. int TotalZVelNeeded = (DiffZ / TimeToHit) + GravityToOvercome + ExtraPep;
  52. if (TotalZVelNeeded > a2) { TotalZVelNeeded = a2; }
  53. if (TotalZVelNeeded < 0) { TotalZVelNeeded = 0; }
  54. int TotalZVelNeededFixed = TotalZVelNeeded * 65536;
  55.  
  56. /*
  57. Log(s: "Target X:", d:TargetX);
  58. Log(s: "Target Y:", d:TargetY);
  59. Log(s: "Target Z:", d:TargetZ);
  60.  
  61. Log(s: "Actor X:", d:ActorX);
  62. Log(s: "Actor Y:", d:ActorY);
  63. Log(s: "Actor Z:", d:ActorZ);
  64.  
  65. Log(s: "Diff X:", d:DiffX);
  66. Log(s: "Diff Y:", d:DiffY);
  67. Log(s: "Diff Z:", d:DiffZ);
  68.  
  69. Log(s: "DiffSquared X:", d:DiffSquaredX);
  70. Log(s: "DiffSquared Y:", d:DiffSquaredY);
  71.  
  72. Log(s: "Flat Distance:", d:FlatDistance);
  73.  
  74. Log(s: "ExtraPep:", d:ExtraPep);
  75. Log(s: "GravityToOvercome:", d:GravityToOvercome);
  76. Log(s: "TotalZVelNeeded:", d:TotalZVelNeeded);
  77. */
  78.  
  79. int WeebDummyProjectileAngleByte = (WeebDummyProjectileAngle * 256/65536);
  80. SetActorVelocity(WeebActorTid,0,0,TotalZVelNeededFixed,0,0);
  81. ThrustThing(WeebDummyProjectileAngleByte,a1,1,WeebActorTid);
  82.  
  83. if (ClassifyActor(0) == !ACTOR_PLAYER) { Thing_ChangeTID(0,WeebTargetOldTid); }
  84. Thing_ChangeTID(WeebActorTid,WeebActorOldTid);
  85. break;
  86.  
  87.  
  88. case 22:
  89. Delay(1);
  90. TakeInventory("JumpFlagsOn", 1);
  91. GiveInventory("JumpFlagsOff", 1);
  92. Terminate;
  93.  
  94. Also add another script that checks if enemy is higher and in a different sector than the actor before jumping to this state, also maybe have them jump back from the ledge before doing this to make their attempt to jump up more likely to succeed.
  95.  
  96.  
  97.  
  98. //decorate
  99.  
  100.  
  101. actor DummyAimingProjectile
  102. {
  103. SpawnID 200
  104. Radius 1
  105. Height 1
  106. Speed 0
  107. Damage 0
  108. Renderstyle None
  109. Projectile
  110. +THRUACTORS
  111. +NOCLIP
  112. +NOINTERACTION
  113. -RANDOMIZE
  114. States
  115. {
  116. Spawn:
  117. TNT1 A 0
  118. TNT1 A 0
  119. TNT1 A 0
  120. TNT1 A 0
  121. TNT1 A 1
  122. TNT1 A 1
  123. TNT1 A 1
  124. TNT1 A 1
  125. Stop
  126. }
  127. }
  128.  
  129. Actor JumpFlagsOn : CustomInventory
  130. {
  131. +INVENTORY.AUTOACTIVATE
  132. Inventory.Amount 1
  133. Inventory.MaxAmount 1
  134. States
  135. {
  136. Pickup:
  137. TNT1 A 0 A_ChangeFlag("THRUSPECIES",1)
  138. TNT1 A 0 A_ChangeFlag("SLIDESONWALLS",1)
  139. Stop
  140. Use:
  141. TNT1 A 0 A_ChangeFlag("THRUSPECIES",1)
  142. TNT1 A 0 A_ChangeFlag("SLIDESONWALLS",1)
  143. Stop
  144. }
  145. }
  146.  
  147. Actor JumpFlagsOff : JumpFlagsOn
  148. {
  149. States
  150. {
  151. Pickup:
  152. TNT1 A 0 A_ChangeFlag("THRUSPECIES",0)
  153. TNT1 A 0 A_ChangeFlag("SLIDESONWALLS",0)
  154. Stop
  155. Use:
  156. TNT1 A 0 A_ChangeFlag("THRUSPECIES",0)
  157. TNT1 A 0 A_ChangeFlag("SLIDESONWALLS",0)
  158. Stop
  159. }
  160. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement