Merge branch 'devel' into experimental

This commit is contained in:
Marisa the Magician 2019-08-02 10:02:39 +02:00
commit 62b8975991
69 changed files with 2597 additions and 264 deletions

View file

@ -12,7 +12,7 @@ This mod requires GZDoom 4.1 or later.
- Redeemer (slot 0)
- 6 Degrees of Freedom movement with manual tilt (reload/zoom buttons)
- GES Biorifle (slot 3)
- Pulsegun (slot 5) (with beta animations)
- Pulsegun (slot 5) (with optional beta reload)
- Health
- Big Keg O' Health (soulsphere)
- Beta Super Health (medkit)
@ -31,12 +31,16 @@ This mod requires GZDoom 4.1 or later.
- Computer Map (computer area map)
- Searchlight (light amplification visor)
- Enhanced Shock Rifle (slot 4, limited ammo, invulnerability sphere)
- Instagib DM mode
- UT HUD
- Impact Hammer (slot 1)
- Chainsaw (slot 1)
- Option to make chainsaw use ammo (random drop from enemies killed without it)
- Translocator (slot 1)
- Option to make it use regenerating ammo like in UT2k4
- Enforcer (slot 2)
- Dual Enforcers (slot 2)
- Restored reloading (optional)
- Ripper (slot 6)
- Jump Boots (radsuit, has "iron boots" powerup effect to compensate)
- Minigun (slot 7)
@ -48,22 +52,22 @@ This mod requires GZDoom 4.1 or later.
- Visual recoil affecting aim (improved A_Swing from Soundless Mound, can be
toggled)
- UT-like weapon dropping style
- UT player classes (sound only, no models yet)
- UT player classes
- Heretic compatibility
- Spanish localization
- UT gore system (toggleable)
## In progress
- General polishing, bugfixing and rebalancing
- Add some more effects
- Lava/Slime footstep sounds?
- UT gore system (toggleable)
- French localization
- Italian localization
- French, Italian and German localizations (I'll need help for these)
## Ideas
- Chainsaw balancing (maybe give it ammo?)
- Figure out some alternative invincibility item. Kinda like how I improvised
the backpack replacement.
## Future plans
@ -72,14 +76,14 @@ This mod requires GZDoom 4.1 or later.
- Recenter the backpack mesh (it was a complete hack job to begin with)
- Add ammo counters to Pulsegun, Minigun, Flak Cannon and Rocket Launcher once
scripted textures are implemented
- Add player models once GZDoom gets a well deserved model animation system
overhaul (at the moment this would require a monumental amount of work in
the current state-tied system)
- Redo player models once GZDoom gets a well deserved model animation system
overhaul (mainly to clean up the current, messy implementation of this)
- Add weapon attachment support to player models when that is also added in
(at the moment all player models have an integrated placeholder weapon)
- Unreal 1 weapons mod and maybe also a monsters mod
- Port some of my UT weapon mods (and maybe also some of my personal faves by
others, such as Psi Weapon Dreams)
- Hexen compatibility ???
- Hexen/Strife compatibility ???
- Relics?
## Known bugs

BIN
brightmaps/boss3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
brightmaps/boss4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -1,9 +0,0 @@
GameInfo
{
AddEventHandlers = "RedeemerHUDHandler", "UTMainHandler"
PlayerClasses = "UTPlayerHereticCompatTMale1", "UTPlayerHereticCompatTMale2", "UTPlayerHereticCompatTFemale1", "UTPlayerHereticCompatTFemale2", "UTPlayerHereticCompatTBoss"
StatusBarClass = "UTHud"
BackpackType = "UTBackpack"
BorderFlat = "TEMPBG"
Border = 0,0,"","","","","","","",""
}

View file

@ -27,6 +27,18 @@ HardwareShader Texture "models/bossheadT.png"
Shader "shaders/glsl/AmbientGlow_Brightmapped.fp"
Texture "brighttex" "brightmaps/bossheadT.png"
}
Brightmap Texture "models/bossgibT.png"
{
Map "brightmaps/bossheadT.png"
}
Brightmap Texture "models/boss3.png"
{
Map "brightmaps/boss3.png"
}
Brightmap Texture "models/boss4.png"
{
Map "brightmaps/boss4.png"
}
HardwareShader Texture "models/JBRifle2.png"
{
Shader "shaders/glsl/AmbientGlow_Brightmapped.fp"

13
keyconf.txt Normal file
View file

@ -0,0 +1,13 @@
addkeysection "$FLAK_TAUNTS" DoomTournament
addmenukey "$FLAK_TAUNT4" taunt4
addmenukey "$FLAK_TAUNT1" taunt1
addmenukey "$FLAK_TAUNT2" taunt2
addmenukey "$FLAK_TAUNT3" taunt3
alias taunt4 "netevent uttaunt 4"
alias taunt1 "netevent uttaunt 1"
alias taunt2 "netevent uttaunt 2"
alias taunt3 "netevent uttaunt 3"
defaultbind H taunt4
defaultbind J taunt1
defaultbind K taunt2
defaultbind L taunt3

View file

@ -217,6 +217,11 @@ FLAK_UCORPS = "[WIP] Corpses take damage";
FLAK_DTEST = "Edit Kinsie's test map";
FLAK_FSTRENGTH = "Screen flash strength";
FLAK_SAWAMMO = "Chainsaw uses ammo";
FLAK_TAUNTS = "Taunts";
FLAK_TAUNT1 = "Victory 1";
FLAK_TAUNT2 = "Victory 2";
FLAK_TAUNT3 = "Wave";
FLAK_TAUNT4 = "Pelvic Thrust";
[es esm esn esg esc esa esd esv eso esr ess esf esl esy esz esb ese esh esi esu]
/* Obituaries */
@ -421,6 +426,11 @@ FLAK_UCORPS = "[WIP] Los cadáveres reciben daño";
FLAK_DTEST = "Editar mapa de pruebas de Kinsie";
FLAK_FSTRENGTH = "Intensidad de destellos en pantalla";
FLAK_SAWAMMO = "La motosierra usa combustible";
FLAK_TAUNTS = "Provocaciones";
FLAK_TAUNT1 = "Victoria 1";
FLAK_TAUNT2 = "Victoria 2";
FLAK_TAUNT3 = "Adiós";
FLAK_TAUNT4 = "Movimiento de pelvis";
[fr]

308
modeldef.boss Normal file
View file

@ -0,0 +1,308 @@
Model "UTPlayerTBoss"
{
Path "models"
Model 0 "Boss_d.3d"
SurfaceSkin 0 0 "boss1.png"
SurfaceSkin 0 1 "boss2.png"
SurfaceSkin 0 2 "boss3.png"
SurfaceSkin 0 3 "boss4.png"
SurfaceSkin 0 5 "GunPick1.png"
Scale 0.256 0.23 0.23
Offset 0 -5 29
RollOffset -90
AngleOffset -90
IGNORETRANSLATION // I'll figure out eventually how to make color changes work, but for now this is it
// Still
FrameIndex PLAY A 0 373
FrameIndex PLAY B 0 374
FrameIndex PLAY C 0 375
FrameIndex PLAY D 0 376
FrameIndex PLAY E 0 377
FrameIndex PLAY F 0 378
FrameIndex PLAY G 0 379
// Still (Air)
FrameIndex PLYA A 0 91
// Land
FrameIndex PLYL A 0 93
// Still (Swim)
FrameIndex PLYS A 0 235
FrameIndex PLYS B 0 237
FrameIndex PLYS C 0 239
FrameIndex PLYS D 0 241
FrameIndex PLYS E 0 243
FrameIndex PLYS F 0 245
FrameIndex PLYS G 0 247
// Run
FrameIndex PLAY H 0 137
FrameIndex PLAY I 0 139
FrameIndex PLAY J 0 141
FrameIndex PLAY K 0 143
FrameIndex PLAY L 0 145
// Run (Swim)
FrameIndex PLYS H 0 205
FrameIndex PLYS I 0 208
FrameIndex PLYS J 0 211
FrameIndex PLYS K 0 214
FrameIndex PLYS L 0 217
// Fire (Loop)
FrameIndex PLAY R 0 177
FrameIndex PLAY S 0 179
FrameIndex PLAY T 0 181
FrameIndex PLAY U 0 183
FrameIndex PLAY V 0 185
// Fire (Single)
FrameIndex PLAY M 0 187
FrameIndex PLAY N 0 189
FrameIndex PLAY O 0 191
FrameIndex PLAY P 0 193
FrameIndex PLAY Q 0 195
// Pain
FrameIndex PLAY W 0 0 // gut
FrameIndex PLAY X 0 90 // head
FrameIndex PLAY Y 0 95 // left
FrameIndex PLAY Z 0 136 // right
// Reload
FrameIndex PLYR A 0 400
FrameIndex PLYR B 0 401
FrameIndex PLYR C 0 402
FrameIndex PLYR D 0 403
FrameIndex PLYR E 0 404
FrameIndex PLYR F 0 405
FrameIndex PLYR G 0 406
FrameIndex PLYR H 0 407
// Crouch
FrameIndex PLYC A 0 60
FrameIndex PLYC B 0 63
FrameIndex PLYC C 0 66
FrameIndex PLYC D 0 69
FrameIndex PLYC E 0 72
// Turn
FrameIndex PLYT A 0 298
FrameIndex PLYT B 0 299
// Dead1 (Backflip)
FrameIndex PLD1 A 0 525
FrameIndex PLD1 B 0 526
FrameIndex PLD1 C 0 527
FrameIndex PLD1 D 0 528
FrameIndex PLD1 E 0 529
FrameIndex PLD1 F 0 530
FrameIndex PLD1 G 0 531
FrameIndex PLD1 H 0 532
FrameIndex PLD1 I 0 533
FrameIndex PLD1 J 0 534
FrameIndex PLD1 K 0 535
FrameIndex PLD1 L 0 536
FrameIndex PLD1 M 0 537
// Dead2 (Falling back)
FrameIndex PLD2 A 0 538
FrameIndex PLD2 B 0 539
FrameIndex PLD2 C 0 540
FrameIndex PLD2 D 0 541
FrameIndex PLD2 E 0 542
FrameIndex PLD2 F 0 543
FrameIndex PLD2 G 0 544
FrameIndex PLD2 H 0 545
FrameIndex PLD2 I 0 546
FrameIndex PLD2 J 0 547
FrameIndex PLD2 K 0 548
FrameIndex PLD2 L 0 549
FrameIndex PLD2 M 0 550
FrameIndex PLD2 N 0 551
FrameIndex PLD2 O 0 552
FrameIndex PLD2 P 0 553
// Dead3 (Falling forward)
FrameIndex PLD3 A 0 554
FrameIndex PLD3 B 0 555
FrameIndex PLD3 C 0 556
FrameIndex PLD3 D 0 557
FrameIndex PLD3 E 0 558
FrameIndex PLD3 F 0 559
FrameIndex PLD3 G 0 560
FrameIndex PLD3 H 0 561
FrameIndex PLD3 I 0 562
FrameIndex PLD3 J 0 563
FrameIndex PLD3 K 0 564
FrameIndex PLD3 L 0 565
FrameIndex PLD3 M 0 566
// Dead4 (Decapitate)
FrameIndex PLD4 A 0 567
FrameIndex PLD4 B 0 568
FrameIndex PLD4 C 0 569
FrameIndex PLD4 D 0 570
FrameIndex PLD4 E 0 571
FrameIndex PLD4 F 0 572
FrameIndex PLD4 G 0 573
FrameIndex PLD4 H 0 574
FrameIndex PLD4 I 0 575
FrameIndex PLD4 J 0 576
FrameIndex PLD4 K 0 577
FrameIndex PLD4 L 0 578
FrameIndex PLD4 M 0 579
FrameIndex PLD4 N 0 580
FrameIndex PLD4 O 0 581
FrameIndex PLD4 P 0 582
// Dead7 (Headshot)
FrameIndex PLD7 A 0 583
FrameIndex PLD7 B 0 584
FrameIndex PLD7 C 0 585
FrameIndex PLD7 D 0 586
FrameIndex PLD7 E 0 587
FrameIndex PLD7 F 0 588
FrameIndex PLD7 G 0 589
FrameIndex PLD7 H 0 590
FrameIndex PLD7 I 0 591
FrameIndex PLD7 J 0 592
FrameIndex PLD7 K 0 593
FrameIndex PLD7 L 0 594
FrameIndex PLD7 M 0 595
FrameIndex PLD7 N 0 596
FrameIndex PLD7 O 0 597
FrameIndex PLD7 P 0 598
FrameIndex PLD7 Q 0 599
FrameIndex PLD7 R 0 600
FrameIndex PLD7 S 0 601
FrameIndex PLD7 T 0 602
FrameIndex PLD7 U 0 603
// Dead8 (Stomach)
FrameIndex PLD8 A 0 604
FrameIndex PLD8 B 0 605
FrameIndex PLD8 C 0 606
FrameIndex PLD8 D 0 607
FrameIndex PLD8 E 0 608
FrameIndex PLD8 F 0 609
FrameIndex PLD8 G 0 610
FrameIndex PLD8 H 0 611
FrameIndex PLD8 I 0 612
FrameIndex PLD8 J 0 613
FrameIndex PLD8 K 0 614
FrameIndex PLD8 L 0 615
FrameIndex PLD8 M 0 616
FrameIndex PLD8 N 0 617
FrameIndex PLD8 O 0 618
FrameIndex PLD8 P 0 619
FrameIndex PLD8 Q 0 620
FrameIndex PLD8 R 0 621
// Dead9 (Zapped)
FrameIndex PLD9 A 0 622
FrameIndex PLD9 B 0 623
FrameIndex PLD9 C 0 624
FrameIndex PLD9 D 0 625
FrameIndex PLD9 E 0 626
FrameIndex PLD9 F 0 627
FrameIndex PLD9 G 0 628
FrameIndex PLD9 H 0 629
FrameIndex PLD9 I 0 630
FrameIndex PLD9 J 0 631
FrameIndex PLD9 K 0 632
FrameIndex PLD9 L 0 633
FrameIndex PLD9 M 0 634
FrameIndex PLD9 N 0 635
FrameIndex PLD9 O 0 636
FrameIndex PLD9 P 0 637
FrameIndex PLD9 Q 0 638
FrameIndex PLD9 R 0 639
FrameIndex PLD9 S 0 640
FrameIndex PLD9 T 0 641
//
FrameIndex PD9B A 0 642
FrameIndex PD9B B 0 643
FrameIndex PD9B C 0 644
FrameIndex PD9B D 0 645
FrameIndex PD9B E 0 646
FrameIndex PD9B F 0 647
FrameIndex PD9B G 0 648
FrameIndex PD9B H 0 649
FrameIndex PD9B I 0 650
FrameIndex PD9B J 0 651
// Dead11 (Spinning)
FrameIndex PD11 A 0 652
FrameIndex PD11 B 0 653
FrameIndex PD11 C 0 654
FrameIndex PD11 D 0 655
FrameIndex PD11 E 0 656
FrameIndex PD11 F 0 657
FrameIndex PD11 G 0 658
FrameIndex PD11 H 0 659
FrameIndex PD11 I 0 660
FrameIndex PD11 J 0 661
FrameIndex PD11 K 0 662
FrameIndex PD11 L 0 663
FrameIndex PD11 M 0 664
FrameIndex PD11 N 0 665
FrameIndex PD11 O 0 666
FrameIndex PD11 P 0 667
FrameIndex PD11 Q 0 668
FrameIndex PD11 R 0 669
// Taunt1
FrameIndex PLT1 A 0 5
FrameIndex PLT1 B 0 6
FrameIndex PLT1 C 0 7
FrameIndex PLT1 D 0 8
FrameIndex PLT1 E 0 9
FrameIndex PLT1 F 0 10
FrameIndex PLT1 G 0 11
FrameIndex PLT1 H 0 12
FrameIndex PLT1 I 0 13
FrameIndex PLT1 J 0 14
FrameIndex PLT1 K 0 15
FrameIndex PLT1 L 0 16
FrameIndex PLT1 M 0 17
FrameIndex PLT1 N 0 18
FrameIndex PLT1 O 0 19
FrameIndex PLT1 P 0 20
FrameIndex PLT1 Q 0 21
FrameIndex PLT1 R 0 22
FrameIndex PLT1 S 0 23
FrameIndex PLT1 T 0 24
// Victory
FrameIndex PLT2 A 0 265
FrameIndex PLT2 B 0 266
FrameIndex PLT2 C 0 267
FrameIndex PLT2 D 0 268
FrameIndex PLT2 E 0 269
FrameIndex PLT2 F 0 270
FrameIndex PLT2 G 0 271
FrameIndex PLT2 H 0 272
FrameIndex PLT2 I 0 273
FrameIndex PLT2 J 0 274
FrameIndex PLT2 K 0 275
FrameIndex PLT2 L 0 276
FrameIndex PLT2 M 0 277
FrameIndex PLT2 N 0 278
FrameIndex PLT2 O 0 279
FrameIndex PLT2 P 0 280
FrameIndex PLT2 Q 0 281
FrameIndex PLT2 R 0 282
// Wave
FrameIndex PLT3 A 0 448
FrameIndex PLT3 B 0 449
FrameIndex PLT3 C 0 450
FrameIndex PLT3 D 0 451
FrameIndex PLT3 E 0 452
FrameIndex PLT3 F 0 453
FrameIndex PLT3 G 0 454
FrameIndex PLT3 H 0 455
FrameIndex PLT3 I 0 456
FrameIndex PLT3 J 0 457
FrameIndex PLT3 K 0 458
FrameIndex PLT3 L 0 459
FrameIndex PLT3 M 0 460
FrameIndex PLT3 N 0 461
FrameIndex PLT3 O 0 462
// Thrust
FrameIndex PLT4 A 0 486
FrameIndex PLT4 B 0 487
FrameIndex PLT4 C 0 488
FrameIndex PLT4 D 0 489
FrameIndex PLT4 E 0 490
FrameIndex PLT4 F 0 491
FrameIndex PLT4 G 0 492
FrameIndex PLT4 H 0 493
FrameIndex PLT4 I 0 494
FrameIndex PLT4 J 0 495
FrameIndex PLT4 K 0 496
FrameIndex PLT4 L 0 497
FrameIndex PLT4 M 0 498
FrameIndex PLT4 N 0 499
FrameIndex PLT4 O 0 500
}

308
modeldef.commando Normal file
View file

@ -0,0 +1,308 @@
Model "UTPlayerTMale1"
{
Path "models"
Model 0 "Commando_d.3d"
SurfaceSkin 0 0 "cmdo1.png"
SurfaceSkin 0 1 "cmdo2.png"
SurfaceSkin 0 2 "cmdo3.png"
SurfaceSkin 0 3 "cmdo4.png"
SurfaceSkin 0 5 "GunPick1.png"
Scale 0.256 0.23 0.23
Offset 0 -5 29
RollOffset -90
AngleOffset -90
IGNORETRANSLATION // I'll figure out eventually how to make color changes work, but for now this is it
// Still
FrameIndex PLAY A 0 373
FrameIndex PLAY B 0 374
FrameIndex PLAY C 0 375
FrameIndex PLAY D 0 376
FrameIndex PLAY E 0 377
FrameIndex PLAY F 0 378
FrameIndex PLAY G 0 379
// Still (Air)
FrameIndex PLYA A 0 91
// Land
FrameIndex PLYL A 0 93
// Still (Swim)
FrameIndex PLYS A 0 235
FrameIndex PLYS B 0 237
FrameIndex PLYS C 0 239
FrameIndex PLYS D 0 241
FrameIndex PLYS E 0 243
FrameIndex PLYS F 0 245
FrameIndex PLYS G 0 247
// Run
FrameIndex PLAY H 0 137
FrameIndex PLAY I 0 139
FrameIndex PLAY J 0 141
FrameIndex PLAY K 0 143
FrameIndex PLAY L 0 145
// Run (Swim)
FrameIndex PLYS H 0 205
FrameIndex PLYS I 0 208
FrameIndex PLYS J 0 211
FrameIndex PLYS K 0 214
FrameIndex PLYS L 0 217
// Fire (Loop)
FrameIndex PLAY R 0 177
FrameIndex PLAY S 0 179
FrameIndex PLAY T 0 181
FrameIndex PLAY U 0 183
FrameIndex PLAY V 0 185
// Fire (Single)
FrameIndex PLAY M 0 187
FrameIndex PLAY N 0 189
FrameIndex PLAY O 0 191
FrameIndex PLAY P 0 193
FrameIndex PLAY Q 0 195
// Pain
FrameIndex PLAY W 0 0 // gut
FrameIndex PLAY X 0 90 // head
FrameIndex PLAY Y 0 95 // left
FrameIndex PLAY Z 0 136 // right
// Reload
FrameIndex PLYR A 0 400
FrameIndex PLYR B 0 401
FrameIndex PLYR C 0 402
FrameIndex PLYR D 0 403
FrameIndex PLYR E 0 404
FrameIndex PLYR F 0 405
FrameIndex PLYR G 0 406
FrameIndex PLYR H 0 407
// Crouch
FrameIndex PLYC A 0 60
FrameIndex PLYC B 0 63
FrameIndex PLYC C 0 66
FrameIndex PLYC D 0 69
FrameIndex PLYC E 0 72
// Turn
FrameIndex PLYT A 0 298
FrameIndex PLYT B 0 299
// Dead1 (Backflip)
FrameIndex PLD1 A 0 525
FrameIndex PLD1 B 0 526
FrameIndex PLD1 C 0 527
FrameIndex PLD1 D 0 528
FrameIndex PLD1 E 0 529
FrameIndex PLD1 F 0 530
FrameIndex PLD1 G 0 531
FrameIndex PLD1 H 0 532
FrameIndex PLD1 I 0 533
FrameIndex PLD1 J 0 534
FrameIndex PLD1 K 0 535
FrameIndex PLD1 L 0 536
FrameIndex PLD1 M 0 537
// Dead2 (Falling back)
FrameIndex PLD2 A 0 538
FrameIndex PLD2 B 0 539
FrameIndex PLD2 C 0 540
FrameIndex PLD2 D 0 541
FrameIndex PLD2 E 0 542
FrameIndex PLD2 F 0 543
FrameIndex PLD2 G 0 544
FrameIndex PLD2 H 0 545
FrameIndex PLD2 I 0 546
FrameIndex PLD2 J 0 547
FrameIndex PLD2 K 0 548
FrameIndex PLD2 L 0 549
FrameIndex PLD2 M 0 550
FrameIndex PLD2 N 0 551
FrameIndex PLD2 O 0 552
FrameIndex PLD2 P 0 553
// Dead3 (Falling forward)
FrameIndex PLD3 A 0 554
FrameIndex PLD3 B 0 555
FrameIndex PLD3 C 0 556
FrameIndex PLD3 D 0 557
FrameIndex PLD3 E 0 558
FrameIndex PLD3 F 0 559
FrameIndex PLD3 G 0 560
FrameIndex PLD3 H 0 561
FrameIndex PLD3 I 0 562
FrameIndex PLD3 J 0 563
FrameIndex PLD3 K 0 564
FrameIndex PLD3 L 0 565
FrameIndex PLD3 M 0 566
// Dead4 (Decapitate)
FrameIndex PLD4 A 0 567
FrameIndex PLD4 B 0 568
FrameIndex PLD4 C 0 569
FrameIndex PLD4 D 0 570
FrameIndex PLD4 E 0 571
FrameIndex PLD4 F 0 572
FrameIndex PLD4 G 0 573
FrameIndex PLD4 H 0 574
FrameIndex PLD4 I 0 575
FrameIndex PLD4 J 0 576
FrameIndex PLD4 K 0 577
FrameIndex PLD4 L 0 578
FrameIndex PLD4 M 0 579
FrameIndex PLD4 N 0 580
FrameIndex PLD4 O 0 581
FrameIndex PLD4 P 0 582
// Dead7 (Headshot)
FrameIndex PLD7 A 0 583
FrameIndex PLD7 B 0 584
FrameIndex PLD7 C 0 585
FrameIndex PLD7 D 0 586
FrameIndex PLD7 E 0 587
FrameIndex PLD7 F 0 588
FrameIndex PLD7 G 0 589
FrameIndex PLD7 H 0 590
FrameIndex PLD7 I 0 591
FrameIndex PLD7 J 0 592
FrameIndex PLD7 K 0 593
FrameIndex PLD7 L 0 594
FrameIndex PLD7 M 0 595
FrameIndex PLD7 N 0 596
FrameIndex PLD7 O 0 597
FrameIndex PLD7 P 0 598
FrameIndex PLD7 Q 0 599
FrameIndex PLD7 R 0 600
FrameIndex PLD7 S 0 601
FrameIndex PLD7 T 0 602
FrameIndex PLD7 U 0 603
// Dead8 (Stomach)
FrameIndex PLD8 A 0 604
FrameIndex PLD8 B 0 605
FrameIndex PLD8 C 0 606
FrameIndex PLD8 D 0 607
FrameIndex PLD8 E 0 608
FrameIndex PLD8 F 0 609
FrameIndex PLD8 G 0 610
FrameIndex PLD8 H 0 611
FrameIndex PLD8 I 0 612
FrameIndex PLD8 J 0 613
FrameIndex PLD8 K 0 614
FrameIndex PLD8 L 0 615
FrameIndex PLD8 M 0 616
FrameIndex PLD8 N 0 617
FrameIndex PLD8 O 0 618
FrameIndex PLD8 P 0 619
FrameIndex PLD8 Q 0 620
FrameIndex PLD8 R 0 621
// Dead9 (Zapped)
FrameIndex PLD9 A 0 622
FrameIndex PLD9 B 0 623
FrameIndex PLD9 C 0 624
FrameIndex PLD9 D 0 625
FrameIndex PLD9 E 0 626
FrameIndex PLD9 F 0 627
FrameIndex PLD9 G 0 628
FrameIndex PLD9 H 0 629
FrameIndex PLD9 I 0 630
FrameIndex PLD9 J 0 631
FrameIndex PLD9 K 0 632
FrameIndex PLD9 L 0 633
FrameIndex PLD9 M 0 634
FrameIndex PLD9 N 0 635
FrameIndex PLD9 O 0 636
FrameIndex PLD9 P 0 637
FrameIndex PLD9 Q 0 638
FrameIndex PLD9 R 0 639
FrameIndex PLD9 S 0 640
FrameIndex PLD9 T 0 641
//
FrameIndex PD9B A 0 642
FrameIndex PD9B B 0 643
FrameIndex PD9B C 0 644
FrameIndex PD9B D 0 645
FrameIndex PD9B E 0 646
FrameIndex PD9B F 0 647
FrameIndex PD9B G 0 648
FrameIndex PD9B H 0 649
FrameIndex PD9B I 0 650
FrameIndex PD9B J 0 651
// Dead11 (Spinning)
FrameIndex PD11 A 0 652
FrameIndex PD11 B 0 653
FrameIndex PD11 C 0 654
FrameIndex PD11 D 0 655
FrameIndex PD11 E 0 656
FrameIndex PD11 F 0 657
FrameIndex PD11 G 0 658
FrameIndex PD11 H 0 659
FrameIndex PD11 I 0 660
FrameIndex PD11 J 0 661
FrameIndex PD11 K 0 662
FrameIndex PD11 L 0 663
FrameIndex PD11 M 0 664
FrameIndex PD11 N 0 665
FrameIndex PD11 O 0 666
FrameIndex PD11 P 0 667
FrameIndex PD11 Q 0 668
FrameIndex PD11 R 0 669
// Taunt1
FrameIndex PLT1 A 0 5
FrameIndex PLT1 B 0 6
FrameIndex PLT1 C 0 7
FrameIndex PLT1 D 0 8
FrameIndex PLT1 E 0 9
FrameIndex PLT1 F 0 10
FrameIndex PLT1 G 0 11
FrameIndex PLT1 H 0 12
FrameIndex PLT1 I 0 13
FrameIndex PLT1 J 0 14
FrameIndex PLT1 K 0 15
FrameIndex PLT1 L 0 16
FrameIndex PLT1 M 0 17
FrameIndex PLT1 N 0 18
FrameIndex PLT1 O 0 19
FrameIndex PLT1 P 0 20
FrameIndex PLT1 Q 0 21
FrameIndex PLT1 R 0 22
FrameIndex PLT1 S 0 23
FrameIndex PLT1 T 0 24
// Victory
FrameIndex PLT2 A 0 265
FrameIndex PLT2 B 0 266
FrameIndex PLT2 C 0 267
FrameIndex PLT2 D 0 268
FrameIndex PLT2 E 0 269
FrameIndex PLT2 F 0 270
FrameIndex PLT2 G 0 271
FrameIndex PLT2 H 0 272
FrameIndex PLT2 I 0 273
FrameIndex PLT2 J 0 274
FrameIndex PLT2 K 0 275
FrameIndex PLT2 L 0 276
FrameIndex PLT2 M 0 277
FrameIndex PLT2 N 0 278
FrameIndex PLT2 O 0 279
FrameIndex PLT2 P 0 280
FrameIndex PLT2 Q 0 281
FrameIndex PLT2 R 0 282
// Wave
FrameIndex PLT3 A 0 448
FrameIndex PLT3 B 0 449
FrameIndex PLT3 C 0 450
FrameIndex PLT3 D 0 451
FrameIndex PLT3 E 0 452
FrameIndex PLT3 F 0 453
FrameIndex PLT3 G 0 454
FrameIndex PLT3 H 0 455
FrameIndex PLT3 I 0 456
FrameIndex PLT3 J 0 457
FrameIndex PLT3 K 0 458
FrameIndex PLT3 L 0 459
FrameIndex PLT3 M 0 460
FrameIndex PLT3 N 0 461
FrameIndex PLT3 O 0 462
// Thrust
FrameIndex PLT4 A 0 486
FrameIndex PLT4 B 0 487
FrameIndex PLT4 C 0 488
FrameIndex PLT4 D 0 489
FrameIndex PLT4 E 0 490
FrameIndex PLT4 F 0 491
FrameIndex PLT4 G 0 492
FrameIndex PLT4 H 0 493
FrameIndex PLT4 I 0 494
FrameIndex PLT4 J 0 495
FrameIndex PLT4 K 0 496
FrameIndex PLT4 L 0 497
FrameIndex PLT4 M 0 498
FrameIndex PLT4 N 0 499
FrameIndex PLT4 O 0 500
}

283
modeldef.fcommando Normal file
View file

@ -0,0 +1,283 @@
Model "UTPlayerTFemale1"
{
Path "models"
Model 0 "FCommando_d.3d"
SurfaceSkin 0 0 "fcmd1.png"
SurfaceSkin 0 1 "fcmd2.png"
SurfaceSkin 0 2 "fcmd4.png"
SurfaceSkin 0 4 "GunPick1.png"
Scale 0.256 0.23 0.23
Offset -3 3 36
RollOffset -90
AngleOffset -90
IGNORETRANSLATION // I'll figure out eventually how to make color changes work, but for now this is it
// Still
FrameIndex PLAY A 0 359
FrameIndex PLAY B 0 360
FrameIndex PLAY C 0 361
FrameIndex PLAY D 0 362
FrameIndex PLAY E 0 363
FrameIndex PLAY F 0 364
FrameIndex PLAY G 0 365
// Still (Air)
FrameIndex PLYA A 0 84
// Land
FrameIndex PLYL A 0 86
// Still (Swim)
FrameIndex PLYS A 0 229
FrameIndex PLYS B 0 231
FrameIndex PLYS C 0 233
FrameIndex PLYS D 0 235
FrameIndex PLYS E 0 237
FrameIndex PLYS F 0 239
FrameIndex PLYS G 0 241
// Run
FrameIndex PLAY H 0 125
FrameIndex PLAY I 0 127
FrameIndex PLAY J 0 129
FrameIndex PLAY K 0 131
FrameIndex PLAY L 0 133
// Run (Swim)
FrameIndex PLYS H 0 193
FrameIndex PLYS I 0 196
FrameIndex PLYS J 0 199
FrameIndex PLYS K 0 202
FrameIndex PLYS L 0 205
// Fire (Loop)
FrameIndex PLAY R 0 165
FrameIndex PLAY S 0 167
FrameIndex PLAY T 0 169
FrameIndex PLAY U 0 171
FrameIndex PLAY V 0 173
// Fire (Single)
FrameIndex PLAY M 0 175
FrameIndex PLAY N 0 177
FrameIndex PLAY O 0 179
FrameIndex PLAY P 0 181
FrameIndex PLAY Q 0 183
// Pain
FrameIndex PLAY W 0 0 // gut
FrameIndex PLAY X 0 83 // head
FrameIndex PLAY Y 0 88 // left
FrameIndex PLAY Z 0 124 // right
// Reload
FrameIndex PLYR A 0 386
FrameIndex PLYR B 0 387
FrameIndex PLYR C 0 388
FrameIndex PLYR D 0 389
FrameIndex PLYR E 0 390
FrameIndex PLYR F 0 391
// Crouch
FrameIndex PLYC A 0 53
FrameIndex PLYC B 0 56
FrameIndex PLYC C 0 59
FrameIndex PLYC D 0 62
FrameIndex PLYC E 0 75
// Turn
FrameIndex PLYT A 0 284
FrameIndex PLYT B 0 285
// Dead1 (Stomach)
FrameIndex PLD1 A 0 573
FrameIndex PLD1 B 0 574
FrameIndex PLD1 C 0 575
FrameIndex PLD1 D 0 576
FrameIndex PLD1 E 0 577
FrameIndex PLD1 F 0 578
FrameIndex PLD1 G 0 579
FrameIndex PLD1 H 0 580
FrameIndex PLD1 I 0 581
FrameIndex PLD1 J 0 582
FrameIndex PLD1 K 0 583
FrameIndex PLD1 L 0 584
FrameIndex PLD1 M 0 585
FrameIndex PLD1 N 0 586
FrameIndex PLD1 O 0 587
FrameIndex PLD1 P 0 588
FrameIndex PLD1 Q 0 589
FrameIndex PLD1 R 0 590
FrameIndex PLD1 S 0 591
FrameIndex PLD1 T 0 592
FrameIndex PLD1 U 0 593
FrameIndex PLD1 V 0 594
FrameIndex PLD1 W 0 595
// Dead2 (Spin back)
FrameIndex PLD2 A 0 515
FrameIndex PLD2 B 0 516
FrameIndex PLD2 C 0 517
FrameIndex PLD2 D 0 518
FrameIndex PLD2 E 0 519
FrameIndex PLD2 F 0 520
FrameIndex PLD2 G 0 521
FrameIndex PLD2 H 0 522
FrameIndex PLD2 I 0 523
FrameIndex PLD2 J 0 524
FrameIndex PLD2 K 0 525
FrameIndex PLD2 L 0 526
FrameIndex PLD2 M 0 527
FrameIndex PLD2 N 0 528
FrameIndex PLD2 O 0 529
FrameIndex PLD2 P 0 530
FrameIndex PLD2 Q 0 531
FrameIndex PLD2 R 0 532
// Dead3 (Fall back)
FrameIndex PLD3 A 0 533
FrameIndex PLD3 B 0 534
FrameIndex PLD3 C 0 535
FrameIndex PLD3 D 0 536
FrameIndex PLD3 E 0 537
FrameIndex PLD3 F 0 538
FrameIndex PLD3 G 0 539
FrameIndex PLD3 H 0 540
FrameIndex PLD3 I 0 541
FrameIndex PLD3 J 0 542
FrameIndex PLD3 K 0 543
FrameIndex PLD3 L 0 544
FrameIndex PLD3 M 0 545
FrameIndex PLD3 N 0 546
FrameIndex PLD3 O 0 547
FrameIndex PLD3 P 0 548
// Dead4 (Fall forward)
FrameIndex PLD4 A 0 549
FrameIndex PLD4 B 0 550
FrameIndex PLD4 C 0 551
FrameIndex PLD4 D 0 552
FrameIndex PLD4 E 0 553
FrameIndex PLD4 F 0 554
FrameIndex PLD4 G 0 555
FrameIndex PLD4 H 0 556
FrameIndex PLD4 I 0 557
FrameIndex PLD4 J 0 558
FrameIndex PLD4 K 0 559
FrameIndex PLD4 L 0 560
FrameIndex PLD4 M 0 561
// Dead5 (Leg blown)
FrameIndex PLD5 A 0 596
FrameIndex PLD5 B 0 597
FrameIndex PLD5 C 0 598
FrameIndex PLD5 D 0 599
FrameIndex PLD5 E 0 600
FrameIndex PLD5 F 0 601
FrameIndex PLD5 G 0 602
FrameIndex PLD5 H 0 603
FrameIndex PLD5 I 0 604
FrameIndex PLD5 J 0 605
FrameIndex PLD5 K 0 606
FrameIndex PLD5 L 0 607
FrameIndex PLD5 M 0 608
// Dead6 (Decapitate)
FrameIndex PLD6 A 0 562
FrameIndex PLD6 B 0 563
FrameIndex PLD6 C 0 564
FrameIndex PLD6 D 0 565
FrameIndex PLD6 E 0 566
FrameIndex PLD6 F 0 567
FrameIndex PLD6 G 0 568
FrameIndex PLD6 H 0 569
FrameIndex PLD6 I 0 570
FrameIndex PLD6 J 0 571
FrameIndex PLD6 K 0 572
// Dead7 (Turn and fall)
FrameIndex PLD7 A 0 640
FrameIndex PLD7 B 0 641
FrameIndex PLD7 C 0 642
FrameIndex PLD7 D 0 643
FrameIndex PLD7 E 0 644
FrameIndex PLD7 F 0 645
FrameIndex PLD7 G 0 646
FrameIndex PLD7 H 0 647
FrameIndex PLD7 I 0 648
FrameIndex PLD7 J 0 649
FrameIndex PLD7 K 0 650
// Dead9 (Zapped)
FrameIndex PLD9 A 0 609
FrameIndex PLD9 B 0 610
FrameIndex PLD9 C 0 611
FrameIndex PLD9 D 0 612
FrameIndex PLD9 E 0 613
FrameIndex PLD9 F 0 614
FrameIndex PLD9 G 0 615
FrameIndex PLD9 H 0 616
FrameIndex PLD9 I 0 617
FrameIndex PLD9 J 0 618
FrameIndex PLD9 K 0 619
FrameIndex PLD9 L 0 620
FrameIndex PLD9 M 0 621
FrameIndex PLD9 N 0 622
FrameIndex PLD9 O 0 623
FrameIndex PLD9 P 0 624
FrameIndex PLD9 Q 0 625
FrameIndex PLD9 R 0 626
FrameIndex PLD9 S 0 627
FrameIndex PLD9 T 0 628
//
FrameIndex PD9B A 0 629
FrameIndex PD9B B 0 630
FrameIndex PD9B C 0 631
FrameIndex PD9B D 0 632
FrameIndex PD9B E 0 633
FrameIndex PD9B F 0 634
FrameIndex PD9B G 0 635
FrameIndex PD9B H 0 636
FrameIndex PD9B I 0 637
FrameIndex PD9B J 0 638
FrameIndex PD9B K 0 639
// Taunt1
FrameIndex PLT1 A 0 5
FrameIndex PLT1 B 0 6
FrameIndex PLT1 C 0 7
FrameIndex PLT1 D 0 8
FrameIndex PLT1 E 0 9
FrameIndex PLT1 F 0 10
FrameIndex PLT1 G 0 11
FrameIndex PLT1 H 0 12
FrameIndex PLT1 I 0 13
FrameIndex PLT1 J 0 14
FrameIndex PLT1 K 0 15
FrameIndex PLT1 L 0 16
FrameIndex PLT1 M 0 17
FrameIndex PLT1 N 0 18
FrameIndex PLT1 O 0 19
// Victory
FrameIndex PLT2 A 0 259
FrameIndex PLT2 B 0 260
FrameIndex PLT2 C 0 261
FrameIndex PLT2 D 0 262
FrameIndex PLT2 E 0 263
FrameIndex PLT2 F 0 264
FrameIndex PLT2 G 0 265
FrameIndex PLT2 H 0 266
FrameIndex PLT2 I 0 267
FrameIndex PLT2 J 0 268
// Wave
FrameIndex PLT3 A 0 427
FrameIndex PLT3 B 0 428
FrameIndex PLT3 C 0 429
FrameIndex PLT3 D 0 430
FrameIndex PLT3 E 0 431
FrameIndex PLT3 F 0 432
FrameIndex PLT3 G 0 433
FrameIndex PLT3 H 0 434
FrameIndex PLT3 I 0 435
FrameIndex PLT3 J 0 436
FrameIndex PLT3 K 0 437
FrameIndex PLT3 L 0 438
FrameIndex PLT3 M 0 439
FrameIndex PLT3 N 0 440
FrameIndex PLT3 O 0 441
// Thrust
FrameIndex PLT4 A 0 465
FrameIndex PLT4 B 0 466
FrameIndex PLT4 C 0 467
FrameIndex PLT4 D 0 468
FrameIndex PLT4 E 0 469
FrameIndex PLT4 F 0 470
FrameIndex PLT4 G 0 471
FrameIndex PLT4 H 0 472
FrameIndex PLT4 I 0 473
FrameIndex PLT4 J 0 474
FrameIndex PLT4 K 0 475
FrameIndex PLT4 L 0 476
FrameIndex PLT4 M 0 477
FrameIndex PLT4 N 0 478
FrameIndex PLT4 O 0 479
}

View file

@ -130,7 +130,7 @@ Model "UTFemaleArm"
Path "models"
Model 0 "femalearmm_d.3d"
Skin 0 "femalearmT.png"
Scale 0.16 0.16 0.192
Scale 0.2 0.2 0.24
Offset 0 0 1.5
USEACTORPITCH
USEACTORROLL
@ -145,7 +145,7 @@ Model "UTFemaleFoot"
Path "models"
Model 0 "femalefootm_d.3d"
Skin 0 "femalefootT.png"
Scale 0.16 0.16 0.192
Scale 0.2 0.2 0.24
Offset 0 0 1.5
USEACTORPITCH
USEACTORROLL
@ -160,7 +160,7 @@ Model "UTFemaleTorso"
Path "models"
Model 0 "femaletorsom_d.3d"
Skin 0 "femaletorsoT.png"
Scale 0.16 0.16 0.192
Scale 0.2 0.2 0.24
Offset 0 0 4
USEACTORPITCH
USEACTORROLL
@ -175,7 +175,7 @@ Model "UTMaleArm"
Path "models"
Model 0 "malearmm_d.3d"
Skin 0 "malearmT.png"
Scale 0.16 0.16 0.192
Scale 0.2 0.2 0.24
Offset 0 0 1.5
USEACTORPITCH
USEACTORROLL
@ -190,7 +190,7 @@ Model "UTMaleFoot"
Path "models"
Model 0 "malefootm_d.3d"
Skin 0 "malefootT.png"
Scale 0.16 0.16 0.192
Scale 0.2 0.2 0.24
Offset 0 0 1.5
USEACTORPITCH
USEACTORROLL
@ -205,7 +205,7 @@ Model "UTMaleTorso"
Path "models"
Model 0 "maletorsom_d.3d"
Skin 0 "maletorsoT.png"
Scale 0.16 0.16 0.192
Scale 0.2 0.2 0.24
Offset 0 0 4
USEACTORPITCH
USEACTORROLL
@ -215,12 +215,42 @@ Model "UTMaleTorso"
FrameIndex UGIB A 0 0
}
Model "UTBossArm"
{
Path "models"
Model 0 "bossarmm_d.3d"
Skin 0 "bossgibT.png"
Scale 0.12 0.12 0.144
Offset 0 0 1.5
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 1.5
FrameIndex UGIB A 0 0
}
Model "UTBossFoot"
{
Path "models"
Model 0 "bossthighm_d.3d"
Skin 0 "bossgibT.png"
Scale 0.12 0.12 0.144
Offset 0 0 1.5
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 1.5
FrameIndex UGIB A 0 0
}
Model "UTHeadFemale"
{
Path "models"
Model 0 "HeadFemaleM_d.3d"
Skin 0 "FMT1.png"
Scale 0.14 0.14 0.168
Scale 0.2 0.2 0.24
Offset 0 0 3
AngleOffset -90
USEACTORPITCH
@ -236,7 +266,23 @@ Model "UTHeadMale"
Path "models"
Model 0 "headmalem_d.3d"
Skin 0 "MMT1.png"
Scale 0.14 0.14 0.168
Scale 0.2 0.2 0.24
Offset 0 0 3
AngleOffset -90
USEACTORPITCH
USEACTORROLL
USEROTATIONCENTER
Rotation-Center 0 0 3
FrameIndex UGIB A 0 0
}
Model "UTHeadBoss"
{
Path "models"
Model 0 "bossheadm_d.3d"
Skin 0 "bossgibT.png"
Scale 0.07 0.07 0.084
Offset 0 0 3
AngleOffset -90
USEACTORPITCH

284
modeldef.sgirl Normal file
View file

@ -0,0 +1,284 @@
Model "UTPlayerTFemale2"
{
Path "models"
Model 0 "SGirl_d.3d"
SurfaceSkin 0 0 "army1.png"
SurfaceSkin 0 1 "army2.png"
SurfaceSkin 0 2 "army3.png"
SurfaceSkin 0 3 "army4.png"
SurfaceSkin 0 5 "GunPick1.png"
Scale 0.256 0.23 0.23
Offset -3 3 36
RollOffset -90
AngleOffset -90
IGNORETRANSLATION // I'll figure out eventually how to make color changes work, but for now this is it
// Still
FrameIndex PLAY A 0 359
FrameIndex PLAY B 0 360
FrameIndex PLAY C 0 361
FrameIndex PLAY D 0 362
FrameIndex PLAY E 0 363
FrameIndex PLAY F 0 364
FrameIndex PLAY G 0 365
// Still (Air)
FrameIndex PLYA A 0 84
// Land
FrameIndex PLYL A 0 86
// Still (Swim)
FrameIndex PLYS A 0 229
FrameIndex PLYS B 0 231
FrameIndex PLYS C 0 233
FrameIndex PLYS D 0 235
FrameIndex PLYS E 0 237
FrameIndex PLYS F 0 239
FrameIndex PLYS G 0 241
// Run
FrameIndex PLAY H 0 125
FrameIndex PLAY I 0 127
FrameIndex PLAY J 0 129
FrameIndex PLAY K 0 131
FrameIndex PLAY L 0 133
// Run (Swim)
FrameIndex PLYS H 0 193
FrameIndex PLYS I 0 196
FrameIndex PLYS J 0 199
FrameIndex PLYS K 0 202
FrameIndex PLYS L 0 205
// Fire (Loop)
FrameIndex PLAY R 0 165
FrameIndex PLAY S 0 167
FrameIndex PLAY T 0 169
FrameIndex PLAY U 0 171
FrameIndex PLAY V 0 173
// Fire (Single)
FrameIndex PLAY M 0 175
FrameIndex PLAY N 0 177
FrameIndex PLAY O 0 179
FrameIndex PLAY P 0 181
FrameIndex PLAY Q 0 183
// Pain
FrameIndex PLAY W 0 0 // gut
FrameIndex PLAY X 0 83 // head
FrameIndex PLAY Y 0 88 // left
FrameIndex PLAY Z 0 124 // right
// Reload
FrameIndex PLYR A 0 386
FrameIndex PLYR B 0 387
FrameIndex PLYR C 0 388
FrameIndex PLYR D 0 389
FrameIndex PLYR E 0 390
FrameIndex PLYR F 0 391
// Crouch
FrameIndex PLYC A 0 53
FrameIndex PLYC B 0 56
FrameIndex PLYC C 0 59
FrameIndex PLYC D 0 62
FrameIndex PLYC E 0 75
// Turn
FrameIndex PLYT A 0 284
FrameIndex PLYT B 0 285
// Dead1 (Stomach)
FrameIndex PLD1 A 0 573
FrameIndex PLD1 B 0 574
FrameIndex PLD1 C 0 575
FrameIndex PLD1 D 0 576
FrameIndex PLD1 E 0 577
FrameIndex PLD1 F 0 578
FrameIndex PLD1 G 0 579
FrameIndex PLD1 H 0 580
FrameIndex PLD1 I 0 581
FrameIndex PLD1 J 0 582
FrameIndex PLD1 K 0 583
FrameIndex PLD1 L 0 584
FrameIndex PLD1 M 0 585
FrameIndex PLD1 N 0 586
FrameIndex PLD1 O 0 587
FrameIndex PLD1 P 0 588
FrameIndex PLD1 Q 0 589
FrameIndex PLD1 R 0 590
FrameIndex PLD1 S 0 591
FrameIndex PLD1 T 0 592
FrameIndex PLD1 U 0 593
FrameIndex PLD1 V 0 594
FrameIndex PLD1 W 0 595
// Dead2 (Spin back)
FrameIndex PLD2 A 0 515
FrameIndex PLD2 B 0 516
FrameIndex PLD2 C 0 517
FrameIndex PLD2 D 0 518
FrameIndex PLD2 E 0 519
FrameIndex PLD2 F 0 520
FrameIndex PLD2 G 0 521
FrameIndex PLD2 H 0 522
FrameIndex PLD2 I 0 523
FrameIndex PLD2 J 0 524
FrameIndex PLD2 K 0 525
FrameIndex PLD2 L 0 526
FrameIndex PLD2 M 0 527
FrameIndex PLD2 N 0 528
FrameIndex PLD2 O 0 529
FrameIndex PLD2 P 0 530
FrameIndex PLD2 Q 0 531
FrameIndex PLD2 R 0 532
// Dead3 (Fall back)
FrameIndex PLD3 A 0 533
FrameIndex PLD3 B 0 534
FrameIndex PLD3 C 0 535
FrameIndex PLD3 D 0 536
FrameIndex PLD3 E 0 537
FrameIndex PLD3 F 0 538
FrameIndex PLD3 G 0 539
FrameIndex PLD3 H 0 540
FrameIndex PLD3 I 0 541
FrameIndex PLD3 J 0 542
FrameIndex PLD3 K 0 543
FrameIndex PLD3 L 0 544
FrameIndex PLD3 M 0 545
FrameIndex PLD3 N 0 546
FrameIndex PLD3 O 0 547
FrameIndex PLD3 P 0 548
// Dead4 (Fall forward)
FrameIndex PLD4 A 0 549
FrameIndex PLD4 B 0 550
FrameIndex PLD4 C 0 551
FrameIndex PLD4 D 0 552
FrameIndex PLD4 E 0 553
FrameIndex PLD4 F 0 554
FrameIndex PLD4 G 0 555
FrameIndex PLD4 H 0 556
FrameIndex PLD4 I 0 557
FrameIndex PLD4 J 0 558
FrameIndex PLD4 K 0 559
FrameIndex PLD4 L 0 560
FrameIndex PLD4 M 0 561
// Dead5 (Leg blown)
FrameIndex PLD5 A 0 596
FrameIndex PLD5 B 0 597
FrameIndex PLD5 C 0 598
FrameIndex PLD5 D 0 599
FrameIndex PLD5 E 0 600
FrameIndex PLD5 F 0 601
FrameIndex PLD5 G 0 602
FrameIndex PLD5 H 0 603
FrameIndex PLD5 I 0 604
FrameIndex PLD5 J 0 605
FrameIndex PLD5 K 0 606
FrameIndex PLD5 L 0 607
FrameIndex PLD5 M 0 608
// Dead6 (Decapitate)
FrameIndex PLD6 A 0 562
FrameIndex PLD6 B 0 563
FrameIndex PLD6 C 0 564
FrameIndex PLD6 D 0 565
FrameIndex PLD6 E 0 566
FrameIndex PLD6 F 0 567
FrameIndex PLD6 G 0 568
FrameIndex PLD6 H 0 569
FrameIndex PLD6 I 0 570
FrameIndex PLD6 J 0 571
FrameIndex PLD6 K 0 572
// Dead7 (Turn and fall)
FrameIndex PLD7 A 0 640
FrameIndex PLD7 B 0 641
FrameIndex PLD7 C 0 642
FrameIndex PLD7 D 0 643
FrameIndex PLD7 E 0 644
FrameIndex PLD7 F 0 645
FrameIndex PLD7 G 0 646
FrameIndex PLD7 H 0 647
FrameIndex PLD7 I 0 648
FrameIndex PLD7 J 0 649
FrameIndex PLD7 K 0 650
// Dead9 (Zapped)
FrameIndex PLD9 A 0 609
FrameIndex PLD9 B 0 610
FrameIndex PLD9 C 0 611
FrameIndex PLD9 D 0 612
FrameIndex PLD9 E 0 613
FrameIndex PLD9 F 0 614
FrameIndex PLD9 G 0 615
FrameIndex PLD9 H 0 616
FrameIndex PLD9 I 0 617
FrameIndex PLD9 J 0 618
FrameIndex PLD9 K 0 619
FrameIndex PLD9 L 0 620
FrameIndex PLD9 M 0 621
FrameIndex PLD9 N 0 622
FrameIndex PLD9 O 0 623
FrameIndex PLD9 P 0 624
FrameIndex PLD9 Q 0 625
FrameIndex PLD9 R 0 626
FrameIndex PLD9 S 0 627
FrameIndex PLD9 T 0 628
//
FrameIndex PD9B A 0 629
FrameIndex PD9B B 0 630
FrameIndex PD9B C 0 631
FrameIndex PD9B D 0 632
FrameIndex PD9B E 0 633
FrameIndex PD9B F 0 634
FrameIndex PD9B G 0 635
FrameIndex PD9B H 0 636
FrameIndex PD9B I 0 637
FrameIndex PD9B J 0 638
FrameIndex PD9B K 0 639
// Taunt1
FrameIndex PLT1 A 0 5
FrameIndex PLT1 B 0 6
FrameIndex PLT1 C 0 7
FrameIndex PLT1 D 0 8
FrameIndex PLT1 E 0 9
FrameIndex PLT1 F 0 10
FrameIndex PLT1 G 0 11
FrameIndex PLT1 H 0 12
FrameIndex PLT1 I 0 13
FrameIndex PLT1 J 0 14
FrameIndex PLT1 K 0 15
FrameIndex PLT1 L 0 16
FrameIndex PLT1 M 0 17
FrameIndex PLT1 N 0 18
FrameIndex PLT1 O 0 19
// Victory
FrameIndex PLT2 A 0 259
FrameIndex PLT2 B 0 260
FrameIndex PLT2 C 0 261
FrameIndex PLT2 D 0 262
FrameIndex PLT2 E 0 263
FrameIndex PLT2 F 0 264
FrameIndex PLT2 G 0 265
FrameIndex PLT2 H 0 266
FrameIndex PLT2 I 0 267
FrameIndex PLT2 J 0 268
// Wave
FrameIndex PLT3 A 0 427
FrameIndex PLT3 B 0 428
FrameIndex PLT3 C 0 429
FrameIndex PLT3 D 0 430
FrameIndex PLT3 E 0 431
FrameIndex PLT3 F 0 432
FrameIndex PLT3 G 0 433
FrameIndex PLT3 H 0 434
FrameIndex PLT3 I 0 435
FrameIndex PLT3 J 0 436
FrameIndex PLT3 K 0 437
FrameIndex PLT3 L 0 438
FrameIndex PLT3 M 0 439
FrameIndex PLT3 N 0 440
FrameIndex PLT3 O 0 441
// Thrust
FrameIndex PLT4 A 0 465
FrameIndex PLT4 B 0 466
FrameIndex PLT4 C 0 467
FrameIndex PLT4 D 0 468
FrameIndex PLT4 E 0 469
FrameIndex PLT4 F 0 470
FrameIndex PLT4 G 0 471
FrameIndex PLT4 H 0 472
FrameIndex PLT4 I 0 473
FrameIndex PLT4 J 0 474
FrameIndex PLT4 K 0 475
FrameIndex PLT4 L 0 476
FrameIndex PLT4 M 0 477
FrameIndex PLT4 N 0 478
FrameIndex PLT4 O 0 479
}

325
modeldef.soldier Normal file
View file

@ -0,0 +1,325 @@
Model "UTPlayerTMale2"
{
Path "models"
Model 0 "Soldier_d.3d"
SurfaceSkin 0 0 "sldr1.png"
SurfaceSkin 0 1 "sldr2.png"
SurfaceSkin 0 2 "sldr3.png"
SurfaceSkin 0 3 "sldr4.png"
SurfaceSkin 0 5 "GunPick1.png"
Scale 0.256 0.23 0.23
Offset 0 -5 29
RollOffset -90
AngleOffset -90
IGNORETRANSLATION // I'll figure out eventually how to make color changes work, but for now this is it
// Still
FrameIndex PLAY A 0 373
FrameIndex PLAY B 0 374
FrameIndex PLAY C 0 375
FrameIndex PLAY D 0 376
FrameIndex PLAY E 0 377
FrameIndex PLAY F 0 378
FrameIndex PLAY G 0 379
// Still (Air)
FrameIndex PLYA A 0 91
// Land
FrameIndex PLYL A 0 93
// Still (Swim)
FrameIndex PLYS A 0 235
FrameIndex PLYS B 0 237
FrameIndex PLYS C 0 239
FrameIndex PLYS D 0 241
FrameIndex PLYS E 0 243
FrameIndex PLYS F 0 245
FrameIndex PLYS G 0 247
// Run
FrameIndex PLAY H 0 137
FrameIndex PLAY I 0 139
FrameIndex PLAY J 0 141
FrameIndex PLAY K 0 143
FrameIndex PLAY L 0 145
// Run (Swim)
FrameIndex PLYS H 0 205
FrameIndex PLYS I 0 208
FrameIndex PLYS J 0 211
FrameIndex PLYS K 0 214
FrameIndex PLYS L 0 217
// Fire (Loop)
FrameIndex PLAY R 0 177
FrameIndex PLAY S 0 179
FrameIndex PLAY T 0 181
FrameIndex PLAY U 0 183
FrameIndex PLAY V 0 185
// Fire (Single)
FrameIndex PLAY M 0 187
FrameIndex PLAY N 0 189
FrameIndex PLAY O 0 191
FrameIndex PLAY P 0 193
FrameIndex PLAY Q 0 195
// Pain
FrameIndex PLAY W 0 0 // gut
FrameIndex PLAY X 0 90 // head
FrameIndex PLAY Y 0 95 // left
FrameIndex PLAY Z 0 136 // right
// Reload
FrameIndex PLYR A 0 400
FrameIndex PLYR B 0 401
FrameIndex PLYR C 0 402
FrameIndex PLYR D 0 403
FrameIndex PLYR E 0 404
FrameIndex PLYR F 0 405
FrameIndex PLYR G 0 406
FrameIndex PLYR H 0 407
// Crouch
FrameIndex PLYC A 0 60
FrameIndex PLYC B 0 63
FrameIndex PLYC C 0 66
FrameIndex PLYC D 0 69
FrameIndex PLYC E 0 72
// Turn
FrameIndex PLYT A 0 298
FrameIndex PLYT B 0 299
// Dead1 (Backflip)
FrameIndex PLD1 A 0 525
FrameIndex PLD1 B 0 526
FrameIndex PLD1 C 0 527
FrameIndex PLD1 D 0 528
FrameIndex PLD1 E 0 529
FrameIndex PLD1 F 0 530
FrameIndex PLD1 G 0 531
FrameIndex PLD1 H 0 532
FrameIndex PLD1 I 0 533
FrameIndex PLD1 J 0 534
FrameIndex PLD1 K 0 535
FrameIndex PLD1 L 0 536
FrameIndex PLD1 M 0 537
// Dead2 (Falling back)
FrameIndex PLD2 A 0 538
FrameIndex PLD2 B 0 539
FrameIndex PLD2 C 0 540
FrameIndex PLD2 D 0 541
FrameIndex PLD2 E 0 542
FrameIndex PLD2 F 0 543
FrameIndex PLD2 G 0 544
FrameIndex PLD2 H 0 545
FrameIndex PLD2 I 0 546
FrameIndex PLD2 J 0 547
FrameIndex PLD2 K 0 548
FrameIndex PLD2 L 0 549
FrameIndex PLD2 M 0 550
FrameIndex PLD2 N 0 551
FrameIndex PLD2 O 0 552
FrameIndex PLD2 P 0 553
// Dead3 (Falling forward)
FrameIndex PLD3 A 0 554
FrameIndex PLD3 B 0 555
FrameIndex PLD3 C 0 556
FrameIndex PLD3 D 0 557
FrameIndex PLD3 E 0 558
FrameIndex PLD3 F 0 559
FrameIndex PLD3 G 0 560
FrameIndex PLD3 H 0 561
FrameIndex PLD3 I 0 562
FrameIndex PLD3 J 0 563
FrameIndex PLD3 K 0 564
FrameIndex PLD3 L 0 565
FrameIndex PLD3 M 0 566
// Dead4 (Decapitate)
FrameIndex PLD4 A 0 567
FrameIndex PLD4 B 0 568
FrameIndex PLD4 C 0 569
FrameIndex PLD4 D 0 570
FrameIndex PLD4 E 0 571
FrameIndex PLD4 F 0 572
FrameIndex PLD4 G 0 573
FrameIndex PLD4 H 0 574
FrameIndex PLD4 I 0 575
FrameIndex PLD4 J 0 576
FrameIndex PLD4 K 0 577
FrameIndex PLD4 L 0 578
FrameIndex PLD4 M 0 579
FrameIndex PLD4 N 0 580
FrameIndex PLD4 O 0 581
FrameIndex PLD4 P 0 582
// Dead7 (Headshot)
FrameIndex PLD7 A 0 583
FrameIndex PLD7 B 0 584
FrameIndex PLD7 C 0 585
FrameIndex PLD7 D 0 586
FrameIndex PLD7 E 0 587
FrameIndex PLD7 F 0 588
FrameIndex PLD7 G 0 589
FrameIndex PLD7 H 0 590
FrameIndex PLD7 I 0 591
FrameIndex PLD7 J 0 592
FrameIndex PLD7 K 0 593
FrameIndex PLD7 L 0 594
FrameIndex PLD7 M 0 595
FrameIndex PLD7 N 0 596
FrameIndex PLD7 O 0 597
FrameIndex PLD7 P 0 598
FrameIndex PLD7 Q 0 599
FrameIndex PLD7 R 0 600
FrameIndex PLD7 S 0 601
FrameIndex PLD7 T 0 602
FrameIndex PLD7 U 0 603
// Dead8 (Stomach)
FrameIndex PLD8 A 0 604
FrameIndex PLD8 B 0 605
FrameIndex PLD8 C 0 606
FrameIndex PLD8 D 0 607
FrameIndex PLD8 E 0 608
FrameIndex PLD8 F 0 609
FrameIndex PLD8 G 0 610
FrameIndex PLD8 H 0 611
FrameIndex PLD8 I 0 612
FrameIndex PLD8 J 0 613
FrameIndex PLD8 K 0 614
FrameIndex PLD8 L 0 615
FrameIndex PLD8 M 0 616
FrameIndex PLD8 N 0 617
FrameIndex PLD8 O 0 618
FrameIndex PLD8 P 0 619
FrameIndex PLD8 Q 0 620
FrameIndex PLD8 R 0 621
// Dead9 (Zapped)
FrameIndex PLD9 A 0 622
FrameIndex PLD9 B 0 623
FrameIndex PLD9 C 0 624
FrameIndex PLD9 D 0 625
FrameIndex PLD9 E 0 626
FrameIndex PLD9 F 0 627
FrameIndex PLD9 G 0 628
FrameIndex PLD9 H 0 629
FrameIndex PLD9 I 0 630
FrameIndex PLD9 J 0 631
FrameIndex PLD9 K 0 632
FrameIndex PLD9 L 0 633
FrameIndex PLD9 M 0 634
FrameIndex PLD9 N 0 635
FrameIndex PLD9 O 0 636
FrameIndex PLD9 P 0 637
FrameIndex PLD9 Q 0 638
FrameIndex PLD9 R 0 639
FrameIndex PLD9 S 0 640
FrameIndex PLD9 T 0 641
//
FrameIndex PD9B A 0 642
FrameIndex PD9B B 0 643
FrameIndex PD9B C 0 644
FrameIndex PD9B D 0 645
FrameIndex PD9B E 0 646
FrameIndex PD9B F 0 647
FrameIndex PD9B G 0 648
FrameIndex PD9B H 0 649
FrameIndex PD9B I 0 650
FrameIndex PD9B J 0 651
// Dead11 (Spinning)
FrameIndex PD11 A 0 652
FrameIndex PD11 B 0 653
FrameIndex PD11 C 0 654
FrameIndex PD11 D 0 655
FrameIndex PD11 E 0 656
FrameIndex PD11 F 0 657
FrameIndex PD11 G 0 658
FrameIndex PD11 H 0 659
FrameIndex PD11 I 0 660
FrameIndex PD11 J 0 661
FrameIndex PD11 K 0 662
FrameIndex PD11 L 0 663
FrameIndex PD11 M 0 664
FrameIndex PD11 N 0 665
FrameIndex PD11 O 0 666
FrameIndex PD11 P 0 667
FrameIndex PD11 Q 0 668
FrameIndex PD11 R 0 669
// Taunt1
FrameIndex PLT1 A 0 5
FrameIndex PLT1 B 0 6
FrameIndex PLT1 C 0 7
FrameIndex PLT1 D 0 8
FrameIndex PLT1 E 0 9
FrameIndex PLT1 F 0 10
FrameIndex PLT1 G 0 11
FrameIndex PLT1 H 0 12
FrameIndex PLT1 I 0 13
FrameIndex PLT1 J 0 14
FrameIndex PLT1 K 0 15
FrameIndex PLT1 L 0 16
FrameIndex PLT1 M 0 17
FrameIndex PLT1 N 0 18
FrameIndex PLT1 O 0 19
FrameIndex PLT1 P 0 20
FrameIndex PLT1 Q 0 21
FrameIndex PLT1 R 0 22
FrameIndex PLT1 S 0 23
FrameIndex PLT1 T 0 24
// Victory
FrameIndex PLT2 A 0 265
FrameIndex PLT2 B 0 266
FrameIndex PLT2 C 0 267
FrameIndex PLT2 D 0 268
FrameIndex PLT2 E 0 269
FrameIndex PLT2 F 0 270
FrameIndex PLT2 G 0 271
FrameIndex PLT2 H 0 272
FrameIndex PLT2 I 0 273
FrameIndex PLT2 J 0 274
FrameIndex PLT2 K 0 275
FrameIndex PLT2 L 0 276
FrameIndex PLT2 M 0 277
FrameIndex PLT2 N 0 278
FrameIndex PLT2 O 0 279
FrameIndex PLT2 P 0 280
FrameIndex PLT2 Q 0 281
FrameIndex PLT2 R 0 282
// Wave
FrameIndex PLT3 A 0 448
FrameIndex PLT3 B 0 449
FrameIndex PLT3 C 0 450
FrameIndex PLT3 D 0 451
FrameIndex PLT3 E 0 452
FrameIndex PLT3 F 0 453
FrameIndex PLT3 G 0 454
FrameIndex PLT3 H 0 455
FrameIndex PLT3 I 0 456
FrameIndex PLT3 J 0 457
FrameIndex PLT3 K 0 458
FrameIndex PLT3 L 0 459
FrameIndex PLT3 M 0 460
FrameIndex PLT3 N 0 461
FrameIndex PLT3 O 0 462
// Thrust
FrameIndex PLT4 A 0 486
FrameIndex PLT4 B 0 487
FrameIndex PLT4 C 0 488
FrameIndex PLT4 D 0 489
FrameIndex PLT4 E 0 490
FrameIndex PLT4 F 0 491
FrameIndex PLT4 G 0 492
FrameIndex PLT4 H 0 493
FrameIndex PLT4 I 0 494
FrameIndex PLT4 J 0 495
FrameIndex PLT4 K 0 496
FrameIndex PLT4 L 0 497
FrameIndex PLT4 M 0 498
FrameIndex PLT4 N 0 499
FrameIndex PLT4 O 0 500
}
// Will use Soldier model
Model "TranslocatorAfterimage"
{
Path "models"
Model 0 "Soldier_d.3d"
SurfaceSkin 0 0 "sldr1.png"
SurfaceSkin 0 1 "sldr2.png"
SurfaceSkin 0 2 "sldr3.png"
SurfaceSkin 0 3 "sldr4.png"
SurfaceSkin 0 5 "GunPick1.png"
Scale 0.256 0.23 0.23
Offset 0 -5 29
RollOffset -90
AngleOffset -90
FrameIndex PLAY A 0 187
}

BIN
models/Boss_a.3d Normal file

Binary file not shown.

BIN
models/Boss_d.3d Normal file

Binary file not shown.

BIN
models/Commando_a.3d Normal file

Binary file not shown.

BIN
models/Commando_d.3d Normal file

Binary file not shown.

BIN
models/FCommando_a.3d Normal file

Binary file not shown.

BIN
models/FCommando_d.3d Normal file

Binary file not shown.

BIN
models/GunPick1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
models/JPulse3rd_01.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

BIN
models/SGirl_a.3d Normal file

Binary file not shown.

BIN
models/SGirl_d.3d Normal file

Binary file not shown.

BIN
models/Soldier_a.3d Normal file

Binary file not shown.

BIN
models/Soldier_d.3d Normal file

Binary file not shown.

BIN
models/army1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

BIN
models/army2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

BIN
models/army3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
models/army4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
models/boss1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
models/boss2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

BIN
models/boss3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

BIN
models/boss4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

BIN
models/bossarmm_a.3d Normal file

Binary file not shown.

BIN
models/bossarmm_d.3d Normal file

Binary file not shown.

BIN
models/bossgibT.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
models/bossthighm_a.3d Normal file

Binary file not shown.

BIN
models/bossthighm_d.3d Normal file

Binary file not shown.

BIN
models/cmdo1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

BIN
models/cmdo2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

BIN
models/cmdo3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

BIN
models/cmdo4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

BIN
models/fcmd1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

BIN
models/fcmd2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
models/fcmd4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
models/sldr1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

BIN
models/sldr2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

BIN
models/sldr3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

BIN
models/sldr4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

View file

@ -42,7 +42,7 @@ $playeralias tmale1 neutral *pain50 ut/malepain3
$playeralias tmale1 neutral *pain25 ut/malepain4
$playeralias tmale1 neutral *grunt ut/malegrunt
$playeralias tmale1 neutral *land DSEMPTY
$playeralias tmale1 neutral *uland ut/land1
$playeralias tmale1 neutral *uland ut/land
$playeralias tmale1 neutral *jump ut/malejump1
$playeralias tmale1 neutral *usefail ut/malehump1
$playeralias tmale1 neutral *surface ut/malesurface
@ -166,6 +166,7 @@ ut/bossfootstep bfootstp
ut/playerfootstepwet lsplash
ut/wetsplash dsplash
ut/wetsurface wtrexit1
// everything else
@ -206,6 +207,7 @@ misc/gibp3 gibp4
misc/gibp4 gibp5
misc/gibp5 gibp6
$random misc/gibp { misc/gibp1 misc/gibp2 misc/gibp3 misc/gibp4 misc/gibp5 }
misc/corpsefall thump
impact/select imppick
impact/pull impaltst

BIN
sounds/Thump.ogg Normal file

Binary file not shown.

BIN
sounds/WtrExit1.ogg Normal file

Binary file not shown.

Binary file not shown.

View file

@ -91,6 +91,7 @@ Class BioHitbox : Actor
+NOCLIP;
+DONTSPLASH;
+NOBLOOD;
+NOTELEPORT;
}
override void PostBeginPlay()
{
@ -823,6 +824,8 @@ Class BioRifle : UTWeapon
invoker.charge = min(5.1,invoker.charge+0.1);
A_Overlay(-9999,null);
A_WeaponOffset(0,32); // fix sudden psprite lowering
if ( self is 'UTPlayer' )
UTPlayer(self).PlayAttacking3();
}
BIOF A 2 A_BioFire(true);
BIOF BCDEFGHI 2;

View file

@ -7,6 +7,7 @@ Class SawImpact : Actor
+NOGRAVITY;
+NOCLIP;
+DONTSPLASH;
+NOTELEPORT;
}
override void PostBeginPlay()
{

View file

@ -251,159 +251,3 @@ Class ActMedBox : UTActivatableHealth
Stop;
}
}
// Alternative player classes for compatibility with Heretic sprites
Class UTPlayerHereticCompat : UTPlayer
{
Default
{
Player.ColorRange 225, 240;
Player.Colorset 0, "Green", 225, 240, 238;
Player.Colorset 1, "Yellow", 114, 129, 127;
Player.Colorset 2, "Red", 145, 160, 158;
Player.Colorset 3, "Blue", 190, 205, 203;
Player.Colorset 4, "Brown", 67, 82, 80;
Player.Colorset 5, "Light Gray", 9, 24, 22;
Player.Colorset 6, "Light Brown", 74, 89, 87;
Player.Colorset 7, "Light Red", 150, 165, 163;
Player.Colorset 8, "Light Blue", 192, 207, 205;
Player.Colorset 9, "Beige", 95, 110, 108;
}
States
{
Spawn:
PLAY A -1;
Stop;
See:
PLAY ABCD 4;
Loop;
Melee:
Missile:
PLAY F 6 BRIGHT;
PLAY E 12;
Goto Spawn;
Pain:
PLAY G 4;
PLAY G 4 A_Pain;
Goto Spawn;
Death:
PLAY H 6 A_PlayerSkinCheck("AltSkinDeath");
PLAY I 6 A_PlayerScream;
PLAY JK 6;
PLAY L 6 A_NoBlocking;
PLAY MNO 6;
PLAY P -1;
Stop;
XDeath:
PLAY Q 0 A_PlayerSkinCheck("AltSkinXDeath");
PLAY Q 5 A_PlayerScream;
PLAY R 0 A_NoBlocking;
PLAY R 5 A_SkullPop;
PLAY STUVWX 5;
PLAY Y -1;
Stop;
Burn:
FDTH A 5 BRIGHT A_PlaySound("*burndeath");
FDTH B 4 BRIGHT;
FDTH C 5 BRIGHT;
FDTH D 4 BRIGHT A_PlayerScream;
FDTH E 5 BRIGHT;
FDTH F 4 BRIGHT;
FDTH G 5 BRIGHT A_PlaySound("*burndeath");
FDTH H 4 BRIGHT;
FDTH I 5 BRIGHT;
FDTH J 4 BRIGHT;
FDTH K 5 BRIGHT;
FDTH L 4 BRIGHT;
FDTH M 5 BRIGHT;
FDTH N 4 BRIGHT;
FDTH O 5 BRIGHT A_NoBlocking;
FDTH P 4 BRIGHT;
FDTH Q 5 BRIGHT;
FDTH R 4 BRIGHT;
ACLO E 35 A_CheckPlayerDone;
Wait;
AltSkinDeath:
PLAY H 10;
PLAY I 10 A_PlayerScream;
PLAY J 10 A_NoBlocking;
PLAY KLM 10;
PLAY N -1;
Stop;
AltSkinXDeath:
PLAY O 5;
PLAY P 5 A_XScream;
PLAY Q 5 A_NoBlocking;
PLAY RSTUV 5;
PLAY W -1;
Stop;
}
}
Class UTPlayerHereticCompatTMale1 : UTPlayerHereticCompat
{
Default
{
Player.SoundClass "tmale1";
Player.DisplayName "$N_TMALE1";
Player.Portrait "Blake";
UTPlayer.VoiceType VOICE_MaleOne;
-NOMENU;
}
}
Class UTPlayerHereticCompatTMale2 : UTPlayerHereticCompat
{
Default
{
Player.SoundClass "tmale2";
Player.DisplayName "$N_TMALE2";
Player.Portrait "Brock";
UTPlayer.VoiceType VOICE_MaleTwo;
-NOMENU;
}
}
Class UTPlayerHereticCompatTFemale1 : UTPlayerHereticCompat
{
Default
{
Player.SoundClass "tfemale";
Player.DisplayName "$N_TFEMALE1";
Player.Portrait "Ivana";
UTPlayer.DollType DOLL_Female;
UTPlayer.VoiceType VOICE_FemaleOne;
-NOMENU;
}
}
Class UTPlayerHereticCompatTFemale2 : UTPlayerHereticCompat
{
Default
{
Player.SoundClass "tfemale";
Player.DisplayName "$N_TFEMALE2";
Player.Portrait "Lauren";
UTPlayer.DollType DOLL_Female;
UTPlayer.VoiceType VOICE_FemaleTwo;
-NOMENU;
}
}
Class UTPlayerHereticCompatTBoss : UTPlayerHereticCompat
{
transient CVar bossfootsteps;
Default
{
Player.SoundClass "tboss";
Player.DisplayName "$N_TBOSS";
Player.Portrait "Xan";
UTPlayer.DollType DOLL_Boss;
UTPlayer.VoiceType VOICE_Boss;
// should have NOBLOOD, but Xan did bleed in vanilla UT so...
// (this is what gave birth to the theory that Xan was actually Jerl Liandri himself)
-NOMENU;
}
override void PlayFootstep( double vol )
{
if ( !bossfootsteps ) bossfootsteps = CVar.GetCVar('flak_bossfootsteps',players[consoleplayer]);
if ( bossfootsteps.GetBool() ) A_PlaySound("ut/bossfootstep",CHAN_5,vol);
else Super.PlayFootstep(vol);
}
}

View file

@ -67,6 +67,7 @@ Class UTRocketTrail : Actor
+NOGRAVITY;
+DONTSPLASH;
+FORCEXYBILLBOARD;
+NOTELEPORT;
Scale 0.7;
}
override void PostBeginPlay()
@ -359,6 +360,8 @@ Class UTRocketLauncher : UTWeapon
else A_PlaySound("utrl/fire",CHAN_WEAPON);
invoker.FireEffect();
UTMainHandler.DoFlash(self,Color(64,255,0,0),1);
if ( self is 'UTPlayer' )
UTPlayer(self).PlayAttacking3();
A_AlertMonsters();
A_QuakeEx(2+num,2+num,2+num,6+num,0,1,"",QF_RELATIVE|QF_SCALEDOWN,rollIntensity:0.1+num*0.05);
for ( int i=0; i<num; i++ )

View file

@ -47,6 +47,7 @@ Class BulletImpact : Actor
+NOGRAVITY;
+NOCLIP;
+DONTSPLASH;
+NOTELEPORT;
Scale 0.25;
}
override void PostBeginPlay()
@ -102,6 +103,7 @@ Class UTCasing : Actor
+THRUACTORS;
+USEBOUNCESTATE;
+INTERPOLATEANGLES;
+NOTELEPORT;
Mass 1;
Gravity 0.35;
BounceType "Hexen";
@ -542,7 +544,12 @@ Class Enforcer : UTWeapon
}
ENFR ABCDEFGHIJKLMNOPQRSTUVWXYZ 1;
ENR2 AB 1;
ENR2 B 30 A_PlaySound("enforcer/reload",CHAN_WEAPON);
ENR2 B 30
{
A_PlaySound("enforcer/reload",CHAN_WEAPON);
if ( self is 'UTPlayer' )
UTPlayer(self).PlayReloading();
}
ENFS A 0 A_PlaySound("enforcer/select",CHAN_WEAPON);
Goto Ready;
LeftReload:
@ -555,7 +562,12 @@ Class Enforcer : UTWeapon
}
2NFR ABCDEFGHIJKLMNOPQRSTUVWXYZ 1;
2NR2 AB 1;
2NR2 B 30 A_PlaySound("enforcer/reload",CHAN_6);
2NR2 B 30
{
A_PlaySound("enforcer/reload",CHAN_6);
if ( self is 'UTPlayer' )
UTPlayer(self).PlayReloading();
}
2NFS A 0 A_PlaySound("enforcer/select",CHAN_6);
Goto LeftReady;
Deselect:

View file

@ -74,6 +74,7 @@ Class ChunkTrail : Actor
+NOGRAVITY;
+DONTSPLASH;
+FORCEXYBILLBOARD;
+NOTELEPORT;
Scale 0.2;
}
override void PostBeginPlay()
@ -387,6 +388,7 @@ Class SlugSmoke : Actor
+NOBLOCKMAP;
+NOGRAVITY;
+DONTSPLASH;
+NOTELEPORT;
}
override void PostBeginPlay()
{

View file

@ -7,6 +7,7 @@ Class HammerImpact : Actor
+NOGRAVITY;
+NOCLIP;
+DONTSPLASH;
+NOTELEPORT;
}
override void PostBeginPlay()
{
@ -290,7 +291,12 @@ Class ImpactHammer : UTWeapon
IMPR A 0 A_ImpactRefire("Hold");
Goto Release;
Release:
IMPF A 0 A_FireBlast();
IMPF A 0
{
if ( self is 'UTPlayer' )
UTPlayer(self).PlayAttacking3();
A_FireBlast();
}
IMPF AABCCDEEFGGHIIJKKLMMNOOP 1;
Goto Idle;
AltFire:

View file

@ -43,6 +43,7 @@ Class MinigunTracer : Actor
+NOGRAVITY;
+DONTSPLASH;
+INTERPOLATEANGLES;
+NOTELEPORT;
}
override void Tick()
{

View file

@ -289,6 +289,7 @@ Class PulseBoltCap : Actor
+NOCLIP;
+DONTSPLASH;
+FORCEXYBILLBOARD;
+NOTELEPORT;
Scale 0.3;
}
States
@ -327,6 +328,7 @@ Class PulseBoltHit : Actor
+NOCLIP;
+DONTSPLASH;
+FORCEXYBILLBOARD;
+NOTELEPORT;
Scale 0.3;
}
States
@ -498,6 +500,7 @@ Class PulseBolt : Actor
+NOCLIP;
+DONTSPLASH;
+INTERPOLATEANGLES;
+NOTELEPORT;
}
States
{
@ -807,7 +810,12 @@ Class PulseGun : UTWeapon
Reload:
PGNI A 1;
PGNI A 0 A_JumpIf(invoker.clipcount >= Min(50,invoker.Ammo1.Amount),"Idle");
PGNR A 1 A_Reloading();
PGNR A 1
{
A_Reloading();
if ( self is 'UTPlayer' )
UTPlayer(self).PlayReloading();
}
PGNR BCDEFGHIJKLMNOPQRSTUVWXYZ 1;
PGR2 ABCDEFGHIJKLMNOPQRSTUVWX 1;
Goto Idle;

View file

@ -142,13 +142,6 @@ Class Razor2 : Actor
}
Goto Spawn;
Death:
TNT1 A 0
{
angle += 180;
pitch *= -1;
A_RazorHit();
}
XDeath:
TNT1 A 1 A_StopSound(CHAN_VOICE);
Stop;
}

View file

@ -68,6 +68,7 @@ Class ShockRifleWave : Actor
+NOBLOCKMAP;
+NOGRAVITY;
+DONTSPLASH;
+NOTELEPORT;
}
override void Tick()
{
@ -95,6 +96,7 @@ Class SuperShockRifleWave : Actor
+NOBLOCKMAP;
+NOGRAVITY;
+DONTSPLASH;
+NOTELEPORT;
}
override void Tick()
{
@ -123,6 +125,7 @@ Class ShockBeamRing : Actor
+NOBLOCKMAP;
+NOGRAVITY;
+DONTSPLASH;
+NOTELEPORT;
}
override void Tick()
{
@ -150,6 +153,7 @@ Class SuperShockBeamRing : Actor
+NOBLOCKMAP;
+NOGRAVITY;
+DONTSPLASH;
+NOTELEPORT;
}
override void Tick()
{
@ -283,6 +287,7 @@ Class ShockBeam : Actor
+FORCEXYBILLBOARD;
+FORCERADIUSDMG;
+NODAMAGETHRUST;
+NOTELEPORT;
}
override void PostBeginPlay()
{
@ -516,6 +521,7 @@ Class SuperShockBeam : Actor
+FORCERADIUSDMG;
+EXTREMEDEATH;
+NODAMAGETHRUST;
+NOTELEPORT;
}
override void PostBeginPlay()
{
@ -824,6 +830,7 @@ Class ShockHitbox : Actor
+NOGRAVITY;
+NOCLIP;
+DONTSPLASH;
+NOTELEPORT;
}
override void Tick()
{

View file

@ -9,6 +9,7 @@ Class ModuleHitbox : Actor
+NOCLIP;
+DONTSPLASH;
+NOBLOOD;
+NOTELEPORT;
}
override int DamageMobj( Actor inflictor, Actor source, int damage, Name mod, int flags, double angle )
{
@ -100,6 +101,7 @@ Class TranslocatorGlow : Actor
+NOGRAVITY;
+DONTSPLASH;
+FORCEXYBILLBOARD;
+NOTELEPORT;
RenderStyle "AddShaded";
StencilColor "FFFFFF";
Scale 0.5;
@ -265,8 +267,6 @@ Class TranslocatorAfterimage : Actor
angle = target.angle;
pitch = target.pitch;
roll = target.roll;
sprite = target.sprite;
frame = target.frame;
vel = (FRandom[Transloc](-.5,.5),FRandom[Transloc](-.5,.5),FRandom[Transloc](-.5,.5));
}
action void A_Spread()
@ -277,8 +277,8 @@ Class TranslocatorAfterimage : Actor
States
{
Spawn:
#### # 10 A_SetTics(Random[Transloc](20,50));
#### # 1 A_Spread();
PLAY A 10 A_SetTics(Random[Transloc](20,50));
PLAY A 1 A_Spread();
Wait;
}
}

View file

@ -1,6 +1,7 @@
Class UTPlayer : DoomPlayer
{
bool lastground;
int lastwaterlevel;
int lastgroundtic;
double lastvelz, prevvelz;
transient CVar footsteps;
@ -11,6 +12,18 @@ Class UTPlayer : DoomPlayer
int last_tap_fm, last_tap_sm;
int last_jump_held;
int tempslide;
double ssup;
int corpsetime;
bool headless, leglessR, leglessL, armlessR, armlessL, torsoless;
// these are gibber hints to disable spawning some parts
// headless: missing head
// leglessR: missing right leg
// leglessL: mising left leg
// armlessR: missing right arm
// armlessL: mising left arm
// torsoless: missing torso
int dolltype, voicetype;
Property DollType : dolltype;
@ -174,7 +187,7 @@ Class UTPlayer : DoomPlayer
let type = (class<Inventory>)(AllActorClasses[i]);
if ( !type ) continue;
let def = GetDefaultByType(type);
if ( !(self is "UTPlayerHereticCompat")
if ( !(gameinfo.gametype&GAME_Raven)
&& ((type is "UTActivatable") || (type is "UTActivatableHealth")) )
continue; // don't give these outside of Heretic/Hexen
if ( def.Icon.isValid() && (def.MaxAmount > 1) &&
@ -226,7 +239,7 @@ Class UTPlayer : DoomPlayer
bNOFRICTIONBOUNCE = false;
}
if ( !footsteps ) footsteps = CVar.GetCVar('flak_footsteps',players[consoleplayer]);
if ( !footsteps.GetBool() ) return;
if ( !footsteps.GetBool() || (Health <= 0) ) return;
double ang = level.time/(20*TICRATE/35.)*360.;
bool forcefootstep = false;
if ( player.onground && !bNoGravity && !lastground && (waterlevel < 2) )
@ -237,9 +250,15 @@ Class UTPlayer : DoomPlayer
double vol = clamp((-lastvelz-8)*0.05,0.01,1.0);
if ( ((waterlevel > 0) || GetFloorTerrain().IsLiquid) && !bOnMobj ) A_PlaySound("ut/wetsplash",CHAN_AUTO,vol);
else A_PlaySound("*uland",CHAN_AUTO,vol);
PlayLanding();
}
else forcefootstep = true;
}
if ( tempslide )
{
tempslide = max(0,tempslide-1);
if ( !tempslide ) forcefootstep = true;
}
if ( forcefootstep || ((abs(sin(ang)) >= 1.0) && player.onground && lastground && (player.jumptics == 0) && (player.cmd.forwardmove || player.cmd.sidemove) && (waterlevel < 2)) )
{
double vol = abs(vel.xy.length())*0.03;
@ -247,10 +266,14 @@ Class UTPlayer : DoomPlayer
if ( (waterlevel > 0) || GetFloorTerrain().IsLiquid && !bOnMobj ) A_PlaySound("ut/playerfootstepwet",CHAN_5,vol);
else PlayFootstep(vol);
}
if ( (waterlevel >= 2) && (lastwaterlevel < 2) )
A_PlaySound("ut/wetsplash",CHAN_AUTO);
else if ( (waterlevel < 2) && (lastwaterlevel >= 2) )
A_PlaySound("ut/wetsurface",CHAN_AUTO);
lastground = player.onground;
lastvelz = prevvelz;
prevvelz = vel.z;
// TODO exit/entry sounds for water
lastwaterlevel = waterlevel;
}
double FrictionToUnreal()
@ -260,6 +283,89 @@ Class UTPlayer : DoomPlayer
return 734.2969*fin*fin-1485.0868*fin+750.7899;
}
override void CalcHeight()
{
if ( !flak_utmovement || !player || (player.mo != self) )
{
Super.CalcHeight();
return;
}
double angle, bob;
bool still = false;
// no bobbing while:
// - using noclip2 (equivalent to unreal's ghost cheat)
// - flying
// - swimming
// - falling
if ( !bNoGravity && player.onground && (waterlevel < 2) )
{
player.bob = player.Vel dot player.Vel;
if ( player.bob == 0 ) still = true;
else
{
player.bob *= player.GetMoveBob();
if ( player.bob > MAXBOB ) player.bob = MAXBOB;
}
}
else
{
// this still doesn't help because fly bob is hardcoded
player.bob = 0;
}
double defaultviewheight = ViewHeight+player.crouchviewdelta;
if ( player.cheats&CF_NOVELOCITY )
{
player.viewz = pos.z+defaultviewheight;
if ( player.viewz > ceilingz-4 ) player.viewz = ceilingz-4;
return;
}
if ( still )
{
if ( player.health > 0 )
{
angle = Level.maptime/(120*TICRATE/35.)*360.;
bob = player.GetStillBob()*sin(angle);
}
else bob = 0;
}
else
{
angle = Level.maptime/(20*TICRATE/35.)*360.;
bob = player.bob*sin(angle)*((waterlevel>1)?0.25:0.5);
}
// move viewheight
if ( player.playerstate == PST_LIVE )
{
player.viewheight += player.deltaviewheight;
if ( player.viewheight > defaultviewheight )
{
player.viewheight = defaultviewheight;
player.deltaviewheight = 0;
}
else if ( player.viewheight < (defaultviewheight/2) )
{
player.viewheight = defaultviewheight/2;
if ( player.deltaviewheight <= 0 )
player.deltaviewheight = 1/65536.;
}
if ( player.deltaviewheight )
{
player.deltaviewheight += 0.25;
if ( !player.deltaviewheight )
player.deltaviewheight = 1/65536.;
}
}
if ( player.morphTics ) bob = 0;
player.viewz = pos.z+player.viewheight+(bob*clamp(ViewBob,0.,1.5)); // [SP] Allow DECORATE changes to view bobbing speed.
// handle smooth step down (hacky but looks ok)
player.viewz += ssup;
ssup = max(0,(ssup*0.7)-0.25);
if ( floorclip && (player.playerstate != PST_DEAD) && (pos.z <= floorz) )
player.viewz -= Floorclip;
if ( player.viewz > ceilingz-4 ) player.viewz = ceilingz-4;
if ( player.viewz < floorz+4 ) player.viewz = floorz+4;
}
override void MovePlayer()
{
if ( !flak_utmovement || !player || (player.mo != self) )
@ -276,9 +382,14 @@ Class UTPlayer : DoomPlayer
}
else Angle += cmd.yaw*(360./65536.);
player.onground = (pos.z <= floorz) || bOnMobj || bMBFBouncer || (player.cheats & CF_NOCLIP2);
// slant (aka steep slope) detection
// TODO make it 3d floor aware when the PR makes it in
if ( floorsector.floorplane.normal dot (0,0,1) < (46342./65536.) )
player.onground = false;
if ( player.onground ) lastgroundtic = gametic;
if ( !player.onground && !bNoGravity && (waterlevel < 2) && (abs(pos.z-floorz) <= maxdropoffheight) && (player.jumptics == 0) && (vel.z < 0) )
{
ssup = max(0,(pos.z-floorz));
SetOrigin(Vec2OffsetZ(0,0,floorz),true);
player.onground = true;
}
@ -321,11 +432,20 @@ Class UTPlayer : DoomPlayer
last_sm = sm;
if ( !bNoGravity && player.onground && (waterlevel < 2) )
{
if ( flak_tapdodge && (dodge.length() > 0) )
if ( flak_tapdodge && (dodge.length() > 0) && !tempslide )
{
if ( flak_doomspeed ) vel += dodge.unit()*(groundspeed_doomish*1.5)/TICRATE;
else vel += dodge.unit()*(groundspeed*1.5)/TICRATE;
vel.z += dodgez/TICRATE;
if ( level.IsJumpingAllowed() )
{
if ( flak_doomspeed ) vel += dodge.unit()*(groundspeed_doomish*1.5)/TICRATE;
else vel += dodge.unit()*(groundspeed*1.5)/TICRATE;
vel.z += dodgez/TICRATE;
}
else
{
if ( flak_doomspeed ) vel += dodge.unit()*(groundspeed_doomish*2.0)/TICRATE;
else vel += dodge.unit()*(groundspeed*2.0)/TICRATE;
tempslide = 8;
}
bOnMobj = false;
if ( !(player.cheats&CF_PREDICTING) )
A_PlaySound("*jump",CHAN_BODY);
@ -339,12 +459,13 @@ Class UTPlayer : DoomPlayer
}
else
{
if ( flak_nowalkdrop )
if ( flak_nowalkdrop && !tempslide )
bNODROPOFF = ((acceleration.length() > double.epsilon) && (cmd.buttons&BT_SPEED));
// Hook in Unreal physics
Vector2 dir = (0,0);
if ( vel.xy.length() > double.epsilon ) dir = vel.xy.unit();
double doomfriction = clamp(GetFriction()/ORIG_FRICTION,0.0,1.0);
if ( tempslide ) friction *= 0;
if ( acceleration.length() <= double.epsilon )
{
Vector2 oldvel = vel.xy;
@ -369,7 +490,8 @@ Class UTPlayer : DoomPlayer
if ( acceleration.length() <= double.epsilon ) PlayIdle();
else PlayRunning();
}
player.vel = vel.xy;
if ( tempslide ) player.vel *= 0;
else player.vel = vel.xy;
}
}
else if ( !bNoGravity && (waterlevel < 2) )
@ -401,8 +523,9 @@ Class UTPlayer : DoomPlayer
if ( vel.length() > terminalvelocity/TICRATE ) vel = vel.unit()*(terminalvelocity/TICRATE);
player.vel *= 0;
player.jumptics = -2;
if ( !(player.cheats & CF_PREDICTING) ) PlayIdle();
}
else if ( bFly || (player.cheats&CF_NOCLIP2) )
else if ( (bFly && bFlyCheat) || (player.cheats&CF_NOCLIP2) )
{
// fly cheat has infinite friction (player stops moving when movement keys are released)
Vector3 dir = (0,0,0);
@ -455,8 +578,16 @@ Class UTPlayer : DoomPlayer
}
vel = vel+acceleration3/TICRATE;
double maxvel;
if ( flak_doomspeed ) maxvel = swimspeed_doomish/TICRATE;
else maxvel = swimspeed/TICRATE;
if ( waterlevel < 2 ) // flying uses ground speed
{
if ( flak_doomspeed ) maxvel = groundspeed_doomish/TICRATE;
else maxvel = groundspeed/TICRATE;
}
else
{
if ( flak_doomspeed ) maxvel = swimspeed_doomish/TICRATE;
else maxvel = swimspeed/TICRATE;
}
maxvel *= fs*doomfriction;
if ( vel.length() > maxvel ) vel = vel.unit()*maxvel;
player.vel = vel.xy;
@ -595,6 +726,389 @@ Class UTPlayer : DoomPlayer
{
A_PlaySound("ut/playerfootstep",CHAN_5,vol);
}
override void PlayIdle()
{
if ( (player && (player.mo == self)) && (player.crouchdir == -1) )
{
// Crouching
if ( !InStateSequence(CurState,FindState("SpawnCrouch")) )
SetStateLabel("SpawnCrouch");
}
else if ( !bNoGravity && player.onground && (waterlevel < 2) )
{
// Ground
if ( (player && (player.mo == self)) && player.cmd.yaw )
{
if ( InStateSequence(CurState,FindState("See"))
|| InStateSequence(CurState,FindState("SeeAir"))
|| InStateSequence(CurState,FindState("SeeSwim"))
|| InStateSequence(CurState,FindState("SeeCrouch"))
|| InStateSequence(CurState,FindState("SpawnAir"))
|| InStateSequence(CurState,FindState("SpawnSwim"))
|| InStateSequence(CurState,FindState("SpawnCrouch"))
|| InStateSequence(CurState,FindState("Spawn")+1) )
SetStateLabel("Turn");
}
else
{
if ( InStateSequence(CurState,FindState("See"))
|| InStateSequence(CurState,FindState("SeeAir"))
|| InStateSequence(CurState,FindState("SeeSwim"))
|| InStateSequence(CurState,FindState("SeeCrouch"))
|| InStateSequence(CurState,FindState("SpawnAir"))
|| InStateSequence(CurState,FindState("SpawnSwim"))
|| InStateSequence(CurState,FindState("SpawnCrouch")) )
SetStateLabel("Spawn");
}
}
else if ( !bNoGravity && (waterlevel < 2) )
{
// Falling
if ( InStateSequence(CurState,FindState("See"))
|| InStateSequence(CurState,FindState("SeeAir"))
|| InStateSequence(CurState,FindState("SeeSwim"))
|| InStateSequence(CurState,FindState("SeeCrouch"))
|| InStateSequence(CurState,FindState("Spawn"))
|| InStateSequence(CurState,FindState("SpawnSwim"))
|| InStateSequence(CurState,FindState("SpawnCrouch"))
|| InStateSequence(CurState,FindState("Turn")) )
SetStateLabel("SpawnAir");
}
else
{
// Swimming
if ( InStateSequence(CurState,FindState("See"))
|| InStateSequence(CurState,FindState("SeeAir"))
|| InStateSequence(CurState,FindState("SeeSwim"))
|| InStateSequence(CurState,FindState("SeeCrouch"))
|| InStateSequence(CurState,FindState("Spawn"))
|| InStateSequence(CurState,FindState("SpawnAir"))
|| InStateSequence(CurState,FindState("SpawnCrouch"))
|| InStateSequence(CurState,FindState("Turn")) )
SetStateLabel("SpawnSwim");
}
}
override void PlayRunning()
{
if ( (player && (player.mo == self)) && (player.crouchdir == -1) )
{
// Crouching
if ( !InStateSequence(CurState,FindState("SeeCrouch")) )
SetStateLabel("SeeCrouch");
}
else if ( !bNoGravity && player.onground && (waterlevel < 2) )
{
// Ground
if ( InStateSequence(CurState,FindState("Spawn"))
|| InStateSequence(CurState,FindState("SpawnAir"))
|| InStateSequence(CurState,FindState("SpawnSwim"))
|| InStateSequence(CurState,FindState("SpawnCrouch"))
|| InStateSequence(CurState,FindState("SeeAir"))
|| InStateSequence(CurState,FindState("SeeSwim"))
|| InStateSequence(CurState,FindState("SeeCrouch"))
|| InStateSequence(CurState,FindState("Turn")) )
SetStateLabel("See");
}
else if ( !bNoGravity && (waterlevel < 2) )
{
// Falling
if ( InStateSequence(CurState,FindState("Spawn"))
|| InStateSequence(CurState,FindState("SpawnAir"))
|| InStateSequence(CurState,FindState("SpawnSwim"))
|| InStateSequence(CurState,FindState("SpawnCrouch"))
|| InStateSequence(CurState,FindState("See"))
|| InStateSequence(CurState,FindState("SeeSwim"))
|| InStateSequence(CurState,FindState("SeeCrouch"))
|| InStateSequence(CurState,FindState("Turn")) )
SetStateLabel("SeeAir");
}
else
{
// Swimming
if ( InStateSequence(CurState,FindState("Spawn"))
|| InStateSequence(CurState,FindState("SpawnAir"))
|| InStateSequence(CurState,FindState("SpawnSwim"))
|| InStateSequence(CurState,FindState("SpawnCrouch"))
|| InStateSequence(CurState,FindState("See"))
|| InStateSequence(CurState,FindState("SeeAir"))
|| InStateSequence(CurState,FindState("SeeCrouch"))
|| InStateSequence(CurState,FindState("Turn")) )
SetStateLabel("SeeSwim");
}
}
override void PlayAttacking()
{
// no animation if crouched
if ( (player && (player.mo == self)) && (player.crouchdir == -1) ) return;
// check weapon type
if ( (player.ReadyWeapon is 'SniperRifle') && (player.buttons&BT_ALTATTACK) )
return;
if ( ((player.ReadyWeapon is 'BioRifle') && (player.buttons&BT_ALTATTACK))
|| (player.ReadyWeapon is 'UTRocketLauncher') )
{
if ( !InStateSequence(CurState,FindState("MissileRepStill")) )
SetStateLabel("MissileRepStill");
}
else if ( ((player.ReadyWeapon is 'ImpactHammer') && (player.buttons&BT_ATTACK))
|| ((player.ReadyWeapon is 'UTChainsaw') && (player.buttons&BT_ATTACK))
|| (player.ReadyWeapon is 'PulseGun')
|| (player.ReadyWeapon is 'Minigun') )
{
if ( !InStateSequence(CurState,FindState("MissileRep")) )
SetStateLabel("MissileRep");
}
else SetStateLabel("Missile");
}
override void PlayAttacking2()
{
PlayAttacking();
}
virtual void PlayAttacking3()
{
if ( (player && (player.mo == self)) && (player.crouchdir == -1) ) return;
SetStateLabel("Missile");
}
virtual void PlayReloading()
{
if ( (player && (player.mo == self)) && (player.crouchdir == -1) ) return;
SetStateLabel("Reload");
}
virtual void PlayLanding()
{
if ( (player && (player.mo == self)) && (player.crouchdir == -1) ) return;
SetStateLabel("Landing");
}
void A_HeadPop()
{
headless = true;
Class<UTHead> hclass = "UTHeadMale";
if ( DollType == DOLL_Boss ) hclass = "UTHeadBoss";
else if ( DollType == DOLL_Female ) hclass = "UTHeadFemale";
let h = UTHead(Spawn(hclass,Vec3Offset(0,0,viewheight)));
if ( player )
{
h.headowner = player;
player.camera = h;
}
double ang = FRandom[Blod](0,360);
double pt = FRandom[Blod](-90,-30);
Vector3 dir = (cos(pt)*cos(ang),cos(pt)*sin(ang),sin(-pt));
h.vel = vel*0.6+dir*FRandom[Blod](8.0,12.0);
}
void A_GibMe()
{
let a = Actor.Spawn("UTPlayerGibber",pos);
a.vel = vel;
a.Scale = Scale;
a.A_SetSize(radius,height);
UTGibber(a).Gibbed = self;
}
void A_DMFade()
{
if ( !deathmatch || player ) return;
corpsetime++;
if ( corpsetime > 350 ) A_FadeOut(0.03);
}
override double GetDeathHeight()
{
// no height reduction while still being zapped
if ( DamageType == 'Zapped' ) return height;
return Super.GetDeathHeight();
}
States
{
Spawn:
#### # 5;
PLAY ABCDEFG 8;
Goto Spawn+1;
Turn:
#### # 6;
PLYT A 0 A_JumpIf(!player||!player.cmd.yaw,"Spawn");
PLYT A 6;
PLYT A 0 A_JumpIf(!player||!player.cmd.yaw,"Spawn");
PLYT A 6;
PLYT B 0 A_JumpIf(!player||!player.cmd.yaw,"Spawn");
PLYT B 6;
PLYT B 0 A_JumpIf(!player||!player.cmd.yaw,"Spawn");
PLYT B 6;
Goto Turn+1;
SpawnAir:
#### # 5;
PLYA A 50;
PLYL A 50;
Goto SpawnAir+1;
SpawnSwim:
#### # 5;
PLYS ABCDEFG 6;
Goto SpawnSwim+1;
SpawnCrouch:
#### # 5;
PLYC A -1;
Wait;
See:
#### # 5;
PLAY HIJKL 4;
Goto See+1;
SeeAir:
#### # 5;
PLYA A 50;
PLYL A 50;
Goto SeeAir+1;
SeeSwim:
#### # 5;
PLYS HIJKL 4;
Goto SeeSwim+1;
SeeCrouch:
#### # 5;
PLYC ABCDE 4;
Goto SeeCrouch+1;
Missile:
#### # 2;
PLAY MNOPQA 3;
Goto Spawn;
MissileRep:
#### # 2;
PLAY R 2;
PLAY S 0 A_JumpIf(!player||!(player.buttons&(BT_ATTACK|BT_ALTATTACK)),"Spawn");
PLAY S 2;
PLAY T 0 A_JumpIf(!player||!(player.buttons&(BT_ATTACK|BT_ALTATTACK)),"Spawn");
PLAY T 2;
PLAY U 0 A_JumpIf(!player||!(player.buttons&(BT_ATTACK|BT_ALTATTACK)),"Spawn");
PLAY U 2;
PLAY V 0 A_JumpIf(!player||!(player.buttons&(BT_ATTACK|BT_ALTATTACK)),"Spawn");
PLAY V 2;
PLAY R 0 A_JumpIf(!player||!(player.buttons&(BT_ATTACK|BT_ALTATTACK)),"Spawn");
Goto MissileRep+1;
MissileRepStill:
#### # 2;
PLAY R 2;
PLAY R 0 A_JumpIf(!player||!(player.buttons&(BT_ATTACK|BT_ALTATTACK)),"Spawn");
Goto MissileRepStill+1;
Reload:
#### # 3;
PLYR ABCDEFGH 4;
Goto Spawn;
Landing:
#### # 4;
PLYL A 3;
Goto Spawn;
Pain:
#### # 0 A_Jump(256,1,3,5,7);
#### # 2;
PLAY W 3 A_Pain();
Goto Spawn;
#### # 2;
PLAY Y 3 A_Pain();
Goto Spawn;
#### # 2;
PLAY Z 3 A_Pain();
Goto Spawn;
Pain.Decapitated:
#### # 2;
PLAY X 3 A_Pain();
Goto Spawn;
Death.Decapitated:
#### # 0 A_HeadPop();
PLD4 A 3 A_PlayerScream();
PLD4 B 3 A_NoBlocking();
PLD4 CDEFGHIJKLMNO 3;
PLD4 P 1 A_DMFade();
Wait;
Death:
#### # 0 A_JumpIf(vel.length()>20,"Death11");
#### # 0 A_JumpIf(vel.length()>10,"Death1");
#### # 0 A_Jump(256,"Death2","Death3","Death7","Death8");
Death11:
#### # 3;
PD11 A 3 A_PlayerScream();
PD11 B 3 A_NoBlocking();
PD11 CDEFGHIJKLMNOPQ 3;
PD11 R 1 A_DMFade();
Wait;
Death.Zapped:
#### # 3;
PLD9 A 3 A_PlayerScream();
PLD9 B 3 A_NoBlocking();
PLD9 CDEFGHIJKLMNOPQRST 2;
PD9B A 2 A_SetSize(-1,height*0.25); // reduce now
PD9B BCDEFGHI 2;
PD9B J 1 A_DMFade();
Wait;
Death8:
#### # 3;
PLD8 A 3 A_PlayerScream();
PLD8 B 3 A_NoBlocking();
PLD8 CDEFGHIJKLMNOPQ 3;
PLD8 R 1 A_DMFade();
Wait;
Death7:
#### # 3;
PLD7 A 3 A_PlayerScream();
PLD7 B 3 A_NoBlocking();
PLD7 CDEFGHIJKLMNOPQRST 3;
PLD7 U 1 A_DMFade();
Wait;
Death3:
#### # 3;
PLD3 A 3 A_PlayerScream();
PLD3 B 3 A_NoBlocking();
PLD3 CDEFGHIJKL 3;
PLD3 M 1 A_DMFade();
Wait;
Death2:
#### # 3;
PLD2 A 3 A_PlayerScream();
PLD2 B 3 A_NoBlocking();
PLD2 CDEFGHIJKLMNO 3;
PLD2 P 1 A_DMFade();
Wait;
Death1:
#### # 3;
PLD1 A 3 A_PlayerScream();
PLD1 B 3 A_NoBlocking();
PLD1 CDEFGHIJKL 3;
PLD1 M 1 A_DMFade();
Wait;
XDeath:
TNT1 A 350
{
A_XScream();
A_NoBlocking();
A_GibMe();
}
TNT1 A 1 A_CheckPlayerDone();
Wait;
Taunt1:
#### # 5;
PLT1 ABCDEFGHIJKLMNOPQRST 3;
Goto Spawn;
Taunt2:
#### # 5;
PLT2 ABCDEFGHIJKLMNOPQR 4;
PLT2 R 8;
PLAY A 3;
Goto Spawn;
Taunt3:
#### # 5;
PLT3 ABCDEFGHIJKLMNO 3;
Goto Spawn;
Taunt4:
#### # 5;
PLT4 ABCDEFGHIJKLMNO 3;
Goto Spawn;
}
}
// these only exist for sound
@ -621,26 +1135,120 @@ Class UTPlayerTMale2 : UTPlayer
-NOMENU;
}
}
Class UTPlayerTFemale1 : UTPlayer
Class UTPlayerTFemale : UTPlayer
{
Default
{
UTPlayer.DollType DOLL_Female;
}
void A_LegPop()
{
leglessR = true;
let a = Actor.Spawn("UTFemaleLegGibber",pos);
a.vel = vel;
a.Scale = Scale;
a.A_SetSize(radius,height);
UTGibber(a).Gibbed = self;
}
States
{
Reload:
#### # 3;
PLYR ABCDEF 4;
Goto Spawn;
Taunt1:
#### # 5;
PLT1 ABCDEFGHIJKLMNO 3;
Goto Spawn;
Taunt2:
#### # 5;
PLT2 ABCDEFGHIJ 6;
PLAY A 3;
Goto Spawn;
Death.Decapitated:
#### # 0 A_HeadPop();
PLD6 A 3 A_PlayerScream();
PLD6 B 3 A_NoBlocking();
PLD6 CDEFGHIJ 3;
PLD6 K 1 A_DMFade();
Wait;
Death.Zapped:
#### # 3;
PLD9 A 3 A_PlayerScream();
PLD9 B 3 A_NoBlocking();
PLD9 CDEFGHIJKLMNOPQRST 2;
PD9B A 2 A_SetSize(-1,height*0.25); // reduce now
PD9B BCDEFGHIJ 2;
PD9B K 1 A_DMFade();
Wait;
Death:
#### # 0 A_JumpIf(vel.length()>20,"Death5");
#### # 0 A_JumpIf(vel.length()>10,"Death2");
#### # 0 A_Jump(256,"Death1","Death3","Death4","Death7");
Death7:
#### # 3;
PLD7 A 3 A_PlayerScream();
PLD7 B 3 A_NoBlocking();
PLD7 CDEFGHIJ 3;
PLD7 K 1 A_DMFade();
Wait;
Death5:
#### # 0 A_LegPop();
PLD5 A 3 A_PlayerScream();
PLD5 B 3 A_NoBlocking();
PLD5 CDEFGHIJKL 3;
PLD5 M 1 A_DMFade();
Wait;
Death4:
#### # 3;
PLD4 A 3 A_PlayerScream();
PLD4 B 3 A_NoBlocking();
PLD4 CDEFGHIJKL 3;
PLD4 M 1 A_DMFade();
Wait;
Death3:
#### # 3;
PLD3 A 3 A_PlayerScream();
PLD3 B 3 A_NoBlocking();
PLD3 CDEFGHIJKLMNO 3;
PLD3 P 1 A_DMFade();
Wait;
Death2:
#### # 3;
PLD2 A 3 A_PlayerScream();
PLD2 B 3 A_NoBlocking();
PLD2 CDEFGHIJKLMNOPQ 3;
PLD2 R 1 A_DMFade();
Wait;
Death1:
#### # 3;
PLD1 A 3 A_PlayerScream();
PLD1 B 3 A_NoBlocking();
PLD1 CDEFGHIJKLMNOPQRSTUV 3;
PLD1 W 1 A_DMFade();
Wait;
}
}
Class UTPlayerTFemale1 : UTPlayerTFemale
{
Default
{
Player.SoundClass "tfemale";
Player.DisplayName "$N_TFEMALE1";
Player.Portrait "Ivana";
UTPlayer.DollType DOLL_Female;
UTPlayer.VoiceType VOICE_FemaleOne;
-NOMENU;
}
}
Class UTPlayerTFemale2 : UTPlayer
Class UTPlayerTFemale2 : UTPlayerTFemale
{
Default
{
Player.SoundClass "tfemale";
Player.DisplayName "$N_TFEMALE2";
Player.Portrait "Lauren";
UTPlayer.DollType DOLL_Female;
UTPlayer.VoiceType VOICE_FemaleTwo;
-NOMENU;
}
@ -1341,6 +1949,8 @@ Class UTBlueKey : BlueCard
Class ShredCorpseHitbox : Actor
{
int accdamage;
Vector3 lastvel;
bool wasonair;
Default
{
@ -1348,6 +1958,7 @@ Class ShredCorpseHitbox : Actor
-SOLID;
+DONTSPLASH;
+SHOOTABLE;
+NOTELEPORT;
Health int.max;
}
override void PostBeginPlay()
@ -1363,23 +1974,44 @@ Class ShredCorpseHitbox : Actor
override void Tick()
{
Super.Tick();
if ( !flak_corpsedamage || !target || (target.Health > 0) || target.InStateSequence(target.CurState,target.FindState("XDeath")) )
if ( (!(target is 'UTPlayer') && !flak_corpsedamage) || !target || (target.Health > 0) || target.InStateSequence(target.CurState,target.FindState("XDeath")) )
{
Destroy();
return;
}
SetOrigin(target.pos,true);
A_SetSize(target.radius,target.height);
if ( target.pos.z > target.floorz ) wasonair = true;
else
{
if ( wasonair )
{
A_PlaySound("misc/corpsefall",CHAN_BODY,clamp(-lastvel.z*0.2,0.1,1.0));
if ( lastvel.z < -20 ) DamageMobj(null,null,int.max,'Falling');
}
wasonair = false;
}
lastvel = target.vel;
}
override int DamageMobj( Actor inflictor, Actor source, int damage, Name mod, int flags, double angle )
{
if ( (target is 'UTPlayer') && (mod == 'Zapped') && (target.sprite == target.GetSpriteIndex('PLD9')) )
{
// keep the zapping action on
target.SetState(target.FindState("Death.Zapped")+Random[ZapMe](2,8));
damage /= 4;
// push the corpse
target.vel.xy += RotateVector((1,0),angle)*damage*0.1;
// keep it afloat
target.vel.z = max(0.1,target.vel.z+0.1);
}
accdamage -= damage;
int gibhealth = (target.GibHealth==int.min)?-target.SpawnHealth():target.GibHealth;
if ( accdamage < gibhealth )
{
// force gib (cheap ATM)
State gib = target.FindState("XDeath");
if ( !gib ) gib = target.FindState("Death.Extreme");
State gib = target.FindState("XDeath",true);
if ( !gib ) gib = target.FindState("Death.Extreme",true);
if ( gib ) target.SetState(gib);
Destroy();
}
@ -1466,8 +2098,8 @@ Class GenericFlash : HUDMessageBase
}
override bool Tick()
{
alpha -= 1./duration;
return (alpha<=0);
if ( duration > 0 ) alpha -= 1./duration;
return (alpha<=0)||(!cam);
}
override void Draw( int bottom, int visibility )
{
@ -1945,6 +2577,27 @@ Class UTMainHandler : EventHandler
for ( int i=0; i<MAXPLAYERS; i++ ) if ( playeringame[i] ) players[i].mo.TakeInventory("Translocator",1);
}
}
else if ( e.Name ~== "uttaunt" )
{
if ( (e.player == -1) || !playeringame[e.player] || !players[e.player].mo ) return;
let mo = players[e.player].mo;
if ( (mo.Health <= 0) || !(mo is 'UTPlayer') ) return;
switch ( e.Args[0] )
{
case 2:
if ( mo.FindState("Taunt2") ) mo.SetStateLabel("Taunt2");
break;
case 3:
if ( mo.FindState("Taunt3") ) mo.SetStateLabel("Taunt3");
break;
case 4:
if ( mo.FindState("Taunt4") ) mo.SetStateLabel("Taunt4");
break;
default:
if ( mo.FindState("Taunt1") ) mo.SetStateLabel("Taunt1");
break;
}
}
}
override void WorldTick()
@ -1990,14 +2643,10 @@ Class UTMainHandler : EventHandler
{
if ( e.Thing.bDONTGIB ) return;
// gibbers
if ( flak_gibs && !e.Thing.bNOBLOOD && (e.Thing.FindState("XDeath") || e.Thing.FindState("Death.Extreme")) && ((e.Inflictor && e.Inflictor.bEXTREMEDEATH) || (e.Thing.Health < e.Thing.GetGibHealth())) && (!e.Inflictor || !e.Inflictor.bNOEXTREMEDEATH) )
if ( flak_gibs && !e.Thing.bNOBLOOD && (e.Thing.FindState("XDeath",true) || e.Thing.FindState("Death.Extreme",true)) && ((e.Inflictor && e.Inflictor.bEXTREMEDEATH) || (e.Thing.Health < e.Thing.GetGibHealth())) && (!e.Inflictor || !e.Inflictor.bNOEXTREMEDEATH) )
{
// players have special gibbing
if ( e.Thing.player )
{
// TODO
return;
}
// players use their own gibber
if ( e.Thing is 'UTPlayer' ) return;
// generic gibbing
let a = Actor.Spawn("UTGibber",e.Thing.pos);
a.vel = e.Thing.vel;
@ -2013,7 +2662,7 @@ Class UTMainHandler : EventHandler
return;
}
// attach damage accumulator for corpses
if ( !flak_corpsedamage ) return;
if ( !(e.Thing is 'UTPlayer') && !flak_corpsedamage ) return;
let a = Actor.Spawn("ShredCorpseHitbox",e.Thing.pos);
a.target = e.Thing;
}
@ -2044,7 +2693,9 @@ Class UTMainHandler : EventHandler
double dist = max(1,dir.length());
double damagescale = 1-max(0,(dist-a.radius)/ExplosionRadius);
dir = dir/dist;
a.vel += dir*damagescale*(MomentumTransfer/(Thinker.TICRATE*a.mass));
if ( (a is 'ShredCorpseHitbox') && a.target )
a.target.vel += dir*damagescale*(MomentumTransfer/(Thinker.TICRATE*a.target.mass));
else a.vel += dir*damagescale*(MomentumTransfer/(Thinker.TICRATE*a.mass));
}
}
@ -2052,7 +2703,9 @@ Class UTMainHandler : EventHandler
static void DoKnockback( Actor Victim, Vector3 HitDirection, double MomentumTransfer )
{
if ( !Victim ) return;
Victim.vel += HitDirection*(MomentumTransfer/(Thinker.TICRATE*Victim.Mass));
if ( (Victim is 'ShredCorpseHitbox') && Victim.target )
Victim.target.vel += HitDirection*(MomentumTransfer/(Thinker.TICRATE*Victim.target.Mass));
else Victim.vel += HitDirection*(MomentumTransfer/(Thinker.TICRATE*Victim.Mass));
}
static void DoSwing( Actor target, Vector2 dir, double initial, double inc, int steps, int mode = 0, int delay = 0, double rmul = 1.0 )

View file

@ -80,7 +80,7 @@ Class UTBloodDrop : Actor
}
void A_BloodDie()
{
// TODO
// TODO leave decals
}
States
{
@ -112,9 +112,12 @@ Class UTBloodSpurt : Actor
str = FRandom[Blood](2.0,3.2)*args[0];
int sz = 7*args[0];
double ang, pt;
if ( !flak_blood ) sz /= 3;
for ( int i=0; i<sz; i++ )
{
let d = Spawn("UTBloodDrop",pos);
Actor d;
if ( flak_blood ) d = Spawn("UTBloodDrop",pos);
else d = Spawn("Blood",pos,ALLOW_REPLACE);
d.translation = translation;
d.SetShade(fillcolor);
ang = angle+FRandom[Blood](-3,3)*str;
@ -160,9 +163,12 @@ Class UTBloodTrail : Actor
if ( !target ) return;
SetOrigin(target.pos,true);
double ang, pt;
for ( int i=0; i<3; i++ )
int max = flak_blood?3:Random[Blood](-2,1);
for ( int i=0; i<max; i++ )
{
let d = Spawn("UTBloodDrop",pos);
Actor d;
if ( flak_blood ) d = Spawn("UTBloodDrop",pos);
else d = Spawn("Blood",pos,ALLOW_REPLACE);
d.translation = translation;
d.SetShade(fillcolor);
ang = FRandom[Blood](0,360);
@ -232,18 +238,18 @@ Class UTGibber : Actor
bool dummy;
for ( int i=0; i<gibsize; i++ )
{
let a = Spawn(gibcls[Random[Blod](0,3)],pos+(FRandom[Blod](-0.5,0.5)*radius,FRandom[Blod](-0.5,0.5)*radius,FRandom[Blod](0.2,0.8)*height));
let a = Spawn(gibcls[Random[Blod](0,3)],Vec3Offset(FRandom[Blod](-0.5,0.5)*radius,FRandom[Blod](-0.5,0.5)*radius,FRandom[Blod](0.2,0.8)*height));
a.translation = translation;
a.SetShade(fillcolor);
a.scale *= FRandom[Blod](1.7,2.3)*scale.x;
ang = FRandom[Blod](0,360);
pt = FRandom[Blod](-90,90);
dir = (cos(pt)*cos(ang),cos(pt)*sin(ang),sin(-pt));
a.vel = rvel*0.6+dir*FRandom[Blod](8.0,12.0);
a.vel = rvel*0.6+dir*FRandom[Blod](3.0,6.0);
}
for ( int i=0; i<gibsize; i++ )
{
let a = Spawn("UTBloodPuff",pos+(FRandom[Blod](-0.8,0.8)*radius,FRandom[Blod](-0.8,0.8)*radius,FRandom[Blod](0.1,0.9)*height));
let a = Spawn("UTBloodPuff",Vec3Offset(FRandom[Blod](-12,12),FRandom[Blod](-12,12),FRandom[Blod](0.1,0.9)*height));
a.translation = translation;
a.SetShade(fillcolor);
a.scale *= FRandom[Blod](1.8,2.3)*scale.x;
@ -268,6 +274,7 @@ Class UTGibber : Actor
{
+NOCLIP;
+NOGRAVITY;
+NOTELEPORT;
Radius 32;
Height 16;
}
@ -281,6 +288,158 @@ Class UTGibber : Actor
}
}
Class UTFemaleLegGibber : UTGibber
{
bool firstgib;
override void BurstGibs()
{
static const class<Actor> parts[] = {"UTFemaleFoot","UTThigh"};
static const double partofsy[] = {9,8};
static const double partofsz[] = {9,20};
Actor a;
double ang, pt;
Vector3 dir;
if ( !firstgib )
{
firstgib = true;
for ( int i=0; i<2; i++ )
{
Actor a = Spawn(parts[i],Vec3Offset(-partofsy[i]*sin(angle),partofsy[i]*cos(angle),partofsz[i]));
ang = FRandom[Blod](0,360);
pt = FRandom[Blod](-90,90);
dir = (cos(pt)*cos(ang),cos(pt)*sin(ang),sin(-pt));
a.vel = rvel*0.6+dir*FRandom[Blod](3.0,6.0);
}
}
for ( int i=0; i<gibsize; i++ )
{
Vector3 box = (FRandom[Blod](-8,8),FRandom[Blod](7,12),FRandom[Blod](5,18));
let a = Spawn("UTBloodPuff",Vec3Offset(box.x*cos(angle)-box.y*sin(angle),box.x*sin(angle)+box.y*cos(angle),box.z));
ang = FRandom[Blod](0,360);
pt = FRandom[Blod](-90,90);
dir = (cos(pt)*cos(ang),cos(pt)*sin(ang),sin(-pt));
a.vel = rvel*0.2+dir*FRandom[Blod](1.5,3.0);
}
A_CountDown();
}
override void PostBeginPlay()
{
Super.PostBeginPlay();
gibsize = 3;
reactiontime = 5;
}
States
{
Spawn:
TNT1 A 0 NoDelay; // no sound, done by player
TNT1 A 1 BurstGibs();
Wait;
}
}
Class UTPlayerGibber : UTGibber
{
bool firstgib;
override void BurstGibs()
{
static const class<Actor> bossparts[] = {"UTBossArm","UTBossArm","UTBossFoot","UTBossFoot","UTMaleTorso","UTHeadBoss"};
static const class<Actor> maleparts[] = {"UTMaleArm","UTMaleArm","UTMaleFoot","UTMaleFoot","UTMaleTorso","UTHeadMale"};
static const class<Actor> femaleparts[] = {"UTFemaleArm","UTFemaleArm","UTFemaleFoot","UTFemaleFoot","UTFemaleTorso","UTHeadFemale"};
static const class<Actor> extraparts[] = {"UTThigh","UTThigh","UTHeart","UTLiver","UTStomach"};
static const double partofsy[] =
{
14,
-14,
9,
-9,
0,
0,
8,
-8,
-2,
5,
-3
};
static const double partofsz[] =
{
36,
36,
9,
9,
32,
48,
20,
20,
40,
32,
35
};
Actor a;
double ang, pt;
Vector3 dir;
if ( !firstgib )
{
firstgib = true;
for ( int i=0; i<11; i++ )
{
if ( (i == 5) && UTPlayer(Gibbed).headless ) continue;
if ( (i == 0) && UTPlayer(Gibbed).armlessR ) continue;
if ( (i == 1) && UTPlayer(Gibbed).armlessL ) continue;
if ( ((i == 2) || (i == 6)) && UTPlayer(Gibbed).leglessR ) continue;
if ( ((i == 3) || (i == 7)) && UTPlayer(Gibbed).leglessL ) continue;
if ( ((i == 4) || (i > 7)) && UTPlayer(Gibbed).torsoless ) continue;
Actor a;
if ( i < 6 )
{
if ( UTPlayer(Gibbed).DollType == UTPlayer.DOLL_Boss )
a = Spawn(bossparts[i],Vec3Offset(-partofsy[i]*sin(angle),partofsy[i]*cos(angle),partofsz[i]));
else if ( UTPlayer(Gibbed).DollType == UTPlayer.DOLL_Female )
a = Spawn(femaleparts[i],Vec3Offset(-partofsy[i]*sin(angle),partofsy[i]*cos(angle),partofsz[i]));
else a = Spawn(maleparts[i],Vec3Offset(-partofsy[i]*sin(angle),partofsy[i]*cos(angle),partofsz[i]));
}
else a = Spawn(extraparts[i-6],Vec3Offset(-partofsy[i]*sin(angle),partofsy[i]*cos(angle),partofsz[i]));
ang = FRandom[Blod](0,360);
pt = FRandom[Blod](-90,90);
if ( a is 'UTHead' )
{
pt = FRandom[Blod](-90,-15);
if ( UTPlayer(Gibbed).player )
{
UTPlayer(Gibbed).player.Camera = a;
UTHead(a).headowner = UTPlayer(Gibbed).player;
}
}
dir = (cos(pt)*cos(ang),cos(pt)*sin(ang),sin(-pt));
a.vel = rvel*0.6+dir*FRandom[Blod](3.0,6.0);
}
}
for ( int i=0; i<gibsize; i++ )
{
let a = Spawn("UTBloodPuff",Vec3Offset(FRandom[Blod](-0.8,0.8)*radius,FRandom[Blod](-0.8,0.8)*radius,FRandom[Blod](0.1,0.9)*height));
ang = FRandom[Blod](0,360);
pt = FRandom[Blod](-90,90);
dir = (cos(pt)*cos(ang),cos(pt)*sin(ang),sin(-pt));
a.vel = rvel*0.2+dir*FRandom[Blod](1.5,3.0);
}
A_CountDown();
}
override void PostBeginPlay()
{
Super.PostBeginPlay();
gibsize = 3;
reactiontime = 5;
}
States
{
Spawn:
TNT1 A 0 NoDelay; // no sound, done by player
TNT1 A 1 BurstGibs();
Wait;
}
}
// Chunks
Class UTGib : Actor
{
@ -301,6 +460,7 @@ Class UTGib : Actor
+MISSILE;
+THRUACTORS;
+USEBOUNCESTATE;
+NOTELEPORT;
}
override void PostBeginPlay()
{
@ -310,9 +470,9 @@ Class UTGib : Actor
if ( bloodcolor ) tracer.SetShade(bloodcolor);
else tracer.SetShade(gameinfo.defaultbloodcolor);
tracer.translation = bloodtranslation;
rollvel = FRandom[Blod](5,15)*RandomPick[Blod](-1,1);
anglevel = FRandom[Blod](5,15)*RandomPick[Blod](-1,1);
pitchvel = FRandom[Blod](5,15)*RandomPick[Blod](-1,1);
rollvel = FRandom[Blod](3,6)*RandomPick[Blod](-1,1);
anglevel = FRandom[Blod](3,6)*RandomPick[Blod](-1,1);
pitchvel = FRandom[Blod](3,6)*RandomPick[Blod](-1,1);
}
void A_HandleBounce()
{
@ -331,9 +491,12 @@ Class UTGib : Actor
else if ( spd > 20 ) vel *= 0.8;
A_PlaySound("misc/gibp");
double ang, pt;
for ( int i=0; i<6; i++ )
int max = flak_blood?6:2;
for ( int i=0; i<max; i++ )
{
let d = Spawn("UTBloodDrop",pos);
Actor d;
if ( flak_blood ) d = Spawn("UTBloodDrop",pos);
else d = Spawn("Blood",pos,ALLOW_REPLACE);
d.translation = bloodtranslation;
if ( bloodcolor ) d.SetShade(bloodcolor);
else d.SetShade(gameinfo.defaultbloodcolor);
@ -344,9 +507,9 @@ Class UTGib : Actor
d.vel = dir*FRandom[Blood](0.8,1.2);
d.scale *= 0.75*FRandom[Blood](0.6,1.4);
}
rollvel = FRandom[Blod](5,15)*RandomPick[Blod](-1,1);
anglevel = FRandom[Blod](5,15)*RandomPick[Blod](-1,1);
pitchvel = FRandom[Blod](5,15)*RandomPick[Blod](-1,1);
rollvel = FRandom[Blod](3,6)*RandomPick[Blod](-1,1);
anglevel = FRandom[Blod](3,6)*RandomPick[Blod](-1,1);
pitchvel = FRandom[Blod](3,6)*RandomPick[Blod](-1,1);
}
States
{
@ -378,25 +541,71 @@ Class UTFemaleTorso : UTGib {}
Class UTMaleArm : UTGib {}
Class UTMaleFoot : UTGib {}
Class UTMaleTorso : UTGib {}
Class UTBossArm : UTGib {}
Class UTBossFoot : UTGib {}
Class UTBossTorso : UTGib {}
Class UTHeart : UTGib
{
States
{
Spawn:
UGIB ABCDEF 2;
UGIB ABCDEF 1
{
roll += rollvel;
angle += anglevel;
pitch += pitchvel;
}
Loop;
Bounce:
UGIB A 0;
Goto Spawn;
Death:
UGIB ABCDEFABCDEFABCDEF 2;
UGIB ABCDEFABCDEF 4;
UGIB ABCDEF 8;
UGIB A -1;
Stop;
UGIB A 1 A_SetTics(Random[Blod](12,18)*15);
UGIB A 1 A_FadeOut(0.05);
Wait;
}
}
Class UTLiver : UTGib {}
Class UTStomach : UTGib {}
Class UTHeadFemale : UTGib {}
Class UTHeadMale : UTGib {}
Class UTHead : UTGib
{
PlayerInfo headowner;
override void PostBeginPlay()
{
Super.PostBeginPlay();
UTMainHandler.DoFlash(self,Color(128,255,0,0),150);
UTMainHandler.DoFlash(self,Color(96,255,0,0),0);
}
override void Tick()
{
Super.Tick();
if ( headowner && headowner.mo && (headowner.mo.Health > 0) && (headowner.Camera == self) )
{
headowner.Camera = headowner.mo;
headowner = null;
}
}
override void OnDestroy()
{
if ( headowner && (headowner.Camera == self) && headowner.mo )
{
headowner.Camera = headowner.mo;
headowner = null;
}
Super.OnDestroy();
}
States
{
Death:
UGIB A 1 A_SetTics(Random[Blod](12,18)*15);
UGIB A 0 A_JumpIf(headowner,"Death");
UGIB A 1 A_FadeOut(0.05);
Wait;
}
}
Class UTHeadFemale : UTHead {}
Class UTHeadMale : UTHead {}
Class UTHeadBoss : UTHead {}

View file

@ -716,11 +716,11 @@ Class UTHud : BaseStatusBar
Inventory itm;
for ( itm=CPlayer.mo.InvFirst; (itm && (i < 5)); itm=itm.NextInv() )
{
CurX = BaseX+2*hudsize*HScale;
CurY = BaseY+2*hudsize*HScale;
// if item doesn't fit 60x60, scale
// scale to fit
Vector2 scl = TexMan.GetScaledSize(itm.Icon);
double mscl = max(scl.x,scl.y)/60.;
double mscl = 56./max(scl.x,scl.y);
CurX = BaseX+(4+(56.-scl.x*mscl)/2.)*hudsize*HScale;
CurY = BaseY+4*hudsize*HScale;
UTDrawTintedTex(itm.Icon,hudsize*mscl);
// amount if >1
if ( itm.Amount > 1 )
@ -763,10 +763,11 @@ Class UTHud : BaseStatusBar
UTDrawTintedTex(ItemBox,hudsize);
if ( artiflashtick )
{
// scale to fit
Vector2 scl = TexMan.GetScaledSize(LastItem);
double mscl = max(scl.x,scl.y)/60.;
CurX += 2*hudsize*HScale;
CurY += 2*hudsize*HScale;
double mscl = 56./max(scl.x,scl.y);
CurX += (4+(56.-scl.x*mscl)/2.)*hudsize*HScale;
CurY += 4*hudsize*HScale;
UTDrawTintedTex(LastItem,hudsize*mscl);
if ( LastAmount <= 1 ) return;
CurX = 32*hudsize*HScale;
@ -776,11 +777,11 @@ Class UTHud : BaseStatusBar
return;
}
if ( !CPlayer.mo.InvSel ) return;
// if item doesn't fit 60x60, scale
// scale to fit
Vector2 scl = TexMan.GetScaledSize(CPlayer.mo.InvSel.Icon);
double mscl = max(scl.x,scl.y)/60.;
CurX += 2*hudsize*HScale;
CurY += 2*hudsize*HScale;
double mscl = 56./max(scl.x,scl.y);
CurX += (4+(56.-scl.x*mscl)/2.)*hudsize*HScale;
CurY += 4*hudsize*HScale;
UTDrawTintedTex(CPlayer.mo.InvSel.Icon,hudsize*mscl);
// amount if >1
if ( CPlayer.mo.InvSel.Amount <= 1 ) return;

View file

@ -38,6 +38,7 @@ Class ShockWave : Actor
+NOBLOCKMAP;
+NOGRAVITY;
+DONTSPLASH;
+NOTELEPORT;
}
override void PostBeginPlay()
{
@ -94,6 +95,7 @@ Class WarheadSubExplosion : Actor
+NOCLIP;
+DONTSPLASH;
+FORCEXYBILLBOARD;
+NOTELEPORT;
}
override void PostBeginPlay()
{
@ -119,6 +121,7 @@ Class WarheadHitbox : Actor
+NOCLIP;
+DONTSPLASH;
+NOBLOOD;
+NOTELEPORT;
}
override int DamageMobj( Actor inflictor, Actor source, int damage, Name mod, int flags, double angle )
{
@ -207,6 +210,7 @@ Class WarheadTrail : Actor
+FORCEXYBILLBOARD;
+ROLLSPRITE;
+ROLLCENTER;
+NOTELEPORT;
Scale 0.2;
}