Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //-----------------------------------------
- //gunplay.acs
- //-----------------------------------------
- #library "GUNS"
- #include "zcommon.acs"
- str numberActors[10] = {"num0","num1","num2","num3","num4","num5","num6","num7","num8","num9"};
- script "DealHitscanDamage" (int maxrange, int maxDamage, int minDamage)
- {
- int dist = fdistance(0, 1000);
- //add a little padding so you can actually do max damage
- dist -= 32.0;
- if (dist < 0)
- {
- dist = 0;
- }
- //make it a fixed
- maxrange = maxrange << 16;
- int damage = 0;
- //linear damage falloff, based on dist from monster to player
- damage = fixeddiv (dist, maxrange);
- if (damage > 1.0)
- {
- damage = 1.0;
- }
- damage = 1.0 - damage;
- //ensure that the damage doesn't go above maxDamage
- damage *= (maxDamage - minDamage);
- //add spread
- damage += random(0, 10);
- //add mindamage to the mix
- damage = damage >> 16;
- damage += minDamage;
- //deal the damage
- DamageThing(damage);
- //increment the damage var
- SetUserVariable(0, "user_lastdamage", GetUserVariable(0, "user_lastdamage") + damage);
- }
- script "SetupPlayerTid" ENTER
- {
- Thing_ChangeTid(0, 1000);
- }
- script "DamageDropoff" (void)
- {
- SetResultValue(GetUserVariable(0, "user_damage"));
- }
- script "GenericActorTick" (void)
- {
- if (GetUserVariable(0, "user_lasthealth") - GetActorProperty(0, APROP_HEALTH) > 0)
- {
- Spawn("MagicDamageNumberGuy", getActorX(0), getActorY(0), GetActorZ(0) + 64.0, 32000);
- SetUserVariable(32000, "user_damage", GetUserVariable(0, "user_lasthealth") - GetActorProperty(0, APROP_HEALTH));
- Thing_ChangeTid(32000, 0);
- SetUserVariable(0, "user_lastdamage", 0);
- }
- if (GetActorProperty(0, APROP_HEALTH) > 0)
- {
- SetUserVariable(0, "user_lasthealth", GetActorProperty(0, APROP_HEALTH));
- if (GetUserVariable(0, "user_afterburn") > 0)
- {
- if (GetUserVariable(0, "user_afterburn") % 10 == 0)
- {
- Thing_Damage2(0, 4, "Afterburn");
- }
- SetUserVariable(0, "user_afterburn", GetUserVariable(0, "user_afterburn") - 1);
- }
- Delay(1);
- restart;
- }
- }
- int damagenum[3];
- script "NumberMagic" (void)
- {
- if (GetUserVariable(0, "user_ticks") < 30)
- {
- int damage = GetUserVariable(0, "user_damage");
- int numbers = 2;
- damagenum[0] = (damage / 100) % 10;
- damagenum[1] = (damage / 10) % 10;
- damagenum[2] = (damage / 1) % 10;
- if (damagenum[0] == 0)
- {
- numbers--;
- if (damagenum[1] == 0)
- numbers--;
- }
- int angle = 1.0 - VectorAngle(GetActorX(0) - GetActorX(1000), GetActorY(0) - GetActorY(1000));
- int startOffset = 14.0;
- //startOffset += (7.0 * (numbers - 1));
- int offset = startOffset;
- for (int x = 0; x <= numbers; x++)
- {
- int posX = sin(angle);
- int posY = cos(angle);
- Spawn(numberActors[damagenum[x + (2-numbers)]], GetActorX(0) + FixedMul(posX, offset), GetActorY(0) + FixedMul(posY, offset), getActorZ(0), 0, 0);
- offset -= 14.0;
- }
- SetUserVariable(0, "user_ticks", GetUserVariable(0, "user_ticks") + 1);
- delay(1);
- restart;
- }
- }
- function int abs(int input)
- {
- if (input < 0)
- {
- return -input;
- }
- return input;
- }
- function int fdistance (int tid1, int tid2)
- {
- int len;
- int y = getactory(tid1) - getactory(tid2);
- int x = getactorx(tid1) - getactorx(tid2);
- int z = getactorz(tid1) - getactorz(tid2);
- int ang = vectorangle(x,y);
- if(((ang+0.125)%0.5) > 0.25) len = fixeddiv(y, sin(ang));
- else len = fixeddiv(x, cos(ang));
- ang = vectorangle(len, z);
- if(((ang+0.125)%0.5) > 0.25) len = fixeddiv(z, sin(ang));
- else len = fixeddiv(len, cos(ang));
- return len;
- }
- //-----------------------------------------
- //decorate
- //-----------------------------------------
- ACTOR MagicDamageNumberGuy
- {
- +NOBLOCKMAP
- +NOGRAVITY
- VSpeed 1
- var int user_damage;
- var int user_ticks;
- States
- {
- Spawn:
- TNT1 AA 0 ACS_NamedExecuteAlways("NumberMagic", 0, 0, 0, 0)
- TNT1 A 300
- Stop
- }
- }
- Actor num0
- {
- +NOBLOCKMAP
- +NOGRAVITY
- States
- {
- Spawn:
- NUM0 A 2 bright
- stop
- }
- }
- Actor num1
- {
- +NOBLOCKMAP
- +NOGRAVITY
- States
- {
- Spawn:
- NUM1 A 2 bright
- stop
- }
- }
- Actor num2
- {
- +NOBLOCKMAP
- +NOGRAVITY
- States
- {
- Spawn:
- NUM2 A 2 bright
- stop
- }
- }
- Actor num3
- {
- +NOBLOCKMAP
- +NOGRAVITY
- States
- {
- Spawn:
- NUM3 A 2 bright
- stop
- }
- }
- Actor num4
- {
- +NOBLOCKMAP
- +NOGRAVITY
- States
- {
- Spawn:
- NUM4 A 2 bright
- stop
- }
- }
- Actor num5
- {
- +NOBLOCKMAP
- +NOGRAVITY
- States
- {
- Spawn:
- NUM5 A 2 bright
- stop
- }
- }
- Actor num6
- {
- +NOBLOCKMAP
- +NOGRAVITY
- States
- {
- Spawn:
- NUM6 A 2 bright
- stop
- }
- }
- Actor num7
- {
- +NOBLOCKMAP
- +NOGRAVITY
- States
- {
- Spawn:
- NUM7 A 2 bright
- stop
- }
- }
- Actor num8
- {
- +NOBLOCKMAP
- +NOGRAVITY
- States
- {
- Spawn:
- NUM8 A 2 bright
- stop
- }
- }
- Actor num9
- {
- +NOBLOCKMAP
- +NOGRAVITY
- States
- {
- Spawn:
- NUM9 A 2 bright
- stop
- }
- }
- ACTOR ZombieManII : Zombieman replaces Zombieman
- {
- PainChance 256
- PainChance "Afterburn", 128
- Health 100
- var int user_afterburn;
- var int user_lastdamage;
- var int user_lasthealth;
- States
- {
- Spawn:
- POSS AA 0 A_SetUserVar("user_lasthealth", health)
- POSS A 0 ACS_NamedExecuteAlways("GenericActorTick")
- Goto Super::Spawn
- Missile:
- POSS E 10 A_FaceTarget
- POSS F 8 A_CustomBulletAttack(22.9,0,1,5)
- POSS E 8
- Goto See
- Pain.Gun:
- POSS G 0 ACS_NamedExecuteAlways("DealHitscanDamage",0,512,150,50)
- goto Super::Pain
- Pain.Sniper:
- POSS G 0 ACS_NamedExecuteAlways("DealHitscanDamage",0,3000,300,50)
- goto Super::Pain
- Pain.MGun:
- POSS G 0 ACS_NamedExecuteAlways("DealHitscanDamage",0,512,80,30)
- goto Super::Pain
- Pain.Shotgun:
- POSS G 0 ACS_NamedExecuteAlways("DealHitscanDamage",0,512,60,10)
- goto Super::Pain
- Pain.Fire:
- POSS G 0 A_SetUserVar("user_afterburn", 400)
- goto Super::Pain
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment