Esempio n. 1
0
void DUH_CrossbowAltFire(bool useammo)
{
   int ammoCount = ACS_CheckInventory(DUH_CrossbowAmmo);
   int ammoUsage = (ammoCount / 25) + 1;
   int damage    = (ammoCount /  5) + ammoUsage + 1;

   accum angle = ACS_GetActorAngle(0);
   accum pitch = ACS_GetActorPitch(0);

   accum spreadStep = 1.0k/80.0k; // 4.5 degrees
   accum spread = 0;

   DU_FireMissile(ACS_ActivatorTID(), s"DUH_CrossbowMissile3", damage, angle,
      pitch, 30);

   while(damage >>= 1)
   {
      spread += spreadStep;
      DU_FireMissile(ACS_ActivatorTID(), s"DUH_CrossbowMissile2", damage,
         angle + spread, pitch, 30);
      DU_FireMissile(ACS_ActivatorTID(), s"DUH_CrossbowMissile2", damage,
         angle - spread, pitch, 30);
   }

   if(useammo)
      ACS_TakeInventory(DUH_CrossbowAmmo, ammoUsage);
}
Esempio n. 2
0
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);
}
Esempio n. 3
0
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);
}
Esempio n. 4
0
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);
}
Esempio n. 5
0
void DUH_HellstaffAltFire(bool useammo)
{
   int ammoCount = ACS_CheckInventory(DUH_HellstaffAmmo);
   int ammoUsage = (ammoCount / 100) + 1;
   int damage    = (ammoCount / 25) + ammoUsage + 1;

   int tid;

   tid = DU_FireMissile(ACS_ActivatorTID(), s"DUH_HellstaffMissile2", damage,
      ACS_GetActorAngle(0), ACS_GetActorPitch(0), 25);

   ACS_SetUserVariable(tid, s"user_stormTics", (ammoCount / 10) + 10);
   ACS_SetUserVariable(tid, s"user_shooter", ACS_ActivatorTID());

   if(useammo)
      ACS_TakeInventory(DUH_HellstaffAmmo, ammoUsage);
}
Esempio n. 6
0
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);
}
Esempio n. 7
0
// 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;
}
Esempio n. 8
0
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);
   }
}