void DUD_FireDGun(void) { int *count = &DakkaCount[ACS_PlayerNumber()]; int damage = 1 * DUD_GetDamageFactor(ACS_PlayerNumber(), AMMO_CLIP); int pspeed = 80 * DUD_GetPSpeedFactor(ACS_PlayerNumber(), AMMO_CLIP); accum angle = ACS_GetActorAngle(0) + ACS_RandomFixed(-1.0k/256, 1.0k/256); accum pitch = ACS_GetActorPitch(0) + ACS_RandomFixed(-1.0k/256, 1.0k/256); int tid = DU_FireMissile(0, s"DUD_Dakka", damage, angle, pitch, pspeed); switch((*count)++) { default: case 0: case 1: ACS_SetActorState(tid, s"SpawnD"); break; case 2: case 3: ACS_SetActorState(tid, s"SpawnA"); break; case 4: case 5: ACS_SetActorState(tid, s"SpawnK"); break; case 6: case 7: ACS_SetActorState(tid, s"SpawnK"); break; case 8: case 9: ACS_SetActorState(tid, s"SpawnA"); break; } if(*count == 10) *count = 0; if(*count & 1) ACS_TakeInventory(s"Clip", 1); }
void DUD_FirePlasma(void) { int damage = 5 * DUD_GetDamageFactor(ACS_PlayerNumber(), AMMO_CELL); int pspeed = 25 * DUD_GetPSpeedFactor(ACS_PlayerNumber(), AMMO_CELL); DU_FireMissile(0, s"DUD_PlasmaBall", damage, ACS_GetActorAngle(0), ACS_GetActorPitch(0), pspeed); ACS_TakeInventory(s"Cell", 1); }
void DUD_RocketLauncherFire(void) { int damage = 20 * DUD_GetDamageFactor(ACS_PlayerNumber(), AMMO_RCKT); int radius = 128 * DUD_GetRadiusFactor(ACS_PlayerNumber(), AMMO_RCKT); int pspeed = 20 * DUD_GetPSpeedFactor(ACS_PlayerNumber(), AMMO_RCKT); int tid = DU_FireMissile(0, s"DUD_Rocket", damage, ACS_GetActorAngle(0), ACS_GetActorPitch(0), pspeed); ACS_SetThingSpecial(tid, 0, radius, 0, 0, 0, 0); ACS_TakeInventory(s"RocketAmmo", 1); }
int DUD_FistDamage(void) { int base = ACS_CheckInventory(s"DUD_Berserk") * 5 + 2; if(DUD_AbilitySelected[ACS_PlayerNumber()][0] == &DUD_Ability[0][ABIL1_BERSERK]) base += 5; return ACS_Random(base, base * 10); }
void DUD_FireAlphagun(int n, int ammoUse) { int damage = 1; int pellets = n * DUD_GetDamageFactor(ACS_PlayerNumber(), AMMO_SHEL); int pspeed = 80 * DUD_GetPSpeedFactor(ACS_PlayerNumber(), AMMO_SHEL); for(; pellets; --pellets) { accum offA = ACS_RandomFixed(0, 1); accum offD = ACS_RandomFixed(0, 6/256k); accum angle = ACS_GetActorAngle(0) + ACS_Cos(offA) * offD; accum pitch = ACS_GetActorPitch(0) + ACS_Sin(offA) * offD * 0.75k; DU_FireMissile(0, s"DUD_Alphapellet", damage, angle, pitch, pspeed); } if(ammoUse) ACS_TakeInventory(s"Shell", ammoUse); }
void DUH_WeaponReady(int frames, int *tics, __str ammo, int period) { DUH_ArtifactReady(frames); while(frames--) { DUH_AmmoReady(++tics[ACS_PlayerNumber()], ammo, period); if(frames) ACS_Delay(1); } }
ACS_S_SCRIPT void WaypointSpawn (void) { if (!ACS_ActivatorTID()) ACS_Thing_ChangeTID(0, ACS_UniqueTID(-32768, 0)); int tid = ACS_ActivatorTID(); ACS_SetActivatorToTarget(0); int plrNum = ACS_PlayerNumber(); if (plrNum != -1) { player[plrNum].wayTid = tid; ACS_SetActorAngle(tid, player[plrNum].angle); ACS_SetActorPitch(tid, player[plrNum].pitch); ACS_SetActorProperty(player[plrNum].camTid, APROP_MasterTID, tid); ACS_GiveActorInventory(player[plrNum].camTid, s"ChaseCamWarp", 1); ACS_Delay(1); ACS_Thing_Remove(tid); } return; }
// Scripts ACS_S_SCRIPT ENTER void CameraMain (void) { int plrHealth, camType, plrNum = ACS_PlayerNumber(); accum plrAngle = ACS_GetActorAngle(0); player[plrNum].angle = plrAngle; if (!ACS_ActivatorTID()) ACS_Thing_ChangeTID(0, ACS_UniqueTID(-32678, 0)); player[plrNum].tid = ACS_ActivatorTID(); player[plrNum].camTid = ACS_UniqueTID(-32768, 0); ACS_SpawnForced(s"ChaseCam", ACS_GetActorX(0), ACS_GetActorY(0), ACS_GetActorZ(0), player[plrNum].camTid, player[plrNum].angle); while (true) { plrHealth = ACS_GetActorProperty(0, APROP_Health); player[plrNum].angle += ACS_GetPlayerInputFixed(-1, INPUT_YAW); player[plrNum].pitch -= ACS_GetPlayerInputFixed(-1, INPUT_PITCH); if (player[plrNum].pitch > PITCH_LIMIT) player[plrNum].pitch = PITCH_LIMIT; if (player[plrNum].pitch < -PITCH_LIMIT) player[plrNum].pitch = -PITCH_LIMIT; ACS_LineAttack(0, player[plrNum].angle + 0.5k, -player[plrNum].pitch, 0, s"ChaseCamWaypoint", s"", ACS_GetCVarFixed(s"chase_dist"), FHF_NORANDOMPUFFZ); ACS_SetActorAngle(player[plrNum].camTid, player[plrNum].angle); ACS_SetActorPitch(player[plrNum].camTid, player[plrNum].pitch); camType = ACS_GetUserCVar(plrNum, s"chase_camtype"); if (plrHealth) { switch (camType) { default: case 1: plrAngle = player[plrNum].angle; break; case 2: if (KeyDown(BT_FORWARD) || KeyDown(BT_BACK) || KeyDown(BT_MOVELEFT) || KeyDown(BT_MOVERIGHT) || KeyDown(BT_ATTACK) || KeyDown(BT_ALTATTACK)) plrAngle = player[plrNum].angle; break; case 3: if (KeyDown(BT_FORWARD) || KeyDown(BT_BACK) || KeyDown(BT_MOVELEFT) || KeyDown(BT_MOVERIGHT)) plrAngle = player[plrNum].angle; break; } } if (ACS_GetUserCVar(plrNum, s"chase_active")) ACS_ChangeCamera(player[plrNum].camTid, 0, 0); else { if (plrHealth) plrAngle = player[plrNum].angle; ACS_ChangeCamera(0, 0, 0); } ACS_SetActorAngle(0, plrAngle); ACS_SetActorPitch(0, player[plrNum].pitch); ACS_Delay(1); } return; }
int DUD_ShotgunPellets(int base) { return base * DUD_GetDamageFactor(ACS_PlayerNumber(), AMMO_SHEL); }
int DUD_RailRifleDamage(void) { return 100 * DUD_GetDamageFactor(ACS_PlayerNumber(), AMMO_CELL); }
int DUD_PistolDamage(void) { return 10 * DUD_GetDamageFactor(ACS_PlayerNumber(), AMMO_CLIP); }
int DUD_LasgunDamage(void) { return 50 * DUD_GetDamageFactor(ACS_PlayerNumber(), AMMO_CELL); }
void DUD_ClearDakka(void) { DakkaCount[ACS_PlayerNumber()] = 0; }
int DUD_ChaingunDamage(void) { return 5 * DUD_GetDamageFactor(ACS_PlayerNumber(), AMMO_CLIP); }
void DUH_ArtifactReady(int frames) { static int tics[MAX_PLAYERS]; while(frames--) { int tic = ++tics[ACS_PlayerNumber()]; int inv; int tid = ACS_ActivatorTID(); if(!tid) ACS_Thing_ChangeTID(0, tid = DU_MakeTID()); inv = ACS_CheckInventory(s"ArtiEgg"); if(inv > 256) inv = 256; if(inv && !(tic % ((35 * 256) / inv))) ACS_Spawn(s"DUH_ChickenFriend", ACS_GetActorX(0), ACS_GetActorY(0), ACS_GetActorZ(0) + 56, 0, ACS_GetActorAngle(0)*256); inv = ACS_CheckInventory(s"ArtiFly"); if(inv > 0x7FFF - 8) inv = 0x7FFF - 8; ACS_SetActorPropertyFixed(0, APROP_JumpZ, inv + 8.0k); inv = ACS_CheckInventory(s"ArtiHealth"); if(inv > 35 * 4) inv = 35 * 4; if(inv && !(tic % ((35 * 4) / inv))) ACS_GiveInventory(s"Health", 1); inv = ACS_CheckInventory(s"ArtiInvisibility"); if(inv > 35 * 8) inv = 35 * 8; if(inv && !(tic % ((35 * 8) / inv))) ACS_GiveInventory(s"DUH_ArmorBonus", 1); inv = ACS_CheckInventory(s"ArtiInvulnerability"); if(inv > 35 * 1) inv = 35 * 1; if(inv && !(tic % ((35 * 1) / inv))) ACS_GiveInventory(s"DUH_ArmorBonus", 1); inv = ACS_CheckInventory(s"ArtiSuperHealth") + 4; if(inv > 0x7FFFFFFF / 25) inv = 0x7FFFFFFF / 25; ACS_SetActorProperty(0, APROP_SpawnHealth, inv * 25); inv = ACS_CheckInventory(s"ArtiTeleport"); if(inv > 16) inv = 16; ACS_SetActorPropertyFixed(0, APROP_Speed, (inv / 10.0) + 1.0); inv = ACS_CheckInventory(s"ArtiTimeBomb"); if(inv > 35 * 16) inv = 35 * 16; if(inv && !(tic % ((35 * 16) / inv))) ACS_SpawnProjectile(tid, s"DUH_TimeBombAura", 0, 0, 0, 0, 0); inv = ACS_CheckInventory(s"DUH_BagOfHolding") + 4; if(inv > 16) inv = 16; DUH_ArtifactTomeReady(DUH_ElvenWandAmmo, inv * 50); DUH_ArtifactTomeReady(DUH_CrossbowAmmo, inv * 25); DUH_ArtifactTomeReady(DUH_DragonClawAmmo, inv * 100); DUH_ArtifactTomeReady(DUH_HellstaffAmmo, inv * 100); DUH_ArtifactTomeReady(DUH_PhoenixRodAmmo, inv * 10); DUH_ArtifactTomeReady(DUH_FiremaceAmmo, inv * 75); inv = ACS_CheckInventory(s"ArtiTorch"); if(inv > 64) inv = 64; if(inv && !(tic % ((35 * 64) / inv))) ACS_GiveInventory(s"ArtiTorch", 1); DUH_AmmoReady(tic, DUH_ElvenWandAmmo, 350); DUH_AmmoReady(tic, DUH_CrossbowAmmo, 1750); DUH_AmmoReady(tic, DUH_DragonClawAmmo, 700); DUH_AmmoReady(tic, DUH_HellstaffAmmo, 1050); DUH_AmmoReady(tic, DUH_PhoenixRodAmmo, 3500); DUH_AmmoReady(tic, DUH_FiremaceAmmo, 7000); if(frames) ACS_Delay(1); } }