From ea5f1a12b39d0f64b35db2639d09a3a6f62c2ed5 Mon Sep 17 00:00:00 2001 From: UndeadZeratul Date: Sat, 15 Jul 2023 18:59:10 -0500 Subject: [PATCH 1/2] Sync Boss Rifle Variants with current Boss Rifle Class Logic I've tried to keep the seemingly intentional deviances alone, and only change things that don't affect ballistic performance but rather just weapon mechanical use. Things seem much more akin to the current Boss Rifle now, which is good. Eventually these small differences should probably just be refactored into properties/methods and hoisted into some sort of common "Base Boss Variant" abstract class that each of these can extend off of. Also the Loadout Codes, Tags, Pickup Messages, and Obituaries have been extracted into LANGUAGE lumps since the help text has also been localized now. --- LANGUAGE | 17 + TEXTURES | 64 +-- zscript.zsc | 7 + .../Weapons/Boss Rifle Variants/12ga Boss.zsc | 248 ++++++------ .../Weapons/Boss Rifle Variants/4mm Boss.zsc | 165 ++++---- .../Boss Rifle Variants/50 OMG Boss.zsc | 382 ++++++------------ .../Weapons/Boss Rifle Variants/9mm Boss.zsc | 182 ++++----- .../Boss Rifle Variants/Hexadoken's Boss.zsc | 201 ++++----- .../Boss Rifle Variants/Scopeless Boss.zsc | 105 +++-- .../Boss Rifle Variants/Worst Boss.zsc | 148 ++++--- 10 files changed, 680 insertions(+), 839 deletions(-) diff --git a/LANGUAGE b/LANGUAGE index 331341c..2a08f5b 100644 --- a/LANGUAGE +++ b/LANGUAGE @@ -21,6 +21,23 @@ TAG_7MMSPEEDLOADER = "7.76mm Speed-Reloader Prototype"; TAG_DMS = "Medical Scanner"; TAG_GARANDCLIP = "M1 Garand clip"; +// Pickup Messages +PICKUP_9MMBOSS = "You got the Boss Rifle! It's a bit greasy..."; +PICKUP_4MMBOSS = "You got the Boss Rifle! Surprisingly light."; +PICKUP_BOSSMERG = "You got the Bossmerg 12 gauge Shotgun!"; +PICKUP_5MMBOSS = "You got Hexadoken's Personal Boss Rifle!"; +PICKUP_OMGBOSS = "You got the Boss bolt-action anti-materiel rifle!"; +PICKUP_WORSTBOSS = "You found a... Boss Rifle, but it's the worst. Oh no..."; + +PICKUP_50OMGCLIP = "Picked up a .50 OMG clip."; + +// Obituaries +OB_OMGBOSS = "%o sure showed %k who was the big boss!"; + +// Weapon Help Text +WEPHELP_WORSTBOSS = "You are beyond help."; +WEPHELP_WORSTBOSS_CC = "\cfMAN IS ONLY SEPARATED FROM THE HEAVENS\nBY THAT WHICH HE WILL NOT GUN."; + // Menu Titles TITLE_9MMBOSSMENU = "------ 9mm Boss Rifle Options ------"; TITLE_4MMBOSSMENU = "------ 4.26mm Boss Rifle Options ------"; diff --git a/TEXTURES b/TEXTURES index b08c67c..74ca56b 100644 --- a/TEXTURES +++ b/TEXTURES @@ -1,5 +1,5 @@ // Texture definitions generated by SLADE3 -// on Friday Nov 4 12:16:33 2022 +// on Sat Jul 15 16:32:47 2023 Sprite "BARGL0", 64, 89 { @@ -87,15 +87,20 @@ Sprite "OCLPE0", 10, 15 Patch "OGBLA3A7", 1, 14 } -Sprite "OCLPF0", 10, 15 +Sprite "OCLPF0", 15, 10 { YScale 2.000 Offset 2, 15 - Patch "CLIPA0", -7, 8 - Patch "CLIPA0", -7, -1 + Patch "CLIPA0", 8, 8 + { + Rotate -90 + } + Patch "CLIPA0", -1, 8 + { + Rotate -90 + } } -// Bossmerg Sprite "BORPA0", 66, 15 { Offset 26, 15 @@ -327,29 +332,36 @@ Sprite "GCLPI0", 6, 14 Patch "GCLPZ0", 0, 0 } -sprite BOJGU0,64,116{ - offset -115,-73 - xscale 0.9 - yscale 0.94 - patch BOJGA0,0,0{} +Sprite "BOJGU0", 64, 116 +{ + XScale 0.900 + YScale 0.940 + Offset -115, -73 + Patch "BOJGA0", 0, 0 } -sprite BOJGV0,64,116{ - offset -115,-73 - xscale 0.9 - yscale 0.94 - patch BOJGF0,0,0{} + +Sprite "BOJGV0", 64, 116 +{ + XScale 0.900 + YScale 0.940 + Offset -115, -73 + Patch "BOJGF0", 0, 0 } -sprite BOJGW0,64,116{ - offset -115,-73 - xscale 0.9 - yscale 0.94 - patch BOJGK0,0,0{} + +Sprite "BOJGW0", 64, 116 +{ + XScale 0.900 + YScale 0.940 + Offset -115, -73 + Patch "BOJGK0", 0, 0 } -sprite BOJGX0,64,116{ - offset -115,-73 - xscale 0.9 - yscale 0.94 - patch BOJGP0,0,0{} + +Sprite "BOJGX0", 64, 116 +{ + XScale 0.900 + YScale 0.940 + Offset -115, -73 + Patch "BOJGP0", 0, 0 } Sprite "MEDIZ0", 28, 16 @@ -361,4 +373,4 @@ Sprite "MEDIZ0", 28, 16 } } -// End of texture definitions \ No newline at end of file +// End of texture definitions diff --git a/zscript.zsc b/zscript.zsc index 142778e..72fcad1 100644 --- a/zscript.zsc +++ b/zscript.zsc @@ -1,5 +1,12 @@ Version "4.10" +const HDLD_4MMBOSS = ""; +const HDLD_9MMBOSS = ""; +const HDLD_BOSSER = "bas"; +const HDLD_OMGBOSS = "bog"; +const HDLD_5MMBOSS = ""; +const HDLD_WORSTBOSS = ""; + #include "zscript/Hexadoken/SpawnHandler.zsc" #include "zscript/Hexadoken/Items/SpeedReloader.zsc" diff --git a/zscript/Hexadoken/Weapons/Boss Rifle Variants/12ga Boss.zsc b/zscript/Hexadoken/Weapons/Boss Rifle Variants/12ga Boss.zsc index f328418..4d09192 100644 --- a/zscript/Hexadoken/Weapons/Boss Rifle Variants/12ga Boss.zsc +++ b/zscript/Hexadoken/Weapons/Boss Rifle Variants/12ga Boss.zsc @@ -1,8 +1,6 @@ // ------------------------------------------------------------------- // From a freak alternate universe in which Boss was not Ross but Moss // ------------------------------------------------------------------- -const HDLD_BOSSER="bas"; - class Bossmerg:HDShotgun { default{ weapon.selectionorder 32; @@ -13,33 +11,20 @@ class Bossmerg:HDShotgun { scale 0.75; hdweapon.barrelsize 32,1,2; hdweapon.refid HDLD_BOSSER; + inventory.pickupMessage "$PICKUP_BOSSMERG"; tag "$TAG_BOSSMERG"; + + hdweapon.ammo1 "HDShellAmmo",1; } - override string pickupmessage(){ - return "You got the "..gettag().."!"; + override double gunmass(){ + return 10+weaponstatus[BOSSERS_MAG]*0.3+weaponstatus[SHOTS_SIDESADDLE]*0.08; } - - override void loadoutconfigure(string input){ - int customchamber=getloadoutvar(input,"customchamber",1); - if(!customchamber)weaponstatus[0]&=~BOSSERF_CUSTOMCHAMBER; - else if(customchamber>0)weaponstatus[0]|=BOSSERF_CUSTOMCHAMBER; - - int altreticle=getloadoutvar(input,"altreticle",1); - if(!altreticle)weaponstatus[0]&=~BOSSERF_ALTRETICLE; - else if(altreticle>0)weaponstatus[0]|=BOSSERF_ALTRETICLE; - - int frontreticle=getloadoutvar(input,"frontreticle",1); - if(!frontreticle)weaponstatus[0]&=~BOSSERF_FRONTRETICLE; - else if(frontreticle>0)weaponstatus[0]|=BOSSERF_FRONTRETICLE; - - int zoom=getloadoutvar(input,"zoom",3); - if(zoom>=0)weaponstatus[BOSSERS_ZOOM]= - (weaponstatus[0]&BOSSERF_FRONTRETICLE)? - clamp(zoom,20,40): - clamp(zoom,6,70); - int choke=min(getloadoutvar(input,"choke",1),9); - if(choke>=0)weaponstatus[BOSSERS_CHOKE]=choke; + override double weaponbulk(){ + return 115+(weaponstatus[SHOTS_SIDESADDLE]+weaponstatus[BOSSERS_MAG])*ENC_SHELLLOADED; + } + int jamchance(){ + return weaponstatus[0]&BOSSERF_CUSTOMCHAMBER ? 1 : 5; } override string,double getpickupsprite(){return "BORP"..getpickupframe2().."0",1.;} override void DrawHUDStuff(HDStatusBar sb,HDWeapon hdw,HDPlayerPawn hpl){ @@ -60,19 +45,30 @@ class Bossmerg:HDShotgun { for(int i=hdw.weaponstatus[SHOTS_SIDESADDLE];i>0;i--){ sb.drawrect(-16-i*2,-5,1,3); } + sb.drawstring( + sb.mAmountFont,string.format("%.1f",hdw.weaponstatus[BOSSERS_ZOOM]*0.1), + (-32,-22),sb.DI_SCREEN_CENTER_BOTTOM|sb.DI_TEXT_ALIGN_RIGHT,Font.CR_DARKGRAY + ); + sb.drawstring( + sb.mAmountFont,string.format("%.1f",hdw.weaponstatus[BOSSERS_DROPADJUST]*0.1), + (-16,-22),sb.DI_SCREEN_CENTER_BOTTOM|sb.DI_TEXT_ALIGN_RIGHT,Font.CR_WHITE + ); } override string gethelptext(){ return - WEPHELP_FIRE.." Shoot (choke: "..weaponstatus[BOSSERS_CHOKE]..")\n" - ..WEPHELP_ALTFIRE.." Work bolt\n" - ..WEPHELP_RELOAD.." Reload (side saddles first)\n" - ..WEPHELP_ALTRELOAD.." Reload (pockets only)\n" - ..WEPHELP_FIREMODE.."+"..WEPHELP_RELOAD.." Load side saddles\n" - ..WEPHELP_ZOOM.."+"..WEPHELP_FIREMODE.." Zoom\n" + WEPHELP_FIRE..StringTable.Localize("$SHOOT_CH")..weaponstatus[BOSSERS_CHOKE]..")\n" + ..WEPHELP_ALTFIRE..StringTable.Localize("$BOSWH_ALTFIRE") + ..WEPHELP_RELOAD..StringTable.Localize("$SHTG_REL1") + ..WEPHELP_ALTRELOAD..StringTable.Localize("$SHTG_REL2") + ..WEPHELP_FIREMODE.."+"..WEPHELP_RELOAD..StringTable.Localize("$SHTG_SIDE") + ..WEPHELP_ZOOM.."+"..WEPHELP_FIREMODE..StringTable.Localize("$BOSWH_ZPFMOD") + ..WEPHELP_ZOOM.."+"..WEPHELP_USE..StringTable.Localize("$BOSWH_ZPUSE") + // ..WEPHELP_ZOOM.."+"..WEPHELP_DROPONE..StringTable.Localize("$BOSWH_ZPDRON") + // ..WEPHELP_ZOOM.."+"..WEPHELP_ALTRELOAD..StringTable.Localize("$BOSWH_ZPALTRELOAD") + ..WEPHELP_ALTFIRE.."+"..WEPHELP_UNLOAD..StringTable.Localize("$BOSWH_AFIREPUNL") ..WEPHELP_UNLOADUNLOAD.. (weaponstatus[0]&BOSSERF_CUSTOMCHAMBER?"\nInstalled Upgrades: ":"") ..(weaponstatus[0]&BOSSERF_CUSTOMCHAMBER?"\n- Customized Chamber":"") - ; } override void DrawSightPicture( @@ -120,11 +116,15 @@ class Bossmerg:HDShotgun { double camSize = texman.GetSize(cam); sb.DrawCircle(cam, frontoffs, 0.125,usePixelRatio:true); - let reticleScale = camSize / texman.GetSize(reticle); - if(hdw.weaponstatus[0]&BOSSERF_FRONTRETICLE){ - sb.DrawCircle(reticle, frontoffs, .5*reticleScale, bob*deg*5-bob, 1.6*deg); - }else{ - sb.DrawCircle(reticle, (0,scaledyoffset)+bob, .5*reticleScale,uvScale:.5); + //[2022-09-17] there's a glitch in GZDoom where if the reticle would be drawn completely off screen, + //the cliprect is ignored. The figure is a product of trial and error. + if((bob.y/fov)<0.4){ + let reticleScale = camSize / texman.GetSize(reticle); + if(hdw.weaponstatus[0]&BOSSERF_FRONTRETICLE){ + sb.DrawCircle(reticle, frontoffs, .5*reticleScale, bob*deg*5-bob, 1.6*deg); + }else{ + sb.DrawCircle(reticle, (0,scaledyoffset)+bob, .5*reticleScale,uvScale:.5); + } } //let holeScale = camSize / texman.GetSize(hole); @@ -144,7 +144,7 @@ class Bossmerg:HDShotgun { Font.CR_BLACK ); sb.drawstring( - sb.mAmountFont,string.format("%i",hdw.weaponstatus[BOSSS_DROPADJUST]), + sb.mAmountFont,string.format("%i",hdw.weaponstatus[BOSSERS_DROPADJUST]), (6+bob.x,9+bob.y),sb.DI_SCREEN_CENTER|sb.DI_TEXT_ALIGN_RIGHT, Font.CR_BLACK ); @@ -152,17 +152,6 @@ class Bossmerg:HDShotgun { // the scope display is in 10ths of an arcminute. // one dot = 6 arcminutes. } - override double gunmass(){ - int tube=weaponstatus[BOSSERS_MAG]; - return 10+tube*0.3+weaponstatus[SHOTS_SIDESADDLE]*0.08; - } - override double weaponbulk(){ - return 115+(weaponstatus[SHOTS_SIDESADDLE]+weaponstatus[BOSSERS_MAG])*ENC_SHELLLOADED; - } - int jamchance(){ - if(weaponstatus[0]&BOSSERF_CUSTOMCHAMBER)return 1; - else return 5; - } int loadedrounds(){ return weaponstatus[BOSSERS_MAG] + ((weaponstatus[BOSSERS_CHAMBER]>1)?1:0); } @@ -246,14 +235,17 @@ class Bossmerg:HDShotgun { states{ select0: BORG A 0; - goto select0big; + goto select0bfg; deselect0: BORG A 0; goto deselect0big; + ready: BORG A 1{ if(pressingzoom()){ - if(invoker.weaponstatus[0]&BOSSERF_FRONTRETICLE)A_ZoomAdjust(BOSSERS_ZOOM,20,40); + if(player.cmd.buttons&BT_USE){ + A_ZoomAdjust(BOSSERS_DROPADJUST,0,600,BT_USE); + }else if(invoker.weaponstatus[0]&BOSSERF_FRONTRETICLE)A_ZoomAdjust(BOSSERS_ZOOM,20,40); else A_ZoomAdjust(BOSSERS_ZOOM,6,70); A_WeaponReady(WRF_NONE); }else A_WeaponReady(WRF_ALL); @@ -261,9 +253,8 @@ class Bossmerg:HDShotgun { firemode: firemodehold: ---- A 1{ - if(pressingreload()){ - setweaponstate("reloadss"); - }else A_WeaponReady(WRF_NONE); + if(pressingreload()) setweaponstate("reloadss"); + else A_WeaponReady(WRF_NONE); } ---- A 0 A_JumpIf(pressingfiremode()&&invoker.weaponstatus[SHOTS_SIDESADDLE]<12,"firemodehold"); goto nope; @@ -277,17 +268,14 @@ class Bossmerg:HDShotgun { A_StartSound("weapons/hunter",CHAN_WEAPON); A_AlertMonsters(); - /*actor p=spawn("HDBullet00bolt",pos+(0,0,height-6),ALLOW_REPLACE); - p.target=self;p.angle=angle;p.pitch=pitch; - p.vel+=( - frandom(-1.,1.),frandom(-1.,1.),frandom(-1.,1.) - ); - invoker.shotpowervariation=frandom(-10.,10.); - p.speed+=invoker.shotpowervariation; - p.vel+=self.vel;*/ invoker.Fire(self); - A_MuzzleClimb(0,0,randompick(-1,1)*1.8,-4.2,randompick(-1,1)*invoker.shotpower,-0.3*invoker.shotpower); + A_MuzzleClimb( + 0,0, + randompick(-1,1)*1.8,-4.2, + randompick(-1,1)*invoker.shotpower, + -0.3*invoker.shotpower + ); } BORG F 1; BORG F 1 A_JumpIf(gunbraced(),"ready"); @@ -296,17 +284,15 @@ class Bossmerg:HDShotgun { BORG G 1 bright{ A_Light2(); HDFlashAlpha(-32); + A_ZoomRecoil(0.87); } - TNT1 A 1 A_ZoomRecoil(0.87); TNT1 A 0 A_Light0(); stop; altfire: - BORG A 1 offset(0,34)A_WeaponBusy(); - BORG B 1 offset(2,36); - BORG B 1 offset(4,38){ - if(invoker.weaponstatus[BOSSERS_CHAMBER]>2)setweaponstate("jamderp"); - } - BORG B 1 offset(0,34); + BORG A 1 A_WeaponBusy(); + BORG B 1; // Normally checks customchamber + BORG B 1; // Normally checks for jam, caused issues + BORG B 1 A_MuzzleClimb(-frandom(0.06,0.1),-frandom(0.3,0.5)); BORG B 0 A_JumpIf(invoker.weaponstatus[BOSSERS_RELOADING], "chamber"); BORG B 0 A_Refire("chamber"); goto ready; @@ -513,29 +499,58 @@ class Bossmerg:HDShotgun { BORG D 2 offset(6,42){ //eject int chm=invoker.weaponstatus[BOSSERS_CHAMBER]; - if(chm>1){ - A_SpawnItemEx( - "HDFumblingShell",cos(pitch)*8,1,height-7-sin(pitch)*8, - cos(pitch)*cos(angle-80)*4+vel.x, - cos(pitch)*sin(angle-80)*4+vel.y, - -sin(pitch)*4+vel.z, - 0,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION|SXF_TRANSFERPITCH - ); - }else if(chm==1){ - A_SpawnItemEx( - "HDSpentShell",cos(pitch)*8,1,height-7-sin(pitch)*8, - cos(pitch)*cos(angle-80)*6+vel.x, - cos(pitch)*sin(angle-80)*6+vel.y, - -sin(pitch)*6+vel.z, - 0,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION|SXF_TRANSFERPITCH - ); + Class rndtp=chm==1?"HDSpentShell":"HDFumblingShell"; + if(chm>=1){ + Vector3 gunofs=HDMath.RotateVec3D((10,-1,0),angle,pitch); + Actor rrr=spawn(rndtp,(pos.xy,pos.z+height*0.85)+gunofs+viewpos.offset); + rrr.target=self; + rrr.angle=angle; + rrr.vel=HDMath.RotateVec3D((1,-4,2),angle,pitch); + if(chm==1)rrr.vel*=1.3; + rrr.vel+=vel; } invoker.weaponstatus[BOSSERS_CHAMBER]=0; } - BORG E 1 offset(6,42) A_WeaponReady(WRF_NOFIRE); + BORG E 1 A_WeaponReady(WRF_NOFIRE); BORG E 0 A_JumpIf(invoker.weaponstatus[BOSSERS_RELOADING], "althold"); BORG E 0 A_Refire("althold"); goto altholdend; + + reload: + reloadfromsidesaddles: + BORG A 0{ + int sss=invoker.weaponstatus[SHOTS_SIDESADDLE]; + int ppp=countinv("HDShellAmmo"); + if(ppp<1&&sss<1)setweaponstate("nope"); + else { + if (invoker.loadedrounds() >= invoker.magsize()+1) { + if (invoker.weaponstatus[SHOTS_SIDESADDLE]<12) setweaponstate("reloadss"); + else setweaponstate("nope"); + } + else if(sss<1) { + invoker.weaponstatus[0]|=BOSSERF_FROMPOCKETS; + invoker.weaponstatus[BOSSERS_RELOADING]=2; + } + else{ + invoker.weaponstatus[0]&=~BOSSERF_FROMPOCKETS; + invoker.weaponstatus[BOSSERS_RELOADING]=1; + } + } + }goto carefulbolt; + altreload: + reloadfrompockets: + BORG A 0{ + int ppp=countinv("HDShellAmmo"); + if(ppp<1)setweaponstate("nope"); + else { + invoker.weaponstatus[0]|=BOSSERF_FROMPOCKETS; + if (invoker.loadedrounds() >= invoker.magsize()+1) { + if (invoker.weaponstatus[SHOTS_SIDESADDLE]<12) setweaponstate("reloadss"); + else setweaponstate("nope"); + } + else invoker.weaponstatus[BOSSERS_RELOADING]=2; + } + }goto carefulbolt; reloadSS: BORG A 1 offset(1,34); BORG A 2 offset(2,34); @@ -547,7 +562,6 @@ class Bossmerg:HDShotgun { int hnd=min( countinv("HDShellAmmo"), 12-invoker.weaponstatus[SHOTS_SIDESADDLE], - max(1,health/22), 3 ); if(hnd<1)setweaponstate("reloadSSend"); @@ -571,41 +585,6 @@ class Bossmerg:HDShotgun { BORG A 3 offset(2,34); BORG A 1 offset(1,34) EmptyHand(careful:true); goto nope; - altreload: - reloadfrompockets: - BORG A 0{ - int ppp=countinv("HDShellAmmo"); - if(ppp<1)setweaponstate("nope"); - else { - invoker.weaponstatus[0]|=BOSSERF_FROMPOCKETS; - if (invoker.loadedrounds() >= invoker.magsize()+1) { - if (invoker.weaponstatus[SHOTS_SIDESADDLE]<12) setweaponstate("reloadss"); - else setweaponstate("nope"); - } - else invoker.weaponstatus[BOSSERS_RELOADING]=2; - } - }goto carefulbolt; - reload: - reloadfromsidesaddles: - BORG A 0{ - int sss=invoker.weaponstatus[SHOTS_SIDESADDLE]; - int ppp=countinv("HDShellAmmo"); - if(ppp<1&&sss<1)setweaponstate("nope"); - else { - if (invoker.loadedrounds() >= invoker.magsize()+1) { - if (invoker.weaponstatus[SHOTS_SIDESADDLE]<12) setweaponstate("reloadss"); - else setweaponstate("nope"); - } - else if(sss<1) { - invoker.weaponstatus[0]|=BOSSERF_FROMPOCKETS; - invoker.weaponstatus[BOSSERS_RELOADING]=2; - } - else{ - invoker.weaponstatus[0]&=~BOSSERF_FROMPOCKETS; - invoker.weaponstatus[BOSSERS_RELOADING]=1; - } - } - }goto carefulbolt; unloadSS: BORG A 2 offset(1,34) A_JumpIf(invoker.weaponstatus[SHOTS_SIDESADDLE]<1,"nope"); BORG A 1 offset(2,34); @@ -698,6 +677,28 @@ class Bossmerg:HDShotgun { if(ssh>=1)return "M"; return "N"; } + + override void loadoutconfigure(string input){ + int customchamber=getloadoutvar(input,"customchamber",1); + if(!customchamber)weaponstatus[0]&=~BOSSERF_CUSTOMCHAMBER; + else if(customchamber>0)weaponstatus[0]|=BOSSERF_CUSTOMCHAMBER; + + int altreticle=getloadoutvar(input,"altreticle",1); + if(!altreticle)weaponstatus[0]&=~BOSSERF_ALTRETICLE; + else if(altreticle>0)weaponstatus[0]|=BOSSERF_ALTRETICLE; + + int frontreticle=getloadoutvar(input,"frontreticle",1); + if(!frontreticle)weaponstatus[0]&=~BOSSERF_FRONTRETICLE; + else if(frontreticle>0)weaponstatus[0]|=BOSSERF_FRONTRETICLE; + + int zoom=getloadoutvar(input,"zoom",3); + if(zoom>=0)weaponstatus[BOSSERS_ZOOM]= + (weaponstatus[0]&BOSSERF_FRONTRETICLE)? + clamp(zoom,20,40): + clamp(zoom,6,70); + int choke=min(getloadoutvar(input,"choke",1),9); + if(choke>=0)weaponstatus[BOSSERS_CHOKE]=choke; + } } enum bosserstatus{ @@ -715,6 +716,7 @@ enum bosserstatus{ BOSSERS_HAND=5, BOSSERS_RELOADING=6, //0 - nope, 1 - reload, 2 - alt.reload, 3-unload BOSSERS_CHOKE=7, + BOSSERS_DROPADJUST=8, BOSSERS_TUBESIZE=5, }; \ No newline at end of file diff --git a/zscript/Hexadoken/Weapons/Boss Rifle Variants/4mm Boss.zsc b/zscript/Hexadoken/Weapons/Boss Rifle Variants/4mm Boss.zsc index 8401a59..2c27eac 100644 --- a/zscript/Hexadoken/Weapons/Boss Rifle Variants/4mm Boss.zsc +++ b/zscript/Hexadoken/Weapons/Boss Rifle Variants/4mm Boss.zsc @@ -1,36 +1,14 @@ class BossRifleButIts4mm:BossRifle{ default{ tag "$TAG_4MMBOSS"; - hdweapon.refid ""; + inventory.pickupMessage "$PICKUP_4MMBOSS"; + hdweapon.refid HDLD_4MMBOSS; + + hdweapon.ammo1 "FourMilAmmo",1; } - - override string pickupmessage(){ - return "You got the "..gettag().."! Surprisingly light."; - } - override double weaponbulk(){ return 144+weaponstatus[BOSSS_MAG]*ENC_426_LOADED; } - override void DropOneAmmo(int amt){ - if(owner){ - if(owner.countinv("FourMilAmmo"))owner.A_DropInventory("FourMilAmmo",10); - //else owner.A_DropInventory("HD7mClip",1); - } - } - override void ForceBasicAmmo(){ - owner.A_SetInventory("FourMilAmmo",11); - } - override string gethelptext(){ - return - WEPHELP_FIRESHOOT - ..WEPHELP_ALTFIRE.." Work bolt\n" - ..WEPHELP_RELOADRELOAD - ..WEPHELP_ZOOM.."+"..WEPHELP_FIREMODE.." Zoom\n" - ..WEPHELP_ZOOM.."+"..WEPHELP_USE.." Bullet drop\n" - ..WEPHELP_ALTFIRE.."+"..WEPHELP_UNLOAD.." Unload chamber/Clean rifle\n" - ..WEPHELP_UNLOADUNLOAD - ; - } override string,double getpickupsprite(){return "BOJGZ0",1.;} override void DrawHUDStuff(HDStatusBar sb,HDWeapon hdw,HDPlayerPawn hpl){ if(sb.hudlevel==1){ @@ -50,9 +28,26 @@ class BossRifleButIts4mm:BossRifle{ (-16,-18),sb.DI_SCREEN_CENTER_BOTTOM|sb.DI_TEXT_ALIGN_RIGHT,Font.CR_WHITE ); } - override void InitializeWepStats(bool idfa){ - weaponspecial = 1337; //UaS sling compatbility - super.InitializeWepStats(idfa); + override string gethelptext(){ + return + WEPHELP_FIRESHOOT + ..WEPHELP_ALTFIRE..StringTable.Localize("$BOSWH_ALTFIRE") + ..WEPHELP_RELOAD..StringTable.Localize("$BOSWH_RELOAD") + ..WEPHELP_ZOOM.."+"..WEPHELP_FIREMODE..StringTable.Localize("$BOSWH_ZPFMOD") + ..WEPHELP_ZOOM.."+"..WEPHELP_USE..StringTable.Localize("$BOSWH_ZPUSE") + // ..WEPHELP_ZOOM.."+"..WEPHELP_DROPONE..StringTable.Localize("$BOSWH_ZPDRON") + // ..WEPHELP_ZOOM.."+"..WEPHELP_ALTRELOAD..StringTable.Localize("$BOSWH_ZPALTRELOAD") + ..WEPHELP_ALTFIRE.."+"..WEPHELP_UNLOAD..StringTable.Localize("$BOSWH_AFIREPUNL") + ..WEPHELP_UNLOADUNLOAD + ; + } + override void DropOneAmmo(int amt){ + if(owner){ + if(owner.countinv("FourMilAmmo"))owner.A_DropInventory("FourMilAmmo",10); + } + } + override void ForceBasicAmmo(){ + owner.A_SetInventory("FourMilAmmo",11); } states{ select0: @@ -88,7 +83,7 @@ class BossRifleButIts4mm:BossRifle{ A_AlertMonsters(); HDBulletActor.FireBullet(self,"HDB_426", - aimoffy:(-1./600.)*invoker.weaponstatus[BOSSS_DROPADJUST], + aimoffy:(-HDCONST_GRAVITY/600.)*invoker.weaponstatus[BOSSS_DROPADJUST], speedfactor:(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER)?0.99:1.07 ); A_MuzzleClimb( @@ -111,12 +106,10 @@ class BossRifleButIts4mm:BossRifle{ TNT1 A 0 A_Light0(); stop; altfire: - BOJG K 1 offset(0,34) A_WeaponBusy(); - BOJG L 2 offset(2,36) A_JumpIf(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER,1); - BOJG L 1 offset(4,38){ - if(invoker.weaponstatus[BOSSS_CHAMBER]>2)setweaponstate("jamderp"); - } - BOJG L 1 offset(0,34); + BOJG K 1 A_WeaponBusy(); + BOJG L 2 A_JumpIf(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER,1); + BOJG L 1 A_JumpIf(invoker.weaponstatus[BOSSS_CHAMBER]>2,"jamderp"); + BOJG L 1 A_MuzzleClimb(-frandom(0.03,0.05),-frandom(0.15,0.25)); BOJG L 0 A_ChamberGrit(randompick(0,0,0,0,-1,1,2),true); BOJG L 0 A_Refire("chamber"); goto ready; @@ -124,7 +117,6 @@ class BossRifleButIts4mm:BossRifle{ BOJG O 1 A_WeaponReady(WRF_NOFIRE); BOJG O 1{ A_ClearRefire(); - bool eww=invoker.weaponstatus[BOSSS_GRIME]>10; bool chempty=invoker.weaponstatus[BOSSS_CHAMBER]<1; if(pressingunload()){ if(chempty){ @@ -140,11 +132,11 @@ class BossRifleButIts4mm:BossRifle{ invoker.weaponstatus[0]|=BOSSF_UNLOADONLY; return resolvestate("loadchamber"); }else if( - eww + invoker.weaponstatus[BOSSS_GRIME]>10 ){ return resolvestate("altholdclean"); }else if( - countinv("SevenMilAmmo") + countinv("FourMilAmmo") ){ invoker.weaponstatus[0]&=~BOSSF_UNLOADONLY; return resolvestate("loadchamber"); @@ -156,7 +148,7 @@ class BossRifleButIts4mm:BossRifle{ altholdend: BOJG O 0 A_StartSound("weapons/boltfwd",8); BOJG NM 2 A_WeaponReady(WRF_NOFIRE); - BOJG L 3 offset(2,36){ + BOJG L 3{ A_WeaponReady(WRF_NOFIRE); if(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER)A_SetTics(1); } @@ -175,7 +167,10 @@ class BossRifleButIts4mm:BossRifle{ if(invoker.weaponstatus[0]&BOSSF_UNLOADONLY){ int chm=invoker.weaponstatus[BOSSS_CHAMBER]; invoker.weaponstatus[BOSSS_CHAMBER]=0; - if(chm<2||A_JumpIfInventory("FourMilAmmo",0,"null")){ + if( + chm<2 + ||A_JumpIfInventory("FourMilAmmo",0,"null") + ){ if (chm==2){ actor rrr=spawn("ZM66DroppedRound",pos+(cos(angle)*10,sin(angle)*10,height-12),ALLOW_REPLACE); rrr.angle=angle;rrr.A_ChangeVelocity(1,2,1,CVF_RELATIVE); @@ -189,17 +184,17 @@ class BossRifleButIts4mm:BossRifle{ } BOJG O 2 offset(7,72); BOJG O 2 offset(8,60); - BOJG O 1 offset(7,52); + BOJG O 1 offset(6,52); BOJG O 1 offset(5,42); - BOJG O 1 offset(3,38); + BOJG O 1 offset(4,38); BOJG O 1 offset(3,35); goto althold; altholdclean: BOJG O 1 offset(2,36) A_ClearRefire(); BOJG O 1 offset(3,38); - BOJG O 1 offset(5,42) A_Log("Looking inside that chamber...",true); - BOJG O 1 offset(8,48) A_StartSound("weapons/pocket",9); - BOJG O 1 offset(7,52) A_MuzzleClimb(frandom(-0.2,0.2),0.2,frandom(-0.2,0.2),0.2,frandom(-0.2,0.2),0.2); + BOJG O 1 offset(5,41) A_Log(StringTable.Localize("$BOSS_CLEANS"),true); + BOJG O 1 offset(8,44) A_StartSound("weapons/pocket",9); + BOJG O 1 offset(7,50) A_MuzzleClimb(frandom(-0.2,0.2),0.2,frandom(-0.2,0.2),0.2,frandom(-0.2,0.2),0.2); TNT1 A 3 A_StartSound("weapons/pocket",10); TNT1 AAAA 4 A_MuzzleClimb(frandom(-0.2,0.2),frandom(-0.2,0.2),frandom(-0.2,0.2),frandom(-0.2,0.2),frandom(-0.2,0.2),frandom(-0.2,0.2),frandom(-0.2,0.2),frandom(-0.2,0.2)); TNT1 A 3 A_StartSound("weapons/pocket",9); @@ -207,31 +202,32 @@ class BossRifleButIts4mm:BossRifle{ TNT1 A 40{ A_StartSound("weapons/pocket",9); int amt=invoker.weaponstatus[BOSSS_GRIME]; - string amts="There doesn't seem to be much. "; - if(amt>40)amts="What the FUCK. "; - else if(amt>30)amts="About time - this gun is barely functional. "; - else if(amt>20)amts="This is starting to gum up badly. "; - else if(amt>10)amts="It can use some cleaning. "; + string amts=StringTable.Localize("$BOSS_CLEAN1"); + if(amt>40)amts=StringTable.Localize("$BOSS_CLEAN2"); + else if(amt>30)amts=StringTable.Localize("$BOSS_CLEAN3"); + else if(amt>20)amts=StringTable.Localize("$BOSS_CLEAN4"); + else if(amt>10)amts=StringTable.Localize("$BOSS_CLEAN5"); - static const string cleanverbs[]={"extract","scrape off","wipe away","carefully remove","dump out","pick out","blow off","shake out","scrub off","fish out"}; - static const string contaminants[]={"some dust","a lot of dust","a bit of powder residue","a disturbing amount of powder residue","some excess grease","a layer of soot","some iron filings","a bit of hair","an eyelash","a patch of dried blood","a bit of rust","a crumb","a dead insect","ashes","some loose bits of skin","a sticky fluid of some sort","wow some fucking *gunk*","a booger","trace fecal matter","yet even more of that anonymous grey debris that all those bullet impacts make","a dollop of strawberry jam","the dried husk of a pinto bean with residual hog components","a tiny cancerous nodule of Second Flesh","some crystalline buildup of congealed Frag","a nesting queen space ant","a single modern-day transistor","a tiny Boss rifle (also jammed)","a colourless film of darkness made visible"}; - static const string actionparts[]={"bolt carrier","main extractor","auxiliary extractor","cam pin","bolt head","striker","firing pin spring","ejector slot","striker spring","ejector spring"}; - for(int i=amt;i>0;i-=random(8,16))amts.appendformat("You %s %s from the %s. ", + /*static const */string cleanverbs[]={StringTable.Localize("$BOSS_EXTRACT"),StringTable.Localize("$BOSS_SCRAPEOFF"),StringTable.Localize("$BOSS_WIPEAWAY"),StringTable.Localize("$BOSS_CAREREMOVE"),StringTable.Localize("$BOSS_DUMPOUT"),StringTable.Localize("$BOSS_PICKOUT"),StringTable.Localize("$BOSS_BLOWOFF"),StringTable.Localize("$BOSS_SHAKEOUT"),StringTable.Localize("$BOSS_SCRUBOFF"),StringTable.Localize("$BOSS_FISH")}; + /*static const */string contaminants[]={StringTable.Localize("$BOSS_SOMEDUST"),StringTable.Localize("$BOSS_ALODUST"),StringTable.Localize("$BOSS_ABOPOWDER"),StringTable.Localize("$BOSS_DAOPOWDER"),StringTable.Localize("$BOSS_SEXGREASE"),StringTable.Localize("$BOSS_ALOSOOT"),StringTable.Localize("$BOSS_SOMEIRON"),StringTable.Localize("$BOSS_HAIR"),StringTable.Localize("$BOSS_EYELASH"),StringTable.Localize("$BOSS_BLOOD"),StringTable.Localize("$BOSS_RUST"),StringTable.Localize("$BOSS_CRUMB"),StringTable.Localize("$BOSS_DEADSOME"),StringTable.Localize("$BOSS_ASHES"),StringTable.Localize("$BOSS_SKIN"),StringTable.Localize("$BOSS_FLUID"),StringTable.Localize("$BOSS_WOWSOME"),StringTable.Localize("$BOSS_BOOGER"),StringTable.Localize("$BOSS_FECAL"),StringTable.Localize("$BOSS_BULLETSIMPACT"),StringTable.Localize("$BOSS_JAM"),StringTable.Localize("$BOSS_HUSK"),StringTable.Localize("$BOSS_SFLESH"),StringTable.Localize("$BOSS_CRYSTAL"),StringTable.Localize("$BOSS_SPACEANT"),StringTable.Localize("$BOSS_TRANSISTOR"),StringTable.Localize("$BOSS_TINBOSS"),StringTable.Localize("$BOSS_FILM")}; + /*static const */string actionparts[]={StringTable.Localize("$BOSS_BOLTCAR"),StringTable.Localize("$BOSS_MAINEXTRACTOR"),StringTable.Localize("$BOSS_AUXEXTRACTOR"),StringTable.Localize("$BOSS_CAMPIN"),StringTable.Localize("$BOSS_BOLTHEAD"),StringTable.Localize("$BOSS_STRIKER"),StringTable.Localize("$BOSS_SPRING"),StringTable.Localize("$BOSS_EJECTSLOT"),StringTable.Localize("$BOSS_STRIKERSPRING"),StringTable.Localize("$BOSS_EJSPRING")}; + for(int i=amt;i>0;i-=random(8,16))amts.appendformat(StringTable.Localize("$BOSS_FINLINE"), cleanverbs[random(0,cleanverbs.size()-1)], contaminants[random(0,random(0,contaminants.size()-1))], actionparts[random(0,random((actionparts.size()>>1),actionparts.size()-1))] ); + amts=HDMath.BuildVariableString(amts); amts.appendformat("\n"); amt=randompick(-3,-5,-5,-random(8,16)); A_ChamberGrit(amt,true); amt=invoker.weaponstatus[BOSSS_GRIME]; - if(amt>40)amts.appendformat("You barely scrape the surface of this all-encrusting abomination."); - else if(amt>30)amts.appendformat("The gun will need a lot more work than this before it can be deployed again."); - else if(amt>20)amts.appendformat("You might get a few shots out of it now."); - else if(amt>10)amts.appendformat("It's better, but still not good."); - else amts.appendformat("Good to go."); + if(amt>40)amts.appendformat(StringTable.Localize("$BOSS_CLENF1")); + else if(amt>30)amts.appendformat(StringTable.Localize("$BOSS_CLENF2")); + else if(amt>20)amts.appendformat(StringTable.Localize("$BOSS_CLENF3")); + else if(amt>10)amts.appendformat(StringTable.Localize("$BOSS_CLENF4")); + else amts.appendformat(StringTable.Localize("$BOSS_CLENF5")); A_Log(amts,true); } BOJG O 1 offset(7,52); @@ -264,7 +260,7 @@ class BossRifleButIts4mm:BossRifle{ BOJG K 0 A_Refire("jamderp"); goto ready; chamber: - BOJG M 2 offset(4,38){ + BOJG M 2{ if( random(0,max(2,invoker.weaponstatus[BOSSS_GRIME]>>3)) &&invoker.weaponstatus[BOSSS_CHAMBER]>2 @@ -278,8 +274,8 @@ class BossRifleButIts4mm:BossRifle{ setweaponstate("jamderp"); }else A_StartSound("weapons/boltback",8); } - BOJG N 2 offset(6,42)A_JumpIf(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER,1); - BOJG N 1 offset(6,42){ + BOJG N 2 offset(1,34)A_JumpIf(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER,1); + BOJG N 1 offset(2,36){ if(gunbraced())A_MuzzleClimb( frandom(-0.1,0.3),frandom(-0.1,0.3) );else A_MuzzleClimb( @@ -289,27 +285,29 @@ class BossRifleButIts4mm:BossRifle{ if(hd_debug)A_Log("jam chance: "..jamch); if(random(0,100)1){ - A_SpawnItemEx( - "ZM66DroppedRound",cos(pitch)*8,1,height-7-sin(pitch)*8, - cos(pitch)*cos(angle-80)*4+vel.x, - cos(pitch)*sin(angle-80)*4+vel.y, - -sin(pitch)*4+vel.z, - 0,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION|SXF_TRANSFERPITCH - ); + if(chm>1){ + Vector3 gunofs=HDMath.RotateVec3D((10,-1,0),angle,pitch); + Actor rrr=spawn("ZM66DroppedRound",(pos.xy,pos.z+height*0.85)+gunofs+viewpos.offset); + rrr.target=self; + rrr.angle=angle; + rrr.vel=HDMath.RotateVec3D((1,-4,2),angle,pitch); + rrr.vel+=vel; } + + //cycle new if(invoker.weaponstatus[BOSSS_MAG]>0){ invoker.weaponstatus[BOSSS_CHAMBER]=2; invoker.weaponstatus[BOSSS_MAG]--; }else invoker.weaponstatus[BOSSS_CHAMBER]=0; } - BOJG O 1 offset(6,42) A_WeaponReady(WRF_NOFIRE); + BOJG O 1 A_WeaponReady(WRF_NOFIRE); BOJG O 0 A_Refire("althold"); goto altholdend; + reload: ---- A 0{invoker.weaponstatus[0]&=~BOSSF_DONTUSECLIPS;} goto reloadstart; @@ -325,19 +323,13 @@ class BossRifleButIts4mm:BossRifle{ A_MuzzleClimb(-frandom(0.4,0.8),frandom(0.4,1.4)); } BOJG K 4 offset(14,46){ - A_StartSound("weapons/rifleload",8,CHANF_OVERLAP); + A_StartSound("weapons/bossloadm",8,CHANF_OVERLAP); A_MuzzleClimb(-frandom(0.4,0.8),frandom(0.4,1.4)); } BOJG K 0{ int mg=invoker.weaponstatus[BOSSS_MAG]; if(mg==10)setweaponstate("reloaddone"); else if(invoker.weaponstatus[0]&BOSSF_DONTUSECLIPS)setweaponstate("loadhand"); - /*else if( - ( - mg<1 - ||!countinv("SevenMilAmmo") - )&&!HDMagAmmo.NothingLoaded(self,"HD7mClip") - )setweaponstate("loadclip");*/ } loadhand: BOJG K 0 A_JumpIfInventory("FourMilAmmo",1,"loadhandloop"); @@ -361,12 +353,14 @@ class BossRifleButIts4mm:BossRifle{ BOJG K 2 offset(16,50) A_JumpIf(invoker.weaponstatus[BOSSS_HAND]<1,"loadhandnext"); BOJG K 4 offset(14,46){ invoker.weaponstatus[BOSSS_HAND]--; + + // Random Chance to pop 4mm round if(!random(0,40)){ invoker.owner.A_StartSound("weapons/bigcrack",8,CHANF_OVERLAP); invoker.owner.A_SpawnItemEx("WallChunk",12,0,invoker.owner.height-12,4,frandom(-2,2),frandom(2,4)); - } - else { + } else { invoker.weaponstatus[BOSSS_MAG]++; + A_StartSound("weapons/rifleclick2",8); } }loop; @@ -396,7 +390,7 @@ class BossRifleButIts4mm:BossRifle{ } BOJG K 4 offset (14,46){ A_MuzzleClimb(-frandom(0.4,0.8),frandom(0.4,1.4)); - A_StartSound("weapons/rifleload",8); + A_StartSound("weapons/bossloadm",8); } unloadloop: BOJG K 4 offset(3,41){ @@ -436,6 +430,11 @@ class BossRifleButIts4mm:BossRifle{ spawn: BOJG Z -1; } + override void InitializeWepStats(bool idfa){ + super.InitializeWepStats(idfa); + + weaponspecial = 1337; //UaS sling compatbility + } } class BossRifleFour:IdleDummy{ diff --git a/zscript/Hexadoken/Weapons/Boss Rifle Variants/50 OMG Boss.zsc b/zscript/Hexadoken/Weapons/Boss Rifle Variants/50 OMG Boss.zsc index 010d7bb..b11635b 100644 --- a/zscript/Hexadoken/Weapons/Boss Rifle Variants/50 OMG Boss.zsc +++ b/zscript/Hexadoken/Weapons/Boss Rifle Variants/50 OMG Boss.zsc @@ -2,41 +2,16 @@ // Bolt-Action Anti-Materiel Rifle // ------------------------------------------------------------ -class BogRifle:HDWeapon{ +class BogRifle:BossRifle{ default{ - weapon.slotnumber 8; - weapon.slotpriority 1; - weapon.kickback 15; - weapon.selectionorder 80; - inventory.pickupSound "misc/w_pkup"; - inventory.pickupMessage "You got the Boss bolt-action anti-materiel rifle!"; - weapon.bobrangex 0.28; - weapon.bobrangey 1.1; - scale 0.75; - Obituary "%o sure showed %k who was the big boss!"; - hdweapon.barrelsize 40,1,2; - hdweapon.refid "BOG"; + inventory.pickupMessage "$PICKUP_OMGBOSS"; + Obituary "$OB_OMGBOSS"; + hdweapon.barrelsize 40,1,2; // Shouldn't this be bigger than 7mm? [UZ] + hdweapon.refid HDLD_OMGBOSS; tag "$TAG_OMGBOSS"; - hdweapon.loadoutcodes " - \cucustomchamber - 0/1, whether to reduce jam for less power - \cubulletdrop - 0-600, amount of compensation for bullet drop"; inventory.maxamount 3; //1 use user setting; 2 custom chamber; 3 regular - } - override bool AddSpareWeapon(actor newowner){return AddSpareWeaponRegular(newowner);} - override hdweapon GetSpareWeapon(actor newowner,bool reverse,bool doselect){return GetSpareWeaponRegular(newowner,reverse,doselect);} - action void A_ChamberGrit(int amt,bool onlywhileempty=false){ - int ibg=invoker.weaponstatus[BOSSS_GRIME]; - bool customchamber=(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER); - if(amt>0&&customchamber)amt>>=1; - if(!onlywhileempty||invoker.weaponstatus[BOSSS_CHAMBER]<1)ibg+=amt; - else if(!random(0,4))ibg++; - invoker.weaponstatus[BOSSS_GRIME]=clamp(ibg,0,100); - //if(hd_debug)A_Log(string.format("Boss grit level: %i",invoker.weaponstatus[BOSSS_GRIME])); - } - int pickuprounds; - override void tick(){ - super.tick(); - drainheat(BOSSS_HEAT,4); + + hdweapon.ammo1 "HDOmgClip",1; } override double gunmass(){ return 30; @@ -44,38 +19,28 @@ class BogRifle:HDWeapon{ override double weaponbulk(){ return 144+weaponstatus[BOSSS_MAG]*ENC_50OMG_LOADED; } - override void GunBounce(){ - super.GunBounce(); - weaponstatus[BOSSS_GRIME]+=random(-7,3); - if(weaponstatus[BOSSS_CHAMBER]>2&&!random(0,7))weaponstatus[BOSSS_CHAMBER]-=2; - } - int jamchance(){ - int jc= - weaponstatus[BOSSS_GRIME] - +(weaponstatus[BOSSS_HEAT]>>2) - +weaponstatus[BOSSS_CHAMBER] - ; - if(weaponstatus[0]&BOSSF_CUSTOMCHAMBER)return jc>>5; - return jc; - } override string,double getpickupsprite(){return "BOGGZ0",1.;} override void DrawHUDStuff(HDStatusBar sb,HDWeapon hdw,HDPlayerPawn hpl){ if(sb.hudlevel==1){ int nextmagloaded=sb.GetNextLoadMag(hdmagammo(hpl.findinventory("HDOmgClip"))); if(nextmagloaded<1){ - sb.drawimage("OCLPF0",(-58,-3),sb.DI_SCREEN_CENTER_BOTTOM,alpha:nextmagloaded?0.6:1.,scale:(1.25,1.6)); - }else if(nextmagloaded==1){ - sb.drawimage("OCLPE0",(-58,-3),sb.DI_SCREEN_CENTER_BOTTOM,scale:(1.25,1.6)); - }else if(nextmagloaded==2){ - sb.drawimage("OCLPD0",(-58,-3),sb.DI_SCREEN_CENTER_BOTTOM,scale:(1.25,1.6)); - }else if(nextmagloaded==3){ - sb.drawimage("OCLPC0",(-58,-3),sb.DI_SCREEN_CENTER_BOTTOM,scale:(1.25,1.6)); - }else if(nextmagloaded==4){ - sb.drawimage("OCLPB0",(-58,-3),sb.DI_SCREEN_CENTER_BOTTOM,scale:(1.25,1.6)); - }else sb.drawimage("OCLPA0",(-58,-3),sb.DI_SCREEN_CENTER_BOTTOM,scale:(1.25,1.6)); - sb.drawnum(hpl.countinv("HDOmgClip"),-45,-8,sb.DI_SCREEN_CENTER_BOTTOM); + sb.drawimage("OCLPF0",(-50,-3),sb.DI_SCREEN_CENTER_BOTTOM,alpha:nextmagloaded?0.6:1.,scale:(1.25,1.6)); + }else if(nextmagloaded<2){ + sb.drawimage("OCLPE0",(-50,-3),sb.DI_SCREEN_CENTER_BOTTOM,scale:(1.25,1.6)); + }else if(nextmagloaded<3){ + sb.drawimage("OCLPD0",(-50,-3),sb.DI_SCREEN_CENTER_BOTTOM,scale:(1.25,1.6)); + }else if(nextmagloaded<4){ + sb.drawimage("OCLPC0",(-50,-3),sb.DI_SCREEN_CENTER_BOTTOM,scale:(1.25,1.6)); + }else if(nextmagloaded<5){ + sb.drawimage("OCLPB0",(-50,-3),sb.DI_SCREEN_CENTER_BOTTOM,scale:(1.25,1.6)); + }else sb.drawimage("OCLPA0",(-50,-3),sb.DI_SCREEN_CENTER_BOTTOM,scale:(1.25,1.6)); + sb.drawnum(hpl.countinv("HDOmgClip"),-43,-8,sb.DI_SCREEN_CENTER_BOTTOM); + + int omgrounds=hpl.countinv("HD50OMGAmmo"); + sb.drawimage("OG10A0",(-62,-4),sb.DI_SCREEN_CENTER_BOTTOM,alpha:omgrounds?1:0.6,scale:(1.2,1.2)); + sb.drawnum(omgrounds,-56,-8,sb.DI_SCREEN_CENTER_BOTTOM); } - sb.drawwepnum(hdw.weaponstatus[BOSSS_MAG],10); + sb.drawwepnum(hdw.weaponstatus[BOSSS_MAG],5); sb.drawwepcounter(hdw.weaponstatus[BOSSS_CHAMBER], -16,-10,"blank","RBRSA1A5","RBRSA3A7","RBRSA4A6" ); @@ -91,92 +56,15 @@ class BogRifle:HDWeapon{ override string gethelptext(){ return WEPHELP_FIRESHOOT - ..WEPHELP_ALTFIRE.." Work bolt\n" - ..WEPHELP_RELOAD.." Reload rounds/clip\n" - ..WEPHELP_ZOOM.."+"..WEPHELP_FIREMODE.." Zoom\n" - ..WEPHELP_ZOOM.."+"..WEPHELP_USE.." Bullet drop\n" - ..WEPHELP_ALTFIRE.."+"..WEPHELP_UNLOAD.." Unload chamber/Clean rifle\n" - ..WEPHELP_UNLOADUNLOAD; - } - override void DrawSightPicture( - HDStatusBar sb,HDWeapon hdw,HDPlayerPawn hpl, - bool sightbob,vector2 bob,double fov,bool scopeview,actor hpc - ){ - int cx,cy,cw,ch; - [cx,cy,cw,ch]=Screen.GetClipRect(); - sb.SetClipRect( - -16+bob.x,-64+bob.y,32,76, - sb.DI_SCREEN_CENTER - ); - sb.drawimage( - "bsfrntsit",bob*1.14,sb.DI_SCREEN_CENTER|sb.DI_ITEM_TOP - ); - sb.SetClipRect(cx,cy,cw,ch); - - sb.drawimage( - "bsbaksit",(0,0)+bob,sb.DI_SCREEN_CENTER|sb.DI_ITEM_TOP, - alpha:0.9 - ); - - if(scopeview){ - int scaledwidth=89; - int scaledyoffset=60; - double degree=0.1*hdw.weaponstatus[BOSSS_ZOOM]; - double deg=1/degree; - int cx,cy,cw,ch; - [cx,cy,cw,ch]=screen.GetClipRect(); - sb.SetClipRect(-44+bob.x,16+bob.y,scaledwidth,scaledwidth, - sb.DI_SCREEN_CENTER - ); - - sb.fill(color(255,0,0,0), - bob.x-44,scaledyoffset+bob.y-44, - 88,88,sb.DI_SCREEN_CENTER|sb.DI_ITEM_CENTER - ); - - texman.setcameratotexture(hpc,"HDXCAM_BOSS",degree); - let cam = texman.CheckForTexture("HDXCAM_BOSS",TexMan.Type_Any); - let reticle = texman.CheckForTexture("bossret1",TexMan.Type_Any); - - vector2 frontoffs=(0,scaledyoffset)+bob*3; - - double camSize = texman.GetSize(cam); - sb.DrawCircle(cam, frontoffs, 0.125,usePixelRatio:true); - - let reticleScale = camSize / texman.GetSize(reticle); - if(hdw.weaponstatus[0]&BOSSF_FRONTRETICLE){ - sb.DrawCircle(reticle, frontoffs, .5*reticleScale, bob*deg*5-bob, 1.6*deg); - }else{ - sb.DrawCircle(reticle, (0,scaledyoffset)+bob, .5*reticleScale,uvScale:.5); - } - - //let holeScale = camSize / texman.GetSize(hole); - //let hole = texman.CheckForTexture("scophole",TexMan.Type_Any); - //sb.DrawCircle(hole, (0, scaledyoffset) + bob, .5 * holeScale, bob * 5, 1.5); - - - screen.SetClipRect(cx,cy,cw,ch); - - sb.drawimage( - "bossscope",(0,scaledyoffset)+bob,sb.DI_SCREEN_CENTER|sb.DI_ITEM_CENTER, - scale:(1.24,1.24) - ); - sb.drawstring( - sb.mAmountFont,string.format("%.1f",degree), - (6+bob.x,105+bob.y),sb.DI_SCREEN_CENTER|sb.DI_TEXT_ALIGN_RIGHT, - Font.CR_BLACK - ); - sb.drawstring( - sb.mAmountFont,string.format("%i",hdw.weaponstatus[BOSSS_DROPADJUST]), - (6+bob.x,9+bob.y),sb.DI_SCREEN_CENTER|sb.DI_TEXT_ALIGN_RIGHT, - Font.CR_BLACK - ); - } - // the scope display is in 10ths of an arcminute. - // one dot = 6 arcminutes. - } - override void consolidate(){ - weaponstatus[BOSSS_GRIME]=random(0,20); + ..WEPHELP_ALTFIRE..StringTable.Localize("$BOSWH_ALTFIRE") + ..WEPHELP_RELOAD..StringTable.Localize("$BOSWH_RELOAD") + ..WEPHELP_ZOOM.."+"..WEPHELP_FIREMODE..StringTable.Localize("$BOSWH_ZPFMOD") + ..WEPHELP_ZOOM.."+"..WEPHELP_USE..StringTable.Localize("$BOSWH_ZPUSE") + // ..WEPHELP_ZOOM.."+"..WEPHELP_DROPONE..StringTable.Localize("$BOSWH_ZPDRON") + // ..WEPHELP_ZOOM.."+"..WEPHELP_ALTRELOAD..StringTable.Localize("$BOSWH_ZPALTRELOAD") + ..WEPHELP_ALTFIRE.."+"..WEPHELP_UNLOAD..StringTable.Localize("$BOSWH_AFIREPUNL") + ..WEPHELP_UNLOADUNLOAD + ; } override void DropOneAmmo(int amt){ if(owner){ @@ -186,10 +74,11 @@ class BogRifle:HDWeapon{ } } override void ForceBasicAmmo(){ - owner.A_SetInventory("HD50OmgAmmo",11); - owner.A_TakeInventory("HDOmgClip"); - owner.A_GiveInventory("HDOmgClip"); + owner.A_SetInventory("HD50OMGAmmo",11); + ForceOneBasicAmmo("HDOmgClip"); } + + states{ select0: BOGG A 0; @@ -224,7 +113,7 @@ class BogRifle:HDWeapon{ A_AlertMonsters(); HDBulletActor.FireBullet(self,"HDB_50OMG", - aimoffy:(-1./600.)*invoker.weaponstatus[BOSSS_DROPADJUST], + aimoffy:(-HDCONST_GRAVITY/600.)*invoker.weaponstatus[BOSSS_DROPADJUST], speedfactor:(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER)?0.99:1.07 ); A_MuzzleClimb( @@ -247,12 +136,10 @@ class BogRifle:HDWeapon{ TNT1 A 0 A_Light0(); stop; altfire: - BOGG A 1 offset(0,34) A_WeaponBusy(); - BOGG B 1 offset(2,36) A_JumpIf(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER,1); - BOGG B 2 offset(4,38){ - if(invoker.weaponstatus[BOSSS_CHAMBER]>2)setweaponstate("jamderp"); - } - BOGG B 2 offset(0,34); + BOGG A 1 A_WeaponBusy(); + BOGG B 1 A_JumpIf(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER,1); + BOGG B 2 A_JumpIf(invoker.weaponstatus[BOSSS_CHAMBER]>2,"jamderp"); + BOGG B 2 A_MuzzleClimb(-frandom(0.06,0.1),-frandom(0.3,0.5)); BOGG B 0 A_ChamberGrit(randompick(0,0,0,0,-1,1,2),true); BOGG B 0 A_Refire("chamber"); goto ready; @@ -260,7 +147,6 @@ class BogRifle:HDWeapon{ BOGG E 1 A_WeaponReady(WRF_NOFIRE); BOGG E 1{ A_ClearRefire(); - bool eww=invoker.weaponstatus[BOSSS_GRIME]>10; bool chempty=invoker.weaponstatus[BOSSS_CHAMBER]<1; if(pressingunload()){ if(chempty){ @@ -276,11 +162,11 @@ class BogRifle:HDWeapon{ invoker.weaponstatus[0]|=BOSSF_UNLOADONLY; return resolvestate("loadchamber"); }else if( - eww + invoker.weaponstatus[BOSSS_GRIME]>10 ){ return resolvestate("altholdclean"); }else if( - countinv("HD50OmgAmmo") + countinv("HD50OMGAmmo") ){ invoker.weaponstatus[0]&=~BOSSF_UNLOADONLY; return resolvestate("loadchamber"); @@ -292,7 +178,7 @@ class BogRifle:HDWeapon{ altholdend: BOGG E 0 A_StartSound("weapons/boltfwd",8); BOGG DC 4 A_WeaponReady(WRF_NOFIRE); - BOGG B 4 offset(2,36){ + BOGG B 4{ A_WeaponReady(WRF_NOFIRE); if(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER)A_SetTics(3); } @@ -324,17 +210,17 @@ class BogRifle:HDWeapon{ } BOGG E 2 offset(7,72); BOGG E 2 offset(8,60); - BOGG E 1 offset(7,52); + BOGG E 1 offset(6,52); BOGG E 1 offset(5,42); - BOGG E 1 offset(3,38); + BOGG E 1 offset(4,38); BOGG E 1 offset(3,35); goto althold; altholdclean: BOGG E 1 offset(2,36) A_ClearRefire(); BOGG E 1 offset(3,38); - BOGG E 1 offset(5,42) A_Log("Looking inside that chamber...",true); - BOGG E 1 offset(8,48) A_StartSound("weapons/pocket",9); - BOGG E 1 offset(7,52) A_MuzzleClimb(frandom(-0.2,0.2),0.2,frandom(-0.2,0.2),0.2,frandom(-0.2,0.2),0.2); + BOGG E 1 offset(5,41) A_Log(StringTable.Localize("$BOSS_CLEANS"),true); + BOGG E 1 offset(8,44) A_StartSound("weapons/pocket",9); + BOGG E 1 offset(7,50) A_MuzzleClimb(frandom(-0.2,0.2),0.2,frandom(-0.2,0.2),0.2,frandom(-0.2,0.2),0.2); TNT1 A 3 A_StartSound("weapons/pocket",10); TNT1 AAAA 4 A_MuzzleClimb(frandom(-0.2,0.2),frandom(-0.2,0.2),frandom(-0.2,0.2),frandom(-0.2,0.2),frandom(-0.2,0.2),frandom(-0.2,0.2),frandom(-0.2,0.2),frandom(-0.2,0.2)); TNT1 A 3 A_StartSound("weapons/pocket",9); @@ -342,31 +228,32 @@ class BogRifle:HDWeapon{ TNT1 A 40{ A_StartSound("weapons/pocket",9); int amt=invoker.weaponstatus[BOSSS_GRIME]; - string amts="There doesn't seem to be much. "; - if(amt>40)amts="What the FUCK. "; - else if(amt>30)amts="About time - this gun is barely functional. "; - else if(amt>20)amts="This is starting to gum up badly. "; - else if(amt>10)amts="It can use some cleaning. "; + string amts=StringTable.Localize("$BOSS_CLEAN1"); + if(amt>40)amts=StringTable.Localize("$BOSS_CLEAN2"); + else if(amt>30)amts=StringTable.Localize("$BOSS_CLEAN3"); + else if(amt>20)amts=StringTable.Localize("$BOSS_CLEAN4"); + else if(amt>10)amts=StringTable.Localize("$BOSS_CLEAN5"); - static const string cleanverbs[]={"extract","scrape off","wipe away","carefully remove","dump out","pick out","blow off","shake out","scrub off","fish out"}; - static const string contaminants[]={"some dust","a lot of dust","a bit of powder residue","a disturbing amount of powder residue","some excess grease","a layer of soot","some iron filings","a bit of hair","an eyelash","a patch of dried blood","a bit of rust","a crumb","a dead insect","ashes","some loose bits of skin","a sticky fluid of some sort","wow some fucking *gunk*","a booger","trace fecal matter","yet even more of that anonymous grey debris that all those bullet impacts make","a dollop of strawberry jam","the dried husk of a pinto bean with residual hog components","a tiny cancerous nodule of Second Flesh","some crystalline buildup of congealed Frag","a nesting queen space ant","a single modern-day transistor","a tiny Boss rifle (also jammed)","a colourless film of darkness made visible"}; - static const string actionparts[]={"bolt carrier","main extractor","auxiliary extractor","cam pin","bolt head","striker","firing pin spring","ejector slot","striker spring","ejector spring"}; - for(int i=amt;i>0;i-=random(8,16))amts.appendformat("You %s %s from the %s. ", + /*static const */string cleanverbs[]={StringTable.Localize("$BOSS_EXTRACT"),StringTable.Localize("$BOSS_SCRAPEOFF"),StringTable.Localize("$BOSS_WIPEAWAY"),StringTable.Localize("$BOSS_CAREREMOVE"),StringTable.Localize("$BOSS_DUMPOUT"),StringTable.Localize("$BOSS_PICKOUT"),StringTable.Localize("$BOSS_BLOWOFF"),StringTable.Localize("$BOSS_SHAKEOUT"),StringTable.Localize("$BOSS_SCRUBOFF"),StringTable.Localize("$BOSS_FISH")}; + /*static const */string contaminants[]={StringTable.Localize("$BOSS_SOMEDUST"),StringTable.Localize("$BOSS_ALODUST"),StringTable.Localize("$BOSS_ABOPOWDER"),StringTable.Localize("$BOSS_DAOPOWDER"),StringTable.Localize("$BOSS_SEXGREASE"),StringTable.Localize("$BOSS_ALOSOOT"),StringTable.Localize("$BOSS_SOMEIRON"),StringTable.Localize("$BOSS_HAIR"),StringTable.Localize("$BOSS_EYELASH"),StringTable.Localize("$BOSS_BLOOD"),StringTable.Localize("$BOSS_RUST"),StringTable.Localize("$BOSS_CRUMB"),StringTable.Localize("$BOSS_DEADSOME"),StringTable.Localize("$BOSS_ASHES"),StringTable.Localize("$BOSS_SKIN"),StringTable.Localize("$BOSS_FLUID"),StringTable.Localize("$BOSS_WOWSOME"),StringTable.Localize("$BOSS_BOOGER"),StringTable.Localize("$BOSS_FECAL"),StringTable.Localize("$BOSS_BULLETSIMPACT"),StringTable.Localize("$BOSS_JAM"),StringTable.Localize("$BOSS_HUSK"),StringTable.Localize("$BOSS_SFLESH"),StringTable.Localize("$BOSS_CRYSTAL"),StringTable.Localize("$BOSS_SPACEANT"),StringTable.Localize("$BOSS_TRANSISTOR"),StringTable.Localize("$BOSS_TINBOSS"),StringTable.Localize("$BOSS_FILM")}; + /*static const */string actionparts[]={StringTable.Localize("$BOSS_BOLTCAR"),StringTable.Localize("$BOSS_MAINEXTRACTOR"),StringTable.Localize("$BOSS_AUXEXTRACTOR"),StringTable.Localize("$BOSS_CAMPIN"),StringTable.Localize("$BOSS_BOLTHEAD"),StringTable.Localize("$BOSS_STRIKER"),StringTable.Localize("$BOSS_SPRING"),StringTable.Localize("$BOSS_EJECTSLOT"),StringTable.Localize("$BOSS_STRIKERSPRING"),StringTable.Localize("$BOSS_EJSPRING")}; + for(int i=amt;i>0;i-=random(8,16))amts.appendformat(StringTable.Localize("$BOSS_FINLINE"), cleanverbs[random(0,cleanverbs.size()-1)], contaminants[random(0,random(0,contaminants.size()-1))], actionparts[random(0,random((actionparts.size()>>1),actionparts.size()-1))] ); + amts=HDMath.BuildVariableString(amts); amts.appendformat("\n"); amt=randompick(-3,-5,-5,-random(8,16)); A_ChamberGrit(amt,true); amt=invoker.weaponstatus[BOSSS_GRIME]; - if(amt>40)amts.appendformat("You barely scrape the surface of this all-encrusting abomination."); - else if(amt>30)amts.appendformat("The gun will need a lot more work than this before it can be deployed again."); - else if(amt>20)amts.appendformat("You might get a few shots out of it now."); - else if(amt>10)amts.appendformat("It's better, but still not good."); - else amts.appendformat("Good to go."); + if(amt>40)amts.appendformat(StringTable.Localize("$BOSS_CLENF1")); + else if(amt>30)amts.appendformat(StringTable.Localize("$BOSS_CLENF2")); + else if(amt>20)amts.appendformat(StringTable.Localize("$BOSS_CLENF3")); + else if(amt>10)amts.appendformat(StringTable.Localize("$BOSS_CLENF4")); + else amts.appendformat(StringTable.Localize("$BOSS_CLENF5")); A_Log(amts,true); } BOGG E 1 offset(7,52); @@ -399,7 +286,7 @@ class BogRifle:HDWeapon{ BOGG A 0 A_Refire("jamderp"); goto ready; chamber: - BOGG C 4 offset(4,38){ + BOGG C 4{ if( random(0,max(2,invoker.weaponstatus[BOSSS_GRIME]>>3)) &&invoker.weaponstatus[BOSSS_CHAMBER]>2 @@ -413,8 +300,8 @@ class BogRifle:HDWeapon{ setweaponstate("jamderp"); }else A_StartSound("weapons/boltback",8); } - BOGG D 1 offset(6,42)A_JumpIf(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER,1); - BOGG D 3 offset(6,42){ + BOGG D 1 offset(1,34)A_JumpIf(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER,1); + BOGG D 3 offset(2,36){ if(gunbraced())A_MuzzleClimb( frandom(-0.1,0.3),frandom(-0.1,0.3) );else A_MuzzleClimb( @@ -424,35 +311,31 @@ class BogRifle:HDWeapon{ if(hd_debug)A_Log("jam chance: "..jamch); if(random(0,100)1){ - A_SpawnItemEx( - "HDLoose50OMG",cos(pitch)*8,1,height-7-sin(pitch)*8, - cos(pitch)*cos(angle-80)*4+vel.x, - cos(pitch)*sin(angle-80)*4+vel.y, - -sin(pitch)*4+vel.z, - 0,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION|SXF_TRANSFERPITCH - ); - }else if(chm==1){ - A_SpawnItemEx( - "HDSpent50OMG",cos(pitch)*8,1,height-7-sin(pitch)*8, - cos(pitch)*cos(angle-80)*6+vel.x, - cos(pitch)*sin(angle-80)*6+vel.y, - -sin(pitch)*6+vel.z, - 0,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION|SXF_TRANSFERPITCH - ); + Class rndtp=chm==1?"HDSpent50OMG":"HDLoose50OMG"; + if(chm>=1){ + Vector3 gunofs=HDMath.RotateVec3D((10,-1,0),angle,pitch); + Actor rrr=spawn(rndtp,(pos.xy,pos.z+height*0.85)+gunofs+viewpos.offset); + rrr.target=self; + rrr.angle=angle; + rrr.vel=HDMath.RotateVec3D((1,-4,2),angle,pitch); + if(chm==1)rrr.vel*=1.3; + rrr.vel+=vel; } + + //cycle new if(invoker.weaponstatus[BOSSS_MAG]>0){ invoker.weaponstatus[BOSSS_CHAMBER]=2; invoker.weaponstatus[BOSSS_MAG]--; }else invoker.weaponstatus[BOSSS_CHAMBER]=0; } - BOGG E 1 offset(6,42) A_WeaponReady(WRF_NOFIRE); + BOGG E 1 A_WeaponReady(WRF_NOFIRE); BOGG E 0 A_Refire("althold"); goto altholdend; + reload: ---- A 0{invoker.weaponstatus[0]&=~BOSSF_DONTUSECLIPS;} goto reloadstart; @@ -468,16 +351,16 @@ class BogRifle:HDWeapon{ A_MuzzleClimb(-frandom(0.4,0.8),frandom(0.4,1.4)); } BOGG A 4 offset(14,46){ - A_StartSound("weapons/rifleload",8,CHANF_OVERLAP); + A_StartSound("weapons/bossloadm",8,CHANF_OVERLAP); A_MuzzleClimb(-frandom(0.4,0.8),frandom(0.4,1.4)); } BOGG A 0{ int mg=invoker.weaponstatus[BOSSS_MAG]; - if(mg==10)setweaponstate("reloaddone"); + if(mg==5)setweaponstate("reloaddone"); else if(invoker.weaponstatus[0]&BOSSF_DONTUSECLIPS)setweaponstate("loadhand"); else if( ( - mg<6 + mg<1 ||!countinv("HD50OMGAmmo") )&&!HDMagAmmo.NothingLoaded(self,"HDOMGClip") )setweaponstate("loadclip"); @@ -487,13 +370,17 @@ class BogRifle:HDWeapon{ goto reloaddone; loadhandloop: BOGG A 4{ - if(countinv("HD50OmgAmmo")>0 && invoker.weaponstatus[BOSSS_MAG] < 10){ - A_TakeInventory("HD50OmgAmmo",1,TIF_NOTAKEINFINITE); - invoker.weaponstatus[BOSSS_HAND]=1; - A_StartSound("weapons/pocket",9); - }else{ + int hnd=min( + countinv("HD50OMGAmmo"),3, + 5-invoker.weaponstatus[BOSSS_MAG] + ); + if(hnd<1){ setweaponstate("reloaddone"); return; + }else{ + A_TakeInventory("HD50OMGAmmo",hnd,TIF_NOTAKEINFINITE); + invoker.weaponstatus[BOSSS_HAND]=hnd; + A_StartSound("weapons/pocket",9); } } loadone: @@ -501,6 +388,7 @@ class BogRifle:HDWeapon{ BOGG A 4 offset(14,46){ invoker.weaponstatus[BOSSS_HAND]--; invoker.weaponstatus[BOSSS_MAG]++; + A_StartSound("weapons/rifleclick2",8); }loop; loadhandnext: @@ -512,10 +400,10 @@ class BogRifle:HDWeapon{ PressingZoom()|| !countinv("HD50OMGAmmo") //don't strip clips automatically )setweaponstate("reloaddone"); - //else A_StartSound("weapons/pocket",9); + else A_StartSound("weapons/pocket",9); }goto loadhandloop; loadclip: - BOGG A 0 A_JumpIf(invoker.weaponstatus[BOSSS_MAG]>9,"reloaddone"); + BOGG A 0 A_JumpIf(invoker.weaponstatus[BOSSS_MAG]>4,"reloaddone"); BOGG A 3 offset(16,50){ let ccc=hdmagammo(findinventory("HDOmgClip")); if(ccc){ @@ -535,7 +423,7 @@ class BogRifle:HDWeapon{ //load the whole clip at once if possible if( fullmag - &&invoker.weaponstatus[BOSSS_MAG]<6 + &&invoker.weaponstatus[BOSSS_MAG]<1 ){ setweaponstate("loadwholeclip"); return; @@ -546,7 +434,6 @@ class BogRifle:HDWeapon{ invoker.weaponstatus[BOSSS_MAG]++; ccc.mags[magindex]--; } - else setweaponstate("loadhand"); } BOGG A 5 offset(16,52) A_JumpIf( PressingReload()|| @@ -572,7 +459,7 @@ class BogRifle:HDWeapon{ A_StartSound("weapons/pocket",CHAN_POCKETS); }else HDMagAmmo.SpawnMag(self,"HDOMGClip",0); } - }goto loadclip; + }goto reloaddone; reloaddone: BOGG A 1 offset(4,40); BOGG A 1 offset(2,36); @@ -588,7 +475,7 @@ class BogRifle:HDWeapon{ } BOGG A 4 offset (14,46){ A_MuzzleClimb(-frandom(0.4,0.8),frandom(0.4,1.4)); - A_StartSound("weapons/rifleload",8); + A_StartSound("weapons/bossloadm",8); } unloadloop: BOGG A 4 offset(3,41){ @@ -629,60 +516,33 @@ class BogRifle:HDWeapon{ BOGG Z -1; } override void InitializeWepStats(bool idfa){ - weaponspecial = 1337; //UaS sling compatbility - weaponstatus[BOSSS_CHAMBER]=2; - weaponstatus[BOSSS_MAG]=10; - if(!idfa){ - weaponstatus[BOSSS_HEAT]=0; - } - if(!owner){ - if(randompick(0,0,1))weaponstatus[0]&=~BOSSF_FRONTRETICLE; - else weaponstatus[0]|=BOSSF_FRONTRETICLE; - if(random(0,3))weaponstatus[0]&=~BOSSF_CUSTOMCHAMBER; - else weaponstatus[0]|=BOSSF_CUSTOMCHAMBER; - weaponstatus[BOSSS_ZOOM]=20; - weaponstatus[BOSSS_DROPADJUST]=160; - } - } - override void loadoutconfigure(string input){ - int customchamber=getloadoutvar(input,"customchamber",1); - if(!customchamber)weaponstatus[0]&=~BOSSF_CUSTOMCHAMBER; - else if(customchamber>0)weaponstatus[0]|=BOSSF_CUSTOMCHAMBER; - - int frontreticle=getloadoutvar(input,"frontreticle",1); - if(!frontreticle)weaponstatus[0]&=~BOSSF_FRONTRETICLE; - else if(frontreticle>0)weaponstatus[0]|=BOSSF_FRONTRETICLE; + super.InitializeWepStats(idfa); - int bulletdrop=getloadoutvar(input,"bulletdrop",3); - if(bulletdrop>=0)weaponstatus[BOSSS_DROPADJUST]=clamp(bulletdrop,0,600); + weaponspecial = 1337; //UaS sling compatbility - int zoom=getloadoutvar(input,"zoom",3); - if(zoom>0)weaponstatus[BOSSS_ZOOM]= - (weaponstatus[0]&BOSSF_FRONTRETICLE)? - clamp(zoom,12,40): - clamp(zoom,5,60); + weaponstatus[BOSSS_MAG]=5; } } class HDOmgClip:HDMagAmmo{ default{ hdmagammo.maxperunit 5; - hdmagammo.roundtype "HD50OmgAmmo"; + hdmagammo.roundtype "HD50OMGAmmo"; hdmagammo.roundbulk ENC_50OMG; hdmagammo.magbulk 0.5; hdpickup.refid "g05"; tag "$TAG_50OMGCLIP"; - inventory.pickupmessage "Picked up a .50 OMG clip."; + inventory.pickupmessage "$PICKUP_50OMGCLIP"; xscale 0.55; yscale 0.7; inventory.maxamount 1000; } override string,string,name,double getmagsprite(int thismagamt){ string magsprite; - if(thismagamt==5)magsprite="OCLPA0"; - else if(thismagamt==4)magsprite="OCLPB0"; - else if(thismagamt==3)magsprite="OCLPC0"; - else if(thismagamt==2)magsprite="OCLPD0"; - else if(thismagamt==1)magsprite="OCLPE0"; + if(thismagamt>4)magsprite="OCLPA0"; + else if(thismagamt>3)magsprite="OCLPB0"; + else if(thismagamt>2)magsprite="OCLPC0"; + else if(thismagamt>1)magsprite="OCLPD0"; + else if(thismagamt>0)magsprite="OCLPE0"; else magsprite="OCLPF0"; return magsprite,"OGBLA3A7","HD50OMGAmmo",1.7; } @@ -693,25 +553,15 @@ class HDOmgClip:HDMagAmmo{ spawn: OCLP ABCDE -1 nodelay{ int amt=mags[0]; - if(amt==5)frame=0; - else if(amt==4)frame=1; - else if(amt==3)frame=2; - else if(amt==2)frame=3; - else if(amt==1)frame=4; + if(amt>4)frame=0; + else if(amt>3)frame=1; + else if(amt>2)frame=2; + else if(amt>1)frame=3; + else if(amt>0)frame=4; }stop; spawnempty: - OCLP F -1{ - brollsprite=true;brollcenter=true; - roll=randompick(1,1,1,1,3,3,3,3,0,2)*90; - }stop; - } -} - -class BogRifleCC:HDWeaponGiver{ - default{ - hdweapongiver.bulk 138; - hdweapongiver.weapontogive "BogRifle"; - hdweapongiver.config "customchamber"; + OCLP F -1; + stop; } } diff --git a/zscript/Hexadoken/Weapons/Boss Rifle Variants/9mm Boss.zsc b/zscript/Hexadoken/Weapons/Boss Rifle Variants/9mm Boss.zsc index 3c1ed51..50f3395 100644 --- a/zscript/Hexadoken/Weapons/Boss Rifle Variants/9mm Boss.zsc +++ b/zscript/Hexadoken/Weapons/Boss Rifle Variants/9mm Boss.zsc @@ -1,42 +1,25 @@ class BossRifleButIts9mm:BossRifle{ + class nineclip; default{ tag "$TAG_9MMBOSS"; - hdweapon.refid ""; - } - - override string pickupmessage(){ - return "You got the "..gettag().."! It's a bit greasy..."; + inventory.pickupMessage "$PICKUP_9MMBOSS"; + hdweapon.refid HDLD_9MMBOSS; + + hdweapon.ammo1 "HDPistolAmmo",1; } - - class nineclip; override void postbeginplay(){ super.postbeginplay(); + string lol = "HD9mClip"; nineclip = lol; + + if (nineclip) { + hdammotype1 = (class)(lol); + } } override double weaponbulk(){ return 144+weaponstatus[BOSSS_MAG]*ENC_9_LOADED; } - override void DropOneAmmo(int amt){ - if(owner){ - if(owner.countinv("HDPistolAmmo"))owner.A_DropInventory("HDPistolAmmo",10); - //else owner.A_DropInventory("HD7mClip",1); - } - } - override string gethelptext(){ - return - WEPHELP_FIRESHOOT - ..WEPHELP_ALTFIRE.." Work bolt\n" - ..WEPHELP_RELOADRELOAD - ..WEPHELP_ZOOM.."+"..WEPHELP_FIREMODE.." Zoom\n" - ..WEPHELP_ZOOM.."+"..WEPHELP_USE.." Bullet drop\n" - ..WEPHELP_ALTFIRE.."+"..WEPHELP_UNLOAD.." Unload chamber/Clean rifle\n" - ..WEPHELP_UNLOADUNLOAD - ; - } - override void ForceBasicAmmo(){ - owner.A_SetInventory("HDPistolAmmo",11); - } override string,double getpickupsprite(){return "BOJGY0",1.;} override void DrawHUDStuff(HDStatusBar sb,HDWeapon hdw,HDPlayerPawn hpl){ if(sb.hudlevel==1){ @@ -62,9 +45,27 @@ class BossRifleButIts9mm:BossRifle{ (-16,-18),sb.DI_SCREEN_CENTER_BOTTOM|sb.DI_TEXT_ALIGN_RIGHT,Font.CR_WHITE ); } - override void InitializeWepStats(bool idfa){ - weaponspecial = 1337; //UaS sling compatbility - super.InitializeWepStats(idfa); + override string gethelptext(){ + return + WEPHELP_FIRESHOOT + ..WEPHELP_ALTFIRE..StringTable.Localize("$BOSWH_ALTFIRE") + ..WEPHELP_RELOAD..StringTable.Localize("$BOSWH_RELOAD") + ..WEPHELP_ZOOM.."+"..WEPHELP_FIREMODE..StringTable.Localize("$BOSWH_ZPFMOD") + ..WEPHELP_ZOOM.."+"..WEPHELP_USE..StringTable.Localize("$BOSWH_ZPUSE") + // ..WEPHELP_ZOOM.."+"..WEPHELP_DROPONE..StringTable.Localize("$BOSWH_ZPDRON") + // ..WEPHELP_ZOOM.."+"..WEPHELP_ALTRELOAD..StringTable.Localize("$BOSWH_ZPALTRELOAD") + ..WEPHELP_ALTFIRE.."+"..WEPHELP_UNLOAD..StringTable.Localize("$BOSWH_AFIREPUNL") + ..WEPHELP_UNLOADUNLOAD + ; + } + override void DropOneAmmo(int amt){ + if(owner){ + if(owner.countinv("HDPistolAmmo"))owner.A_DropInventory("HDPistolAmmo",10); + } + } + override void ForceBasicAmmo(){ + owner.A_SetInventory("HDPistolAmmo",11); + if (nineclip) ForceOneBasicAmmo(nineclip); } states{ select0: @@ -85,11 +86,7 @@ class BossRifleButIts9mm:BossRifle{ }else A_WeaponReady(WRF_ALL); }goto readyend; user3: - ---- A 0 { - //if (invoker.nineclip) A_MagManager(invoker.nineclip); - //else A_MagManager("HDBattery"); - A_MagManager("HD9mClip"); - } + ---- A 0 A_MagManager("HD9mClip"); goto ready; fire: BOJG F 1 A_JumpIf(invoker.weaponstatus[BOSSS_CHAMBER]==2,"shoot"); @@ -104,7 +101,7 @@ class BossRifleButIts9mm:BossRifle{ A_AlertMonsters(); HDBulletActor.FireBullet(self,"HDB_9", - aimoffy:(-1./600.)*invoker.weaponstatus[BOSSS_DROPADJUST], + aimoffy:(-HDCONST_GRAVITY/600.)*invoker.weaponstatus[BOSSS_DROPADJUST], speedfactor:1.1*(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER)?0.99:1.07 ); A_MuzzleClimb( @@ -127,12 +124,10 @@ class BossRifleButIts9mm:BossRifle{ TNT1 A 0 A_Light0(); stop; altfire: - BOJG F 1 offset(0,34) A_WeaponBusy(); - BOJG G 2 offset(2,36) A_JumpIf(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER,1); - BOJG G 1 offset(4,38){ - if(invoker.weaponstatus[BOSSS_CHAMBER]>2)setweaponstate("jamderp"); - } - BOJG G 1 offset(0,34); + BOJG F 1 A_WeaponBusy(); + BOJG G 2 A_JumpIf(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER,1); + BOJG G 1 A_JumpIf(invoker.weaponstatus[BOSSS_CHAMBER]>2,"jamderp"); + BOJG G 1 A_MuzzleClimb(-frandom(0.06,0.1),-frandom(0.3,0.5)); BOJG G 0 A_ChamberGrit(randompick(0,0,0,0,-1,1,2),true); BOJG G 0 A_Refire("chamber"); goto ready; @@ -140,7 +135,6 @@ class BossRifleButIts9mm:BossRifle{ BOJG J 1 A_WeaponReady(WRF_NOFIRE); BOJG J 1{ A_ClearRefire(); - bool eww=invoker.weaponstatus[BOSSS_GRIME]>10; bool chempty=invoker.weaponstatus[BOSSS_CHAMBER]<1; if(pressingunload()){ if(chempty){ @@ -156,11 +150,11 @@ class BossRifleButIts9mm:BossRifle{ invoker.weaponstatus[0]|=BOSSF_UNLOADONLY; return resolvestate("loadchamber"); }else if( - eww + invoker.weaponstatus[BOSSS_GRIME]>10 ){ return resolvestate("altholdclean"); }else if( - countinv("SevenMilAmmo") + countinv("HDPistolAmmo") ){ invoker.weaponstatus[0]&=~BOSSF_UNLOADONLY; return resolvestate("loadchamber"); @@ -172,7 +166,7 @@ class BossRifleButIts9mm:BossRifle{ altholdend: BOJG J 0 A_StartSound("weapons/boltfwd",8); BOJG IH 2 A_WeaponReady(WRF_NOFIRE); - BOJG G 3 offset(2,36){ + BOJG G 3{ A_WeaponReady(WRF_NOFIRE); if(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER)A_SetTics(1); } @@ -191,7 +185,10 @@ class BossRifleButIts9mm:BossRifle{ if(invoker.weaponstatus[0]&BOSSF_UNLOADONLY){ int chm=invoker.weaponstatus[BOSSS_CHAMBER]; invoker.weaponstatus[BOSSS_CHAMBER]=0; - if(chm<2||A_JumpIfInventory("HDPistolAmmo",0,"null")){ + if( + chm<2 + ||A_JumpIfInventory("HDPistolAmmo",0,"null") + ){ class whatkind=chm==2?"HDLoose9mm":"HDSpent9mm"; actor rrr=spawn(whatkind,pos+(cos(angle)*10,sin(angle)*10,height-12),ALLOW_REPLACE); rrr.angle=angle;rrr.A_ChangeVelocity(1,2,1,CVF_RELATIVE); @@ -204,17 +201,17 @@ class BossRifleButIts9mm:BossRifle{ } BOJG J 2 offset(7,72); BOJG J 2 offset(8,60); - BOJG J 1 offset(7,52); + BOJG J 1 offset(6,52); BOJG J 1 offset(5,42); - BOJG J 1 offset(3,38); + BOJG J 1 offset(4,38); BOJG J 1 offset(3,35); goto althold; altholdclean: BOJG J 1 offset(2,36) A_ClearRefire(); BOJG J 1 offset(3,38); - BOJG J 1 offset(5,42) A_Log("Looking inside that chamber...",true); - BOJG J 1 offset(8,48) A_StartSound("weapons/pocket",9); - BOJG J 1 offset(7,52) A_MuzzleClimb(frandom(-0.2,0.2),0.2,frandom(-0.2,0.2),0.2,frandom(-0.2,0.2),0.2); + BOJG J 1 offset(5,41) A_Log(StringTable.Localize("$BOSS_CLEANS"),true); + BOJG J 1 offset(8,44) A_StartSound("weapons/pocket",9); + BOJG J 1 offset(7,50) A_MuzzleClimb(frandom(-0.2,0.2),0.2,frandom(-0.2,0.2),0.2,frandom(-0.2,0.2),0.2); TNT1 A 3 A_StartSound("weapons/pocket",10); TNT1 AAAA 4 A_MuzzleClimb(frandom(-0.2,0.2),frandom(-0.2,0.2),frandom(-0.2,0.2),frandom(-0.2,0.2),frandom(-0.2,0.2),frandom(-0.2,0.2),frandom(-0.2,0.2),frandom(-0.2,0.2)); TNT1 A 3 A_StartSound("weapons/pocket",9); @@ -222,31 +219,32 @@ class BossRifleButIts9mm:BossRifle{ TNT1 A 40{ A_StartSound("weapons/pocket",9); int amt=invoker.weaponstatus[BOSSS_GRIME]; - string amts="There doesn't seem to be much. "; - if(amt>40)amts="What the FUCK. "; - else if(amt>30)amts="About time - this gun is barely functional. "; - else if(amt>20)amts="This is starting to gum up badly. "; - else if(amt>10)amts="It can use some cleaning. "; + string amts=StringTable.Localize("$BOSS_CLEAN1"); + if(amt>40)amts=StringTable.Localize("$BOSS_CLEAN2"); + else if(amt>30)amts=StringTable.Localize("$BOSS_CLEAN3"); + else if(amt>20)amts=StringTable.Localize("$BOSS_CLEAN4"); + else if(amt>10)amts=StringTable.Localize("$BOSS_CLEAN5"); - static const string cleanverbs[]={"extract","scrape off","wipe away","carefully remove","dump out","pick out","blow off","shake out","scrub off","fish out"}; - static const string contaminants[]={"some dust","a lot of dust","a bit of powder residue","a disturbing amount of powder residue","some excess grease","a layer of soot","some iron filings","a bit of hair","an eyelash","a patch of dried blood","a bit of rust","a crumb","a dead insect","ashes","some loose bits of skin","a sticky fluid of some sort","wow some fucking *gunk*","a booger","trace fecal matter","yet even more of that anonymous grey debris that all those bullet impacts make","a dollop of strawberry jam","the dried husk of a pinto bean with residual hog components","a tiny cancerous nodule of Second Flesh","some crystalline buildup of congealed Frag","a nesting queen space ant","a single modern-day transistor","a tiny Boss rifle (also jammed)","a colourless film of darkness made visible"}; - static const string actionparts[]={"bolt carrier","main extractor","auxiliary extractor","cam pin","bolt head","striker","firing pin spring","ejector slot","striker spring","ejector spring"}; - for(int i=amt;i>0;i-=random(8,16))amts.appendformat("You %s %s from the %s. ", + /*static const */string cleanverbs[]={StringTable.Localize("$BOSS_EXTRACT"),StringTable.Localize("$BOSS_SCRAPEOFF"),StringTable.Localize("$BOSS_WIPEAWAY"),StringTable.Localize("$BOSS_CAREREMOVE"),StringTable.Localize("$BOSS_DUMPOUT"),StringTable.Localize("$BOSS_PICKOUT"),StringTable.Localize("$BOSS_BLOWOFF"),StringTable.Localize("$BOSS_SHAKEOUT"),StringTable.Localize("$BOSS_SCRUBOFF"),StringTable.Localize("$BOSS_FISH")}; + /*static const */string contaminants[]={StringTable.Localize("$BOSS_SOMEDUST"),StringTable.Localize("$BOSS_ALODUST"),StringTable.Localize("$BOSS_ABOPOWDER"),StringTable.Localize("$BOSS_DAOPOWDER"),StringTable.Localize("$BOSS_SEXGREASE"),StringTable.Localize("$BOSS_ALOSOOT"),StringTable.Localize("$BOSS_SOMEIRON"),StringTable.Localize("$BOSS_HAIR"),StringTable.Localize("$BOSS_EYELASH"),StringTable.Localize("$BOSS_BLOOD"),StringTable.Localize("$BOSS_RUST"),StringTable.Localize("$BOSS_CRUMB"),StringTable.Localize("$BOSS_DEADSOME"),StringTable.Localize("$BOSS_ASHES"),StringTable.Localize("$BOSS_SKIN"),StringTable.Localize("$BOSS_FLUID"),StringTable.Localize("$BOSS_WOWSOME"),StringTable.Localize("$BOSS_BOOGER"),StringTable.Localize("$BOSS_FECAL"),StringTable.Localize("$BOSS_BULLETSIMPACT"),StringTable.Localize("$BOSS_JAM"),StringTable.Localize("$BOSS_HUSK"),StringTable.Localize("$BOSS_SFLESH"),StringTable.Localize("$BOSS_CRYSTAL"),StringTable.Localize("$BOSS_SPACEANT"),StringTable.Localize("$BOSS_TRANSISTOR"),StringTable.Localize("$BOSS_TINBOSS"),StringTable.Localize("$BOSS_FILM")}; + /*static const */string actionparts[]={StringTable.Localize("$BOSS_BOLTCAR"),StringTable.Localize("$BOSS_MAINEXTRACTOR"),StringTable.Localize("$BOSS_AUXEXTRACTOR"),StringTable.Localize("$BOSS_CAMPIN"),StringTable.Localize("$BOSS_BOLTHEAD"),StringTable.Localize("$BOSS_STRIKER"),StringTable.Localize("$BOSS_SPRING"),StringTable.Localize("$BOSS_EJECTSLOT"),StringTable.Localize("$BOSS_STRIKERSPRING"),StringTable.Localize("$BOSS_EJSPRING")}; + for(int i=amt;i>0;i-=random(8,16))amts.appendformat(StringTable.Localize("$BOSS_FINLINE"), cleanverbs[random(0,cleanverbs.size()-1)], contaminants[random(0,random(0,contaminants.size()-1))], actionparts[random(0,random((actionparts.size()>>1),actionparts.size()-1))] ); + amts=HDMath.BuildVariableString(amts); amts.appendformat("\n"); amt=randompick(-3,-5,-5,-random(8,16)); A_ChamberGrit(amt,true); amt=invoker.weaponstatus[BOSSS_GRIME]; - if(amt>40)amts.appendformat("You barely scrape the surface of this all-encrusting abomination."); - else if(amt>30)amts.appendformat("The gun will need a lot more work than this before it can be deployed again."); - else if(amt>20)amts.appendformat("You might get a few shots out of it now."); - else if(amt>10)amts.appendformat("It's better, but still not good."); - else amts.appendformat("Good to go."); + if(amt>40)amts.appendformat(StringTable.Localize("$BOSS_CLENF1")); + else if(amt>30)amts.appendformat(StringTable.Localize("$BOSS_CLENF2")); + else if(amt>20)amts.appendformat(StringTable.Localize("$BOSS_CLENF3")); + else if(amt>10)amts.appendformat(StringTable.Localize("$BOSS_CLENF4")); + else amts.appendformat(StringTable.Localize("$BOSS_CLENF5")); A_Log(amts,true); } BOJG J 1 offset(7,52); @@ -279,7 +277,7 @@ class BossRifleButIts9mm:BossRifle{ BOJG F 0 A_Refire("jamderp"); goto ready; chamber: - BOJG H 2 offset(4,38){ + BOJG H 2{ if( random(0,max(2,invoker.weaponstatus[BOSSS_GRIME]>>3)) &&invoker.weaponstatus[BOSSS_CHAMBER]>2 @@ -293,8 +291,8 @@ class BossRifleButIts9mm:BossRifle{ setweaponstate("jamderp"); }else A_StartSound("weapons/boltback",8); } - BOJG I 2 offset(6,42)A_JumpIf(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER,1); - BOJG I 1 offset(6,42){ + BOJG I 2 offset(1,34)A_JumpIf(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER,1); + BOJG I 1 offset(2,36){ if(gunbraced())A_MuzzleClimb( frandom(-0.1,0.3),frandom(-0.1,0.3) );else A_MuzzleClimb( @@ -304,35 +302,31 @@ class BossRifleButIts9mm:BossRifle{ if(hd_debug)A_Log("jam chance: "..jamch); if(random(0,100)1){ - A_SpawnItemEx( - "HDLoose9mm",cos(pitch)*8,1,height-7-sin(pitch)*8, - cos(pitch)*cos(angle-80)*4+vel.x, - cos(pitch)*sin(angle-80)*4+vel.y, - -sin(pitch)*4+vel.z, - 0,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION|SXF_TRANSFERPITCH - ); - }else if(chm==1){ - A_SpawnItemEx( - "HDSpent9mm",cos(pitch)*8,1,height-7-sin(pitch)*8, - cos(pitch)*cos(angle-80)*6+vel.x, - cos(pitch)*sin(angle-80)*6+vel.y, - -sin(pitch)*6+vel.z, - 0,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION|SXF_TRANSFERPITCH - ); + Class rndtp=chm==1?"HDSpent9mm":"HDLoose9mm"; + if(chm>=1){ + Vector3 gunofs=HDMath.RotateVec3D((10,-1,0),angle,pitch); + Actor rrr=spawn(rndtp,(pos.xy,pos.z+height*0.85)+gunofs+viewpos.offset); + rrr.target=self; + rrr.angle=angle; + rrr.vel=HDMath.RotateVec3D((1,-4,2),angle,pitch); + if(chm==1)rrr.vel*=1.3; + rrr.vel+=vel; } + + //cycle new if(invoker.weaponstatus[BOSSS_MAG]>0){ invoker.weaponstatus[BOSSS_CHAMBER]=2; invoker.weaponstatus[BOSSS_MAG]--; }else invoker.weaponstatus[BOSSS_CHAMBER]=0; } - BOJG J 1 offset(6,42) A_WeaponReady(WRF_NOFIRE); + BOJG J 1 A_WeaponReady(WRF_NOFIRE); BOJG J 0 A_Refire("althold"); goto altholdend; + reload: ---- A 0{invoker.weaponstatus[0]&=~BOSSF_DONTUSECLIPS;} goto reloadstart; @@ -348,14 +342,15 @@ class BossRifleButIts9mm:BossRifle{ A_MuzzleClimb(-frandom(0.4,0.8),frandom(0.4,1.4)); } BOJG F 4 offset(14,46){ - A_StartSound("weapons/rifleload",8,CHANF_OVERLAP); + A_StartSound("weapons/bossloadm",8,CHANF_OVERLAP); A_MuzzleClimb(-frandom(0.4,0.8),frandom(0.4,1.4)); } BOJG F 0{ int mg=invoker.weaponstatus[BOSSS_MAG]; if(mg==10)setweaponstate("reloaddone"); else if(invoker.weaponstatus[0]&BOSSF_DONTUSECLIPS)setweaponstate("loadhand"); - else if(invoker.nineclip && + else if( + invoker.nineclip && ( mg<1 ||!countinv("HDPistolAmmo") @@ -383,8 +378,10 @@ class BossRifleButIts9mm:BossRifle{ loadone: BOJG F 2 offset(16,50) A_JumpIf(invoker.weaponstatus[BOSSS_HAND]<1,"loadhandnext"); BOJG F 4 offset(14,46){ + invoker.weaponstatus[BOSSS_HAND]--; invoker.weaponstatus[BOSSS_MAG]++; + A_StartSound("weapons/rifleclick2",8); }loop; loadhandnext: @@ -470,7 +467,7 @@ class BossRifleButIts9mm:BossRifle{ } BOJG F 4 offset (14,46){ A_MuzzleClimb(-frandom(0.4,0.8),frandom(0.4,1.4)); - A_StartSound("weapons/rifleload",8); + A_StartSound("weapons/bossloadm",8); } unloadloop: BOJG F 4 offset(3,41){ @@ -510,6 +507,11 @@ class BossRifleButIts9mm:BossRifle{ spawn: BOJG Y -1; } + override void InitializeWepStats(bool idfa){ + super.InitializeWepStats(idfa); + + weaponspecial = 1337; //UaS sling compatbility + } } class BossRifleNine:IdleDummy{ diff --git a/zscript/Hexadoken/Weapons/Boss Rifle Variants/Hexadoken's Boss.zsc b/zscript/Hexadoken/Weapons/Boss Rifle Variants/Hexadoken's Boss.zsc index 6f8a6c2..a54a8b5 100644 --- a/zscript/Hexadoken/Weapons/Boss Rifle Variants/Hexadoken's Boss.zsc +++ b/zscript/Hexadoken/Weapons/Boss Rifle Variants/Hexadoken's Boss.zsc @@ -1,59 +1,19 @@ class BossRifleButItsFuckingPink:BossRifle{ default{ tag "$TAG_5MMBOSS"; - hdweapon.refid ""; - } - - override string pickupmessage(){ - return "You got "..gettag().."!"; - } + inventory.pickupMessage "$PICKUP_5MMBOSS"; + hdweapon.refid HDLD_5MMBOSS; - class lrammo, actualammo; - class looseammo, spentammo; - override void postbeginplay(){ - super.postbeginplay(); - string lol = "HD5MM_Ammo"; lrammo = lol; - lol = "HDSpent5mmMR"; spentammo = lol; - if (lrammo) { - actualammo = lrammo; - looseammo = "HDLoose5mmMR"; - } - else { - actualammo = "HDPistolAmmo"; - looseammo = "HDLoose9mm"; - spentammo = "HDSpent9mm"; - } + hdweapon.ammo1 "HD5MM_Ammo",1; } override double weaponbulk(){ - return 144+weaponstatus[BOSSS_MAG]*ENC_9_LOADED*0.05; - } - override void DropOneAmmo(int amt){ - if(owner){ - if(owner.countinv(actualammo))owner.A_DropInventory(actualammo,10); - } - } - override void ForceBasicAmmo(){ - owner.A_SetInventory(actualammo,28); - } - override string gethelptext(){ - return - WEPHELP_FIRESHOOT - ..WEPHELP_ALTFIRE.." Work bolt\n" - ..WEPHELP_RELOADRELOAD - ..WEPHELP_ZOOM.."+"..WEPHELP_FIREMODE.." Zoom\n" - ..WEPHELP_ZOOM.."+"..WEPHELP_USE.." Bullet drop\n" - ..WEPHELP_ALTFIRE.."+"..WEPHELP_UNLOAD.." Unload chamber/Clean rifle\n" - ..WEPHELP_UNLOADUNLOAD - ; + return 144+weaponstatus[BOSSS_MAG]*ENC_5MM_LOADED; } override string,double getpickupsprite(){return "BOJG]0",1.;} override void DrawHUDStuff(HDStatusBar sb,HDWeapon hdw,HDPlayerPawn hpl){ if(sb.hudlevel==1){ - if (lrammo) - sb.drawimage("5MMZA0",(-54,-10),sb.DI_SCREEN_CENTER_BOTTOM,scale:(2.1,2.1)); - else - sb.drawimage("PRNDA0",(-54,-10),sb.DI_SCREEN_CENTER_BOTTOM,scale:(2.1,2.1)); - sb.drawnum(hpl.countinv(actualammo),-51,-8,sb.DI_SCREEN_CENTER_BOTTOM); + sb.drawimage("5MMZA0",(-54,-10),sb.DI_SCREEN_CENTER_BOTTOM,scale:(2.1,2.1)); + sb.drawnum(hpl.countinv("HD5MM_Ammo"),-51,-8,sb.DI_SCREEN_CENTER_BOTTOM); } sb.drawwepnum(hdw.weaponstatus[BOSSS_MAG],27); sb.drawwepcounter(hdw.weaponstatus[BOSSS_CHAMBER], @@ -68,6 +28,27 @@ class BossRifleButItsFuckingPink:BossRifle{ (-16,-18),sb.DI_SCREEN_CENTER_BOTTOM|sb.DI_TEXT_ALIGN_RIGHT,Font.CR_WHITE ); } + override string gethelptext(){ + return + WEPHELP_FIRESHOOT + ..WEPHELP_ALTFIRE..StringTable.Localize("$BOSWH_ALTFIRE") + ..WEPHELP_RELOAD..StringTable.Localize("$BOSWH_RELOAD") + ..WEPHELP_ZOOM.."+"..WEPHELP_FIREMODE..StringTable.Localize("$BOSWH_ZPFMOD") + ..WEPHELP_ZOOM.."+"..WEPHELP_USE..StringTable.Localize("$BOSWH_ZPUSE") + // ..WEPHELP_ZOOM.."+"..WEPHELP_DROPONE..StringTable.Localize("$BOSWH_ZPDRON") + // ..WEPHELP_ZOOM.."+"..WEPHELP_ALTRELOAD..StringTable.Localize("$BOSWH_ZPALTRELOAD") + ..WEPHELP_ALTFIRE.."+"..WEPHELP_UNLOAD..StringTable.Localize("$BOSWH_AFIREPUNL") + ..WEPHELP_UNLOADUNLOAD + ; + } + override void DropOneAmmo(int amt){ + if(owner){ + if(owner.countinv("HD5MM_Ammo"))owner.A_DropInventory("HD5MM_Ammo",10); + } + } + override void ForceBasicAmmo(){ + owner.A_SetInventory("HD5MM_Ammo",28); + } states{ select0: BOJG P 0; @@ -102,7 +83,7 @@ class BossRifleButItsFuckingPink:BossRifle{ A_AlertMonsters(); HDBulletActor.FireBullet(self,"HDB_Pink", - aimoffy:(-1./600.)*invoker.weaponstatus[BOSSS_DROPADJUST], + aimoffy:(-HDCONST_GRAVITY/600.)*invoker.weaponstatus[BOSSS_DROPADJUST], speedfactor:(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER)?0.99:1.07 ); A_MuzzleClimb( @@ -125,12 +106,10 @@ class BossRifleButItsFuckingPink:BossRifle{ TNT1 A 0 A_Light0(); stop; altfire: - BOJG P 1 offset(0,34) A_WeaponBusy(); - BOJG Q 2 offset(2,36) A_JumpIf(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER,1); - BOJG Q 1 offset(4,38){ - if(invoker.weaponstatus[BOSSS_CHAMBER]>2)setweaponstate("jamderp"); - } - BOJG Q 1 offset(0,34); + BOJG P 1 A_WeaponBusy(); + BOJG Q 2 A_JumpIf(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER,1); + BOJG Q 1 A_JumpIf(invoker.weaponstatus[BOSSS_CHAMBER]>2,"jamderp"); + BOJG Q 1 A_MuzzleClimb(-frandom(0.06,0.1),-frandom(0.3,0.5)); BOJG Q 0 A_ChamberGrit(randompick(0,0,0,0,-1,1,2),true); BOJG Q 0 A_Refire("chamber"); goto ready; @@ -138,7 +117,6 @@ class BossRifleButItsFuckingPink:BossRifle{ BOJG T 1 A_WeaponReady(WRF_NOFIRE); BOJG T 1{ A_ClearRefire(); - bool eww=invoker.weaponstatus[BOSSS_GRIME]>10; bool chempty=invoker.weaponstatus[BOSSS_CHAMBER]<1; if(pressingunload()){ if(chempty){ @@ -154,11 +132,11 @@ class BossRifleButItsFuckingPink:BossRifle{ invoker.weaponstatus[0]|=BOSSF_UNLOADONLY; return resolvestate("loadchamber"); }else if( - eww + invoker.weaponstatus[BOSSS_GRIME]>10 ){ return resolvestate("altholdclean"); }else if( - countinv("SevenMilAmmo") + countinv("HD5MM_Ammo") ){ invoker.weaponstatus[0]&=~BOSSF_UNLOADONLY; return resolvestate("loadchamber"); @@ -170,7 +148,7 @@ class BossRifleButItsFuckingPink:BossRifle{ altholdend: BOJG T 0 A_StartSound("weapons/boltfwd",8); BOJG SR 2 A_WeaponReady(WRF_NOFIRE); - BOJG Q 3 offset(2,36){ + BOJG Q 3{ A_WeaponReady(WRF_NOFIRE); if(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER)A_SetTics(1); } @@ -189,30 +167,30 @@ class BossRifleButItsFuckingPink:BossRifle{ if(invoker.weaponstatus[0]&BOSSF_UNLOADONLY){ int chm=invoker.weaponstatus[BOSSS_CHAMBER]; invoker.weaponstatus[BOSSS_CHAMBER]=0; - if(chm<2||A_JumpIfInventory(invoker.actualammo,0,"null")){ - class whatkind=chm==2?invoker.looseammo:invoker.spentammo; + if(chm<2||A_JumpIfInventory("HD5MM_Ammo",0,"null")){ + class whatkind=chm==2?"HDLoose5mmMR":"HDSpent5mmMR"; actor rrr=spawn(whatkind,pos+(cos(angle)*10,sin(angle)*10,height-12),ALLOW_REPLACE); rrr.angle=angle;rrr.A_ChangeVelocity(1,2,1,CVF_RELATIVE); - }else HDF.Give(self,invoker.actualammo,1); + }else HDF.Give(self,"HD5MM_Ammo",1); A_ChamberGrit(randompick(0,0,0,0,-1,1),true); }else{ - A_TakeInventory(invoker.actualammo,1,TIF_NOTAKEINFINITE); + A_TakeInventory("HD5MM_Ammo",1,TIF_NOTAKEINFINITE); invoker.weaponstatus[BOSSS_CHAMBER]=2; } } BOJG T 2 offset(7,72); BOJG T 2 offset(8,60); - BOJG T 1 offset(7,52); + BOJG T 1 offset(6,52); BOJG T 1 offset(5,42); - BOJG T 1 offset(3,38); + BOJG T 1 offset(4,38); BOJG T 1 offset(3,35); goto althold; altholdclean: BOJG T 1 offset(2,36) A_ClearRefire(); BOJG T 1 offset(3,38); - BOJG T 1 offset(5,42) A_Log("Looking inside that chamber...",true); - BOJG T 1 offset(8,48) A_StartSound("weapons/pocket",9); - BOJG T 1 offset(7,52) A_MuzzleClimb(frandom(-0.2,0.2),0.2,frandom(-0.2,0.2),0.2,frandom(-0.2,0.2),0.2); + BOJG T 1 offset(5,41) A_Log(StringTable.Localize("$BOSS_CLEANS"),true); + BOJG T 1 offset(8,44) A_StartSound("weapons/pocket",9); + BOJG T 1 offset(7,50) A_MuzzleClimb(frandom(-0.2,0.2),0.2,frandom(-0.2,0.2),0.2,frandom(-0.2,0.2),0.2); TNT1 A 3 A_StartSound("weapons/pocket",10); TNT1 AAAA 4 A_MuzzleClimb(frandom(-0.2,0.2),frandom(-0.2,0.2),frandom(-0.2,0.2),frandom(-0.2,0.2),frandom(-0.2,0.2),frandom(-0.2,0.2),frandom(-0.2,0.2),frandom(-0.2,0.2)); TNT1 A 3 A_StartSound("weapons/pocket",9); @@ -220,31 +198,32 @@ class BossRifleButItsFuckingPink:BossRifle{ TNT1 A 40{ A_StartSound("weapons/pocket",9); int amt=invoker.weaponstatus[BOSSS_GRIME]; - string amts="There doesn't seem to be much. "; - if(amt>40)amts="What the FUCK. "; - else if(amt>30)amts="About time - this gun is barely functional. "; - else if(amt>20)amts="This is starting to gum up badly. "; - else if(amt>10)amts="It can use some cleaning. "; + string amts=StringTable.Localize("$BOSS_CLEAN1"); + if(amt>40)amts=StringTable.Localize("$BOSS_CLEAN2"); + else if(amt>30)amts=StringTable.Localize("$BOSS_CLEAN3"); + else if(amt>20)amts=StringTable.Localize("$BOSS_CLEAN4"); + else if(amt>10)amts=StringTable.Localize("$BOSS_CLEAN5"); - static const string cleanverbs[]={"extract","scrape off","wipe away","carefully remove","dump out","pick out","blow off","shake out","scrub off","fish out"}; - static const string contaminants[]={"some dust","a lot of dust","a bit of powder residue","a disturbing amount of powder residue","some excess grease","a layer of soot","some iron filings","a bit of hair","an eyelash","a patch of dried blood","a bit of rust","a crumb","a dead insect","ashes","some loose bits of skin","a sticky fluid of some sort","wow some fucking *gunk*","a booger","trace fecal matter","yet even more of that anonymous grey debris that all those bullet impacts make","a dollop of strawberry jam","the dried husk of a pinto bean with residual hog components","a tiny cancerous nodule of Second Flesh","some crystalline buildup of congealed Frag","a nesting queen space ant","a single modern-day transistor","a tiny Boss rifle (also jammed)","a colourless film of darkness made visible"}; - static const string actionparts[]={"bolt carrier","main extractor","auxiliary extractor","cam pin","bolt head","striker","firing pin spring","ejector slot","striker spring","ejector spring"}; - for(int i=amt;i>0;i-=random(8,16))amts.appendformat("You %s %s from the %s. ", + /*static const */string cleanverbs[]={StringTable.Localize("$BOSS_EXTRACT"),StringTable.Localize("$BOSS_SCRAPEOFF"),StringTable.Localize("$BOSS_WIPEAWAY"),StringTable.Localize("$BOSS_CAREREMOVE"),StringTable.Localize("$BOSS_DUMPOUT"),StringTable.Localize("$BOSS_PICKOUT"),StringTable.Localize("$BOSS_BLOWOFF"),StringTable.Localize("$BOSS_SHAKEOUT"),StringTable.Localize("$BOSS_SCRUBOFF"),StringTable.Localize("$BOSS_FISH")}; + /*static const */string contaminants[]={StringTable.Localize("$BOSS_SOMEDUST"),StringTable.Localize("$BOSS_ALODUST"),StringTable.Localize("$BOSS_ABOPOWDER"),StringTable.Localize("$BOSS_DAOPOWDER"),StringTable.Localize("$BOSS_SEXGREASE"),StringTable.Localize("$BOSS_ALOSOOT"),StringTable.Localize("$BOSS_SOMEIRON"),StringTable.Localize("$BOSS_HAIR"),StringTable.Localize("$BOSS_EYELASH"),StringTable.Localize("$BOSS_BLOOD"),StringTable.Localize("$BOSS_RUST"),StringTable.Localize("$BOSS_CRUMB"),StringTable.Localize("$BOSS_DEADSOME"),StringTable.Localize("$BOSS_ASHES"),StringTable.Localize("$BOSS_SKIN"),StringTable.Localize("$BOSS_FLUID"),StringTable.Localize("$BOSS_WOWSOME"),StringTable.Localize("$BOSS_BOOGER"),StringTable.Localize("$BOSS_FECAL"),StringTable.Localize("$BOSS_BULLETSIMPACT"),StringTable.Localize("$BOSS_JAM"),StringTable.Localize("$BOSS_HUSK"),StringTable.Localize("$BOSS_SFLESH"),StringTable.Localize("$BOSS_CRYSTAL"),StringTable.Localize("$BOSS_SPACEANT"),StringTable.Localize("$BOSS_TRANSISTOR"),StringTable.Localize("$BOSS_TINBOSS"),StringTable.Localize("$BOSS_FILM")}; + /*static const */string actionparts[]={StringTable.Localize("$BOSS_BOLTCAR"),StringTable.Localize("$BOSS_MAINEXTRACTOR"),StringTable.Localize("$BOSS_AUXEXTRACTOR"),StringTable.Localize("$BOSS_CAMPIN"),StringTable.Localize("$BOSS_BOLTHEAD"),StringTable.Localize("$BOSS_STRIKER"),StringTable.Localize("$BOSS_SPRING"),StringTable.Localize("$BOSS_EJECTSLOT"),StringTable.Localize("$BOSS_STRIKERSPRING"),StringTable.Localize("$BOSS_EJSPRING")}; + for(int i=amt;i>0;i-=random(8,16))amts.appendformat(StringTable.Localize("$BOSS_FINLINE"), cleanverbs[random(0,cleanverbs.size()-1)], contaminants[random(0,random(0,contaminants.size()-1))], actionparts[random(0,random((actionparts.size()>>1),actionparts.size()-1))] ); + amts=HDMath.BuildVariableString(amts); amts.appendformat("\n"); amt=randompick(-3,-5,-5,-random(8,16)); A_ChamberGrit(amt,true); amt=invoker.weaponstatus[BOSSS_GRIME]; - if(amt>40)amts.appendformat("You barely scrape the surface of this all-encrusting abomination."); - else if(amt>30)amts.appendformat("The gun will need a lot more work than this before it can be deployed again."); - else if(amt>20)amts.appendformat("You might get a few shots out of it now."); - else if(amt>10)amts.appendformat("It's better, but still not good."); - else amts.appendformat("Good to go."); + if(amt>40)amts.appendformat(StringTable.Localize("$BOSS_CLENF1")); + else if(amt>30)amts.appendformat(StringTable.Localize("$BOSS_CLENF2")); + else if(amt>20)amts.appendformat(StringTable.Localize("$BOSS_CLENF3")); + else if(amt>10)amts.appendformat(StringTable.Localize("$BOSS_CLENF4")); + else amts.appendformat(StringTable.Localize("$BOSS_CLENF5")); A_Log(amts,true); } BOJG T 1 offset(7,52); @@ -277,7 +256,7 @@ class BossRifleButItsFuckingPink:BossRifle{ BOJG P 0 A_Refire("jamderp"); goto ready; chamber: - BOJG R 2 offset(4,38){ + BOJG R 2{ if( random(0,max(2,invoker.weaponstatus[BOSSS_GRIME]>>3)) &&invoker.weaponstatus[BOSSS_CHAMBER]>2 @@ -291,8 +270,8 @@ class BossRifleButItsFuckingPink:BossRifle{ setweaponstate("jamderp"); }else A_StartSound("weapons/boltback",8); } - BOJG S 2 offset(6,42)A_JumpIf(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER,1); - BOJG S 1 offset(6,42){ + BOJG S 2 offset(1,34)A_JumpIf(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER,1); + BOJG S 1 offset(2,36){ if(gunbraced())A_MuzzleClimb( frandom(-0.1,0.3),frandom(-0.1,0.3) );else A_MuzzleClimb( @@ -302,35 +281,31 @@ class BossRifleButItsFuckingPink:BossRifle{ if(hd_debug)A_Log("jam chance: "..jamch); if(random(0,100)1){ - A_SpawnItemEx( - invoker.looseammo,cos(pitch)*8,1,height-7-sin(pitch)*8, - cos(pitch)*cos(angle-80)*4+vel.x, - cos(pitch)*sin(angle-80)*4+vel.y, - -sin(pitch)*4+vel.z, - 0,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION|SXF_TRANSFERPITCH - ); - }else if(chm==1){ - A_SpawnItemEx( - invoker.spentammo,cos(pitch)*8,1,height-7-sin(pitch)*8, - cos(pitch)*cos(angle-80)*6+vel.x, - cos(pitch)*sin(angle-80)*6+vel.y, - -sin(pitch)*6+vel.z, - 0,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION|SXF_TRANSFERPITCH - ); + Class rndtp=chm==1?"HDSpent5mmMR":"HDLoose5mmMR"; + if(chm>=1){ + vector3 gunofs=HDMath.RotateVec3D((10,-1,0),angle,pitch); + actor rrr=spawn(rndtp,(pos.xy,pos.z+height*0.85)+gunofs+viewpos.offset); + rrr.target=self; + rrr.angle=angle; + rrr.vel=HDMath.RotateVec3D((1,-4,2),angle,pitch); + if(chm==1)rrr.vel*=1.3; + rrr.vel+=vel; } + + //cycle new if(invoker.weaponstatus[BOSSS_MAG]>0){ invoker.weaponstatus[BOSSS_CHAMBER]=2; invoker.weaponstatus[BOSSS_MAG]--; }else invoker.weaponstatus[BOSSS_CHAMBER]=0; } - BOJG T 1 offset(6,42) A_WeaponReady(WRF_NOFIRE); + BOJG T 1 A_WeaponReady(WRF_NOFIRE); BOJG T 0 A_Refire("althold"); goto altholdend; + reload: ---- A 0{invoker.weaponstatus[0]&=~BOSSF_DONTUSECLIPS;} goto reloadstart; @@ -346,34 +321,28 @@ class BossRifleButItsFuckingPink:BossRifle{ A_MuzzleClimb(-frandom(0.4,0.8),frandom(0.4,1.4)); } BOJG P 4 offset(14,46){ - A_StartSound("weapons/rifleload",8,CHANF_OVERLAP); + A_StartSound("weapons/bossloadm",8,CHANF_OVERLAP); A_MuzzleClimb(-frandom(0.4,0.8),frandom(0.4,1.4)); } BOJG P 0{ int mg=invoker.weaponstatus[BOSSS_MAG]; if(mg==27)setweaponstate("reloaddone"); else if(invoker.weaponstatus[0]&BOSSF_DONTUSECLIPS)setweaponstate("loadhand"); - /*else if( - ( - mg<1 - ||!countinv("SevenMilAmmo") - )&&!HDMagAmmo.NothingLoaded(self,"HD7mClip") - )setweaponstate("loadclip");*/ } loadhand: - BOJG P 0 A_JumpIfInventory(invoker.actualammo,1,"loadhandloop"); + BOJG P 0 A_JumpIfInventory("HD5MM_Ammo",1,"loadhandloop"); goto reloaddone; loadhandloop: BOJG P 4{ int hnd=min( - countinv(invoker.actualammo),9, + countinv("HD5MM_Ammo"),9, 27-invoker.weaponstatus[BOSSS_MAG] ); if(hnd<1){ setweaponstate("reloaddone"); return; }else{ - A_TakeInventory(invoker.actualammo,hnd,TIF_NOTAKEINFINITE); + A_TakeInventory("HD5MM_Ammo",hnd,TIF_NOTAKEINFINITE); invoker.weaponstatus[BOSSS_HAND]=hnd; A_StartSound("weapons/pocket",9); } @@ -392,7 +361,7 @@ class BossRifleButItsFuckingPink:BossRifle{ PressingFire()|| PressingAltFire()|| PressingZoom()|| - !countinv(invoker.actualammo) //don't strip clips automatically + !countinv("HD5MM_Ammo") //don't strip clips automatically )setweaponstate("reloaddone"); else A_StartSound("weapons/pocket",9); }goto loadhandloop; @@ -411,7 +380,7 @@ class BossRifleButItsFuckingPink:BossRifle{ } BOJG P 4 offset (14,46){ A_MuzzleClimb(-frandom(0.4,0.8),frandom(0.4,1.4)); - A_StartSound("weapons/rifleload",8); + A_StartSound("weapons/bossloadm",8); } unloadloop: BOJG P 4 offset(3,41){ @@ -419,16 +388,16 @@ class BossRifleButItsFuckingPink:BossRifle{ else{ A_StartSound("weapons/rifleclick2",8); invoker.weaponstatus[BOSSS_MAG]--; - if(A_JumpIfInventory(invoker.actualammo,0,"null")){ + if(A_JumpIfInventory("HD5MM_Ammo",0,"null")){ A_SpawnItemEx( - invoker.looseammo,cos(pitch)*8,0,height-7-sin(pitch)*8, + "HDLoose5mmMR",cos(pitch)*8,0,height-7-sin(pitch)*8, cos(pitch)*cos(angle-40)*1+vel.x, cos(pitch)*sin(angle-40)*1+vel.y, -sin(pitch)*1+vel.z, 0,SXF_ABSOLUTEMOMENTUM| SXF_NOCHECKPOSITION|SXF_TRANSFERPITCH ); - }else A_GiveInventory(invoker.actualammo,1); + }else A_GiveInventory("HD5MM_Ammo",1); } } BOJG P 2 offset(2,42); diff --git a/zscript/Hexadoken/Weapons/Boss Rifle Variants/Scopeless Boss.zsc b/zscript/Hexadoken/Weapons/Boss Rifle Variants/Scopeless Boss.zsc index e090976..ba7a8d9 100644 --- a/zscript/Hexadoken/Weapons/Boss Rifle Variants/Scopeless Boss.zsc +++ b/zscript/Hexadoken/Weapons/Boss Rifle Variants/Scopeless Boss.zsc @@ -11,7 +11,6 @@ class NoScopeBoss:BossRifle{ override string pickupmessage(){ return "You got the "..gettag().."!"; } - override double weaponbulk(){ return 138+weaponstatus[BOSSS_MAG]*ENC_776_LOADED; } @@ -59,32 +58,31 @@ class NoScopeBoss:BossRifle{ override string gethelptext(){ return WEPHELP_FIRESHOOT - ..WEPHELP_ALTFIRE.." Work bolt\n" - ..WEPHELP_RELOAD.." Reload rounds/clip\n" - ..WEPHELP_ZOOM.."+"..WEPHELP_USE.." Bullet drop\n" - ..WEPHELP_ZOOM.."+"..WEPHELP_DROPONE.." Force drop non-recast\n" - ..WEPHELP_ZOOM.."+"..WEPHELP_ALTRELOAD.." Force load recast\n" - ..WEPHELP_ALTFIRE.."+"..WEPHELP_UNLOAD.." Unload chamber/Clean rifle\n" + ..WEPHELP_ALTFIRE..StringTable.Localize("$BOSWH_ALTFIRE") + ..WEPHELP_RELOAD..StringTable.Localize("$BOSWH_RELOAD") + ..WEPHELP_ZOOM.."+"..WEPHELP_USE..StringTable.Localize("$BOSWH_ZPUSE") + ..WEPHELP_ZOOM.."+"..WEPHELP_DROPONE..StringTable.Localize("$BOSWH_ZPDRON") + ..WEPHELP_ZOOM.."+"..WEPHELP_ALTRELOAD..StringTable.Localize("$BOSWH_ZPALTRELOAD") + ..WEPHELP_ALTFIRE.."+"..WEPHELP_UNLOAD..StringTable.Localize("$BOSWH_AFIREPUNL") ..WEPHELP_UNLOADUNLOAD ; } override void DrawSightPicture( HDStatusBar sb,HDWeapon hdw,HDPlayerPawn hpl, - bool sightbob,vector2 bob,double fov,bool scopeview,actor hpc,string whichdot + bool sightbob,vector2 bob,double fov,bool scopeview,actor hpc ){ int cx,cy,cw,ch; [cx,cy,cw,ch]=Screen.GetClipRect(); sb.SetClipRect( - -16+bob.x,-4+bob.y,32,16, + -16+bob.x,-64+bob.y,32,76, sb.DI_SCREEN_CENTER ); - vector2 bobb=bob*2; - bobb.y=clamp(bobb.y,-8,8); sb.drawimage( - "nsfrtsit",(0,0)+bobb,sb.DI_SCREEN_CENTER|sb.DI_ITEM_TOP, + "nsfrtsit",bob*1.14,sb.DI_SCREEN_CENTER|sb.DI_ITEM_TOP, alpha:0.9,scale:(1.25,1.4) ); sb.SetClipRect(cx,cy,cw,ch); + sb.drawimage( "nsbaksit",(0,0)+bob,sb.DI_SCREEN_CENTER|sb.DI_ITEM_TOP, scale:(1.4,1) @@ -191,10 +189,10 @@ class NoScopeBoss:BossRifle{ TNT1 A 0 A_Light0(); stop; altfire: - BARG G 1 offset(0,34) A_WeaponBusy(); - BARG H 2 offset(2,36) A_JumpIf(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER,1); - BARG H 1 offset(4,38) A_JumpIf(invoker.weaponstatus[BOSSS_CHAMBER]>2,"jamderp"); - BARG H 1 offset(0,34); + BARG G 1 A_WeaponBusy(); + BARG H 2 A_JumpIf(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER,1); + BARG H 1 A_JumpIf(invoker.weaponstatus[BOSSS_CHAMBER]>2,"jamderp"); + BARG H 1 A_MuzzleClimb(-frandom(0.06,0.1),-frandom(0.3,0.5)); BARG H 0 A_ChamberGrit(randompick(0,0,0,0,-1,1,2),true); BARG H 0 A_Refire("chamber"); goto ready; @@ -229,8 +227,8 @@ class NoScopeBoss:BossRifle{ } altholdend: BARG K 0 A_StartSound("weapons/boltfwd",8); - BARG JJ 2 A_WeaponReady(WRF_NOFIRE); - BARG H 3 offset(2,36){ + BARG JI 2 A_WeaponReady(WRF_NOFIRE); + BARG H 3{ A_WeaponReady(WRF_NOFIRE); if(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER)A_SetTics(1); } @@ -293,16 +291,16 @@ class NoScopeBoss:BossRifle{ TNT1 A 40{ A_StartSound("weapons/pocket",9); int amt=invoker.weaponstatus[BOSSS_GRIME]; - string amts="There doesn't seem to be much. "; - if(amt>40)amts="What the FUCK. "; - else if(amt>30)amts="About time - this gun is barely functional. "; - else if(amt>20)amts="This is starting to gum up badly. "; - else if(amt>10)amts="It can use some cleaning. "; + string amts=StringTable.Localize("$BOSS_CLEAN1"); + if(amt>40)amts=StringTable.Localize("$BOSS_CLEAN2"); + else if(amt>30)amts=StringTable.Localize("$BOSS_CLEAN3"); + else if(amt>20)amts=StringTable.Localize("$BOSS_CLEAN4"); + else if(amt>10)amts=StringTable.Localize("$BOSS_CLEAN5"); - static const string cleanverbs[]={"extract","scrape off","wipe away","{care|skil|force}fully remove","dump out","pick out","blow off","shake out","scrub off","fish out"}; - static const string contaminants[]={"some dust","a lot of dust","a bit of powder residue","a disturbing amount of powder residue","some excess grease","a layer of soot","some iron filings","a bit of hair","an eyelash","a patch of dried blood","a bit of rust","a crumb","a dead {insect|spider|ant|wasp}","ashes","some loose bits of skin","a sticky fluid of some sort","wow some fucking *gunk*","a booger","trace fecal matter","yet even more of that anonymous grey debris that all those bullet impacts make","a dollop of {straw|blue|rasp}berry jam","the dried husk of a {pinto|fava|mung} bean with residual hog components","a tiny cancerous nodule of Second Flesh","some crystalline buildup of congealed Frag","a nesting queen space ant","a single modern-day transistor","a tiny Boss rifle (also jammed)","a colourless film of darkness made visible"}; - static const string actionparts[]={"bolt carrier","main extractor","auxiliary extractor","cam pin","bolt head","striker","firing pin spring","ejector slot","striker spring","ejector spring"}; - for(int i=amt;i>0;i-=random(8,16))amts.appendformat("You %s %s from the %s. ", + /*static const */string cleanverbs[]={StringTable.Localize("$BOSS_EXTRACT"),StringTable.Localize("$BOSS_SCRAPEOFF"),StringTable.Localize("$BOSS_WIPEAWAY"),StringTable.Localize("$BOSS_CAREREMOVE"),StringTable.Localize("$BOSS_DUMPOUT"),StringTable.Localize("$BOSS_PICKOUT"),StringTable.Localize("$BOSS_BLOWOFF"),StringTable.Localize("$BOSS_SHAKEOUT"),StringTable.Localize("$BOSS_SCRUBOFF"),StringTable.Localize("$BOSS_FISH")}; + /*static const */string contaminants[]={StringTable.Localize("$BOSS_SOMEDUST"),StringTable.Localize("$BOSS_ALODUST"),StringTable.Localize("$BOSS_ABOPOWDER"),StringTable.Localize("$BOSS_DAOPOWDER"),StringTable.Localize("$BOSS_SEXGREASE"),StringTable.Localize("$BOSS_ALOSOOT"),StringTable.Localize("$BOSS_SOMEIRON"),StringTable.Localize("$BOSS_HAIR"),StringTable.Localize("$BOSS_EYELASH"),StringTable.Localize("$BOSS_BLOOD"),StringTable.Localize("$BOSS_RUST"),StringTable.Localize("$BOSS_CRUMB"),StringTable.Localize("$BOSS_DEADSOME"),StringTable.Localize("$BOSS_ASHES"),StringTable.Localize("$BOSS_SKIN"),StringTable.Localize("$BOSS_FLUID"),StringTable.Localize("$BOSS_WOWSOME"),StringTable.Localize("$BOSS_BOOGER"),StringTable.Localize("$BOSS_FECAL"),StringTable.Localize("$BOSS_BULLETSIMPACT"),StringTable.Localize("$BOSS_JAM"),StringTable.Localize("$BOSS_HUSK"),StringTable.Localize("$BOSS_SFLESH"),StringTable.Localize("$BOSS_CRYSTAL"),StringTable.Localize("$BOSS_SPACEANT"),StringTable.Localize("$BOSS_TRANSISTOR"),StringTable.Localize("$BOSS_TINBOSS"),StringTable.Localize("$BOSS_FILM")}; + /*static const */string actionparts[]={StringTable.Localize("$BOSS_BOLTCAR"),StringTable.Localize("$BOSS_MAINEXTRACTOR"),StringTable.Localize("$BOSS_AUXEXTRACTOR"),StringTable.Localize("$BOSS_CAMPIN"),StringTable.Localize("$BOSS_BOLTHEAD"),StringTable.Localize("$BOSS_STRIKER"),StringTable.Localize("$BOSS_SPRING"),StringTable.Localize("$BOSS_EJECTSLOT"),StringTable.Localize("$BOSS_STRIKERSPRING"),StringTable.Localize("$BOSS_EJSPRING")}; + for(int i=amt;i>0;i-=random(8,16))amts.appendformat(StringTable.Localize("$BOSS_FINLINE"), cleanverbs[random(0,cleanverbs.size()-1)], contaminants[random(0,random(0,contaminants.size()-1))], actionparts[random(0,random((actionparts.size()>>1),actionparts.size()-1))] @@ -314,11 +312,11 @@ class NoScopeBoss:BossRifle{ A_ChamberGrit(amt,true); amt=invoker.weaponstatus[BOSSS_GRIME]; - if(amt>40)amts.appendformat("You barely scrape the surface of this all-encrusting abomination."); - else if(amt>30)amts.appendformat("The gun will need a lot more work than this before it can be deployed again."); - else if(amt>20)amts.appendformat("You might get a few shots out of it now."); - else if(amt>10)amts.appendformat("It's better, but still not good."); - else amts.appendformat("Good to go."); + if(amt>40)amts.appendformat(StringTable.Localize("$BOSS_CLENF1")); + else if(amt>30)amts.appendformat(StringTable.Localize("$BOSS_CLENF2")); + else if(amt>20)amts.appendformat(StringTable.Localize("$BOSS_CLENF3")); + else if(amt>10)amts.appendformat(StringTable.Localize("$BOSS_CLENF4")); + else amts.appendformat(StringTable.Localize("$BOSS_CLENF5")); A_Log(amts,true); } BARG K 1 offset(7,52); @@ -351,7 +349,7 @@ class NoScopeBoss:BossRifle{ BARG G 0 A_Refire("jamderp"); goto ready; chamber: - BARG I 2 offset(4,38){ + BARG I 2{ if( random(0,max(2,invoker.weaponstatus[BOSSS_GRIME]>>3)) &&invoker.weaponstatus[BOSSS_CHAMBER]>2 @@ -365,8 +363,8 @@ class NoScopeBoss:BossRifle{ setweaponstate("jamderp"); }else A_StartSound("weapons/boltback",8); } - BARG J 2 offset(6,42)A_JumpIf(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER,1); - BARG J 1 offset(6,42){ + BARG J 2 offset(1,34)A_JumpIf(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER,1); + BARG J 1 offset(2,36){ if(gunbraced())A_MuzzleClimb( frandom(-0.1,0.3),frandom(-0.1,0.3) );else A_MuzzleClimb( @@ -376,31 +374,26 @@ class NoScopeBoss:BossRifle{ if(hd_debug)A_Log("jam chance: "..jamch); if(random(0,100) rndtp=recast?"HDLoose7mmRecast":"HDLoose7mm"; - int chm=invoker.weaponstatus[BOSSS_CHAMBER]; + class rndtp=chm==1?"HDSpent7mm":recast?"HDLoose7mmRecast":"HDLoose7mm"; double cp=cos(pitch); double sp=sin(pitch); - if(chm>1){ - A_SpawnItemEx( - rndtp,cp*8,1,height-7-sp*8, - cp*cos(angle-80)*4+vel.x, - cp*sin(angle-80)*4+vel.y, - -sp*4+vel.z, - 0,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION|SXF_TRANSFERPITCH - ); - }else if(chm==1){ - A_SpawnItemEx( - "HDSpent7mm",cp*8,1,height-7-sp*8, - cp*cos(angle-80)*6+vel.x, - cp*sin(angle-80)*6+vel.y, - -sp*6+vel.z, - 0,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION|SXF_TRANSFERPITCH - ); + actor rrr=null; + if(chm>=1){ + vector3 gunofs=HDMath.RotateVec3D((10,-1,0),angle,pitch); + actor rrr=spawn(rndtp,(pos.xy,pos.z+height*0.85)+gunofs+viewpos.offset); + rrr.target=self; + rrr.angle=angle; + rrr.vel=HDMath.RotateVec3D((1,-4,2),angle,pitch); + if(chm==1)rrr.vel*=1.3; + rrr.vel+=vel; } + + //cycle new int bbm=invoker.weaponstatus[BOSSS_MAG]; if(bbm>0){ @@ -414,7 +407,7 @@ class NoScopeBoss:BossRifle{ invoker.weaponstatus[BOSSS_MAG]--; }else invoker.weaponstatus[BOSSS_CHAMBER]=0; } - BARG K 1 offset(6,42) A_WeaponReady(WRF_NOFIRE); + BARG K 1 A_WeaponReady(WRF_NOFIRE); BARG K 0 A_Refire("althold"); goto altholdend; @@ -674,4 +667,4 @@ class NoScopeBossSpawner:IdleDummy{ HDF.TransferSpecials(self,ggg,HDF.TS_ALL); }stop; } -} \ No newline at end of file +} diff --git a/zscript/Hexadoken/Weapons/Boss Rifle Variants/Worst Boss.zsc b/zscript/Hexadoken/Weapons/Boss Rifle Variants/Worst Boss.zsc index 2365fa0..77cabc5 100644 --- a/zscript/Hexadoken/Weapons/Boss Rifle Variants/Worst Boss.zsc +++ b/zscript/Hexadoken/Weapons/Boss Rifle Variants/Worst Boss.zsc @@ -1,22 +1,10 @@ class BossRifleButItsTheWorst:BossRifle{ default{ - hdweapon.refid ""; tag "$TAG_WORSTBOSS"; - } + inventory.pickupMessage "$PICKUP_WORSTBOSS"; + hdweapon.refid HDLD_WORSTBOSS; - override string pickupmessage(){ - return "You found a... "..gettag()..". Oh no..."; - } - - override void GunBounce(){ - HDWeapon.GunBounce(); - if(weaponstatus[0]&BOSSF_YEETABLE){ - weaponstatus[BOSSS_GRIME]+=random(-7,3); - if(weaponstatus[BOSSS_CHAMBER]>2&&!random(0,7))weaponstatus[BOSSS_CHAMBER]-=2; - } - else { - if(!random(0,100)) weaponstatus[BOSSS_GRIME]+=randompick(-1,-1,-1,-1,-1,1); - } + hdweapon.ammo1 "SevenMilAmmo",1; } action void A_ChamberGrit(int amt,bool onlywhileempty=false){ bool customchamber=(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER); @@ -33,17 +21,15 @@ class BossRifleButItsTheWorst:BossRifle{ override double weaponbulk(){ return 144; } - override void consolidate(){ - //weaponstatus[BOSSS_GRIME]=random(0,20); - } - override void DropOneAmmo(int amt){ - if(owner){ - amt=clamp(amt,1,10); - if(owner.countinv("SevenMilAmmo"))owner.A_DropInventory("SevenMilAmmo",10); + override void GunBounce(){ + HDWeapon.GunBounce(); + if(weaponstatus[0]&BOSSF_YEETABLE){ + weaponstatus[BOSSS_GRIME]+=random(-7,3); + if(weaponstatus[BOSSS_CHAMBER]>2&&!random(0,7))weaponstatus[BOSSS_CHAMBER]-=2; + } + else { + if(!random(0,100)) weaponstatus[BOSSS_GRIME]+=randompick(-1,-1,-1,-1,-1,1); } - } - override void ForceBasicAmmo(){ - owner.A_GiveInventory("SevenMilAmmo"); } int jamchance(){ if(weaponstatus[0]&BOSSF_CUSTOMCHAMBER) return 0; @@ -75,10 +61,19 @@ class BossRifleButItsTheWorst:BossRifle{ ); } override string gethelptext(){ - if(weaponstatus[0]&BOSSF_CUSTOMCHAMBER) - return "\cfMAN IS ONLY SEPARATED FROM THE HEAVENS\nBY THAT WHICH HE WILL NOT GUN."; - else - return "You are beyond help."; + return StringTable.Localize(weaponstatus[0]&BOSSF_CUSTOMCHAMBER ? "$WEPHELP_WORSTBOSS_CC" : "$WEPHELP_WORSTBOSS"); + } + override void consolidate(){ + // no-op: Don't consolidate + } + override void DropOneAmmo(int amt){ + if(owner){ + amt=clamp(amt,1,10); + if(owner.countinv("SevenMilAmmo"))owner.A_DropInventory("SevenMilAmmo",10); + } + } + override void ForceBasicAmmo(){ + owner.A_GiveInventory("SevenMilAmmo"); } states{ select0: @@ -87,6 +82,7 @@ class BossRifleButItsTheWorst:BossRifle{ deselect0: BOJG A 0; goto deselect0big; + ready: BOJG A 1{ if(pressingzoom()){ @@ -121,7 +117,7 @@ class BossRifleButItsTheWorst:BossRifle{ if(!(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER)) { HDBulletActor.FireBullet(self,"HDB_776", - aimoffy:(-1./600.)*invoker.weaponstatus[BOSSS_DROPADJUST], + aimoffy:(-HDCONST_GRAVITY/600.)*invoker.weaponstatus[BOSSS_DROPADJUST], speedfactor:327.000 ); A_ChamberGrit(99); @@ -150,12 +146,10 @@ class BossRifleButItsTheWorst:BossRifle{ TNT1 A 0 A_Light0(); stop; altfire: - BOJG A 1 offset(0,34) A_WeaponBusy(); - BOJG B 2 offset(2,36) A_JumpIf(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER,1); - BOJG B 1 offset(4,38){ - if(invoker.weaponstatus[BOSSS_CHAMBER]>2)setweaponstate("jamderp"); - } - BOJG B 1 offset(0,34); + BOJG A 1 A_WeaponBusy(); + BOJG B 2 A_JumpIf(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER,1); + BOJG B 1 A_JumpIf(invoker.weaponstatus[BOSSS_CHAMBER]>2,"jamderp"); + BOJG B 1 A_MuzzleClimb(-frandom(0.06,0.1),-frandom(0.3,0.5)); BOJG B 0 A_ChamberGrit(randompick(0,0,0,0,-1,1,2),true); BOJG B 0 A_Refire("chamber"); goto ready; @@ -163,7 +157,6 @@ class BossRifleButItsTheWorst:BossRifle{ BOJG E 1 A_WeaponReady(WRF_NOFIRE); BOJG E 1{ A_ClearRefire(); - bool eww=invoker.weaponstatus[BOSSS_GRIME]>10; bool chempty=invoker.weaponstatus[BOSSS_CHAMBER]<1; if(pressingunload()){ if(chempty){ @@ -179,7 +172,7 @@ class BossRifleButItsTheWorst:BossRifle{ invoker.weaponstatus[0]|=BOSSF_UNLOADONLY; return resolvestate("loadchamber"); }else if( - eww + invoker.weaponstatus[BOSSS_GRIME]>10 ){ return resolvestate("altholdclean"); }else if( @@ -195,7 +188,7 @@ class BossRifleButItsTheWorst:BossRifle{ altholdend: BOJG E 0 A_StartSound("weapons/boltfwd",8); BOJG DC 2 A_WeaponReady(WRF_NOFIRE); - BOJG B 3 offset(2,36){ + BOJG B 3{ A_WeaponReady(WRF_NOFIRE); if(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER)A_SetTics(1); } @@ -227,17 +220,17 @@ class BossRifleButItsTheWorst:BossRifle{ } BOJG E 2 offset(7,72); BOJG E 2 offset(8,60); - BOJG E 1 offset(7,52); + BOJG E 1 offset(6,52); BOJG E 1 offset(5,42); - BOJG E 1 offset(3,38); + BOJG E 1 offset(4,38); BOJG E 1 offset(3,35); goto althold; altholdclean: BOJG E 1 offset(2,36) A_ClearRefire(); BOJG E 1 offset(3,38); - BOJG E 1 offset(5,42) A_Log("Looking inside that chamber...",true); - BOJG E 1 offset(8,48) A_StartSound("weapons/pocket",9); - BOJG E 1 offset(7,52) A_MuzzleClimb(frandom(-0.2,0.2),0.2,frandom(-0.2,0.2),0.2,frandom(-0.2,0.2),0.2); + BOJG E 1 offset(5,41) A_Log(StringTable.Localize("$BOSS_CLEANS"),true); + BOJG E 1 offset(8,44) A_StartSound("weapons/pocket",9); + BOJG E 1 offset(7,50) A_MuzzleClimb(frandom(-0.2,0.2),0.2,frandom(-0.2,0.2),0.2,frandom(-0.2,0.2),0.2); TNT1 A 3 A_StartSound("weapons/pocket",10); TNT1 AAAA 4 A_MuzzleClimb(frandom(-0.2,0.2),frandom(-0.2,0.2),frandom(-0.2,0.2),frandom(-0.2,0.2),frandom(-0.2,0.2),frandom(-0.2,0.2),frandom(-0.2,0.2),frandom(-0.2,0.2)); TNT1 A 3 A_StartSound("weapons/pocket",9); @@ -245,31 +238,32 @@ class BossRifleButItsTheWorst:BossRifle{ TNT1 A 40{ A_StartSound("weapons/pocket",9); int amt=invoker.weaponstatus[BOSSS_GRIME]; - string amts="There doesn't seem to be much. "; - if(amt>40)amts="What the FUCK. "; - else if(amt>30)amts="About time - this gun is barely functional. "; - else if(amt>20)amts="This is starting to gum up badly. "; - else if(amt>10)amts="It can use some cleaning. "; + string amts=StringTable.Localize("$BOSS_CLEAN1"); + if(amt>40)amts=StringTable.Localize("$BOSS_CLEAN2"); + else if(amt>30)amts=StringTable.Localize("$BOSS_CLEAN3"); + else if(amt>20)amts=StringTable.Localize("$BOSS_CLEAN4"); + else if(amt>10)amts=StringTable.Localize("$BOSS_CLEAN5"); - static const string cleanverbs[]={"extract","scrape off","wipe away","carefully remove","dump out","pick out","blow off","shake out","scrub off","fish out"}; - static const string contaminants[]={"some dust","a lot of dust","a bit of powder residue","a disturbing amount of powder residue","some excess grease","a layer of soot","some iron filings","a bit of hair","an eyelash","a patch of dried blood","a bit of rust","a crumb","a dead insect","ashes","some loose bits of skin","a sticky fluid of some sort","wow some fucking *gunk*","a booger","trace fecal matter","yet even more of that anonymous grey debris that all those bullet impacts make","a dollop of strawberry jam","the dried husk of a pinto bean with residual hog components","a tiny cancerous nodule of Second Flesh","some crystalline buildup of congealed Frag","a nesting queen space ant","a single modern-day transistor","a tiny Boss rifle (also jammed)","a colourless film of darkness made visible"}; - static const string actionparts[]={"bolt carrier","main extractor","auxiliary extractor","cam pin","bolt head","striker","firing pin spring","ejector slot","striker spring","ejector spring"}; - for(int i=amt;i>0;i-=random(8,16))amts.appendformat("You %s %s from the %s. ", + /*static const */string cleanverbs[]={StringTable.Localize("$BOSS_EXTRACT"),StringTable.Localize("$BOSS_SCRAPEOFF"),StringTable.Localize("$BOSS_WIPEAWAY"),StringTable.Localize("$BOSS_CAREREMOVE"),StringTable.Localize("$BOSS_DUMPOUT"),StringTable.Localize("$BOSS_PICKOUT"),StringTable.Localize("$BOSS_BLOWOFF"),StringTable.Localize("$BOSS_SHAKEOUT"),StringTable.Localize("$BOSS_SCRUBOFF"),StringTable.Localize("$BOSS_FISH")}; + /*static const */string contaminants[]={StringTable.Localize("$BOSS_SOMEDUST"),StringTable.Localize("$BOSS_ALODUST"),StringTable.Localize("$BOSS_ABOPOWDER"),StringTable.Localize("$BOSS_DAOPOWDER"),StringTable.Localize("$BOSS_SEXGREASE"),StringTable.Localize("$BOSS_ALOSOOT"),StringTable.Localize("$BOSS_SOMEIRON"),StringTable.Localize("$BOSS_HAIR"),StringTable.Localize("$BOSS_EYELASH"),StringTable.Localize("$BOSS_BLOOD"),StringTable.Localize("$BOSS_RUST"),StringTable.Localize("$BOSS_CRUMB"),StringTable.Localize("$BOSS_DEADSOME"),StringTable.Localize("$BOSS_ASHES"),StringTable.Localize("$BOSS_SKIN"),StringTable.Localize("$BOSS_FLUID"),StringTable.Localize("$BOSS_WOWSOME"),StringTable.Localize("$BOSS_BOOGER"),StringTable.Localize("$BOSS_FECAL"),StringTable.Localize("$BOSS_BULLETSIMPACT"),StringTable.Localize("$BOSS_JAM"),StringTable.Localize("$BOSS_HUSK"),StringTable.Localize("$BOSS_SFLESH"),StringTable.Localize("$BOSS_CRYSTAL"),StringTable.Localize("$BOSS_SPACEANT"),StringTable.Localize("$BOSS_TRANSISTOR"),StringTable.Localize("$BOSS_TINBOSS"),StringTable.Localize("$BOSS_FILM")}; + /*static const */string actionparts[]={StringTable.Localize("$BOSS_BOLTCAR"),StringTable.Localize("$BOSS_MAINEXTRACTOR"),StringTable.Localize("$BOSS_AUXEXTRACTOR"),StringTable.Localize("$BOSS_CAMPIN"),StringTable.Localize("$BOSS_BOLTHEAD"),StringTable.Localize("$BOSS_STRIKER"),StringTable.Localize("$BOSS_SPRING"),StringTable.Localize("$BOSS_EJECTSLOT"),StringTable.Localize("$BOSS_STRIKERSPRING"),StringTable.Localize("$BOSS_EJSPRING")}; + for(int i=amt;i>0;i-=random(8,16))amts.appendformat(StringTable.Localize("$BOSS_FINLINE"), cleanverbs[random(0,cleanverbs.size()-1)], contaminants[random(0,random(0,contaminants.size()-1))], actionparts[random(0,random((actionparts.size()>>1),actionparts.size()-1))] ); + amts=HDMath.BuildVariableString(amts); amts.appendformat("\n"); amt=randompick(-3,-5,-5,-random(8,16)); A_ChamberGrit(amt,true); amt=invoker.weaponstatus[BOSSS_GRIME]; - if(amt>40)amts.appendformat("You barely scrape the surface of this all-encrusting abomination."); - else if(amt>30)amts.appendformat("The gun will need a lot more work than this before it can be deployed again."); - else if(amt>20)amts.appendformat("You might get a few shots out of it now."); - else if(amt>10)amts.appendformat("It's better, but still not good."); - else amts.appendformat("Good to go."); + if(amt>40)amts.appendformat(StringTable.Localize("$BOSS_CLENF1")); + else if(amt>30)amts.appendformat(StringTable.Localize("$BOSS_CLENF2")); + else if(amt>20)amts.appendformat(StringTable.Localize("$BOSS_CLENF3")); + else if(amt>10)amts.appendformat(StringTable.Localize("$BOSS_CLENF4")); + else amts.appendformat(StringTable.Localize("$BOSS_CLENF5")); A_Log(amts,true); } BOJG E 1 offset(7,52); @@ -302,7 +296,7 @@ class BossRifleButItsTheWorst:BossRifle{ BOJG A 0 A_Refire("jamderp"); goto ready; chamber: - BOJG C 2 offset(4,38){ + BOJG C 2{ if( random(0,max(2,invoker.weaponstatus[BOSSS_GRIME]>>3)) &&invoker.weaponstatus[BOSSS_CHAMBER]>2 @@ -316,8 +310,8 @@ class BossRifleButItsTheWorst:BossRifle{ setweaponstate("jamderp"); }else A_StartSound("weapons/boltback",8); } - BOJG D 2 offset(6,42)A_JumpIf(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER,1); - BOJG D 1 offset(6,42){ + BOJG D 2 offset(1,34)A_JumpIf(invoker.weaponstatus[0]&BOSSF_CUSTOMCHAMBER,1); + BOJG D 1 offset(2,36){ if(gunbraced())A_MuzzleClimb( frandom(-0.1,0.3),frandom(-0.1,0.3) );else A_MuzzleClimb( @@ -327,32 +321,28 @@ class BossRifleButItsTheWorst:BossRifle{ if(hd_debug)A_Log("jam chance: "..jamch); if(random(0,100)1){ - A_SpawnItemEx( - "HDLoose7mm",cos(pitch)*8,1,height-7-sin(pitch)*8, - cos(pitch)*cos(angle-80)*4+vel.x, - cos(pitch)*sin(angle-80)*4+vel.y, - -sin(pitch)*4+vel.z, - 0,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION|SXF_TRANSFERPITCH - ); - }else if(chm==1){ - A_SpawnItemEx( - "HDSpent7mm",cos(pitch)*8,1,height-7-sin(pitch)*8, - cos(pitch)*cos(angle-80)*6+vel.x, - cos(pitch)*sin(angle-80)*6+vel.y, - -sin(pitch)*6+vel.z, - 0,SXF_ABSOLUTEMOMENTUM|SXF_NOCHECKPOSITION|SXF_TRANSFERPITCH - ); + Class rndtp=chm==1?"HDSpent7mm":"HDLoose7mm"; + if(chm>=1){ + vector3 gunofs=HDMath.RotateVec3D((10,-1,0),angle,pitch); + actor rrr=spawn(rndtp,(pos.xy,pos.z+height*0.85)+gunofs+viewpos.offset); + rrr.target=self; + rrr.angle=angle; + rrr.vel=HDMath.RotateVec3D((1,-4,2),angle,pitch); + if(chm==1)rrr.vel*=1.3; + rrr.vel+=vel; } + + //cycle new invoker.weaponstatus[BOSSS_CHAMBER]=0; } - BOJG E 1 offset(6,42) A_WeaponReady(WRF_NOFIRE); + BOJG E 1 A_WeaponReady(WRF_NOFIRE); BOJG E 0 A_Refire("althold"); goto altholdend; + reload: ---- A 1; goto nope; From 9b38c1d38ed2427f3fc0cf20f3a58e84dcefb470 Mon Sep 17 00:00:00 2001 From: UndeadZeratul Date: Sat, 15 Jul 2023 18:59:29 -0500 Subject: [PATCH 2/2] Move .50 OMG sprites into non-hidden folder --- sprites/{.50 OMG Boss => 50 OMG Boss}/bogga0.png | Bin sprites/{.50 OMG Boss => 50 OMG Boss}/boggb0.png | Bin sprites/{.50 OMG Boss => 50 OMG Boss}/boggc0.png | Bin sprites/{.50 OMG Boss => 50 OMG Boss}/boggd0.png | Bin sprites/{.50 OMG Boss => 50 OMG Boss}/bogge0.png | Bin sprites/{.50 OMG Boss => 50 OMG Boss}/boggz0.png | Bin 6 files changed, 0 insertions(+), 0 deletions(-) rename sprites/{.50 OMG Boss => 50 OMG Boss}/bogga0.png (100%) rename sprites/{.50 OMG Boss => 50 OMG Boss}/boggb0.png (100%) rename sprites/{.50 OMG Boss => 50 OMG Boss}/boggc0.png (100%) rename sprites/{.50 OMG Boss => 50 OMG Boss}/boggd0.png (100%) rename sprites/{.50 OMG Boss => 50 OMG Boss}/bogge0.png (100%) rename sprites/{.50 OMG Boss => 50 OMG Boss}/boggz0.png (100%) diff --git a/sprites/.50 OMG Boss/bogga0.png b/sprites/50 OMG Boss/bogga0.png similarity index 100% rename from sprites/.50 OMG Boss/bogga0.png rename to sprites/50 OMG Boss/bogga0.png diff --git a/sprites/.50 OMG Boss/boggb0.png b/sprites/50 OMG Boss/boggb0.png similarity index 100% rename from sprites/.50 OMG Boss/boggb0.png rename to sprites/50 OMG Boss/boggb0.png diff --git a/sprites/.50 OMG Boss/boggc0.png b/sprites/50 OMG Boss/boggc0.png similarity index 100% rename from sprites/.50 OMG Boss/boggc0.png rename to sprites/50 OMG Boss/boggc0.png diff --git a/sprites/.50 OMG Boss/boggd0.png b/sprites/50 OMG Boss/boggd0.png similarity index 100% rename from sprites/.50 OMG Boss/boggd0.png rename to sprites/50 OMG Boss/boggd0.png diff --git a/sprites/.50 OMG Boss/bogge0.png b/sprites/50 OMG Boss/bogge0.png similarity index 100% rename from sprites/.50 OMG Boss/bogge0.png rename to sprites/50 OMG Boss/bogge0.png diff --git a/sprites/.50 OMG Boss/boggz0.png b/sprites/50 OMG Boss/boggz0.png similarity index 100% rename from sprites/.50 OMG Boss/boggz0.png rename to sprites/50 OMG Boss/boggz0.png