diff --git a/brightmaps/AmmoLedBase.png b/brightmaps/AmmoLedBase.png new file mode 100644 index 0000000..11df66c Binary files /dev/null and b/brightmaps/AmmoLedBase.png differ diff --git a/brightmaps/FlakAmmoLEDBase.png b/brightmaps/FlakAmmoLEDBase.png new file mode 100644 index 0000000..598641d Binary files /dev/null and b/brightmaps/FlakAmmoLEDBase.png differ diff --git a/brightmaps/JBRifle2.png b/brightmaps/JBRifle2.png index 0bdbbea..21c73d0 100644 Binary files a/brightmaps/JBRifle2.png and b/brightmaps/JBRifle2.png differ diff --git a/brightmaps/JBRifle21.png b/brightmaps/JBRifle21.png index d4fe079..975c39c 100644 Binary files a/brightmaps/JBRifle21.png and b/brightmaps/JBRifle21.png differ diff --git a/brightmaps/JBRifle22.png b/brightmaps/JBRifle22.png index a5fbc2d..9bf2360 100644 Binary files a/brightmaps/JBRifle22.png and b/brightmaps/JBRifle22.png differ diff --git a/brightmaps/JBRifle23.png b/brightmaps/JBRifle23.png index 5079ee5..1692254 100644 Binary files a/brightmaps/JBRifle23.png and b/brightmaps/JBRifle23.png differ diff --git a/brightmaps/JBRifle24.png b/brightmaps/JBRifle24.png index 9f85040..a436504 100644 Binary files a/brightmaps/JBRifle24.png and b/brightmaps/JBRifle24.png differ diff --git a/brightmaps/JPammo_01.png b/brightmaps/JPammo_01.png new file mode 100644 index 0000000..d27e2cc Binary files /dev/null and b/brightmaps/JPammo_01.png differ diff --git a/brightmaps/JPulseGun_02.png b/brightmaps/JPulseGun_02.png new file mode 100644 index 0000000..f40695a Binary files /dev/null and b/brightmaps/JPulseGun_02.png differ diff --git a/decaldef.txt b/decaldef.txt index 6591d2e..0747584 100644 --- a/decaldef.txt +++ b/decaldef.txt @@ -25,6 +25,31 @@ decalgroup WallCrack WallCrack2 1 } +decal BioSplat1 +{ + pic biosplat + shade "20 80 18" + x-scale 0.25 + y-scale 0.25 + randomflipx + randomflipy +} +decal BioSplat2 +{ + pic biospla2 + shade "20 80 18" + x-scale 0.25 + y-scale 0.25 + randomflipx + randomflipy +} + +decalgroup BioSplat +{ + BioSplat1 1 + BioSplat2 1 +} + decal RocketBlast { pic rcktblst diff --git a/gldefs.txt b/gldefs.txt index 6014166..dc082dd 100644 --- a/gldefs.txt +++ b/gldefs.txt @@ -58,3 +58,23 @@ Brightmap Texture "models/Jwhpick1.png" { Map "brightmaps/Jwhpick1.png" } +Brightmap Texture "models/JPammo_01.png" +{ + Map "brightmaps/JPammo_01.png" +} +Brightmap Texture "models/JPulseGun_02.png" +{ + Map "brightmaps/JPulseGun_02.png" +} +Brightmap Texture "models/JPulsePickup_01.png" +{ + Map "brightmaps/JPulseGun_02.png" +} +Brightmap Texture "models/AmmoLedBase.png" +{ + Map "brightmaps/AmmoLedBase.png" +} +Brightmap Texture "models/FlakAmmoLEDBase.png" +{ + Map "brightmaps/FlakAmmoLEDBase.png" +} \ No newline at end of file diff --git a/graphics/biospla2.png b/graphics/biospla2.png new file mode 100644 index 0000000..487f379 Binary files /dev/null and b/graphics/biospla2.png differ diff --git a/graphics/biosplat.png b/graphics/biosplat.png new file mode 100644 index 0000000..96d17e0 Binary files /dev/null and b/graphics/biosplat.png differ diff --git a/graphics/energymk.png b/graphics/energymk.png new file mode 100644 index 0000000..177cc9c Binary files /dev/null and b/graphics/energymk.png differ diff --git a/modeldef.txt b/modeldef.txt index b0542bb..e527048 100644 --- a/modeldef.txt +++ b/modeldef.txt @@ -20,7 +20,150 @@ Model "BioGel" Skin 0 "Jgreen.png" Scale 0.08 0.08 0.08 RollOffset 90 - DONTCULLBACKFACES + USEACTORPITCH + USEACTORROLL + + // Flying + FrameIndex GELF A 0 0 + FrameIndex GELF B 0 1 + FrameIndex GELF C 0 2 + FrameIndex GELF D 0 3 + FrameIndex GELF E 0 4 + FrameIndex GELF F 0 5 + FrameIndex GELF G 0 6 + FrameIndex GELF H 0 7 + FrameIndex GELF I 0 8 + FrameIndex GELF J 0 9 + FrameIndex GELF K 0 10 + FrameIndex GELF L 0 11 + FrameIndex GELF M 0 12 + // Hit + FrameIndex GELH A 0 14 + FrameIndex GELH B 0 15 + FrameIndex GELH C 0 16 + FrameIndex GELH D 0 17 + FrameIndex GELH E 0 18 + FrameIndex GELH F 0 19 + FrameIndex GELH G 0 20 + FrameIndex GELH H 0 21 + FrameIndex GELH I 0 22 + FrameIndex GELH J 0 23 + // Drip + FrameIndex GELD A 0 24 + FrameIndex GELD B 0 25 + FrameIndex GELD C 0 26 + FrameIndex GELD D 0 27 + FrameIndex GELD E 0 28 + FrameIndex GELD F 0 29 + FrameIndex GELD G 0 30 + FrameIndex GELD H 0 31 + FrameIndex GELD I 0 32 + FrameIndex GELD J 0 33 + FrameIndex GELD K 0 34 + FrameIndex GELD L 0 35 + FrameIndex GELD M 0 36 + // Slide + FrameIndex GELS A 0 37 + FrameIndex GELS B 0 38 + FrameIndex GELS C 0 39 + FrameIndex GELS D 0 40 + FrameIndex GELS E 0 41 + FrameIndex GELS F 0 42 + FrameIndex GELS G 0 43 + // Shrivel + FrameIndex GELX A 0 44 + FrameIndex GELX B 0 45 + FrameIndex GELX C 0 46 + FrameIndex GELX D 0 47 + FrameIndex GELX E 0 48 + FrameIndex GELX F 0 49 + FrameIndex GELX G 0 50 + FrameIndex GELX H 0 51 + FrameIndex GELX I 0 52 + FrameIndex GELX J 0 53 + FrameIndex GELX K 0 54 + FrameIndex GELX L 0 55 +} + +Model "BioSplash" +{ + Path "models" + Model 0 "BioGelm_d.3d" + Skin 0 "Jgreen.png" + Scale 0.08 0.08 0.08 + RollOffset 90 + USEACTORPITCH + USEACTORROLL + + // Flying + FrameIndex GELF A 0 0 + FrameIndex GELF B 0 1 + FrameIndex GELF C 0 2 + FrameIndex GELF D 0 3 + FrameIndex GELF E 0 4 + FrameIndex GELF F 0 5 + FrameIndex GELF G 0 6 + FrameIndex GELF H 0 7 + FrameIndex GELF I 0 8 + FrameIndex GELF J 0 9 + FrameIndex GELF K 0 10 + FrameIndex GELF L 0 11 + FrameIndex GELF M 0 12 + // Hit + FrameIndex GELH A 0 14 + FrameIndex GELH B 0 15 + FrameIndex GELH C 0 16 + FrameIndex GELH D 0 17 + FrameIndex GELH E 0 18 + FrameIndex GELH F 0 19 + FrameIndex GELH G 0 20 + FrameIndex GELH H 0 21 + FrameIndex GELH I 0 22 + FrameIndex GELH J 0 23 + // Drip + FrameIndex GELD A 0 24 + FrameIndex GELD B 0 25 + FrameIndex GELD C 0 26 + FrameIndex GELD D 0 27 + FrameIndex GELD E 0 28 + FrameIndex GELD F 0 29 + FrameIndex GELD G 0 30 + FrameIndex GELD H 0 31 + FrameIndex GELD I 0 32 + FrameIndex GELD J 0 33 + FrameIndex GELD K 0 34 + FrameIndex GELD L 0 35 + FrameIndex GELD M 0 36 + // Slide + FrameIndex GELS A 0 37 + FrameIndex GELS B 0 38 + FrameIndex GELS C 0 39 + FrameIndex GELS D 0 40 + FrameIndex GELS E 0 41 + FrameIndex GELS F 0 42 + FrameIndex GELS G 0 43 + // Shrivel + FrameIndex GELX A 0 44 + FrameIndex GELX B 0 45 + FrameIndex GELX C 0 46 + FrameIndex GELX D 0 47 + FrameIndex GELX E 0 48 + FrameIndex GELX F 0 49 + FrameIndex GELX G 0 50 + FrameIndex GELX H 0 51 + FrameIndex GELX I 0 52 + FrameIndex GELX J 0 53 + FrameIndex GELX K 0 54 + FrameIndex GELX L 0 55 +} + +Model "BioGlob" +{ + Path "models" + Model 0 "BioGelm_d.3d" + Skin 0 "Jgreen.png" + Scale 0.08 0.08 0.08 + RollOffset 90 USEACTORPITCH USEACTORROLL @@ -123,6 +266,7 @@ Model "BioRifle" PitchOffset 94.21875 Scale 0.125 0.06 0.125 Offset 9.8 -17.6 -10.4 + INTERPOLATEDOUBLEDFRAMES // select FrameIndex BIOS A 0 0 @@ -229,7 +373,6 @@ Model "ShockRifleWave" Path "models" Model 0 "shockrwm_d.3d" Skin 0 "shocktt1.png" - DONTCULLBACKFACES FrameIndex SWAV A 0 0 FrameIndex SWAV B 0 1 @@ -284,7 +427,7 @@ Model "ShockRifle" Skin 1 "asmd_t.png" AngleOffset 270 PitchOffset 90 - Scale -0.14 0.14 0.14 + Scale -0.14 0.18 0.14 ZOffset 12 ROTATING @@ -297,7 +440,7 @@ Model "ShockRifle" Skin 1 "asmd_t.png" AngleOffset 270 PitchOffset 90 - Scale -0.14 0.14 0.14 + Scale -0.14 0.18 0.14 ZOffset 12 FrameIndex ASMP B 1 0 @@ -366,6 +509,265 @@ Model "ShockRifle" FrameIndex ASMA J 0 49 } +//============================================================================= +// PULSE GUN +//============================================================================= + +Model "PulseAmmo" +{ + Path "models" + Model 0 "PAmmo_d.3d" + Skin 0 "JPammo_01.png" + Scale -0.08 0.06 0.06 + PitchOffset 90 + ZOffset 6 + + FrameIndex PAMO A 0 0 +} + +Model "PulseGun" +{ + Path "models" + Model 1 "PulsePickup_d.3d" + Skin 1 "JPulsePickup_01.png" + AngleOffset 270 + PitchOffset 90 + Scale -0.16 0.2 0.16 + ZOffset 12 + ROTATING + + FrameIndex PGNP A 1 0 +} +Model "PulseGun" +{ + Path "models" + Model 1 "PulsePickup_d.3d" + Skin 1 "JPulsePickup_01.png" + AngleOffset 270 + PitchOffset 90 + Scale -0.16 0.2 0.16 + ZOffset 12 + + FrameIndex PGNP B 1 0 +} + +Model "PulseGun" +{ + Path "models" + Model 2 "Flat_d.3d" + Skin 2 "MuzzyPulse.png" + PitchOffset 90 + Scale 0.08 0.08 0.08 + Offset 8.5 -20.0 -4.5 + + FrameIndex PMUZ A 0 0 +} + +Model "PulseGun" +{ + Path "models" + Model 0 "PulseGunR_d.3d" + SurfaceSkin 0 0 "AmmoLedBase.png" + SurfaceSkin 0 1 "JPulseGun_02.png" + SurfaceSkin 0 2 "JPulseGun_03.png" + PitchOffset 90 + Scale 0.26 0.13 0.26 + Offset 0.0 -10.5 -8.0 + + // Select + FrameIndex PGNS A 0 2 + FrameIndex PGNS B 0 3 + FrameIndex PGNS C 0 4 + FrameIndex PGNS D 0 5 + FrameIndex PGNS E 0 6 + FrameIndex PGNS F 0 7 + FrameIndex PGNS G 0 8 + FrameIndex PGNS H 0 9 + FrameIndex PGNS I 0 10 + FrameIndex PGNS J 0 11 + FrameIndex PGNS K 0 12 + FrameIndex PGNS L 0 13 + FrameIndex PGNS M 0 14 + FrameIndex PGNS N 0 15 + FrameIndex PGNS O 0 16 + FrameIndex PGNS P 0 17 + FrameIndex PGNS Q 0 18 + FrameIndex PGNS R 0 19 + FrameIndex PGNS S 0 20 + FrameIndex PGNS T 0 21 + FrameIndex PGNS U 0 22 + FrameIndex PGNS V 0 23 + FrameIndex PGNS W 0 24 + // Cooldown + FrameIndex PGNC A 0 40 + FrameIndex PGNC B 0 41 + FrameIndex PGNC C 0 42 + FrameIndex PGNC D 0 43 + FrameIndex PGNC E 0 44 + FrameIndex PGNC F 0 45 + FrameIndex PGNC G 0 46 + FrameIndex PGNC H 0 47 + FrameIndex PGNC I 0 48 + FrameIndex PGNC J 0 49 + FrameIndex PGNC K 0 50 + FrameIndex PGNC L 0 51 + FrameIndex PGNC M 0 52 + FrameIndex PGNC N 0 53 + FrameIndex PGNC O 0 54 + FrameIndex PGNC P 0 55 + FrameIndex PGNC Q 0 56 + FrameIndex PGNC R 0 57 + FrameIndex PGNC S 0 58 + FrameIndex PGNC T 0 59 + FrameIndex PGNC U 0 60 + FrameIndex PGNC V 0 61 + FrameIndex PGNC W 0 62 + FrameIndex PGNC X 0 63 + FrameIndex PGNC Y 0 64 + // Reload + FrameIndex PGNR A 0 65 + FrameIndex PGNR B 0 66 + FrameIndex PGNR C 0 67 + FrameIndex PGNR D 0 68 + FrameIndex PGNR E 0 69 + FrameIndex PGNR F 0 70 + FrameIndex PGNR G 0 71 + FrameIndex PGNR H 0 72 + FrameIndex PGNR I 0 73 + FrameIndex PGNR J 0 74 + FrameIndex PGNR K 0 75 + FrameIndex PGNR L 0 76 + FrameIndex PGNR M 0 77 + FrameIndex PGNR N 0 78 + FrameIndex PGNR O 0 79 + FrameIndex PGNR P 0 80 + FrameIndex PGNR Q 0 81 + FrameIndex PGNR R 0 82 + FrameIndex PGNR S 0 83 + FrameIndex PGNR T 0 84 + FrameIndex PGNR U 0 85 + FrameIndex PGNR V 0 86 + FrameIndex PGNR W 0 87 + FrameIndex PGNR X 0 88 + FrameIndex PGNR Y 0 89 + FrameIndex PGNR Z 0 90 + FrameIndex PGR2 A 0 91 + FrameIndex PGR2 B 0 92 + FrameIndex PGR2 C 0 93 + FrameIndex PGR2 D 0 94 + FrameIndex PGR2 E 0 95 + FrameIndex PGR2 F 0 96 + FrameIndex PGR2 G 0 97 + FrameIndex PGR2 H 0 98 + FrameIndex PGR2 I 0 99 + FrameIndex PGR2 J 0 100 + FrameIndex PGR2 K 0 101 + FrameIndex PGR2 L 0 102 + FrameIndex PGR2 M 0 103 + FrameIndex PGR2 N 0 104 + FrameIndex PGR2 O 0 105 + FrameIndex PGR2 P 0 106 + FrameIndex PGR2 Q 0 107 + FrameIndex PGR2 R 0 108 + FrameIndex PGR2 S 0 109 + FrameIndex PGR2 T 0 110 + FrameIndex PGR2 U 0 111 + FrameIndex PGR2 V 0 112 + FrameIndex PGR2 W 0 113 + FrameIndex PGR2 X 0 114 + // Bolt Start + FrameIndex PGBS A 0 115 + FrameIndex PGBS B 0 116 + FrameIndex PGBS C 0 117 + FrameIndex PGBS D 0 118 + FrameIndex PGBS E 0 119 + // Bolt Loop + FrameIndex PGBL A 0 120 + FrameIndex PGBL B 0 121 + FrameIndex PGBL C 0 122 + FrameIndex PGBL D 0 123 + FrameIndex PGBL E 0 124 + FrameIndex PGBL F 0 125 + FrameIndex PGBL G 0 126 + FrameIndex PGBL H 0 127 + FrameIndex PGBL I 0 128 + FrameIndex PGBL J 0 129 + // Bolt End + FrameIndex PGBE A 0 130 + FrameIndex PGBE B 0 131 + FrameIndex PGBE C 0 132 + FrameIndex PGBE D 0 133 + FrameIndex PGBE E 0 134 + // Idle + FrameIndex PGNI A 0 135 + FrameIndex PGNI B 0 138 + FrameIndex PGNI C 0 141 + FrameIndex PGNI D 0 144 + FrameIndex PGNI E 0 147 + FrameIndex PGNI F 0 150 + FrameIndex PGNI G 0 153 + FrameIndex PGNI H 0 156 + FrameIndex PGNI I 0 159 + FrameIndex PGNI J 0 162 + FrameIndex PGNI K 0 165 + FrameIndex PGNI L 0 168 + FrameIndex PGNI M 0 171 + FrameIndex PGNI N 0 174 + FrameIndex PGNI O 0 177 + FrameIndex PGNI P 0 180 + FrameIndex PGNI Q 0 183 + FrameIndex PGNI R 0 186 + FrameIndex PGNI S 0 189 + FrameIndex PGNI T 0 192 + FrameIndex PGNI U 0 195 + FrameIndex PGNI V 0 198 + FrameIndex PGNI W 0 201 + FrameIndex PGNI X 0 204 + FrameIndex PGNI Y 0 207 + FrameIndex PGNI Z 0 210 + // Fire Loop + FrameIndex PGNF A 0 215 + FrameIndex PGNF B 0 216 + FrameIndex PGNF C 0 217 + FrameIndex PGNF D 0 218 + FrameIndex PGNF E 0 219 + FrameIndex PGNF F 0 220 + FrameIndex PGNF G 0 221 + FrameIndex PGNF H 0 222 + FrameIndex PGNF I 0 223 + FrameIndex PGNF J 0 224 + FrameIndex PGNF K 0 225 + FrameIndex PGNF L 0 226 + FrameIndex PGNF M 0 227 + FrameIndex PGNF N 0 228 + FrameIndex PGNF O 0 229 + FrameIndex PGNF P 0 230 + FrameIndex PGNF Q 0 231 + FrameIndex PGNF R 0 232 + FrameIndex PGNF S 0 233 + FrameIndex PGNF T 0 234 + FrameIndex PGNF U 0 235 + FrameIndex PGNF V 0 236 + FrameIndex PGNF W 0 237 + FrameIndex PGNF X 0 238 + FrameIndex PGNF Y 0 239 + FrameIndex PGNF Z 0 240 + FrameIndex PGF2 A 0 241 + FrameIndex PGF2 B 0 242 + FrameIndex PGF2 C 0 243 + FrameIndex PGF2 D 0 244 + FrameIndex PGF2 E 0 245 + FrameIndex PGF2 F 0 246 + FrameIndex PGF2 G 0 247 + FrameIndex PGF2 H 0 248 + FrameIndex PGF2 I 0 249 + FrameIndex PGF2 J 0 250 + FrameIndex PGF2 K 0 251 + FrameIndex PGF2 L 0 252 + FrameIndex PGF2 M 0 253 + FrameIndex PGF2 N 0 254 +} + //============================================================================= // FLAK CANNON //============================================================================= @@ -993,7 +1395,7 @@ Model "FlakCannon" Skin 1 "flak_t.png" AngleOffset 90 PitchOffset 90 - Scale 0.14 0.14 0.14 + Scale 0.14 0.18 0.14 Offset 0 -18.9 0 ZOffset 12 ROTATING @@ -1007,13 +1409,25 @@ Model "FlakCannon" Skin 1 "flak_t.png" AngleOffset 90 PitchOffset 90 - Scale 0.14 0.14 0.14 + Scale 0.14 0.18 0.14 Offset 0 -18.9 0 ZOffset 12 FrameIndex FPCK B 1 0 } +Model "FlakCannon" +{ + Path "models" + Model 2 "Flat_d.3d" + Skin 2 "Flakmuz.png" + PitchOffset 90 + Scale 0.08 0.08 0.08 + Offset 4.0 -20.0 -7.5 + + FrameIndex FMUZ A 0 0 +} + Model "FlakCannon" { Path "models" @@ -1133,7 +1547,6 @@ Model "ShockWave" Path "models" Model 0 "shockwavem_d.3d" Skin 0 "shockt1.png" - DONTCULLBACKFACES FrameIndex RWAV A 0 0 FrameIndex RWAV B 0 1 @@ -1171,7 +1584,7 @@ Model "WarheadLauncher" Path "models" Model 1 "whpick_d.3d" Skin 1 "jwhpick1.png" - Scale -0.2 0.2 0.2 + Scale -0.2 0.24 0.24 ZOffset 12 AngleOffset 180 ROTATING @@ -1183,7 +1596,7 @@ Model "WarheadLauncher" Path "models" Model 1 "whpick_d.3d" Skin 1 "jwhpick1.png" - Scale -0.2 0.2 0.2 + Scale -0.2 0.24 0.24 AngleOffset 180 ZOffset 12 diff --git a/models/AmmoLedBase.png b/models/AmmoLedBase.png new file mode 100644 index 0000000..d7834c8 Binary files /dev/null and b/models/AmmoLedBase.png differ diff --git a/sprites/FMUZA0.png b/models/Flakmuz.png similarity index 99% rename from sprites/FMUZA0.png rename to models/Flakmuz.png index 000e589..96b3b16 100644 Binary files a/sprites/FMUZA0.png and b/models/Flakmuz.png differ diff --git a/models/Flat_a.3d b/models/Flat_a.3d new file mode 100644 index 0000000..ea34766 Binary files /dev/null and b/models/Flat_a.3d differ diff --git a/models/Flat_d.3d b/models/Flat_d.3d new file mode 100644 index 0000000..7f3c4ff Binary files /dev/null and b/models/Flat_d.3d differ diff --git a/models/JPammo_01.png b/models/JPammo_01.png new file mode 100644 index 0000000..c0524ec Binary files /dev/null and b/models/JPammo_01.png differ diff --git a/models/JPulseGun_02.png b/models/JPulseGun_02.png new file mode 100644 index 0000000..9d57c00 Binary files /dev/null and b/models/JPulseGun_02.png differ diff --git a/models/JPulseGun_03.png b/models/JPulseGun_03.png new file mode 100644 index 0000000..fef6d09 Binary files /dev/null and b/models/JPulseGun_03.png differ diff --git a/models/JPulsePickup_01.png b/models/JPulsePickup_01.png new file mode 100644 index 0000000..ac94903 Binary files /dev/null and b/models/JPulsePickup_01.png differ diff --git a/models/MuzzyPulse.png b/models/MuzzyPulse.png new file mode 100644 index 0000000..a0e1fd9 Binary files /dev/null and b/models/MuzzyPulse.png differ diff --git a/models/PAmmo_a.3d b/models/PAmmo_a.3d new file mode 100644 index 0000000..5557b00 Binary files /dev/null and b/models/PAmmo_a.3d differ diff --git a/models/PAmmo_d.3d b/models/PAmmo_d.3d new file mode 100644 index 0000000..00b6a26 Binary files /dev/null and b/models/PAmmo_d.3d differ diff --git a/models/PBolt_a.3d b/models/PBolt_a.3d new file mode 100644 index 0000000..6a726c3 Binary files /dev/null and b/models/PBolt_a.3d differ diff --git a/models/PBolt_d.3d b/models/PBolt_d.3d new file mode 100644 index 0000000..b63b0d1 Binary files /dev/null and b/models/PBolt_d.3d differ diff --git a/models/PulseGunR_a.3d b/models/PulseGunR_a.3d new file mode 100644 index 0000000..e8df4f8 Binary files /dev/null and b/models/PulseGunR_a.3d differ diff --git a/models/PulseGunR_d.3d b/models/PulseGunR_d.3d new file mode 100644 index 0000000..a451098 Binary files /dev/null and b/models/PulseGunR_d.3d differ diff --git a/models/PulsePickup_a.3d b/models/PulsePickup_a.3d new file mode 100644 index 0000000..696210a Binary files /dev/null and b/models/PulsePickup_a.3d differ diff --git a/models/PulsePickup_d.3d b/models/PulsePickup_d.3d new file mode 100644 index 0000000..eef84d3 Binary files /dev/null and b/models/PulsePickup_d.3d differ diff --git a/models/pbolt0.png b/models/pbolt0.png new file mode 100644 index 0000000..974f8b3 Binary files /dev/null and b/models/pbolt0.png differ diff --git a/models/pbolt1.png b/models/pbolt1.png new file mode 100644 index 0000000..50fb947 Binary files /dev/null and b/models/pbolt1.png differ diff --git a/models/pbolt2.png b/models/pbolt2.png new file mode 100644 index 0000000..a95be30 Binary files /dev/null and b/models/pbolt2.png differ diff --git a/models/pbolt3.png b/models/pbolt3.png new file mode 100644 index 0000000..0815cb2 Binary files /dev/null and b/models/pbolt3.png differ diff --git a/models/pbolt4.png b/models/pbolt4.png new file mode 100644 index 0000000..7f98f83 Binary files /dev/null and b/models/pbolt4.png differ diff --git a/models/sbolt0.png b/models/sbolt0.png new file mode 100644 index 0000000..9cd63fc Binary files /dev/null and b/models/sbolt0.png differ diff --git a/models/sbolt1.png b/models/sbolt1.png new file mode 100644 index 0000000..e7f6dd6 Binary files /dev/null and b/models/sbolt1.png differ diff --git a/models/sbolt2.png b/models/sbolt2.png new file mode 100644 index 0000000..6dff186 Binary files /dev/null and b/models/sbolt2.png differ diff --git a/models/sbolt3.png b/models/sbolt3.png new file mode 100644 index 0000000..b02be44 Binary files /dev/null and b/models/sbolt3.png differ diff --git a/models/sbolt4.png b/models/sbolt4.png new file mode 100644 index 0000000..0f34cc8 Binary files /dev/null and b/models/sbolt4.png differ diff --git a/readme.txt b/readme.txt index eb550ef..c5de533 100644 --- a/readme.txt +++ b/readme.txt @@ -5,14 +5,14 @@ full UT weapon and item mod. Currently implemented: - - ASMD Shock Rifle (slot 4) - Flak Cannon (slot 8) + - ASMD Shock Rifle (slot 4) - Redeemer (slot 0) - + - GES Biorifle (slot 3) In progress: - - GES Biorifle (slot 3) + - Pulsegun (slot 5) (with beta animations) To be done: @@ -21,7 +21,6 @@ To be done: - Translocator (slot 1) - Enforcer (slot 2) - Dual Enforcers (slot 2) - - Pulsegun (slot 5) - Ripper (slot 6) - Minigun (slot 7) - Rocket Launcher (slot 9) diff --git a/sndinfo.txt b/sndinfo.txt index bda3987..d07a66d 100644 --- a/sndinfo.txt +++ b/sndinfo.txt @@ -1,7 +1,9 @@ -ut/ammo ammopick -ut/weapon weaponpk -$pitchshift ut/ammo 0 -$pitchshift ut/weapon 0 +misc/i_pkup ammopick +misc/w_pkup weaponpk +misc/spawn RespSnd2 +$pitchshift misc/i_pkup 0 +$pitchshift misc/w_pkup 0 +$pitchshift misc/spawn 0 flak/select pdown flak/load hidraul2 @@ -14,6 +16,7 @@ flak/bounce1 hit1 flak/bounce2 hit2 flak/bounce3 hit3 $random flak/bounce { flak/bounce1 flak/bounce2 flak/bounce3 } +$limit flak/bounce 64 flak/explode expl04 $pitchshift flak/select 0 $pitchshift flak/load 0 @@ -50,10 +53,27 @@ $pitchshift warhead/fire 0 ges/hit gelhit ges/select gelselec ges/fire gelshot -ges/charge bioaltrep +ges/charge bioaltrp ges/explode explg02 $pitchshift ges/hit 0 +$limit ges/hit 64 $pitchshift ges/select 0 $pitchshift ges/fire 0 $pitchshift ges/charge 0 $pitchshift ges/explode 0 +$limit ges/explode 64 + +pulse/bolt pulseblt +pulse/down pulsedwn +pulse/hit pulseexp +pulse/fire pulsefir +pulse/fly pulsefly +pulse/select pulsepck +pulse/reload pulserel +$pitchshift pulse/bolt 0 +$pitchshift pulse/down 0 +$pitchshift pulse/hit 0 +$pitchshift pulse/fire 0 +$pitchshift pulse/fly 0 +$pitchshift pulse/select 0 +$pitchshift pulse/reload 0 diff --git a/sounds/PulseBlt.wav b/sounds/PulseBlt.wav new file mode 100644 index 0000000..4d1a697 Binary files /dev/null and b/sounds/PulseBlt.wav differ diff --git a/sounds/PulseDwn.wav b/sounds/PulseDwn.wav new file mode 100644 index 0000000..da73955 Binary files /dev/null and b/sounds/PulseDwn.wav differ diff --git a/sounds/PulseExp.wav b/sounds/PulseExp.wav new file mode 100644 index 0000000..17874be Binary files /dev/null and b/sounds/PulseExp.wav differ diff --git a/sounds/PulseFir.wav b/sounds/PulseFir.wav new file mode 100644 index 0000000..66a8f0f Binary files /dev/null and b/sounds/PulseFir.wav differ diff --git a/sounds/PulseFly.wav b/sounds/PulseFly.wav new file mode 100644 index 0000000..a68a382 Binary files /dev/null and b/sounds/PulseFly.wav differ diff --git a/sounds/PulsePck.wav b/sounds/PulsePck.wav new file mode 100644 index 0000000..9168ca0 Binary files /dev/null and b/sounds/PulsePck.wav differ diff --git a/sounds/PulseRel.wav b/sounds/PulseRel.wav new file mode 100644 index 0000000..2edf602 Binary files /dev/null and b/sounds/PulseRel.wav differ diff --git a/sounds/RespSnd2.wav b/sounds/RespSnd2.wav new file mode 100644 index 0000000..276bce0 Binary files /dev/null and b/sounds/RespSnd2.wav differ diff --git a/sprites/FGLOA0.png b/sprites/FGLOA0.png index 834c7c4..6284744 100644 Binary files a/sprites/FGLOA0.png and b/sprites/FGLOA0.png differ diff --git a/sprites/FGLOB0.png b/sprites/FGLOB0.png new file mode 100644 index 0000000..8c907f2 Binary files /dev/null and b/sprites/FGLOB0.png differ diff --git a/sprites/FGLOC0.png b/sprites/FGLOC0.png new file mode 100644 index 0000000..9374d22 Binary files /dev/null and b/sprites/FGLOC0.png differ diff --git a/sprites/FGLOD0.png b/sprites/FGLOD0.png new file mode 100644 index 0000000..a642b52 Binary files /dev/null and b/sprites/FGLOD0.png differ diff --git a/sprites/FGLOE0.png b/sprites/FGLOE0.png new file mode 100644 index 0000000..ac438d5 Binary files /dev/null and b/sprites/FGLOE0.png differ diff --git a/sprites/FGLOF0.png b/sprites/FGLOF0.png new file mode 100644 index 0000000..36ddbca Binary files /dev/null and b/sprites/FGLOF0.png differ diff --git a/sprites/FGLOG0.png b/sprites/FGLOG0.png new file mode 100644 index 0000000..1e970cc Binary files /dev/null and b/sprites/FGLOG0.png differ diff --git a/sprites/FGLOH0.png b/sprites/FGLOH0.png new file mode 100644 index 0000000..cb84ca7 Binary files /dev/null and b/sprites/FGLOH0.png differ diff --git a/sprites/FGLOI0.png b/sprites/FGLOI0.png new file mode 100644 index 0000000..d844645 Binary files /dev/null and b/sprites/FGLOI0.png differ diff --git a/sprites/FGLOJ0.png b/sprites/FGLOJ0.png new file mode 100644 index 0000000..e6795a0 Binary files /dev/null and b/sprites/FGLOJ0.png differ diff --git a/sprites/FGLOK0.png b/sprites/FGLOK0.png new file mode 100644 index 0000000..b7fa21f Binary files /dev/null and b/sprites/FGLOK0.png differ diff --git a/sprites/GEX1A0.png b/sprites/GEX1A0.png new file mode 100644 index 0000000..d7346e5 Binary files /dev/null and b/sprites/GEX1A0.png differ diff --git a/sprites/GEX1B0.png b/sprites/GEX1B0.png new file mode 100644 index 0000000..2a16de8 Binary files /dev/null and b/sprites/GEX1B0.png differ diff --git a/sprites/GEX1C0.png b/sprites/GEX1C0.png new file mode 100644 index 0000000..02eb24c Binary files /dev/null and b/sprites/GEX1C0.png differ diff --git a/sprites/GEX1D0.png b/sprites/GEX1D0.png new file mode 100644 index 0000000..06950ca Binary files /dev/null and b/sprites/GEX1D0.png differ diff --git a/sprites/GEX1E0.png b/sprites/GEX1E0.png new file mode 100644 index 0000000..d9481de Binary files /dev/null and b/sprites/GEX1E0.png differ diff --git a/sprites/GEX1F0.png b/sprites/GEX1F0.png new file mode 100644 index 0000000..49d293c Binary files /dev/null and b/sprites/GEX1F0.png differ diff --git a/sprites/GEX1G0.png b/sprites/GEX1G0.png new file mode 100644 index 0000000..1956ef3 Binary files /dev/null and b/sprites/GEX1G0.png differ diff --git a/sprites/GEX1H0.png b/sprites/GEX1H0.png new file mode 100644 index 0000000..1833152 Binary files /dev/null and b/sprites/GEX1H0.png differ diff --git a/sprites/GEX1I0.png b/sprites/GEX1I0.png new file mode 100644 index 0000000..c1ca136 Binary files /dev/null and b/sprites/GEX1I0.png differ diff --git a/sprites/GEX1J0.png b/sprites/GEX1J0.png new file mode 100644 index 0000000..a3c4d1c Binary files /dev/null and b/sprites/GEX1J0.png differ diff --git a/sprites/GEX1K0.png b/sprites/GEX1K0.png new file mode 100644 index 0000000..7d687e2 Binary files /dev/null and b/sprites/GEX1K0.png differ diff --git a/sprites/PBALA0.png b/sprites/PBALA0.png new file mode 100644 index 0000000..d68834a Binary files /dev/null and b/sprites/PBALA0.png differ diff --git a/sprites/PBALB0.png b/sprites/PBALB0.png new file mode 100644 index 0000000..c8faed0 Binary files /dev/null and b/sprites/PBALB0.png differ diff --git a/sprites/PBALC0.png b/sprites/PBALC0.png new file mode 100644 index 0000000..4aa5d33 Binary files /dev/null and b/sprites/PBALC0.png differ diff --git a/sprites/PBALD0.png b/sprites/PBALD0.png new file mode 100644 index 0000000..bed118a Binary files /dev/null and b/sprites/PBALD0.png differ diff --git a/sprites/PBALE0.png b/sprites/PBALE0.png new file mode 100644 index 0000000..80a3de4 Binary files /dev/null and b/sprites/PBALE0.png differ diff --git a/sprites/PENDA0.png b/sprites/PENDA0.png new file mode 100644 index 0000000..3a7724c Binary files /dev/null and b/sprites/PENDA0.png differ diff --git a/sprites/PENDB0.png b/sprites/PENDB0.png new file mode 100644 index 0000000..c2fc4b1 Binary files /dev/null and b/sprites/PENDB0.png differ diff --git a/sprites/PENDC0.png b/sprites/PENDC0.png new file mode 100644 index 0000000..26ea78d Binary files /dev/null and b/sprites/PENDC0.png differ diff --git a/sprites/PENDD0.png b/sprites/PENDD0.png new file mode 100644 index 0000000..2de4ce5 Binary files /dev/null and b/sprites/PENDD0.png differ diff --git a/sprites/PHITA0.png b/sprites/PHITA0.png new file mode 100644 index 0000000..2f4b93c Binary files /dev/null and b/sprites/PHITA0.png differ diff --git a/sprites/PHITB0.png b/sprites/PHITB0.png new file mode 100644 index 0000000..80a1dc3 Binary files /dev/null and b/sprites/PHITB0.png differ diff --git a/sprites/PHITC0.png b/sprites/PHITC0.png new file mode 100644 index 0000000..89bbf94 Binary files /dev/null and b/sprites/PHITC0.png differ diff --git a/sprites/PHITD0.png b/sprites/PHITD0.png new file mode 100644 index 0000000..3108591 Binary files /dev/null and b/sprites/PHITD0.png differ diff --git a/textures.flak b/textures.flak index bfc9b83..a9115df 100644 --- a/textures.flak +++ b/textures.flak @@ -122,3 +122,4 @@ Sprite "FLKDG0",1,1{} Sprite "FLKDH0",1,1{} Sprite "FLKDI0",1,1{} Sprite "FLKDJ0",1,1{} +Sprite "FMUZA0",1,1{} diff --git a/textures.pulse b/textures.pulse new file mode 100644 index 0000000..1af89c0 --- /dev/null +++ b/textures.pulse @@ -0,0 +1,188 @@ +Sprite "PAMOA0",1,1{} +Sprite "PGNPA0",1,1{} +Sprite "PGNPB0",1,1{} +Sprite "PGNSA0",1,1{} +Sprite "PGNSB0",1,1{} +Sprite "PGNSC0",1,1{} +Sprite "PGNSD0",1,1{} +Sprite "PGNSE0",1,1{} +Sprite "PGNSF0",1,1{} +Sprite "PGNSG0",1,1{} +Sprite "PGNSH0",1,1{} +Sprite "PGNSI0",1,1{} +Sprite "PGNSJ0",1,1{} +Sprite "PGNSK0",1,1{} +Sprite "PGNSL0",1,1{} +Sprite "PGNSM0",1,1{} +Sprite "PGNSN0",1,1{} +Sprite "PGNSO0",1,1{} +Sprite "PGNSP0",1,1{} +Sprite "PGNSQ0",1,1{} +Sprite "PGNSR0",1,1{} +Sprite "PGNSS0",1,1{} +Sprite "PGNST0",1,1{} +Sprite "PGNSU0",1,1{} +Sprite "PGNSV0",1,1{} +Sprite "PGNSW0",1,1{} +Sprite "PGNCA0",1,1{} +Sprite "PGNCB0",1,1{} +Sprite "PGNCC0",1,1{} +Sprite "PGNCD0",1,1{} +Sprite "PGNCE0",1,1{} +Sprite "PGNCF0",1,1{} +Sprite "PGNCG0",1,1{} +Sprite "PGNCH0",1,1{} +Sprite "PGNCI0",1,1{} +Sprite "PGNCJ0",1,1{} +Sprite "PGNCK0",1,1{} +Sprite "PGNCL0",1,1{} +Sprite "PGNCM0",1,1{} +Sprite "PGNCN0",1,1{} +Sprite "PGNCO0",1,1{} +Sprite "PGNCP0",1,1{} +Sprite "PGNCQ0",1,1{} +Sprite "PGNCR0",1,1{} +Sprite "PGNCS0",1,1{} +Sprite "PGNCT0",1,1{} +Sprite "PGNCU0",1,1{} +Sprite "PGNCV0",1,1{} +Sprite "PGNCW0",1,1{} +Sprite "PGNCX0",1,1{} +Sprite "PGNCY0",1,1{} +Sprite "PGNRA0",1,1{} +Sprite "PGNRB0",1,1{} +Sprite "PGNRC0",1,1{} +Sprite "PGNRD0",1,1{} +Sprite "PGNRE0",1,1{} +Sprite "PGNRF0",1,1{} +Sprite "PGNRG0",1,1{} +Sprite "PGNRH0",1,1{} +Sprite "PGNRI0",1,1{} +Sprite "PGNRJ0",1,1{} +Sprite "PGNRK0",1,1{} +Sprite "PGNRL0",1,1{} +Sprite "PGNRM0",1,1{} +Sprite "PGNRN0",1,1{} +Sprite "PGNRO0",1,1{} +Sprite "PGNRP0",1,1{} +Sprite "PGNRQ0",1,1{} +Sprite "PGNRR0",1,1{} +Sprite "PGNRS0",1,1{} +Sprite "PGNRT0",1,1{} +Sprite "PGNRU0",1,1{} +Sprite "PGNRV0",1,1{} +Sprite "PGNRW0",1,1{} +Sprite "PGNRX0",1,1{} +Sprite "PGNRY0",1,1{} +Sprite "PGNRZ0",1,1{} +Sprite "PGR2A0",1,1{} +Sprite "PGR2B0",1,1{} +Sprite "PGR2C0",1,1{} +Sprite "PGR2D0",1,1{} +Sprite "PGR2E0",1,1{} +Sprite "PGR2F0",1,1{} +Sprite "PGR2G0",1,1{} +Sprite "PGR2H0",1,1{} +Sprite "PGR2I0",1,1{} +Sprite "PGR2J0",1,1{} +Sprite "PGR2K0",1,1{} +Sprite "PGR2L0",1,1{} +Sprite "PGR2M0",1,1{} +Sprite "PGR2N0",1,1{} +Sprite "PGR2O0",1,1{} +Sprite "PGR2P0",1,1{} +Sprite "PGR2Q0",1,1{} +Sprite "PGR2R0",1,1{} +Sprite "PGR2S0",1,1{} +Sprite "PGR2T0",1,1{} +Sprite "PGR2U0",1,1{} +Sprite "PGR2V0",1,1{} +Sprite "PGR2W0",1,1{} +Sprite "PGR2X0",1,1{} +Sprite "PGBSA0",1,1{} +Sprite "PGBSB0",1,1{} +Sprite "PGBSC0",1,1{} +Sprite "PGBSD0",1,1{} +Sprite "PGBSE0",1,1{} +Sprite "PGBLA0",1,1{} +Sprite "PGBLB0",1,1{} +Sprite "PGBLC0",1,1{} +Sprite "PGBLD0",1,1{} +Sprite "PGBLE0",1,1{} +Sprite "PGBLF0",1,1{} +Sprite "PGBLG0",1,1{} +Sprite "PGBLH0",1,1{} +Sprite "PGBLI0",1,1{} +Sprite "PGBLJ0",1,1{} +Sprite "PGBEA0",1,1{} +Sprite "PGBEB0",1,1{} +Sprite "PGBEC0",1,1{} +Sprite "PGBED0",1,1{} +Sprite "PGBEE0",1,1{} +Sprite "PGNIA0",1,1{} +Sprite "PGNIB0",1,1{} +Sprite "PGNIC0",1,1{} +Sprite "PGNID0",1,1{} +Sprite "PGNIE0",1,1{} +Sprite "PGNIF0",1,1{} +Sprite "PGNIG0",1,1{} +Sprite "PGNIH0",1,1{} +Sprite "PGNII0",1,1{} +Sprite "PGNIJ0",1,1{} +Sprite "PGNIK0",1,1{} +Sprite "PGNIL0",1,1{} +Sprite "PGNIM0",1,1{} +Sprite "PGNIN0",1,1{} +Sprite "PGNIO0",1,1{} +Sprite "PGNIP0",1,1{} +Sprite "PGNIQ0",1,1{} +Sprite "PGNIR0",1,1{} +Sprite "PGNIS0",1,1{} +Sprite "PGNIT0",1,1{} +Sprite "PGNIU0",1,1{} +Sprite "PGNIV0",1,1{} +Sprite "PGNIW0",1,1{} +Sprite "PGNIX0",1,1{} +Sprite "PGNIY0",1,1{} +Sprite "PGNIZ0",1,1{} +Sprite "PGNFA0",1,1{} +Sprite "PGNFB0",1,1{} +Sprite "PGNFC0",1,1{} +Sprite "PGNFD0",1,1{} +Sprite "PGNFE0",1,1{} +Sprite "PGNFF0",1,1{} +Sprite "PGNFG0",1,1{} +Sprite "PGNFH0",1,1{} +Sprite "PGNFI0",1,1{} +Sprite "PGNFJ0",1,1{} +Sprite "PGNFK0",1,1{} +Sprite "PGNFL0",1,1{} +Sprite "PGNFM0",1,1{} +Sprite "PGNFN0",1,1{} +Sprite "PGNFO0",1,1{} +Sprite "PGNFP0",1,1{} +Sprite "PGNFQ0",1,1{} +Sprite "PGNFR0",1,1{} +Sprite "PGNFS0",1,1{} +Sprite "PGNFT0",1,1{} +Sprite "PGNFU0",1,1{} +Sprite "PGNFV0",1,1{} +Sprite "PGNFW0",1,1{} +Sprite "PGNFX0",1,1{} +Sprite "PGNFY0",1,1{} +Sprite "PGNFZ0",1,1{} +Sprite "PGF2A0",1,1{} +Sprite "PGF2B0",1,1{} +Sprite "PGF2C0",1,1{} +Sprite "PGF2D0",1,1{} +Sprite "PGF2E0",1,1{} +Sprite "PGF2F0",1,1{} +Sprite "PGF2G0",1,1{} +Sprite "PGF2H0",1,1{} +Sprite "PGF2I0",1,1{} +Sprite "PGF2J0",1,1{} +Sprite "PGF2K0",1,1{} +Sprite "PGF2L0",1,1{} +Sprite "PGF2M0",1,1{} +Sprite "PGF2N0",1,1{} +Sprite "PMUZA0",1,1{} diff --git a/zscript.txt b/zscript.txt index 17424cb..a064997 100644 --- a/zscript.txt +++ b/zscript.txt @@ -5,5 +5,6 @@ version "3.3" #include "zscript/utcommon.zsc" #include "zscript/biorifle.zsc" #include "zscript/shockrifle.zsc" +#include "zscript/pulsegun.zsc" #include "zscript/flakcannon.zsc" #include "zscript/warheadlauncher.zsc" diff --git a/zscript/biorifle.zsc b/zscript/biorifle.zsc index 0eca8fd..3eec2e8 100644 --- a/zscript/biorifle.zsc +++ b/zscript/biorifle.zsc @@ -4,7 +4,6 @@ Class BioAmmo : Ammo { Tag "Biosludge Ammo"; Inventory.PickupMessage "You picked up the Biosludge Ammo."; - Inventory.PickupSound "ut/ammo"; Inventory.Amount 25; Inventory.MaxAmount 100; Ammo.BackpackAmount 50; @@ -21,10 +20,81 @@ Class BioAmmo : Ammo Class BioHitbox : Actor { + Default + { + Radius 2; + Height 2; + +SHOOTABLE; + +NOGRAVITY; + +NOCLIP; + +DONTSPLASH; + +NOBLOOD; + } + override int DamageMobj( Actor inflictor, Actor source, int damage, Name mod, int flags, double angle ) + { + if ( inflictor == target ) return 0; + if ( target && !target.InStateSequence(target.CurState,target.ResolveState("XDeath")) ) + { + target.bAMBUSH = true; + target.ExplodeMissile(null,inflictor); + } + return 0; + } + override void Tick() + { + Super.Tick(); + if ( !target ) + { + Destroy(); + return; + } + SetOrigin(target.pos-(0,0,height*0.5),true); + } } Class BioLight : DynamicLight { + Default + { + DynamicLight.Type "Point"; + Args 64,255,48,8; + } + override void Tick() + { + Super.Tick(); + if ( !target ) + { + Destroy(); + return; + } + args[LIGHT_INTENSITY] = 8*target.Scale.x; + } +} + +Class BioXLight : DynamicLight +{ + + double lifetime; + Default + { + DynamicLight.Type "Point"; + Args 64,255,48,30; + } + override void PostBeginPlay() + { + Super.PostBeginPlay(); + lifetime = 1.0; + } + override void Tick() + { + Super.Tick(); + if ( globalfreeze || level.frozen ) return; + args[LIGHT_RED] = 64*lifetime; + args[LIGHT_GREEN] = 255*lifetime; + args[LIGHT_BLUE] = 48*lifetime; + lifetime -= 0.05; + if ( lifetime <= 0 ) Destroy(); + } } Class BioGel : Actor @@ -41,35 +111,71 @@ Class BioGel : Actor int deadtimer; Line atline; int atside; + int rollvel, pitchvel, yawvel; override void PostBeginPlay() { Super.PostBeginPlay(); vel.z += 6; deadtimer = -1; + l = Spawn("BioLight",pos); + l.target = self; + b = Spawn("BioHitbox",pos); + b.target = self; + rollvel = FRandom[GES](10,30)*RandomPick[GES](-1,1); + pitchvel = FRandom[GES](10,30)*RandomPick[GES](-1,1); + yawvel = FRandom[GES](10,30)*RandomPick[GES](-1,1); } - action void A_SetToSlope( double dang, bool ceil = false ) + override int SpecialMissileHit( Actor victim ) { - vector3 fnormal; - if ( ceil ) fnormal = invoker.CurSector.floorplane.Normal; - else fnormal = invoker.CurSector.ceilingplane.Normal; - vector2 fnormalp1 = ((fnormal.x != 0) || (fnormal.y != 0))?(fnormal.x,fnormal.y).Unit():(0,0); - vector2 fnormalp2 = ((fnormal.x,fnormal.y).Length(),fnormal.z); - double fang = atan2(fnormalp1.y,fnormalp1.x); // floor angle (not pitch!) - double fpitch = atan2(fnormalp2.x,fnormalp2.y); // floor pitch - double ddiff1 = cos(fang-(dang-90)); - double ddiff2 = cos(fang-dang); - invoker.pitch = -fpitch*ddiff2; - invoker.roll = fpitch*ddiff1; - invoker.angle = dang; + if ( victim == b ) return 1; + if ( (victim is 'BioHitbox') && ((victim.target == master) || (victim.target.master == master)) ) return 1; + return -1; + } + override void Tick() + { + Super.Tick(); + if ( globalfreeze || level.frozen ) return; + if ( !bNOGRAVITY ) + { + A_SetRoll(roll+rollvel,SPF_INTERPOLATE); + A_SetPitch(pitch+pitchvel,SPF_INTERPOLATE); + A_SetPitch(pitch+yawvel,SPF_INTERPOLATE); + } + if ( !InStateSequence(CurState,FindState("XDeath")) && ((!bNOGRAVITY && !Random[GES](0,2)) || !Random[GES](0,10)) ) + { + int numpt = Min(20,Scale.x*2)+Random[GES](-1,1); + for ( int i=0; i= pos.z-4*Scale.x)) ) deadtimer = 0; + } + if ( deadtimer-- <= 0 ) + { + deadtimer = -1; + SetStateLabel("XDeath"); + } } // align self to what surface was hit, currently does not support 3d floors + slopes properly virtual void AlignSelf() { - Vector3 normal; - FLineTraceData d; A_NoGravity(); - A_PlaySound("ges/hit"); + A_Stop(); + if ( bAMBUSH ) + { + SetStateLabel("XDeath"); + return; + } + Vector3 normal = (0,0,0); + FLineTraceData d; A_SetSize(0.1,0); if ( BlockingLine ) { @@ -84,7 +190,7 @@ Class BioGel : Actor angle = atan2(normal.y,normal.x); pitch = 0; roll = 0; - LineTrace(angle+180,8,0,data:d); + LineTrace(angle+180,172,0,TRF_THRUACTORS,data:d); SetOrigin(d.HitLocation+normal*0.5,false); hittype = HIT_WALL; } @@ -108,22 +214,55 @@ Class BioGel : Actor hittype = HIT_CEILING; else hittype = HIT_FLOOR; } - else SetStateLabel("Crash"); + else + { + SetStateLabel("XDeath"); + return; + } + A_PlaySound("ges/hit"); + A_SprayDecal("BioSplat",-172); + int numpt = Min(100,Scale.x*10)+Random[GES](-5,5); + for ( int i=0; i= 5.1 ) return; + if ( weap.Ammo1.Amount <= 0 ) return; + if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return; + invoker.charge = min(5.1,invoker.charge+0.5); + } Default { Tag "GES Bio Rifle"; Inventory.PickupMessage "You got the GES BioRifle."; + Weapon.UpSound "ges/select"; Weapon.SlotNumber 3; Weapon.AmmoType "BioAmmo"; Weapon.AmmoUse 1; @@ -211,16 +423,74 @@ Class BioRifle : UTWeapon Ready: BIOS ABCDEFGHIJKLMNOPQRSTUV 1; Idle: - BIOI A 1 A_WeaponReady(); + BIOI A 1 + { + A_CheckReload(); + A_WeaponReady(); + } Goto Idle; Fire: - BIOF ABCDEFGHI 1; + BIOF A 1 A_BioFire(); + BIOF BCDEFGHI 1; Goto Idle; AltFire: - BIOC ABCDEFGHIJKLMNOPQRSTUVWXYZ 1; - BIC2 ABCDE 1; - BIOM A 1; + BIOC A 4 A_BeginCharge(); + BIOC B 5 A_ChargeUp(); + BIOC CD 5; + BIOC E 0 A_Refire("AltFire2"); + Goto AltRelease; + AltFire2: + BIOC E 5 A_ChargeUp(); + BIOC FG 5; + BIOC H 0 A_Refire("AltFire3"); + Goto AltRelease; + AltFire3: + BIOC H 5 A_ChargeUp(); + BIOC IJ 5; + BIOC K 0 A_Refire("AltFire4"); + Goto AltRelease; + AltFire4: + BIOC K 5 A_ChargeUp(); + BIOC LM 5; + BIOC N 0 A_Refire("AltFire5"); + Goto AltRelease; + AltFire5: + BIOC N 5 A_ChargeUp(); + BIOC OP 5; + BIOC Q 0 A_Refire("AltFire6"); + Goto AltRelease; + AltFire6: + BIOC Q 5 A_ChargeUp(); + BIOC RS 5; + BIOC T 0 A_Refire("AltFire7"); + Goto AltRelease; + AltFire7: + BIOC T 5 A_ChargeUp(); + BIOC UV 5; + BIOC W 0 A_Refire("AltFire8"); + Goto AltRelease; + AltFire8: + BIOC W 5 A_ChargeUp(); + BIOC XY 5; + BIOC Z 0 A_Refire("AltFire9"); + Goto AltRelease; + AltFire9: + BIOC Z 5 A_ChargeUp(); + BIC2 AB 5; + BIC2 C 0 A_Refire("AltFire10"); + Goto AltRelease; + AltFire10: + BIC2 C 5 A_ChargeUp(); + BIC2 DE 5; + BIOM A 0 A_Refire("AltHeld"); + Goto AltRelease; + AltHeld: + BIOM A 5 { invoker.charge = min(5.1,invoker.charge+0.1); } + BIOM A 0 A_Refire("AltHeld"); + AltRelease: BIOE A 1; + BIOF A 2 A_BioFire(true); + BIOF BCDEFGHI 2; Goto Idle; Select: BIOS A 1 A_Raise(int.max); diff --git a/zscript/flakcannon.zsc b/zscript/flakcannon.zsc index 915ef14..1d0afdf 100644 --- a/zscript/flakcannon.zsc +++ b/zscript/flakcannon.zsc @@ -4,7 +4,6 @@ Class FlakAmmo : Ammo { Tag "Flak Shells"; Inventory.PickupMessage "You picked up 10 Flak Shells."; - Inventory.PickupSound "ut/ammo"; Inventory.Amount 10; Inventory.MaxAmount 50; Ammo.BackpackAmount 50; @@ -41,7 +40,7 @@ Class ChunkLight : DynamicLight Default { DynamicLight.Type "Point"; - Args 255,224,8; + Args 255,224,128,8; } override void PostBeginPlay() { @@ -55,6 +54,7 @@ Class ChunkLight : DynamicLight Destroy(); return; } + if ( globalfreeze || level.frozen ) return; args[LIGHT_RED] = 255*target.alpha; args[LIGHT_GREEN] = 224*target.alpha; args[LIGHT_BLUE] = 128*target.alpha; @@ -84,6 +84,7 @@ Class ChunkTrail : Actor override void Tick() { Super.Tick(); + if ( globalfreeze || level.frozen ) return; A_SpawnParticle("FFFF00",SPF_FULLBRIGHT,1,8,startalphaf:alpha); A_SpawnParticle("E0A000",SPF_FULLBRIGHT,1,16,startalphaf:alpha*0.6); A_SpawnParticle("804000",SPF_FULLBRIGHT,1,32,startalphaf:alpha*0.3); @@ -111,7 +112,7 @@ Class FlakChunk : Actor { Actor lasthit; ChunkTrail trail; - double rollvel, pitchvel; + double rollvel, pitchvel, yawvel; double lifetime, lifespeed; int lifetics; Default @@ -119,7 +120,7 @@ Class FlakChunk : Actor Obituary "%o was ripped to shreds by %k's Flak Cannon."; Radius 4; Height 4; - Speed 80; + Speed 50; DamageFunction Random[Flak](12,18); DamageType 'Shredded'; BounceType "Doom"; @@ -142,12 +143,15 @@ Class FlakChunk : Actor trail.target = self; trail.speed = 0.5; rollvel = FRandom[Flak](50,100)*RandomPick[Flak](-1,1); + pitchvel = FRandom[Flak](50,100)*RandomPick[Flak](-1,1); + yawvel = FRandom[Flak](50,100)*RandomPick[Flak](-1,1); scale *= Frandom[Flak](0.8,1.2); SetState(ResolveState("Spawn")+Random[Flak](0,3)); } override void Tick() { Super.Tick(); + if ( globalfreeze || level.frozen ) return; lifetics++; if ( lifetics > 3 ) { @@ -160,15 +164,24 @@ Class FlakChunk : Actor if ( InStateSequence(CurState,FindState("Death")) ) return; A_SetRoll(roll+rollvel,SPF_INTERPOLATE); A_SetPitch(pitch+pitchvel,SPF_INTERPOLATE); + A_SetAngle(angle+pitchvel,SPF_INTERPOLATE); } action void A_HandleBounce() { A_SprayDecal("WallCrack",-8); + int numpt = Random[Flak](8,12); + for ( int i=0; i 2 ) Destroy(); } } Class FlakCannon : UTWeapon { - action void A_Selecting() - { - A_PlaySound("flak/select",CHAN_WEAPON); - } action void A_Loading( bool first = false ) { if ( first ) A_PlaySound("flak/load",CHAN_WEAPON); @@ -439,13 +420,15 @@ Class FlakCannon : UTWeapon if ( weap.Ammo1.Amount <= 0 ) return; if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return; A_PlaySound("flak/fire",CHAN_WEAPON); + A_AlertMonsters(); A_QuakeEx(1,1,1,3,0,64,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.05); Vector3 x, y, z; double a, s; [x, y, z] = Matrix4.GetAxes(pitch,angle,roll); Vector3 origin = pos+(0,0,player.viewheight)+10.0*x+2.0*y-3.0*z; - let m = Spawn("FlakMuzzle",pos+(0,0,player.viewheight)+20.0*x+5.0*y-3.0*z); - m.target = self; + A_Overlay(-2,"MuzzleFlash"); + A_OverlayFlags(-2,PSPF_RENDERSTYLE|PSPF_FORCESTYLE,true); + A_OverlayRenderstyle(-2,STYLE_Add); [x, y, z] = Matrix4.GetAxes(BulletSlope(),angle,roll); Actor p; for ( int i=0; i<8; i++ ) @@ -459,6 +442,12 @@ Class FlakCannon : UTWeapon p.vel = (cos(p.angle)*cos(p.pitch),sin(p.angle)*cos(p.pitch),-sin(p.pitch))*p.speed; p.target = self; } + int numpt = Random[Flak](20,30); + for ( int i=0; i 0) ) return A_Jump(255,"Reload"); + A_WeaponReady(WRF_ALLOWRELOAD); + return A_JumpIf(!Random[Pulse](0,300),1); + } + Wait; + PGNI ABCDEFGHIJKLMNOPQRSTUVWXYZ 1 + { + A_CheckReload(); + A_WeaponReady(WRF_ALLOWRELOAD); + } + Goto Idle; + Fire: + PGNI A 0 A_PlaySound("pulse/fire",CHAN_WEAPON,1.0,true); + Hold: + PGNF A 1 A_PulseFire(); + PGNF B 1; + PGNF Y 0 A_PulseRefire(1); + Goto Release; + PGNF C 1 A_PulseFire(); + PGNF D 1; + PGNF Y 0 A_PulseRefire(1); + Goto Release; + PGNF E 1 A_PulseFire(); + PGNF F 1; + PGNF Y 0 A_PulseRefire(1); + Goto Release; + PGNF G 1 A_PulseFire(); + PGNF H 1; + PGNF Y 0 A_PulseRefire(1); + Goto Release; + PGNF I 1 A_PulseFire(); + PGNF J 1; + PGNF Y 0 A_PulseRefire(1); + Goto Release; + PGNF K 1 A_PulseFire(); + PGNF L 1; + PGNF Y 0 A_PulseRefire(1); + Goto Release; + PGNF M 1 A_PulseFire(); + PGNF N 1; + PGNF Y 0 A_PulseRefire(1); + Goto Release; + PGNF O 1 A_PulseFire(); + PGNF P 1; + PGNF Y 0 A_PulseRefire(1); + Goto Release; + PGNF Q 1 A_PulseFire(); + PGNF R 1; + PGNF Y 0 A_PulseRefire(1); + Goto Release; + PGNF S 1 A_PulseFire(); + PGNF T 1; + PGNF Y 0 A_PulseRefire(1); + Goto Release; + PGNF U 1 A_PulseFire(); + PGNF V 1; + PGNF Y 0 A_PulseRefire(1); + Goto Release; + PGNF W 1 A_PulseFire(); + PGNF X 1; + PGNF Y 0 A_PulseRefire(1); + Goto Release; + PGNF Y 1 A_PulseFire(); + PGNF Z 1; + PGF2 A 0 A_PulseRefire(1); + Goto Release; + PGF2 A 1 A_PulseFire(); + PGF2 B 1; + PGF2 C 0 A_PulseRefire(1); + Goto Release; + PGF2 C 1 A_PulseFire(); + PGF2 D 1; + PGF2 E 0 A_PulseRefire(1); + Goto Release; + PGF2 E 1 A_PulseFire(); + PGF2 F 1; + PGF2 G 0 A_PulseRefire(1); + Goto Release; + PGF2 G 1 A_PulseFire(); + PGF2 H 1; + PGF2 I 0 A_PulseRefire(1); + Goto Release; + PGF2 I 1 A_PulseFire(); + PGF2 J 1; + PGF2 K 0 A_PulseRefire(1); + Goto Release; + PGF2 K 1 A_PulseFire(); + PGF2 L 1; + PGF2 M 0 A_PulseRefire(1); + Goto Release; + PGF2 M 1 A_PulseFire(); + PGF2 N 1; + PGNF A 0 A_PulseRefire("Hold"); + Release: + PGNC A 0 A_PlaySound("pulse/down",CHAN_WEAPON); + PGNC ABCDEFGHIJKLMNOPQRSTUVWXY 1; + PGNI A 1; + Goto Idle; + AltFire: + PGBS ABCDE 1; + PGBL A 0 A_StartBeam(); + AltHold: + PGBL A 1 A_DrainAmmo(); + PGBL B 1; + PGBL C 0 A_PulseRefire(1); + Goto AltRelease; + PGBL C 1 A_DrainAmmo(); + PGBL D 1; + PGBL E 0 A_PulseRefire(1); + Goto AltRelease; + PGBL E 1 A_DrainAmmo(); + PGBL F 1; + PGBL G 0 A_PulseRefire(1); + Goto AltRelease; + PGBL G 1 A_DrainAmmo(); + PGBL H 1; + PGBL I 0 A_PulseRefire(1); + Goto AltRelease; + PGBL I 1 A_DrainAmmo(); + PGBL J 1; + PGBL A 0 A_PulseRefire("AltHold"); + AltRelease: + PGBE A 0 A_StopBeam(); + PGBE ABCDE 1; + Goto Idle; + Reload: + PGNI A 1 A_JumpIf(invoker.clipcount >= 50,"Idle"); + PGNR A 1 A_Reloading(); + PGNR BCDEFGHIJKLMNOPQRSTUVWXYZ 1; + PGR2 ABCDEFGHIJKLMNOPQRSTUVWX 1; + Goto Idle; + Deselect: + PGNS WVUTSRQPONMLKJIHGFEDCBA 1; + PGNS A 1 A_Lower(int.max); + Wait; + Select: + PGNS A 1 A_Raise(int.max); + Wait; + MuzzleFlash: + PMUZ A 1 Bright; + Stop; + } +} diff --git a/zscript/shockrifle.zsc b/zscript/shockrifle.zsc index ef7cb4f..9ecea05 100644 --- a/zscript/shockrifle.zsc +++ b/zscript/shockrifle.zsc @@ -4,7 +4,6 @@ Class ShockAmmo : Ammo { Tag "ShockCore"; Inventory.PickupMessage "You picked up a Shock Core."; - Inventory.PickupSound "ut/ammo"; Inventory.Amount 10; Inventory.MaxAmount 50; Ammo.BackpackAmount 50; @@ -56,6 +55,7 @@ Class ShockRifleWave : Actor override void Tick() { Super.Tick(); + if ( globalfreeze || level.frozen ) return; alpha -= 1/50.; } States @@ -83,6 +83,7 @@ Class ShockBeamRing : Actor override void Tick() { Super.Tick(); + if ( globalfreeze || level.frozen ) return; alpha -= 1./ReactionTime; } States @@ -139,6 +140,7 @@ Class ShockBeam : Actor override void Tick() { Super.Tick(); + if ( globalfreeze || level.frozen ) return; if ( !moving ) return; // step trace tracedir = (cos(angle)*cos(pitch),sin(angle)*cos(pitch),-sin(pitch)); @@ -147,12 +149,13 @@ Class ShockBeam : Actor // spawn particles for ( int i=0; i= 10000.0 ) { @@ -192,6 +195,18 @@ Class ShockBeam : Actor r.angle = atan2(t.Results.HitVector.y,t.Results.HitVector.x); r.pitch = asin(-t.Results.HitVector.z); A_PlaySound("shock/blast",CHAN_WEAPON,attenuation:0.5); + int numpt = Random[ASMD](200,300); + for ( int i=0; i 0 ) { Vector3 dir = vel.unit(); @@ -251,6 +259,7 @@ Class WarShell : Actor A_SprayDecal("BigBlast"); A_QuakeEx(8,8,8,20,0,300,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.35); A_PlaySound("shock/hit",CHAN_VOICE,attenuation:0.5); + A_AlertMonsters(); A_SetRenderStyle(1.0,STYLE_Add); Spawn("WarheadExplodLight",pos); let s = Spawn("ShockWave",pos); @@ -264,6 +273,7 @@ Class WarShell : Actor A_SprayDecal("BigBlast"); A_QuakeEx(8,8,8,20,0,300,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.35); A_PlaySound("shock/hit",CHAN_VOICE,attenuation:0.5); + A_AlertMonsters(); A_SetRenderStyle(1.0,STYLE_Add); Spawn("WarheadExplodLight",pos); } @@ -299,6 +309,7 @@ Class GuidedWarShell : WarShell override void Tick() { Actor.Tick(); + if ( globalfreeze || level.frozen ) return; if ( !bMISSILE ) return; if ( !target || !target.player || (target.Health <= 0) ) { @@ -475,10 +486,6 @@ Class RedeemerHUDHandler : EventHandler Class WarheadLauncher : UTWeapon { Actor guided; - action void A_Selecting() - { - A_PlaySound("warhead/select",CHAN_WEAPON); - } action void A_WarheadFire() { Weapon weap = Weapon(invoker); @@ -486,6 +493,7 @@ Class WarheadLauncher : UTWeapon if ( weap.Ammo1.Amount <= 0 ) return; if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return; A_PlaySound("warhead/fire",CHAN_WEAPON); + A_AlertMonsters(); A_QuakeEx(6,6,6,20,0,100,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.2); Vector3 x, y, z; double a, s; @@ -505,6 +513,7 @@ Class WarheadLauncher : UTWeapon if ( weap.Ammo1.Amount <= 0 ) return; if ( !weap.DepleteAmmo(weap.bAltFire,true,1) ) return; A_PlaySound("warhead/fire",CHAN_WEAPON); + A_AlertMonsters(); A_QuakeEx(6,6,6,20,0,100,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.2); Vector3 x, y, z; double a, s; @@ -524,6 +533,7 @@ Class WarheadLauncher : UTWeapon { Tag "Redeemer"; Inventory.PickupMessage "You got the Redeemer."; + Weapon.UpSound "warhead/select"; Weapon.SlotNumber 0; Weapon.AmmoType "WarheadAmmo"; Weapon.AmmoUse 1; @@ -539,8 +549,7 @@ Class WarheadLauncher : UTWeapon RDMP B -1; Stop; Ready: - WARS A 1 A_Selecting(); - WARS BCDEFGHIJKLMNO 1; + WARS ABCDEFGHIJKLMNO 1; Idle: WARI A 1 {