Guest User

Untitled

a guest
Jul 22nd, 2012
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.58 KB | None | 0 0
  1. //-----------------------------------------
  2. //gunplay.acs
  3. //-----------------------------------------
  4. #library "GUNS"
  5. #include "zcommon.acs"
  6.  
  7. str numberActors[10] = {"num0","num1","num2","num3","num4","num5","num6","num7","num8","num9"};
  8.  
  9. script "DealHitscanDamage" (int maxrange, int maxDamage, int minDamage)
  10. {
  11. int dist = fdistance(0, 1000);
  12.  
  13. //add a little padding so you can actually do max damage
  14. dist -= 32.0;
  15. if (dist < 0)
  16. {
  17. dist = 0;
  18. }
  19.  
  20. //make it a fixed
  21. maxrange = maxrange << 16;
  22. int damage = 0;
  23.  
  24. //linear damage falloff, based on dist from monster to player
  25. damage = fixeddiv (dist, maxrange);
  26. if (damage > 1.0)
  27. {
  28. damage = 1.0;
  29. }
  30. damage = 1.0 - damage;
  31.  
  32. //ensure that the damage doesn't go above maxDamage
  33. damage *= (maxDamage - minDamage);
  34.  
  35. //add spread
  36. damage += random(0, 10);
  37.  
  38. //add mindamage to the mix
  39. damage = damage >> 16;
  40. damage += minDamage;
  41.  
  42. //deal the damage
  43. DamageThing(damage);
  44.  
  45. //increment the damage var
  46. SetUserVariable(0, "user_lastdamage", GetUserVariable(0, "user_lastdamage") + damage);
  47. }
  48.  
  49. script "SetupPlayerTid" ENTER
  50. {
  51. Thing_ChangeTid(0, 1000);
  52. }
  53.  
  54. script "DamageDropoff" (void)
  55. {
  56. SetResultValue(GetUserVariable(0, "user_damage"));
  57. }
  58.  
  59. script "GenericActorTick" (void)
  60. {
  61. if (GetUserVariable(0, "user_lastdamage") > 0)
  62. {
  63. Spawn("MagicDamageNumberGuy", getActorX(0), getActorY(0), GetActorZ(0) + 64.0, 32000);
  64. SetUserVariable(32000, "user_damage", GetUserVariable(0, "user_lastdamage"));
  65. Thing_ChangeTid(32000, 0);
  66. SetUserVariable(0, "user_lastdamage", 0);
  67. }
  68. if (GetActorProperty(0, APROP_HEALTH) > 0)
  69. {
  70. if (GetUserVariable(0, "user_afterburn") > 0)
  71. {
  72. if (GetUserVariable(0, "user_afterburn") % 10 == 0)
  73. {
  74. Thing_Damage2(0, 2, "Afterburn");
  75. }
  76. SetUserVariable(0, "user_afterburn", GetUserVariable(0, "user_afterburn") - 1);
  77. }
  78. Delay(1);
  79. restart;
  80. }
  81. }
  82.  
  83. int damagenum[3];
  84. script "NumberMagic" (void)
  85. {
  86. if (GetUserVariable(0, "user_ticks") < 30)
  87. {
  88. int damage = GetUserVariable(0, "user_damage");
  89. int numbers = 2;
  90. damagenum[0] = (damage / 100) % 10;
  91. damagenum[1] = (damage / 10) % 10;
  92. damagenum[2] = (damage / 1) % 10;
  93. if (damagenum[0] == 0)
  94. {
  95. numbers--;
  96. if (damagenum[1] == 0)
  97. numbers--;
  98. }
  99.  
  100. int angle = 1.0 - VectorAngle(GetActorX(0) - GetActorX(1000), GetActorY(0) - GetActorY(1000));
  101. int startOffset = 14.0;
  102. //startOffset += (7.0 * (numbers - 1));
  103.  
  104. int offset = startOffset;
  105. for (int x = 0; x <= numbers; x++)
  106. {
  107. int posX = sin(angle);
  108. int posY = cos(angle);
  109.  
  110. Spawn(numberActors[damagenum[x + (2-numbers)]], GetActorX(0) + FixedMul(posX, offset), GetActorY(0) + FixedMul(posY, offset), getActorZ(0), 0, 0);
  111. offset -= 14.0;
  112. }
  113.  
  114. SetUserVariable(0, "user_ticks", GetUserVariable(0, "user_ticks") + 1);
  115. delay(1);
  116. restart;
  117. }
  118. }
  119.  
  120. function int abs(int input)
  121. {
  122. if (input < 0)
  123. {
  124. return -input;
  125. }
  126. return input;
  127. }
  128.  
  129. function int fdistance (int tid1, int tid2)
  130. {
  131. int len;
  132. int y = getactory(tid1) - getactory(tid2);
  133. int x = getactorx(tid1) - getactorx(tid2);
  134. int z = getactorz(tid1) - getactorz(tid2);
  135.  
  136. int ang = vectorangle(x,y);
  137. if(((ang+0.125)%0.5) > 0.25) len = fixeddiv(y, sin(ang));
  138. else len = fixeddiv(x, cos(ang));
  139.  
  140. ang = vectorangle(len, z);
  141. if(((ang+0.125)%0.5) > 0.25) len = fixeddiv(z, sin(ang));
  142. else len = fixeddiv(len, cos(ang));
  143.  
  144. return len;
  145. }
  146.  
  147. //-----------------------------------------
  148. //decorate
  149. //-----------------------------------------
  150. ACTOR MagicDamageNumberGuy
  151. {
  152. +NOBLOCKMAP
  153. +NOGRAVITY
  154. VSpeed 1
  155. var int user_damage;
  156. var int user_ticks;
  157. States
  158. {
  159. Spawn:
  160. TNT1 AA 0 ACS_NamedExecuteAlways("NumberMagic", 0, 0, 0, 0)
  161. TNT1 A 300
  162. Stop
  163. }
  164. }
  165.  
  166. Actor num0
  167. {
  168. +NOBLOCKMAP
  169. +NOGRAVITY
  170. States
  171. {
  172. Spawn:
  173. NUM0 A 2 bright
  174. stop
  175. }
  176. }
  177.  
  178. Actor num1
  179. {
  180. +NOBLOCKMAP
  181. +NOGRAVITY
  182. States
  183. {
  184. Spawn:
  185. NUM1 A 2 bright
  186. stop
  187. }
  188. }
  189.  
  190. Actor num2
  191. {
  192. +NOBLOCKMAP
  193. +NOGRAVITY
  194. States
  195. {
  196. Spawn:
  197. NUM2 A 2 bright
  198. stop
  199. }
  200. }
  201.  
  202. Actor num3
  203. {
  204. +NOBLOCKMAP
  205. +NOGRAVITY
  206. States
  207. {
  208. Spawn:
  209. NUM3 A 2 bright
  210. stop
  211. }
  212. }
  213.  
  214. Actor num4
  215. {
  216. +NOBLOCKMAP
  217. +NOGRAVITY
  218. States
  219. {
  220. Spawn:
  221. NUM4 A 2 bright
  222. stop
  223. }
  224. }
  225.  
  226. Actor num5
  227. {
  228. +NOBLOCKMAP
  229. +NOGRAVITY
  230. States
  231. {
  232. Spawn:
  233. NUM5 A 2 bright
  234. stop
  235. }
  236. }
  237.  
  238. Actor num6
  239. {
  240. +NOBLOCKMAP
  241. +NOGRAVITY
  242. States
  243. {
  244. Spawn:
  245. NUM6 A 2 bright
  246. stop
  247. }
  248. }
  249.  
  250. Actor num7
  251. {
  252. +NOBLOCKMAP
  253. +NOGRAVITY
  254. States
  255. {
  256. Spawn:
  257. NUM7 A 2 bright
  258. stop
  259. }
  260. }
  261.  
  262. Actor num8
  263. {
  264. +NOBLOCKMAP
  265. +NOGRAVITY
  266. States
  267. {
  268. Spawn:
  269. NUM8 A 2 bright
  270. stop
  271. }
  272. }
  273.  
  274. Actor num9
  275. {
  276. +NOBLOCKMAP
  277. +NOGRAVITY
  278. States
  279. {
  280. Spawn:
  281. NUM9 A 2 bright
  282. stop
  283. }
  284. }
  285.  
  286. ACTOR ZombieManII : Zombieman replaces Zombieman
  287. {
  288. PainChance 256
  289. PainChance "Afterburn", 128
  290. Health 100
  291. var int user_afterburn;
  292. var int user_lastdamage;
  293. States
  294. {
  295. Spawn:
  296. POSS AA 0 ACS_NamedExecuteAlways("GenericActorTick")
  297. Goto Super::Spawn
  298. Missile:
  299. POSS E 10 A_FaceTarget
  300. POSS F 8 A_CustomBulletAttack(22.9,0,1,5)
  301. POSS E 8
  302. Goto See
  303. Pain.Gun:
  304. POSS G 0 ACS_NamedExecuteAlways("DealHitscanDamage",0,512,150,50)
  305. goto Super::Pain
  306. Pain.Sniper:
  307. POSS G 0 ACS_NamedExecuteAlways("DealHitscanDamage",0,3000,300,50)
  308. goto Super::Pain
  309. Pain.MGun:
  310. POSS G 0 ACS_NamedExecuteAlways("DealHitscanDamage",0,512,80,30)
  311. goto Super::Pain
  312. Pain.Shotgun:
  313. POSS G 0 ACS_NamedExecuteAlways("DealHitscanDamage",0,512,60,10)
  314. goto Super::Pain
  315. Pain.Fire:
  316. POSS G 0 A_SetUserVar("user_afterburn", 400)
  317. goto Super::Pain
  318. }
  319. }
Advertisement
Add Comment
Please, Sign In to add comment