Advertisement
inkoalawetrust

Vanilla Rifle (GZDoom)

Aug 30th, 2021
5,077
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.90 KB | None | 0 0
  1. Class VanillaRifle : Weapon
  2. {
  3.     Default
  4.     {
  5.         //$Title Vanilla Rifle
  6.         //$Category Weapons
  7.         Scale 0.75;
  8.         Weapon.SelectionOrder 1000;
  9.         Weapon.AmmoUse 1;
  10.         Weapon.AmmoGive1 20;
  11.         Weapon.AmmoType1 "VanillaRifleMagazine";
  12.         Weapon.AmmoType2 "Clip";
  13.         Weapon.BobStyle "Smooth";
  14.         Weapon.BobSpeed 1.2;
  15.         Weapon.BobRangeX 0.7;
  16.         Weapon.BobRangeY 0.7;
  17.         Weapon.SlotNumber 4;
  18.         Weapon.SlotPriority 100.0;
  19.         AttackSound "Marine/Fire";
  20.         Inventory.PickupMessage "You picked up the rifle !";
  21.         Obituary "%o was gunned down by %k's assault rifle";
  22.         +Weapon.Ammo_Optional;
  23.     }
  24.     //Modified version of a generic reloading function by Agent_Ash.
  25.     Action Void A_RifleReload()
  26.     {
  27.         If (Invoker.Ammo1 && Invoker.Ammo2)
  28.         {
  29.             While (Invoker.Ammo2.Amount > 0 && Invoker.Ammo1.Amount < Invoker.Ammo1.MaxAmount)
  30.             {
  31.                 TakeInventory(Invoker.Ammo2.GetClass(),1);
  32.                 GiveInventory(Invoker.Ammo1.GetClass(),1);
  33.             }
  34.         }
  35.     }
  36.     enum OverlayNames {PSP_SCANLINES = 2, PSP_IMPOSTOR = 3, PSP_FADE = 1001}
  37.     Int ShotsFired; //How many rounds in a burst the rifle has fired.
  38.     Bool AlreadyZoomed; //Is on as long as the gun is zoomed in.
  39.     States
  40.     {
  41.         Spawn:
  42.             VRIF Z -1;
  43.             Stop;
  44.         Ready:
  45.             VRIF AABB 3 A_WeaponReady(WRF_ALLOWRELOAD|WRF_ALLOWZOOM);
  46.             Loop;
  47.         Select:
  48.             TNT1 A 0
  49.             {
  50.                 A_Overlay (PSP_SCANLINES,"Scanlines");
  51.                 A_OverlayAlpha (PSP_SCANLINES,0.0);
  52.                 A_OverlayFlags (PSP_SCANLINES,PSPF_ALPHA|PSPF_RENDERSTYLE|PSPF_FORCEALPHA|PSPF_FORCESTYLE,True);
  53.                 A_OverlayFlags (PSP_SCANLINES,PSPF_ADDWEAPON|PSPF_ADDBOB,False);
  54.                 A_OverlayRenderStyle (PSP_SCANLINES,Style_Add);
  55.                 A_OverlayOffset (PSP_SCANLINES,-112.0,0.0);
  56.                 A_OverlayScale (PSP_SCANLINES,20.0,1.0);
  57.                
  58.                 A_OverlayFlags (PSP_WEAPON,PSPF_ALPHA|PSPF_FORCEALPHA,True);
  59.             }
  60.             VRIF AAAAAABBBBBB 1 A_Raise();
  61.             Loop;
  62.         Deselect:
  63.             VRIF AAAAAABBBBBB 1 A_Lower();
  64.             Loop;
  65.         Fire:
  66.             VRIF "#" 2;
  67.            
  68.             TNT1 A 0 A_JumpIfNoAmmo ("Reload");
  69.             VRIF C 2
  70.             {
  71.                 A_WeaponOffset(wy:36,WOF_KEEPX|WOF_INTERPOLATE);
  72.                 If (!Invoker.AlreadyZoomed) {A_FireBullets (2.5,2.6,-1,Random(6,12),"SmartMarinePuff",FBF_NORANDOM|FBF_USEAMMO,8192+2,spawnheight:21);}
  73.                 Else {A_FireBullets (1.5,1.6,-1,Random(6,12),"SmartMarinePuff",FBF_NORANDOM|FBF_USEAMMO,8192+2,spawnheight:21);}
  74.                 A_GunFlash();
  75.                 Invoker.ShotsFired++;
  76.             }
  77.             VRIF D 2 A_WeaponOffset(wy:32,WOF_KEEPX|WOF_INTERPOLATE);
  78.             TNT1 A 0 A_JumpIf (Invoker.ShotsFired > 4,1);
  79.             Goto Fire+1;
  80.            
  81.             TNT1 A 0 {Invoker.ShotsFired = 0;}
  82.             VRIF AABB 2;
  83.             VRIF AABB 2;
  84.             Goto Ready;
  85.         Flash:
  86.             TNT1 A 3 A_Light (Random(1,2));
  87.             TNT1 A 0 A_Light (0);
  88.             Goto LightDone;
  89.         Reload:
  90.             TNT1 A 0
  91.             {
  92.                
  93.                 //If there is no ammo at all in the gun, go to the empty click state.
  94.                 If (Invoker.Ammo1.Amount <= 0 && Invoker.Ammo2.Amount <= 0)
  95.                 {
  96.                     Return ResolveState ("EmptyClick");
  97.                 }
  98.                
  99.                 //If there are 20 or more rounds in the gun, or there's no ammo left, then do not reload.
  100.                 If (Invoker.Ammo1.Amount >= 20 || Invoker.Ammo2.Amount == 0)
  101.                 {
  102.                     Return ResolveState ("Ready");
  103.                 }
  104.                
  105.                 Return ResolveState(Null);
  106.             }
  107.             TNT1 A 0;
  108.             VRIF EFG 8;
  109.             VRIF H 8
  110.             {
  111.                 A_StartSound ("Marine/Reload",CHAN_WEAPON);
  112.                 A_RifleReload();
  113.             }
  114.             VRIF AABB 2;
  115.             TNT1 A 0;
  116.             Goto Ready;
  117.            
  118.         Zoom:
  119.             VRIF A 8;
  120.             TNT1 A 0 A_JumpIf (Invoker.AlreadyZoomed,"ZoomOut");
  121.             VRIF A 0
  122.             {
  123.                 A_Overlay (PSP_FADE,"Green"); //A_SetBlend sucks.
  124.                 A_Overlay (PSP_IMPOSTOR,"FakeRifle"); //Create the fake weapon layer.
  125.                 A_OverlayPivot (PSP_IMPOSTOR,0.67,0.67);
  126.                 A_OverlayAlpha (PSP_WEAPON,0.0); //Make the real weapon invisible.
  127.             }
  128.             VRIF AAAAABBBBB 1 A_OverlayScale (PSP_IMPOSTOR,0.2,0.2,WOF_ADD|WOF_INTERPOLATE); //Zoom into the rifle.
  129.             TNT1 A 0 //When the screen is faded out.
  130.             {
  131.                 A_Overlay (PSP_IMPOSTOR,Null); //Ejected
  132.                 A_OverlayAlpha (PSP_SCANLINES,1.0); //Make the scanline effect visible.
  133.                 A_SetCrosshair (69); //Funny number
  134.                 A_ZoomFactor (3,ZOOM_INSTANT);
  135.                 Invoker.AlreadyZoomed = True;
  136.             }
  137.             TNT1 A 10+2; //Wait for the fade overlay to fade out.
  138.             TNT1 A 0 A_Overlay (PSP_FADE,Null); //Then remove it.
  139.             TNT1 A 0 A_StartSound ("VRifle/Zoomed",1234,CHANF_LOOPING); //Begin to play the digital humming sound.
  140.             Goto Ready;
  141.            
  142.         ZoomOut:
  143.             TNT1 A 8 A_Overlay (PSP_FADE,"Green");
  144.             TNT1 A 0
  145.             {
  146.                 A_OverlayAlpha (PSP_SCANLINES,0.0);
  147.                 A_ZoomFactor (1,ZOOM_INSTANT);
  148.                 A_SetCrosshair (0);
  149.                 A_StopSound (1234);
  150.                 A_Overlay (PSP_IMPOSTOR,"FakeRifle");
  151.                 A_OverlayPivot (PSP_IMPOSTOR,0.67,0.67);
  152.                 A_OverlayScale (PSP_IMPOSTOR,4.0,4.0); //Pre-scale the rifle to double the size.
  153.                 Invoker.AlreadyZoomed = False;
  154.             }
  155.             TNT1 AAAAAAAAAAAAAAA 1 A_OverlayScale (PSP_IMPOSTOR,-0.2,-0.2,WOF_ADD|WOF_INTERPOLATE); //Zoom out of the rifle.
  156.             TNT1 A 0
  157.             {
  158.                 A_Overlay (PSP_IMPOSTOR,Null);
  159.                 A_Overlay (PSP_FADE,Null);
  160.                 A_OverlayAlpha (PSP_WEAPON,1.0);
  161.             }
  162.             Goto Ready;
  163.         EmptyClick:
  164.             VRIF A 3 A_StartSound ("VRifle/EmptyGun",CHAN_WEAPON);
  165.             VRIF A 3 A_WeaponOffset(wy:38,WOF_KEEPX|WOF_INTERPOLATE);
  166.             VRIF BB 3 A_WeaponOffset(wy:32,WOF_KEEPX|WOF_INTERPOLATE);
  167.             VRIF ABAB 3;
  168.             Goto Ready;
  169.        
  170.         //Overlay states
  171.         DigitalSights:
  172.             VRIF JK 6;
  173.             Loop;
  174.         Scanlines: //Set up the animated vertical movement.
  175.             VRIG ABCDEFGHIKLMNOPQRSTVXYZ 2;
  176.             VRIH ABCDEFGHIKLMNOPQRSTVXYZ 2;
  177.             VRII ABCDEFGHIKLMNOPQRSTVXYZ 2;
  178.             VRIJ ABCDEFGHIKLMNOPQRSTV 2;
  179.             Loop;
  180.         FakeRifle: //This has to exist because pivot alignment doesn't work on PSP_WEAPON.
  181.             VRIF AABB 3;
  182.             Loop;
  183.            
  184.         Green:
  185.             VRIF X 0
  186.             {
  187.                 A_OverlayFlags (PSP_FADE,PSPF_ALPHA|PSPF_FORCEALPHA|PSPF_PIVOTPERCENT,True);
  188.                 A_OverlayPivot (PSP_FADE,0.5,0.5);
  189.                 A_OverlayAlpha (PSP_FADE,0.0);
  190.                 A_OverlayScale (PSP_FADE,100,100);
  191.             }
  192.             VRIF X 1 A_OverlayAlpha (PSP_FADE,0.1);
  193.             VRIF X 1 A_OverlayAlpha (PSP_FADE,0.2);
  194.             VRIF X 1 A_OverlayAlpha (PSP_FADE,0.3);
  195.             VRIF X 1 A_OverlayAlpha (PSP_FADE,0.4);
  196.             VRIF X 1 A_OverlayAlpha (PSP_FADE,0.5);
  197.             VRIF X 1 A_OverlayAlpha (PSP_FADE,0.6);
  198.             VRIF X 1 A_OverlayAlpha (PSP_FADE,0.7);
  199.             VRIF X 1 A_OverlayAlpha (PSP_FADE,0.8);
  200.             VRIF X 1 A_OverlayAlpha (PSP_FADE,0.9);
  201.             VRIF X 1 A_OverlayAlpha (PSP_FADE,1.0);
  202.             VRIF X 2; //Wait a bit for the stuff on the Zoom state to finish.
  203.             VRIF X 1 A_OverlayAlpha (PSP_FADE,1.0);
  204.             VRIF X 1 A_OverlayAlpha (PSP_FADE,0.9);
  205.             VRIF X 1 A_OverlayAlpha (PSP_FADE,0.8);
  206.             VRIF X 1 A_OverlayAlpha (PSP_FADE,0.7);
  207.             VRIF X 1 A_OverlayAlpha (PSP_FADE,0.6);
  208.             VRIF X 1 A_OverlayAlpha (PSP_FADE,0.5);
  209.             VRIF X 1 A_OverlayAlpha (PSP_FADE,0.4);
  210.             VRIF X 1 A_OverlayAlpha (PSP_FADE,0.3);
  211.             VRIF X 1 A_OverlayAlpha (PSP_FADE,0.2);
  212.             VRIF X 1 A_OverlayAlpha (PSP_FADE,0.1);
  213.             Loop;
  214.     }
  215. }
  216.  
  217. //$GZDB_SKIP
  218.  
  219. Class VanillaRifleMagazine : Ammo
  220. {
  221.     Default
  222.     {
  223.         Inventory.Amount 1;
  224.         Inventory.MaxAmount 20;
  225.         +Inventory.IgnoreSkill;
  226.         Ammo.BackpackAmount 0;
  227.         Ammo.BackpackMaxAmount 20;
  228.         Inventory.Icon "CLIPA0";
  229.     }
  230. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement