diff --git a/animdefs.misc b/animdefs.misc index 7c81333c4..778ee3d99 100644 --- a/animdefs.misc +++ b/animdefs.misc @@ -1,2 +1,3 @@ canvastexture LOGOFADE 4 4 canvastexture SHEENLED 128 128 +canvastexture QUADRLED 64 64 diff --git a/gldefs.ammo b/gldefs.ammo index 91175ff5e..d7c15b851 100644 --- a/gldefs.ammo +++ b/gldefs.ammo @@ -175,6 +175,26 @@ Object GoldShell Frame "XZW1" { light "GOLDSHELLLIGHT" } } +PointLight QUADAMMOLIGHT +{ + Color 0.4 0.25 0.0 + Size 20 + Offset 0 16 0 + Attenuate 1 +} +Object QuadravolAmmo +{ + Frame "XZW1" { light "QUADAMMOLIGHT" } +} +Object QuadravolAmmo2 +{ + Frame "XZW1" { light "QUADAMMOLIGHT" } +} +Object QuadravolAmmo3 +{ + Frame "XZW1" { light "QUADAMMOLIGHT" } +} + PointLight SPARKUNITLIGHT { Color 0.25 0.15 0.3 @@ -186,6 +206,10 @@ Object SparkUnit { Frame "XZW1" { light "SPARKUNITLIGHT" } } +Object SparkUnit2 +{ + Frame "XZW1" { light "SPARKUNITLIGHT" } +} PointLight FABTIER1LIGHT { diff --git a/gldefs.quadravol b/gldefs.quadravol new file mode 100644 index 000000000..6eefb2c93 --- /dev/null +++ b/gldefs.quadravol @@ -0,0 +1,5 @@ +HardwareShader Texture "models/QuadLED.png" +{ + Shader "shaders/glsl/BrightCanvas.fp" + Texture "scrtex" "QUADRLED" +} diff --git a/gldefs.sheenhmg b/gldefs.sheenhmg index 36bc724c2..3cb65e44a 100644 --- a/gldefs.sheenhmg +++ b/gldefs.sheenhmg @@ -1,8 +1,7 @@ HardwareShader Texture "models/SheenLED.png" { - Shader "shaders/glsl/Subpixel.fp" + Shader "shaders/glsl/BrightCanvas.fp" Texture "scrtex" "SHEENLED" - Texture "pixtex" "textures/subpixel.png" } PointLight SHEENTLIGHT { diff --git a/language.version b/language.version index 9d753f702..b52cff31d 100644 --- a/language.version +++ b/language.version @@ -1,3 +1,3 @@ [default] -SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r318 \cu(Sat 13 Aug 16:09:26 CEST 2022)\c-"; -SWWM_SHORTVER="\cw1.3pre r318 \cu(2022-08-13 16:09:26)\c-"; +SWWM_MODVER="\cyDEMOLITIONIST \cw1.3pre r319 \cu(Sat 13 Aug 20:27:51 CEST 2022)\c-"; +SWWM_SHORTVER="\cw1.3pre r319 \cu(2022-08-13 20:27:51)\c-"; diff --git a/modeldef.quadravol b/modeldef.quadravol index 1540fe057..82335590d 100644 --- a/modeldef.quadravol +++ b/modeldef.quadravol @@ -12,3 +12,60 @@ Model "Quadravol" FrameIndex XZW1 A 0 0 } + +Model "Quadravol" +{ + Path "models" + Model 1 "Quadravol1st_d.3d" + SurfaceSkin 1 0 "DemoTags.png" + SurfaceSkin 1 1 "DemoArms.png" + SurfaceSkin 1 2 "DemoSoft.png" + SurfaceSkin 1 3 "Quadravol.png" + SurfaceSkin 1 4 "QuadLED.png" + + AngleOffset -90 + Scale -0.01 0.005 0.01 + + // Still + FrameIndex XZW2 A 1 0 + // Deselect + FrameIndex XZW2 B 1 1 + FrameIndex XZW2 C 1 2 + FrameIndex XZW2 D 1 3 + FrameIndex XZW2 E 1 4 + FrameIndex XZW2 F 1 5 + FrameIndex XZW2 G 1 6 + FrameIndex XZW2 H 1 7 + FrameIndex XZW2 I 1 8 + FrameIndex XZW2 J 1 9 + FrameIndex XZW2 K 1 10 + FrameIndex XZW2 L 1 11 + FrameIndex XZW2 M 1 12 + FrameIndex XZW2 N 1 13 + FrameIndex XZW2 O 1 14 + FrameIndex XZW2 P 1 15 + FrameIndex XZW2 Q 1 16 + FrameIndex XZW2 R 1 17 // Select + FrameIndex XZW2 S 1 18 + FrameIndex XZW2 T 1 19 + FrameIndex XZW2 U 1 20 + FrameIndex XZW2 V 1 21 + FrameIndex XZW2 W 1 22 + FrameIndex XZW2 X 1 23 + FrameIndex XZW2 Y 1 24 + FrameIndex XZW2 Z 1 25 + FrameIndex XZW3 A 1 26 + FrameIndex XZW3 B 1 27 + FrameIndex XZW3 C 1 28 + FrameIndex XZW3 D 1 29 + FrameIndex XZW3 E 1 30 + FrameIndex XZW3 F 1 31 + FrameIndex XZW3 G 1 32 + FrameIndex XZW3 H 1 33 + FrameIndex XZW3 I 1 34 + FrameIndex XZW3 J 1 35 + FrameIndex XZW3 K 1 36 + FrameIndex XZW3 L 1 37 + FrameIndex XZW3 M 1 38 + FrameIndex XZW3 N 1 39 +} diff --git a/models/QuadCell.png b/models/QuadCell.png index 5e3cb9837..31769ca43 100644 Binary files a/models/QuadCell.png and b/models/QuadCell.png differ diff --git a/models/QuadCell_Used.png b/models/QuadCell_Used.png index 3de7fe36f..152afc051 100644 Binary files a/models/QuadCell_Used.png and b/models/QuadCell_Used.png differ diff --git a/models/QuadCell_bright.png b/models/QuadCell_bright.png index d034f54ac..97a0c08ed 100644 Binary files a/models/QuadCell_bright.png and b/models/QuadCell_bright.png differ diff --git a/models/QuadLED.png b/models/QuadLED.png index 4d82d3fd5..f50bb3756 100644 Binary files a/models/QuadLED.png and b/models/QuadLED.png differ diff --git a/models/QuadLED.xcf b/models/QuadLED.xcf deleted file mode 100644 index 8056de682..000000000 Binary files a/models/QuadLED.xcf and /dev/null differ diff --git a/models/QuadLEDBase.png b/models/QuadLEDBase.png new file mode 100644 index 000000000..e083885ad Binary files /dev/null and b/models/QuadLEDBase.png differ diff --git a/models/QuadLEDCharge.png b/models/QuadLEDCharge.png new file mode 100644 index 000000000..510265c8e Binary files /dev/null and b/models/QuadLEDCharge.png differ diff --git a/models/QuadLEDRound.png b/models/QuadLEDRound.png new file mode 100644 index 000000000..115d56fa9 Binary files /dev/null and b/models/QuadLEDRound.png differ diff --git a/models/Quadravol.png b/models/Quadravol.png index 9e27d5985..557423ef5 100644 Binary files a/models/Quadravol.png and b/models/Quadravol.png differ diff --git a/models/Quadravol1st.blend b/models/Quadravol1st.blend new file mode 100644 index 000000000..5d9fd5b32 Binary files /dev/null and b/models/Quadravol1st.blend differ diff --git a/models/Quadravol1st_a.3d b/models/Quadravol1st_a.3d new file mode 100644 index 000000000..6b8bb2a94 Binary files /dev/null and b/models/Quadravol1st_a.3d differ diff --git a/models/Quadravol1st_d.3d b/models/Quadravol1st_d.3d new file mode 100644 index 000000000..a44e9e043 Binary files /dev/null and b/models/Quadravol1st_d.3d differ diff --git a/shaders/glsl/BrightCanvas.fp b/shaders/glsl/BrightCanvas.fp new file mode 100644 index 000000000..819bcd3a9 --- /dev/null +++ b/shaders/glsl/BrightCanvas.fp @@ -0,0 +1,8 @@ +// Make canvas textures fullbright, basically + +void SetupMaterial( inout Material mat ) +{ + mat.Base = texture(scrtex,vec2(vTexCoord.s,1.-vTexCoord.t)); // canvas textures are upside-down when used by models + mat.Normal = ApplyNormalMap(vTexCoord.st); + mat.Bright = vec4(1.); +} diff --git a/shaders/glsl/Subpixel.fp b/shaders/glsl/Subpixel.fp deleted file mode 100644 index 65dba1f64..000000000 --- a/shaders/glsl/Subpixel.fp +++ /dev/null @@ -1,15 +0,0 @@ -// RGB subpixel filter for Ammo LEDs - -// GRIDSZ = how many subpixels are in the texture (for layouts where subpixel patterns alternate) -#ifndef GRIDSZ -#define GRIDSZ vec2(1.,1.) -#endif - -void SetupMaterial( inout Material mat ) -{ - mat.Base = texture(scrtex,vec2(vTexCoord.s,1.-vTexCoord.t)); // canvas textures are upside-down when used by models - vec2 uv = (vTexCoord.st*vec2(textureSize(scrtex,0)))/GRIDSZ; - mat.Base *= 1.5*texture(pixtex,uv); - mat.Normal = ApplyNormalMap(vTexCoord.st); - mat.Bright = vec4(1.); -} diff --git a/textures/subpixel.png b/textures/subpixel.png deleted file mode 100644 index a283a66ce..000000000 Binary files a/textures/subpixel.png and /dev/null differ diff --git a/textures/subpixel_nukuri.png b/textures/subpixel_nukuri.png deleted file mode 100644 index 8f38864ca..000000000 Binary files a/textures/subpixel_nukuri.png and /dev/null differ diff --git a/textures/subpixel_xekkian.png b/textures/subpixel_xekkian.png deleted file mode 100644 index b37771593..000000000 Binary files a/textures/subpixel_xekkian.png and /dev/null differ diff --git a/zscript/dlc1/swwm_heavymahsheengun.zsc b/zscript/dlc1/swwm_heavymahsheengun.zsc index 1b06a8d1c..8e31e660c 100644 --- a/zscript/dlc1/swwm_heavymahsheengun.zsc +++ b/zscript/dlc1/swwm_heavymahsheengun.zsc @@ -14,7 +14,7 @@ Class HeavyMahSheenGun : SWWMWeapon transient SpreadSlugTracer st; transient ui Canvas AmmoLed; - ui TextureID AmmoLedBase, AmmoLedBar, AmmoLedSpeed, AmmoLedNums, AmmoLedCam; + ui TextureID AmmoLedBase, AmmoLedBar, AmmoLedSpeed, AmmoLedNums; override void RenderTexture( RenderEvent e ) { diff --git a/zscript/dlc1/swwm_notashotgun.zsc b/zscript/dlc1/swwm_notashotgun.zsc index 560de3afb..49dd8a306 100644 --- a/zscript/dlc1/swwm_notashotgun.zsc +++ b/zscript/dlc1/swwm_notashotgun.zsc @@ -6,9 +6,50 @@ Class Quadravol : SWWMWeapon int clipcount; int chargelevel; bool chambered, charged; + bool onehand; Property ClipCount : clipcount; + transient ui Canvas AmmoLed; + ui TextureID AmmoLedBase, AmmoLedRound, AmmoLedCharge; + + override void RenderTexture( RenderEvent e ) + { + if ( !AmmoLed ) AmmoLed = TexMan.GetCanvas("QUADRLED"); + if ( !AmmoLedBase ) AmmoLedBase = TexMan.CheckForTexture("models/QuadLEDBase.png",TexMan.Type_Any); + if ( !AmmoLedRound ) AmmoLedRound = TexMan.CheckForTexture("models/QuadLEDRound.png",TexMan.Type_Any); + if ( !AmmoLedCharge ) AmmoLedCharge = TexMan.CheckForTexture("models/QuadLEDCharge.png",TexMan.Type_Any); + AmmoLed.Clear(0,0,64,64,0xFF101033); + AmmoLed.DrawTexture(AmmoLedBase,false,0,0,DTA_LegacyRenderStyle,STYLE_Add,DTA_Color,0xFF00FFFF); + Vector3 lainbow = SWWMUtility.HSVToRGB(((5-chargelevel)/7.5,1.,1.)); + Color col = Color(255,int(lainbow.x*255),int(lainbow.y*255),int(lainbow.z*255)); + AmmoLed.DrawTexture(AmmoLedCharge,false,12,4,DTA_SrcX,(chargelevel%4)*64,DTA_SrcY,(chargelevel/4)*64,DTA_SrcWidth,40,DTA_SrcHeight,40,DTA_DestWidth,40,DTA_DestHeight,40,DTA_LegacyRenderStyle,STYLE_Add,DTA_Color,(chargelevel>0)?col:0xFF00FF00); + for ( int i=0; i0)||(chambered&&!charged)||(clipcount>0)||(Ammo1.Amount > 0); + } + + override bool CheckAmmo( int firemode, bool autoswitch, bool requireammo, int ammocount ) + { + if ( (firemode == PrimaryFire) || (firemode == EitherFire) ) + { + if ( (chargelevel > 0) || (chambered && !charged) || (clipcount > 0) || (Ammo1.Amount > 0) ) return true; + if ( autoswitch ) PlayerPawn(Owner).PickNewWeapon(null); + return false; + } + return Super.CheckAmmo(firemode,autoswitch,requireammo,ammocount); + } + + override void PlayUpSound( Actor origin ) + { + if ( onehand ) origin.A_StartSound("quadshot/selectfast",CHAN_WEAPON,CHANF_OVERLAP); + else origin.A_StartSound(UpSound,CHAN_WEAPON,CHANF_OVERLAP); + } + Default { Tag "$T_QUADRAVOL"; @@ -19,12 +60,14 @@ Class Quadravol : SWWMWeapon Weapon.SlotNumber 6; Weapon.SlotPriority 2.; Weapon.SelectionOrder 650; + Weapon.UpSound "quadshot/select"; Weapon.AmmoType1 "QuadravolAmmo"; Weapon.AmmoGive1 1; SWWMWeapon.DropAmmoType "SWWMRocketAmmoSmall"; Quadravol.ClipCount 5; Stamina 80000; +SWWMWEAPON.NOFIRSTGIVE; + +SWWMWEAPON.HASSCRTEX; +WEAPON.EXPLOSIVE; Radius 28; Height 32; @@ -34,5 +77,34 @@ Class Quadravol : SWWMWeapon Spawn: XZW1 A -1; Stop; + Select: + XZW2 R 1 A_FullRaise(); + XZW2 STUVWXYZ 1; + XZW3 ABCDEFGHI 1; + XZW3 JKLMN 2; + Goto Ready; + Ready: + XZW2 A 1 A_WeaponReady(); + Wait; + Fire: + XZW2 A 1; + Goto Ready; + AltFire: + XZW2 A 1; + Goto Ready; + Reload: + XZW2 A 1; + Goto Ready; + Zoom: + XZW2 A 1; + Goto Ready; + User1: + XZW2 A 1; + Goto Ready; + Deselect: + XZW2 A 1 A_StartSound("quadshot/deselect",CHAN_WEAPON,CHANF_OVERLAP); + XZW2 BCDEFGHIJKLMNOPQR 1; + XZW2 R -1 A_FullLower(); + Stop; } }