diff --git a/README.md b/README.md index 1d7c1f96d..e0c620a0a 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,8 @@ invasion brought upon by "those big stinkin' idiots at the UAC". Additional features: - Programmable colour tags: Located around various parts of your body, allows - quick and easy differentiation between multiple units. + quick and easy differentiation between multiple units (not available due to + engine limitations™, so they're always green). - Lucky Collar: A little something that your creator gives to all of her creations. Reduces incoming damage by 75% when you're below 10% health. - User Menu: With the press of a button, open a dedicated menu to see all your diff --git a/brightmaps/Fullbright.png b/brightmaps/Fullbright.png new file mode 100644 index 000000000..04425e3ad Binary files /dev/null and b/brightmaps/Fullbright.png differ diff --git a/gldefs.demolitionist b/gldefs.demolitionist new file mode 100644 index 000000000..e45b4ee2a --- /dev/null +++ b/gldefs.demolitionist @@ -0,0 +1,56 @@ +Brightmap Texture "models/DemoFace_Blank.png" +{ + Map "brightmaps/fullbright.png" +} +Brightmap Texture "models/DemoFace_Blink.png" +{ + Map "brightmaps/fullbright.png" +} +Brightmap Texture "models/DemoFace_Booty.png" +{ + Map "brightmaps/fullbright.png" +} +Brightmap Texture "models/DemoFace_Dead.png" +{ + Map "brightmaps/fullbright.png" +} +Brightmap Texture "models/DemoFace_Default.png" +{ + Map "brightmaps/fullbright.png" +} +Brightmap Texture "models/DemoFace_Dizzy.png" +{ + Map "brightmaps/fullbright.png" +} +Brightmap Texture "models/DemoFace_Evil.png" +{ + Map "brightmaps/fullbright.png" +} +Brightmap Texture "models/DemoFace_Grin.png" +{ + Map "brightmaps/fullbright.png" +} +Brightmap Texture "models/DemoFace_Hurt.png" +{ + Map "brightmaps/fullbright.png" +} +Brightmap Texture "models/DemoFace_HurtLeft.png" +{ + Map "brightmaps/fullbright.png" +} +Brightmap Texture "models/DemoFace_HurtRight.png" +{ + Map "brightmaps/fullbright.png" +} +Brightmap Texture "models/DemoFace_Ouch.png" +{ + Map "brightmaps/fullbright.png" +} +Brightmap Texture "models/DemoFace_Wink.png" +{ + Map "brightmaps/fullbright.png" +} +Brightmap Texture "models/DemoTags.png" +{ + Map "brightmaps/fullbright.png" +} diff --git a/keyconf.txt b/keyconf.txt new file mode 100644 index 000000000..18d0a9f83 --- /dev/null +++ b/keyconf.txt @@ -0,0 +1,7 @@ +addkeysection "$SWWM_KEYS" SWWM_GZ +addmenukey "$SWWM_GESTURE1" gesture1 +addmenukey "$SWWM_GESTURE2" gesture2 +addmenukey "$SWWM_GESTURE3" gesture3 +alias gesture1 "netevent swwmgesture 0" +alias gesture2 "netevent swwmgesture 1" +alias gesture3 "netevent swwmgesture 2" \ No newline at end of file diff --git a/language.txt b/language.txt index 1abd64625..3ea280db2 100644 --- a/language.txt +++ b/language.txt @@ -1,3 +1,155 @@ [default] +/* MENU STUFF */ +// keybinds +SWWM_KEYS = "SWWM GZ Bindings"; +SWWM_GESTURE1 = "Point Down"; +SWWM_GESTURE2 = "Thumbs Up"; +SWWM_GESTURE3 = "Victory"; +// mod menu +// knowledge base + +/* GAME STUFF */ +// tags +T_PUSHER = "\"Pusher\" Microfusion Rotary Hammer"; +T_DEEPIMPACT = "\"Deep Impact\" Airblaster"; +T_EXPLODIUM = "Explodium Gun"; +T_SPREADGUN = "\"Rhino Stopper\" Spreadgun"; +T_WALLBUSTER = "\"Wallbuster\" Heavy Perforator Shotgun"; +T_EVISCERATOR = "\"Eviscerator\" High Load Flechette Cannon"; +T_HELLBLAZER = "\"Hellblazer\" Rocket Launcher"; +T_SPARKSTER = "Model S-5 Biospark Carbine"; +T_SILVERBULLET = "Silver Bullet JET"; +T_CANDYGUN = "\"Taste the Sweetness\" Candy Gun"; +T_YNYKRON = "Ynykron Artifact"; +T_REDSHELL = "Shells"; +T_GREENSHELL = "Slugs"; +T_WHITESHELL = "Dragon's Breath rounds"; +T_BLUESHELL = "Kinylum Saltshot rounds"; +T_BLACKSHELL = "Napalm rounds"; +T_PURPLESHELL = "Lead ball rounds"; +T_GOLDSHELL = "Golden shells"; +T_EVISHELLS = "Eviscerator shells"; +T_HELLMISSILES = "Hellblazer Missiles"; +T_HELLCLUSTERS = "Hellblazer Crackshots"; +T_HELLBURNINATORS = "Hellblazer Ravagers"; +T_HELLNUKES = "Hellblazer Warheads"; +T_SPARKUNIT = "Sparkster charges"; +T_XSBBULLET = "1.150 XSB bullets"; +T_CANDYMAG = "Candy bullets"; +T_YNYKRONAMMO = "Exotic crystals"; +// obituaries +// misc + +/* SUBTITLES */ +// new weapon received +SWWM_SUBS_GETWEAPON1 = "Not bad... Not bad at all..."; +SWWM_SUBS_GETWEAPON2 = "Good find..."; +SWWM_SUBS_GETWEAPON3 = "Mine now..."; +SWWM_SUBS_GETWEAPON4 = "Nice..."; +SWWM_SUBS_GETWEAPON5 = "Bingo..."; +SWWM_SUBS_GETWEAPON6 = "Hell yeah..."; +SWWM_SUBS_GETWEAPON7 = "Excellent..."; +SWWM_SUBS_GETWEAPON8 = "Yes..."; +SWWM_SUBS_GETWEAPON9 = "There we go..."; +SWWM_SUBS_GETWEAPON10 = "Perfect..."; +SWWM_SUBS_GETWEAPON11 = "I like it..."; +SWWM_SUBS_GETWEAPON12 = "That looks nice..."; +SWWM_SUBS_GETWEAPON13 = "It's probably worth a fortune..."; +// locked door +SWWM_SUBS_LOCKED1 = "Don't have the key."; +SWWM_SUBS_LOCKED2 = "Only opens with a key."; +SWWM_SUBS_LOCKED3 = "Would need the key."; +SWWM_SUBS_LOCKED4 = "Locked tight."; +// gacha failure in store +SWWM_SUBS_PUZZFAIL1 = "Damn."; +SWWM_SUBS_PUZZFAIL2 = "Damn it."; +SWWM_SUBS_PUZZFAIL3 = "No good."; +SWWM_SUBS_PUZZFAIL4 = "Nope."; +SWWM_SUBS_PUZZFAIL5 = "Uh uh."; +SWWM_SUBS_PUZZFAIL6 = "Hmmm."; +// gacha success in store +SWWM_SUBS_PUZZSUCC1 = "Nice."; +SWWM_SUBS_PUZZSUCC2 = "That's it."; +SWWM_SUBS_PUZZSUCC3 = "Got it."; +SWWM_SUBS_PUZZSUCC4 = "Yes."; +SWWM_SUBS_PUZZSUCC5 = "Sweet."; +// first enemy encounter (20 seconds cooldown since all enemies dead) +SWWM_SUBS_FIGHTSTART1 = "Here we go again."; +SWWM_SUBS_FIGHTSTART2 = "Let's get this show on the road."; +SWWM_SUBS_FIGHTSTART3 = "Time to die."; +SWWM_SUBS_FIGHTSTART4 = "Bring it on."; +SWWM_SUBS_FIGHTSTART5 = "You are all going to die."; +SWWM_SUBS_FIGHTSTART6 = "I've been spoiling for a fight."; +SWWM_SUBS_FIGHTSTART7 = "Let's do this."; +SWWM_SUBS_FIGHTSTART8 = "Time to get crazy! Kill 'em all!"; +SWWM_SUBS_FIGHTSTART9 = "You really don't want to start a fight with me."; +SWWM_SUBS_FIGHTSTART10 = "Let's get on with it."; +SWWM_SUBS_FIGHTSTART11 = "Kill!"; +SWWM_SUBS_FIGHTSTART12 = "This won't be hard."; +SWWM_SUBS_FIGHTSTART13 = "Let's do it."; +SWWM_SUBS_FIGHTSTART14 = "Let's do this."; +SWWM_SUBS_FIGHTSTART15 = "Let's just get this over with."; +SWWM_SUBS_FIGHTSTART16 = "Well, this will be an interesting challenge."; +SWWM_SUBS_FIGHTSTART17 = "Okay. Let's get started."; +SWWM_SUBS_FIGHTSTART18 = "Oh, this is just what I need right now..."; +SWWM_SUBS_FIGHTSTART19 = "Time to put on a show."; +SWWM_SUBS_FIGHTSTART20 = "I'm putting you down."; +SWWM_SUBS_FIGHTSTART21 = "Oh, good. Here I was afraid I'd have nothing to do."; +// played at map start +SWWM_SUBS_MAPSTART1 = "Ugh... this place smells horrible."; +SWWM_SUBS_MAPSTART2 = "Okay, let's get to work."; +SWWM_SUBS_MAPSTART3 = "Let's hurry this up."; +SWWM_SUBS_MAPSTART4 = "This place is all kinds of strange."; +SWWM_SUBS_MAPSTART5 = "I was born ready."; +SWWM_SUBS_MAPSTART6 = "It's a hard world. I do what I have to."; +SWWM_SUBS_MAPSTART7 = "No robot is superior to me."; +SWWM_SUBS_MAPSTART8 = "I've seen better."; +SWWM_SUBS_MAPSTART9 = "Okay. Let's head in."; +SWWM_SUBS_MAPSTART10 = "I don't want any trouble. I'm just passing through."; +SWWM_SUBS_MAPSTART11 = "Sorry to keep you waiting."; +SWWM_SUBS_MAPSTART12 = "I'll do my best."; +SWWM_SUBS_MAPSTART13 = "Just so we're clear: Anything good I find is mine."; +SWWM_SUBS_MAPSTART14 = "I bet the food here is terrible."; +// every time a secret is found +SWWM_SUBS_FINDSECRET1 = "Yeah, yeah, I'm the best."; +SWWM_SUBS_FINDSECRET2 = "It's true. I do know my shit."; +SWWM_SUBS_FINDSECRET3 = "What can I say? I'm good at what I do."; +SWWM_SUBS_FINDSECRET4 = "It was no big deal."; +SWWM_SUBS_FINDSECRET5 = "No trouble at all."; +SWWM_SUBS_FINDSECRET6 = "It was easy."; +SWWM_SUBS_FINDSECRET7 = "Thanks to me, yes."; +SWWM_SUBS_FINDSECRET8 = "It was a walk in the park."; +SWWM_SUBS_FINDSECRET9 = "It was a piece of cake."; +SWWM_SUBS_FINDSECRET10 = "I still got it."; +SWWM_SUBS_FINDSECRET11 = "I did good work, didn't I?"; +SWWM_SUBS_FINDSECRET12 = "Wow, that's pretty lucky!"; +// frag taunts +SWWM_SUBS_SCOREKILL1 = "Good riddance."; +SWWM_SUBS_SCOREKILL2 = "One down."; +SWWM_SUBS_SCOREKILL3 = "Goodbye."; +SWWM_SUBS_SCOREKILL4 = "Heh! You can't stop me."; +SWWM_SUBS_SCOREKILL5 = "What a loser."; +SWWM_SUBS_SCOREKILL6 = "We're done."; +SWWM_SUBS_SCOREKILL7 = "Bye."; +SWWM_SUBS_SCOREKILL8 = "Dead as can be."; +SWWM_SUBS_SCOREKILL9 = "Another job done."; +SWWM_SUBS_SCOREKILL10 = "The pleasure was all mine."; +SWWM_SUBS_SCOREKILL11 = "How about something a little more challenging next time?"; +SWWM_SUBS_SCOREKILL12 = "I'm glad that's over with."; +SWWM_SUBS_SCOREKILL13 = "Well, it's over. That's that."; +SWWM_SUBS_SCOREKILL14 = "Ugh. Just... go away."; +SWWM_SUBS_SCOREKILL15 = "Get lost."; +SWWM_SUBS_SCOREKILL16 = "Is that all?"; +SWWM_SUBS_SCOREKILL17 = "Is that the best you can do?"; +SWWM_SUBS_SCOREKILL18 = "You annoy me."; +SWWM_SUBS_SCOREKILL19 = "Going to have to try harder than that."; +SWWM_SUBS_SCOREKILL20 = "What? That it?"; +SWWM_SUBS_SCOREKILL21 = "Get outta here."; +SWWM_SUBS_SCOREKILL22 = "My pleasure."; +SWWM_SUBS_SCOREKILL23 = "Out of my way."; +SWWM_SUBS_SCOREKILL24 = "Get outta my way."; +SWWM_SUBS_SCOREKILL25 = "Want some more?"; +SWWM_SUBS_SCOREKILL26 = "Done and done."; +SWWM_SUBS_SCOREKILL27 = "It's done."; [es] diff --git a/modeldef.demolitionist b/modeldef.demolitionist new file mode 100644 index 000000000..dad134680 --- /dev/null +++ b/modeldef.demolitionist @@ -0,0 +1,270 @@ +Model "Demolitionist" +{ + Path "models" + Model 0 "DemolitionistPlayer_d.3d" + SurfaceSkin 0 0 "DemoTags.png" + SurfaceSkin 0 1 "DemoFace_Default.png" + SurfaceSkin 0 2 "DemoBody.png" + SurfaceSkin 0 3 "DemoHead.png" + SurfaceSkin 0 4 "DemoArms.png" + SurfaceSkin 0 5 "DemoLegs.png" + SurfaceSkin 0 6 "DemoSoft.png" + SurfaceSkin 0 7 "DemoMisc.png" + SurfaceSkin 0 8 "DemoKeys.png" + SurfaceSkin 0 9 "ExplodiumGun.png" + Scale 0.0025 0.0025 0.0025 + IGNORETRANSLATION + + // Still/Walk + FrameIndex XZW1 A 0 1 + FrameIndex XZW1 B 0 2 + FrameIndex XZW1 C 0 3 + FrameIndex XZW1 D 0 4 + FrameIndex XZW1 E 0 5 + FrameIndex XZW1 F 0 6 + FrameIndex XZW1 G 0 7 + FrameIndex XZW1 H 0 8 + FrameIndex XZW1 I 0 9 + FrameIndex XZW1 J 0 10 + FrameIndex XZW1 K 0 11 + FrameIndex XZW1 L 0 12 + FrameIndex XZW1 M 0 13 + FrameIndex XZW1 N 0 14 + FrameIndex XZW1 O 0 15 + FrameIndex XZW1 P 0 16 + // Run + FrameIndex XZW1 Q 0 18 + FrameIndex XZW1 R 0 19 + FrameIndex XZW1 S 0 20 + // RunLoop + FrameIndex XZW1 T 0 21 + FrameIndex XZW1 U 0 22 + FrameIndex XZW1 V 0 23 + FrameIndex XZW1 W 0 24 + FrameIndex XZW1 X 0 25 + FrameIndex XZW1 Y 0 26 + FrameIndex XZW1 Z 0 27 + FrameIndex XZW2 A 0 28 + FrameIndex XZW2 B 0 29 + FrameIndex XZW2 C 0 30 + FrameIndex XZW2 D 0 31 + FrameIndex XZW2 E 0 32 + FrameIndex XZW2 F 0 33 + FrameIndex XZW2 G 0 34 + // RunEnd + FrameIndex XZW2 H 0 36 + FrameIndex XZW2 I 0 37 + FrameIndex XZW2 J 0 38 + FrameIndex XZW2 K 0 39 + FrameIndex XZW2 L 0 40 + // Pain + SurfaceSkin 0 1 "DemoFace_Hurt.png" + FrameIndex XZW2 M 0 42 + FrameIndex XZW2 N 0 43 + FrameIndex XZW2 O 0 44 + FrameIndex XZW2 P 0 45 + FrameIndex XZW2 Q 0 46 + SurfaceSkin 0 1 "DemoFace_Default.png" + // Death + SurfaceSkin 0 1 "DemoFace_Dead.png" + FrameIndex XZW2 R 0 48 + FrameIndex XZW2 S 0 49 + FrameIndex XZW2 T 0 50 + SurfaceSkin 0 1 "DemoFace_Off.png" + FrameIndex XZW2 U 0 51 + SurfaceSkin 0 1 "DemoFace_Dead.png" + FrameIndex XZW2 V 0 52 + SurfaceSkin 0 1 "DemoFace_Off.png" + FrameIndex XZW2 W 0 53 + FrameIndex XZW2 X 0 54 + SurfaceSkin 0 1 "DemoFace_Dead.png" + FrameIndex XZW2 Y 0 55 + SurfaceSkin 0 1 "DemoFace_Off.png" + FrameIndex XZW2 Z 0 56 + SurfaceSkin 0 1 "DemoFace_Dead.png" + FrameIndex XZW3 A 0 57 + SurfaceSkin 0 1 "DemoFace_Off.png" + FrameIndex XZW3 B 0 58 + FrameIndex XZW3 C 0 59 + SurfaceSkin 0 1 "DemoFace_Dead.png" + FrameIndex XZW3 D 0 60 + SurfaceSkin 0 1 "DemoFace_Off.png" + FrameIndex XZW3 E 0 61 + FrameIndex XZW3 F 0 62 + FrameIndex XZW3 G 0 63 + FrameIndex XZW3 H 0 64 + SurfaceSkin 0 1 "DemoFace_Default.png" + // Jump + FrameIndex XZW3 I 0 66 + FrameIndex XZW3 J 0 67 + FrameIndex XZW3 K 0 68 + FrameIndex XZW3 L 0 69 + FrameIndex XZW3 M 0 70 + FrameIndex XZW3 N 0 71 + FrameIndex XZW3 O 0 72 + // JumpStill + FrameIndex XZW3 P 0 73 + // JumpEndB + FrameIndex XZW3 Q 0 74 + FrameIndex XZW3 R 0 75 + FrameIndex XZW3 S 0 76 + FrameIndex XZW3 T 0 77 + FrameIndex XZW3 U 0 78 + FrameIndex XZW3 V 0 79 + FrameIndex XZW3 W 0 80 + // Fall + FrameIndex XZW3 X 0 82 + FrameIndex XZW3 Y 0 83 + FrameIndex XZW3 Z 0 84 + FrameIndex XZW4 A 0 85 + FrameIndex XZW4 B 0 86 + // FallLoop + FrameIndex XZW4 C 0 87 + FrameIndex XZW4 D 0 88 + FrameIndex XZW4 E 0 89 + FrameIndex XZW4 F 0 90 + FrameIndex XZW4 G 0 91 + FrameIndex XZW4 H 0 92 + // FallEnd + FrameIndex XZW4 I 0 93 + FrameIndex XZW4 J 0 94 + FrameIndex XZW4 K 0 95 + FrameIndex XZW4 L 0 96 + FrameIndex XZW4 M 0 97 + FrameIndex XZW4 N 0 98 + // Dash + FrameIndex XZW4 O 0 100 + // DashLoop + FrameIndex XZW4 P 0 101 + FrameIndex XZW4 Q 0 102 + FrameIndex XZW4 R 0 103 + FrameIndex XZW4 S 0 104 + // DashEnd + FrameIndex XZW4 T 0 106 + FrameIndex XZW4 U 0 107 + FrameIndex XZW4 V 0 108 + FrameIndex XZW4 W 0 109 + FrameIndex XZW4 X 0 110 + // Point Down + FrameIndex XZW4 Y 0 112 + FrameIndex XZW4 Z 0 113 + FrameIndex XZW5 A 0 114 + FrameIndex XZW5 B 0 115 + FrameIndex XZW5 C 0 116 + SurfaceSkin 0 1 "DemoFace_Evil.png" + FrameIndex XZW5 D 0 117 + FrameIndex XZW5 E 0 118 + FrameIndex XZW5 F 0 119 + FrameIndex XZW5 G 0 120 + FrameIndex XZW5 H 0 121 + FrameIndex XZW5 I 0 122 + FrameIndex XZW5 J 0 123 + FrameIndex XZW5 K 0 124 + SurfaceSkin 0 1 "DemoFace_Default.png" + FrameIndex XZW5 L 0 125 + FrameIndex XZW5 M 0 126 + // Thumbs Up + FrameIndex XZW5 N 0 128 + FrameIndex XZW5 O 0 129 + FrameIndex XZW5 P 0 130 + FrameIndex XZW5 Q 0 131 + FrameIndex XZW5 R 0 132 + SurfaceSkin 0 1 "DemoFace_Grin.png" + FrameIndex XZW5 S 0 133 + FrameIndex XZW5 T 0 134 + FrameIndex XZW5 U 0 135 + FrameIndex XZW5 V 0 136 + FrameIndex XZW5 W 0 137 + FrameIndex XZW5 X 0 138 + FrameIndex XZW5 Y 0 139 + SurfaceSkin 0 1 "DemoFace_Default.png" + FrameIndex XZW5 Z 0 140 + FrameIndex XZW6 A 0 141 + FrameIndex XZW6 B 0 142 + FrameIndex XZW6 C 0 143 + FrameIndex XZW6 D 0 144 + // Victory + FrameIndex XZW6 E 0 146 + FrameIndex XZW6 F 0 147 + FrameIndex XZW6 G 0 148 + FrameIndex XZW6 H 0 149 + SurfaceSkin 0 1 "DemoFace_Grin.png" + FrameIndex XZW6 I 0 150 + FrameIndex XZW6 J 0 151 + FrameIndex XZW6 K 0 152 + FrameIndex XZW6 L 0 153 + FrameIndex XZW6 M 0 154 + FrameIndex XZW6 N 0 155 + FrameIndex XZW6 O 0 156 + FrameIndex XZW6 P 0 157 + FrameIndex XZW6 Q 0 158 + FrameIndex XZW6 R 0 159 + FrameIndex XZW6 S 0 160 + FrameIndex XZW6 T 0 161 + SurfaceSkin 0 1 "DemoFace_Default.png" + FrameIndex XZW6 U 0 162 + FrameIndex XZW6 V 0 163 + FrameIndex XZW6 W 0 164 + // Attack + FrameIndex XZW6 X 0 166 + FrameIndex XZW6 Y 0 167 + FrameIndex XZW6 Z 0 168 + FrameIndex XZW7 A 0 169 + FrameIndex XZW7 B 0 170 + FrameIndex XZW7 C 0 171 + // Crouch + FrameIndex XZW7 D 0 173 + FrameIndex XZW7 E 0 174 + FrameIndex XZW7 F 0 175 + FrameIndex XZW7 G 0 176 + FrameIndex XZW7 H 0 177 + FrameIndex XZW7 I 0 178 + FrameIndex XZW7 J 0 179 + FrameIndex XZW7 K 0 180 + FrameIndex XZW7 L 0 181 + // Crawl + FrameIndex XZW7 M 0 182 + FrameIndex XZW7 N 0 183 + FrameIndex XZW7 O 0 184 + FrameIndex XZW7 P 0 185 + FrameIndex XZW7 Q 0 186 + FrameIndex XZW7 R 0 187 + FrameIndex XZW7 S 0 188 + FrameIndex XZW7 T 0 189 + FrameIndex XZW7 U 0 190 + FrameIndex XZW7 V 0 191 + // Crouched Attack + FrameIndex XZW7 W 0 193 + FrameIndex XZW7 X 0 194 + FrameIndex XZW7 Y 0 195 + FrameIndex XZW7 Z 0 196 + FrameIndex XZW8 A 0 197 + FrameIndex XZW8 B 0 198 + // Crouched Pain + SurfaceSkin 0 1 "DemoFace_Hurt.png" + FrameIndex XZW8 C 0 200 + FrameIndex XZW8 D 0 201 + FrameIndex XZW8 E 0 202 + FrameIndex XZW8 F 0 203 + SurfaceSkin 0 1 "DemoFace_Default.png" + // Crouched Death + SurfaceSkin 0 1 "DemoFace_Dead.png" + FrameIndex XZW8 G 0 205 + SurfaceSkin 0 1 "DemoFace_Off.png" + FrameIndex XZW8 H 0 206 + SurfaceSkin 0 1 "DemoFace_Dead.png" + FrameIndex XZW8 I 0 207 + FrameIndex XZW8 J 0 208 + SurfaceSkin 0 1 "DemoFace_Off.png" + FrameIndex XZW8 K 0 209 + FrameIndex XZW8 L 0 210 + SurfaceSkin 0 1 "DemoFace_Default.png" + // Uncrouch + FrameIndex XZW8 M 0 212 + FrameIndex XZW8 N 0 213 + FrameIndex XZW8 O 0 214 + FrameIndex XZW8 P 0 215 + FrameIndex XZW8 Q 0 216 + FrameIndex XZW8 R 0 217 + FrameIndex XZW8 S 0 218 +} diff --git a/modeldef.explodiumgun b/modeldef.explodiumgun new file mode 100644 index 000000000..775994865 --- /dev/null +++ b/modeldef.explodiumgun @@ -0,0 +1,57 @@ +Model "ExplodiumGun" +{ + Path "models" + Model 0 "ExplodiumGunPickup_d.3d" + Skin 0 "ExplodiumGun.png" + Scale 0.03 0.03 0.03 + ZOffset 16 + + FrameIndex XZW1 A 0 0 +} + +Model "ExplodiumGun" +{ + Path "models" + + Model 1 "ExplodiumGun1st_d.3d" // main + // TODO separate the parts so some of them can be hidden when not + // needed + SurfaceSkin 1 0 "DemoTags.png" + SurfaceSkin 1 1 "DemoArms.png" + SurfaceSkin 1 2 "DemoSoft.png" + SurfaceSkin 1 3 "ExplodiumGun.png" + SurfaceSkin 1 4 "ExplodiumCasing.png" + SurfaceSkin 1 5 "ExplodiumGun.png" + SurfaceSkin 1 6 "ExplodiumGun.png" + + Scale -0.01 0.005 0.01 + Offset 0 0 -4 + + // Still + FrameIndex XZW2 A 1 0 + // Select + FrameIndex XZW2 B 1 5 + FrameIndex XZW2 C 1 6 + FrameIndex XZW2 D 1 7 + FrameIndex XZW2 E 1 8 + FrameIndex XZW2 F 1 9 + FrameIndex XZW2 G 1 10 + FrameIndex XZW2 H 1 11 + // Fire + FrameIndex XZW2 I 1 13 + FrameIndex XZW2 J 1 14 + FrameIndex XZW2 K 1 15 + FrameIndex XZW2 L 1 16 + FrameIndex XZW2 M 1 17 + FrameIndex XZW2 N 1 18 + FrameIndex XZW2 O 1 19 + FrameIndex XZW2 P 1 20 + FrameIndex XZW2 Q 1 21 + FrameIndex XZW2 R 1 22 + FrameIndex XZW2 S 1 23 + // Deselect + FrameIndex XZW2 T 1 1 + FrameIndex XZW2 U 1 2 + FrameIndex XZW2 V 1 3 + FrameIndex XZW2 W 1 4 +} diff --git a/models/ExplodiumGun1st.blend b/models/ExplodiumGun1st.blend index b15bc5c0c..91f811b03 100644 Binary files a/models/ExplodiumGun1st.blend and b/models/ExplodiumGun1st.blend differ diff --git a/models/ExplodiumGun1st_a.3d b/models/ExplodiumGun1st_a.3d index 811396253..3049e5eed 100644 Binary files a/models/ExplodiumGun1st_a.3d and b/models/ExplodiumGun1st_a.3d differ diff --git a/models/ExplodiumGun1st_d.3d b/models/ExplodiumGun1st_d.3d index f347f4795..243a985b6 100644 Binary files a/models/ExplodiumGun1st_d.3d and b/models/ExplodiumGun1st_d.3d differ diff --git a/models/ModelNotes.txt b/models/ModelNotes.txt index 1d716a94f..5b79c0171 100644 --- a/models/ModelNotes.txt +++ b/models/ModelNotes.txt @@ -4,12 +4,12 @@ X down/select X fire anim X reload X cock -- explosive reload -- "check the chamber" idle anim +X explosive reload +X "check the chamber" idle anim - "spin" idle anim - "check out gun" idle anim -- melee punch -- candygun tertiary +X melee punch +X candygun tertiary Deep Impact: diff --git a/sndinfo.txt b/sndinfo.txt index 4ce729d5a..49f38c505 100644 --- a/sndinfo.txt +++ b/sndinfo.txt @@ -133,3 +133,22 @@ voice/default/scorekill24 sounds/voice/default/scorekill24.ogg voice/default/scorekill25 sounds/voice/default/scorekill25.ogg voice/default/scorekill26 sounds/voice/default/scorekill26.ogg voice/default/scorekill27 sounds/voice/default/scorekill27.ogg + +$random demolitionist/grunt { voice/default/grunt1 voice/default/grunt2 voice/default/grunt3 voice/default/grunt4 voice/default/grunt5 voice/default/grunt6 } +$random demolitionist/lopain { voice/default/lopain1 voice/default/lopain2 voice/default/lopain3 voice/default/lopain4 voice/default/lopain5 } +$random demolitionist/pain { voice/default/pain1 voice/default/pain2 voice/default/pain3 voice/default/pain4 voice/default/pain5 } +$random demolitionist/hipain { voice/default/hipain1 voice/default/hipain2 voice/default/hipain3 voice/default/hipain4 voice/default/hipain5 } +$random demolitionist/death { voice/default/death1 voice/default/death2 voice/default/death3 voice/default/death4 voice/default/death5 } + +$playeralias demolitionist neutral *grunt demolitionist/grunt +$playeralias demolitionist neutral *pain100 demolitionist/lopain +$playeralias demolitionist neutral *pain75 demolitionist/pain +$playeralias demolitionist neutral *pain50 demolitionist/pain +$playeralias demolitionist neutral *pain25 demolitionist/hipain +$playeralias demolitionist neutral *usefail demolitionist/grunt +$playeralias demolitionist neutral *death demolitionist/death +$playeralias demolitionist neutral *xdeath demolitionist/death +$playeralias demolitionist neutral *gibbed demolitionist/death +$playersound demolitionist neutral *land DSEMPTY +$playersound demolitionist neutral *falling DSEMPTY +$playersound demolitionist neutral *puzzfail DSEMPTY diff --git a/textures.dummy b/textures.dummy new file mode 100644 index 000000000..d9748155b --- /dev/null +++ b/textures.dummy @@ -0,0 +1,36 @@ +Sprite "XZW0A0",1,1{} +Sprite "XZW1A0",1,1{} +Sprite "XZW2A0",1,1{} +Sprite "XZW3A0",1,1{} +Sprite "XZW4A0",1,1{} +Sprite "XZW5A0",1,1{} +Sprite "XZW6A0",1,1{} +Sprite "XZW7A0",1,1{} +Sprite "XZW8A0",1,1{} +Sprite "XZW9A0",1,1{} +Sprite "XZWAA0",1,1{} +Sprite "XZWBA0",1,1{} +Sprite "XZWCA0",1,1{} +Sprite "XZWDA0",1,1{} +Sprite "XZWEA0",1,1{} +Sprite "XZWFA0",1,1{} +Sprite "XZWGA0",1,1{} +Sprite "XZWHA0",1,1{} +Sprite "XZWIA0",1,1{} +Sprite "XZWJA0",1,1{} +Sprite "XZWKA0",1,1{} +Sprite "XZWLA0",1,1{} +Sprite "XZWMA0",1,1{} +Sprite "XZWNA0",1,1{} +Sprite "XZWOA0",1,1{} +Sprite "XZWPA0",1,1{} +Sprite "XZWQA0",1,1{} +Sprite "XZWRA0",1,1{} +Sprite "XZWSA0",1,1{} +Sprite "XZWTA0",1,1{} +Sprite "XZWUA0",1,1{} +Sprite "XZWVA0",1,1{} +Sprite "XZWWA0",1,1{} +Sprite "XZWXA0",1,1{} +Sprite "XZWYA0",1,1{} +Sprite "XZWZA0",1,1{} diff --git a/zmapinfo.txt b/zmapinfo.txt index ec3d984ea..584bbc925 100644 --- a/zmapinfo.txt +++ b/zmapinfo.txt @@ -2,6 +2,8 @@ GameInfo { AddEventHandlers = "SWWMCrashHandler", "SWWMBrutalHandler", "SWWMHandler" IntermissionMusic = "music/DRAGONY.XM" + PlayerClasses = "Demolitionist" + PrecacheClasses = "Demolitionist","ExplodiumGun" } Map TITLEMAP "SWWM GZ - Title Map" diff --git a/zscript.txt b/zscript.txt index 35769a4f4..05a81b23d 100644 --- a/zscript.txt +++ b/zscript.txt @@ -29,90 +29,3 @@ version "4.3" #include "zscript/swwm_thiccboolet.zsc" #include "zscript/swwm_tastytreat.zsc" #include "zscript/swwm_deathlydeathcannon.zsc" - -Class SWWMCrashHandler : StaticEventHandler -{ - ui bool wasinmap; - ui int timer; - - override void UiTick() - { - if ( (gamestate == GS_LEVEL) || (gamestate == GS_TITLELEVEL) ) - { - wasinmap = true; - timer = 0; - } - else if ( (gamestate == GS_FULLCONSOLE) && (wasinmap || (timer > 0)) ) - { - wasinmap = false; - if ( timer == 1 ) - { - Console.Printf(TEXTCOLOR_GOLD.."Oopsie Woopsie!"..TEXTCOLOR_NORMAL); - S_StartSound("crash/glass",CHAN_YOUDONEFUCKEDUP,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE); - S_StartSound("crash/glass",CHAN_YOUDONEFUCKEDUP,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE); - S_StartSound("crash/glass",CHAN_YOUDONEFUCKEDUP,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE); - } - else if ( timer == 140 ) - { - Console.Printf(TEXTCOLOR_GOLD.."Looks like GZDoom made a fucky wucky! owo"..TEXTCOLOR_NORMAL); - S_StartSound("crash/curb",CHAN_YOUDONEFUCKEDUP,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE); - } - else if ( timer == 350 ) - { - let hnd = SWWMBrutalHandler(StaticEventHandler.Find("SWWMBrutalHandler")); - if ( hnd && hnd.detected ) Console.Printf(TEXTCOLOR_GOLD.."Don't blame me. Shouldn't have tried running this with Brutal Doom."..TEXTCOLOR_NORMAL); - else Console.Printf(TEXTCOLOR_GOLD.."If you didn't trigger it manually, it's best if you take a screenshot and show it to Marisa."..TEXTCOLOR_NORMAL); - } - timer++; - } - } -} - -Class SWWMBrutalHandler : StaticEventHandler -{ - ui int timer; - ui TextureID scr; - bool detected; - - override void OnRegister() - { - for ( int i=0; iBrutal Doom"); - timer++; - } - else timer = 0; - } - - override void WorldTick() - { - if ( !detected ) return; - for ( int i=0; i 0)) ) + { + wasinmap = false; + if ( timer == 1 ) + { + Console.Printf(TEXTCOLOR_GOLD.."Oopsie Woopsie!"..TEXTCOLOR_NORMAL); + S_StartSound("crash/glass",CHAN_YOUDONEFUCKEDUP,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE); + S_StartSound("crash/glass",CHAN_YOUDONEFUCKEDUP,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE); + S_StartSound("crash/glass",CHAN_YOUDONEFUCKEDUP,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE); + } + else if ( timer == 140 ) + { + Console.Printf(TEXTCOLOR_GOLD.."Looks like GZDoom made a fucky wucky! owo"..TEXTCOLOR_NORMAL); + S_StartSound("crash/curb",CHAN_YOUDONEFUCKEDUP,CHANF_UI|CHANF_NOPAUSE|CHANF_OVERLAP,1,ATTN_NONE); + } + else if ( timer == 350 ) + { + let hnd = SWWMBrutalHandler(StaticEventHandler.Find("SWWMBrutalHandler")); + if ( hnd && hnd.detected ) Console.Printf(TEXTCOLOR_GOLD.."Don't blame me. Shouldn't have tried running this with Brutal Doom."..TEXTCOLOR_NORMAL); + else Console.Printf(TEXTCOLOR_GOLD.."If you didn't trigger it manually, it's best if you take a screenshot and show it to Marisa."..TEXTCOLOR_NORMAL); + } + timer++; + } + } +} + +// >loading brutal doom with this +Class SWWMBrutalHandler : StaticEventHandler +{ + ui int timer; + ui TextureID scr; + bool detected; + + override void OnRegister() + { + for ( int i=0; iBrutal Doom"); + timer++; + } + else timer = 0; + } + + override void WorldTick() + { + if ( !detected ) return; + for ( int i=0; i0)?X:-X; + if ( sm ) dodge += (sm>0)?Y:-Y; + if ( player.onground ) dodge.z = max(0,dodge.z); + dodge.z += .15; + if ( (dodge.length() > 0) && (dashcooldown <= 0) && player.cmd.buttons&BT_STRAFE ) + { + dashdir = dodge.unit(); + dashcooldown = 40; + dashfuel = 10.; + bOnMobj = false; + if ( player.cheats & CF_REVERTPLEASE ) + { + player.cheats &= ~CF_REVERTPLEASE; + player.camera = player.mo; + } + vel *= 0; + player.jumptics = -1; + SetStateLabel("Dash"); + last_jump_held = int.min; + extrajumps = max(1,extrajumps); + } + else if ( player.onground || !(level.maptime%3) ) + dashcooldown = max(0,dashcooldown-1); + } + override void CheckJump() + { + if ( InStateSequence(CurState,FindState("Dash")) ) return; // do not + bool walljump = LineTrace(angle-180,Radius*4,0,offsetz:height*.2); + if ( player.cmd.buttons&BT_JUMP ) + { + if ( player.crouchoffset ) player.crouching = 1; + else if ( waterlevel >= 2 ) vel.z = 4*Speed; + else if ( bNoGravity ) vel.z = 3.; + else if ( level.IsJumpingAllowed() && (last_jump_held < gametic-4) && ((extrajumps > 0) || walljump) ) + { + if ( !player.onground ) extrajumps--; + double jumpvelz = JumpZ*35./TICRATE; + double jumpfac = 0; + for ( let p=Inv; p; p=p.Inv ) + { + let pp = PowerHighJump(p); + if ( pp ) + { + double f = pp.Strength; + if ( f > jumpfac ) jumpfac = f; + } + } + if ( jumpfac > 0 ) jumpvelz *= jumpfac; + vel.z = max(0,vel.z)+jumpvelz; + if ( !player.onground ) + { + vel.z *= 1.25; + // check for wall kicks + if ( walljump ) + { + extrajumps = max(1,extrajumps); + vel.z *= .5; + vel.xy = (cos(angle),sin(angle))*20*Speed; + } + } + bOnMobj = false; + player.jumpTics = -1; + if ( !(player.cheats&CF_PREDICTING) ) + A_StartSound("*jump",CHAN_BODY); + dashfuel = 3.; + SetStateLabel("Jump"); + } + last_jump_held = gametic; + } + } + override void PlayIdle() + { + if ( player.health <= 0 ) return; + if ( !bNoGravity && player.onground && (waterlevel < 3) ) + { + // Ground + if ( player.crouchdir == -1 ) + { + // Crouching + if ( InStateSequence(CurState,FindState("CrouchMove")) ) + SetStateLabel("Crouch"); + else if ( InStateSequence(CurState,FindState("Spawn")) + || InStateSequence(CurState,FindState("Turn")) + || InStateSequence(CurState,FindState("See")) + || InStateSequence(CurState,FindState("SeeFast")) + || InStateSequence(CurState,FindState("SeeFastLoop")) + || InStateSequence(CurState,FindState("SeeFastEnd")) ) + SetStateLabel("StartCrouch"); + } + else + { + if ( InStateSequence(CurState,FindState("Crouch")) + || InStateSequence(CurState,FindState("CrouchMove")) ) + SetStateLabel("EndCrouch"); + else if ( InStateSequence(CurState,FindState("See")) ) + SetStateLabel("Spawn"); + else if ( InStateSequence(CurState,FindState("SeeFast")) + || InStateSequence(CurState,FindState("SeeFastLoop")) ) + SetStateLabel("SeeFastEnd"); + } + } + else if ( !bNoGravity && (waterlevel < 1) ) + { + // Falling + if ( (InStateSequence(CurState,FindState("Spawn")) + || InStateSequence(CurState,FindState("Turn")) + || InStateSequence(CurState,FindState("See")) + || InStateSequence(CurState,FindState("SeeFast")) + || InStateSequence(CurState,FindState("SeeFastLoop")) + || InStateSequence(CurState,FindState("SeeFastEnd"))) + && (abs(pos.z-floorz) > maxstepheight) ) + SetStateLabel("Fall"); + } + else + { + // Floating + if ( InStateSequence(CurState,FindState("Spawn")) + || InStateSequence(CurState,FindState("Turn")) + || InStateSequence(CurState,FindState("See")) + || InStateSequence(CurState,FindState("SeeFast")) + || InStateSequence(CurState,FindState("SeeFastLoop")) + || InStateSequence(CurState,FindState("SeeFastEnd")) + || InStateSequence(CurState,FindState("JumpLoop")) + || InStateSequence(CurState,FindState("Float")) + || InStateSequence(CurState,FindState("FloatLoop")) ) + SetStateLabel("Fall"); + } + } + override void PlayRunning() + { + if ( player.health <= 0 ) return; + if ( !bNoGravity && player.onground && (waterlevel < 3) ) + { + // Ground + if ( player.crouchdir == -1 ) + { + // Crouching + if ( InStateSequence(CurState,FindState("Spawn")) + || InStateSequence(CurState,FindState("Turn")) + || InStateSequence(CurState,FindState("See")) + || InStateSequence(CurState,FindState("SeeFast")) + || InStateSequence(CurState,FindState("SeeFastLoop")) + || InStateSequence(CurState,FindState("SeeFastEnd")) ) + SetStateLabel("StartCrouch"); + else if ( InStateSequence(CurState,FindState("Crouch")) ) + SetStateLabel("CrouchMove"); + } + else + { + if ( InStateSequence(CurState,FindState("Crouch")) + || InStateSequence(CurState,FindState("CrouchMove")) ) + SetStateLabel("EndCrouch"); + else if ( player.cmd.buttons&BT_SPEED + && (InStateSequence(CurState,FindState("Spawn")) + || InStateSequence(CurState,FindState("Turn")) + || InStateSequence(CurState,FindState("See"))) ) + SetStateLabel("SeeFast"); + else if ( InStateSequence(CurState,FindState("Spawn")) + || InStateSequence(CurState,FindState("Turn")) ) + SetStateLabel("See"); + } + } + else if ( !bNoGravity && (waterlevel < 1) ) + { + // Falling + PlayIdle(); + } + else + { + // Floating + if ( InStateSequence(CurState,FindState("Spawn")) + || InStateSequence(CurState,FindState("Turn")) + || InStateSequence(CurState,FindState("See")) + || InStateSequence(CurState,FindState("SeeFast")) + || InStateSequence(CurState,FindState("SeeFastLoop")) + || InStateSequence(CurState,FindState("SeeFastEnd")) + || InStateSequence(CurState,FindState("JumpLoop")) + || InStateSequence(CurState,FindState("Fall")) + || InStateSequence(CurState,FindState("FallLoop")) ) + SetStateLabel("Float"); + } + } + override void PlayAttacking() + { + if ( InStateSequence(CurState,FindState("Dash")) + || InStateSequence(CurState,FindState("Jump")) + || InStateSequence(CurState,FindState("JumpLoop")) ) + return; // don't cancel dash/jump + if ( player.crouchdir == -1 ) SetStateLabel("CrouchMissile"); + else SetStateLabel("Missile"); + } + override void PlayAttacking2() + { + PlayAttacking(); + } + action void A_DMFade() + { + if ( !deathmatch || player ) return; + A_FadeOut(0.03); + } + action void A_DemoPain() + { + if ( invoker.lastdamage > 300 ) A_StartSound("*pain100",CHAN_VOICE); + else if ( invoker.lastdamage > 50 ) A_StartSound("*pain50",CHAN_VOICE); + else A_StartSound("*pain25",CHAN_VOICE); + } + States + { + Spawn: + // normal idle + #### # 2; + XZW1 A 1 A_JumpIf(player&&(player.mo==self)&&player.cmd.yaw,"Turn"); + Wait; + See: + // normal walking + #### # 2; + XZW1 BCDEFGHIJKLMNOPA 2 A_JumpIf(player&&(player.cmd.buttons&BT_SPEED),"SeeFast"); + Goto See+1; + Turn: + #### # 8; + XZW1 C 1 A_JumpIf(!player||!player.cmd.yaw,"Spawn"); + Wait; + SeeFast: + // sprinting + #### # 2; + XZW1 QRST 2; + Goto SeeFastLoop; + SeeFastLoop: + // keep sprinting + XZW1 UVWXYZ 2 A_JumpIf(player&&!(player.cmd.buttons&BT_SPEED),"SeeFastEnd"); + XZW2 ABCDEFG 2 A_JumpIf(player&&!(player.cmd.buttons&BT_SPEED),"SeeFastEnd"); + XZW1 T 2 A_JumpIf(player&&!(player.cmd.buttons&BT_SPEED),"SeeFastEnd"); + Goto SeeFastLoop; + SeeFastEnd: + // brake + #### # 2; + XZW2 HIJKL 2; + Goto Spawn+1; + Pain: + // ouchy + XZW1 A 0 A_JumpIf(player&&(player.mo==self)&&(player.crouchdir==-1),"CrouchPain"); + XZW1 A 1 A_Pain(); + XZW2 MNOPQ 1; + Goto Spawn+1; + Death: + XDeath: + // ded + XZW1 A 0 A_JumpIf(player&&(player.mo==self)&&(player.crouchdir==-1),"CrouchDeath"); + XZW1 A 2 + { + A_PlayerScream(); + A_NoBlocking(); + } + XZW2 RSTUVWXYZ 2; + XZW3 ABCDEFG 2; + XZW3 H 350; + XZW3 H 1 A_DMFade(); + Wait; + Jump: + // start boost + #### # 2; + XZW3 IJKLMNO 2 + { + if ( (pos.z<=floorz)||bNoGravity||(waterlevel>=3) ) + return ResolveState("JumpEnd"); + A_BoostUp(); + return ResolveState(null); + } + Goto JumpLoop; + JumpLoop: + // keep boost + XZW3 P 1 + { + if ( (pos.z<=floorz)||bNoGravity||(waterlevel>=3) ) + return ResolveState("JumpEnd"); + A_BoostUp(); + return ResolveState(null); + } + XZW3 P 1 A_JumpIf((vel.z<-10)&&(pos.z>(floorz+80)),1); + Loop; + #### # 4; + Goto FallLoop; + JumpEnd: + // stop boost + #### # 2; + XZW3 PQRSTUVW 2; + Goto Spawn+1; + Fall: + // start fall + #### # 4; + XZW3 XYZ 2 A_JumpIf((pos.z<=floorz)&&!bNoGravity&&(waterlevel<3),"FallEnd"); + XZW4 AB 2 A_JumpIf((pos.z<=floorz)&&!bNoGravity&&(waterlevel<3),"FallEnd"); + Goto FallLoop; + FallLoop: + // falling + XZW4 CDEFGH 3 A_JumpIf((pos.z<=floorz)&&!bNoGravity&&(waterlevel<3),"FallEnd"); + Goto FallLoop; + FallEnd: + // landing + XZW4 CIJKLMN 2; + Goto Spawn+1; + Float: + // start + #### # 2; + XZW4 O 3; + Goto FloatLoop; + FloatLoop: + XZW4 PQRS 6; + Loop; + FloatEnd: + #### # 2; + XZW4 TUVWX 3; + Goto Spawn+1; + Dash: + #### # 2; + XZW4 O 2 A_Dash(); + XZW4 PQRS 2 A_Dash(); + Goto DashEnd; + DashEnd: + XZW4 TUVWX 2; + Goto Spawn+1; + Taunt: + #### # 3; + XZW4 YZ 3; + XZW5 ABCDEFGHIJKLM 3; + Goto Spawn+1; + Approve: + #### # 3; + XZW5 NOPQRSTUVWXYZ 3; + XZW6 ABCD 3; + Goto Spawn+1; + Victory: + #### # 3; + XZW6 EFGHIJKLMNOPQRSTUVW 3; + Goto Spawn+1; + Missile: + Melee: + // attacking + XZW1 A 2; + XZW6 XYZ 2; + XZW7 ABC 2; + Goto Spawn+1; + StartCrouch: + // go crouching + #### # 2; + XZW7 DEFGH 1; + XZW7 IJKL 2; + Goto Crouch+1; + Crouch: + #### # 4; + XZW7 M -1; + Stop; + CrouchMove: + XZW7 MNOPQRSTUV 2; + Loop; + CrouchMissile: + XZW7 M 2; + XZW7 WXYZ 2; + XZW8 AB 2; + Goto Crouch+1; + CrouchPain: + XZW7 M 1 A_DemoPain(); + XZW8 CDEF 1; + Goto Crouch+1; + CrouchDeath: + XZW7 M 2 + { + A_PlayerScream(); + A_NoBlocking(); + } + XZW8 GHIJK 2; + XZW8 L 350; + XZW8 L 1 A_DMFade(); + Wait; + EndCrouch: + #### # 2; + XZW8 MNOPQRS 2; + Goto Spawn+1; + } +} diff --git a/zscript/swwm_splode.zsc b/zscript/swwm_splode.zsc index c33a2d401..7e39ea4e9 100644 --- a/zscript/swwm_splode.zsc +++ b/zscript/swwm_splode.zsc @@ -1,2 +1,31 @@ // Munch Innovations Explodium Gun (from SWWM series) // Slot 2, replaces Pistol, Elven Wand, Hexen starting weapons + +// Animation test +Class ExplodiumGun : SWWMWeapon +{ + Default + { + Weapon.SlotNumber 2; + } + States + { + Spawn: + XZW1 A -1; + Stop; + Select: + XZW2 B 2 A_FullRaise(); + XZW2 CDEFGH 2; + Goto Ready; + Ready: + XZW2 A 1 A_WeaponReady(); + Wait; + Fire: + XZW2 AIJKLMNOPQRSA 1; + Goto Ready; + Deselect: + XZW2 ATUVWB 2; + XZW2 B -1 A_FullLower(); + Stop; + } +}