Subversion Repositories nw_plus

Rev

Rev 66 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 h266 1
/*
2
--------------------------------------------------------------------------------
3
Duke: Nuclear Winter
4
By Joris Weimar
5
© 1997 Simply Silly Software
6
--------------------------------------------------------------------------------
7
Duke: Nuclear Winter Plus
8
By Hendricks266
9
--------------------------------------------------------------------------------
10
*/
11
 
12
include NWDefs.con
13
include NWUser.con
14
 
15
setgamename Duke: Nuclear Winter
16
 
66 h266 17
gamevar nw_picnum 0 2
18
gamevar nw_temp 0 2
19
gamevar nw_tempb 0 2
20
gamevar nw_x 0 2
21
gamevar nw_y 0 2
22
gamevar nw_z 0 2
9 h266 23
 
66 h266 24
gamevar nw_owner 0 2
25
gamevar nw_temp2 0 2
26
gamevar nw_temp3 0 2
27
// gamevar nw_temp4 0 0
28
// gamevar nw_ptemp 0 1
29
gamevar nw_holodukeid 0 1
30
gamevar nw_musicchange 0 1
8 h266 31
gamevar skin DUKE 132097 // do not reset flag enabled
1 h266 32
 
33
gamevar LOGO_FLAGS 767 0 // default; TEN screen reenabled
34
 
35
state cutsceneambience
66 h266 36
  getactor[THISACTOR].lotag nw_temp
1 h266 37
 
66 h266 38
  switch nw_temp
1 h266 39
 
40
    case WIND_AMBIENCE
41
    case WIND_REPEAT
42
     setactor[THISACTOR].lotag WIND2
43
    break
44
 
45
    case FLY_BY
46
     setactor[THISACTOR].lotag FLY_BY2
47
    break
48
 
49
  endswitch
50
ends
51
 
52
onevent EVENT_LOADACTOR
66 h266 53
  getactor[THISACTOR].picnum nw_picnum
54
  switch nw_picnum
1 h266 55
 
56
   case SNOWYDOORSHOCK 
57
     spritepal 30
58
     cactor DOORSHOCK
59
   break
60
 
61
   case 3765 case 3766 case 3767 case 3768 cactor WOODENHORSE2 break
62
 
63
  // case PIGCOP case PIGCOPSTAYPUT case PIGCOPDIVE sizeat 48 40 break
64
   case SOBBOTWALK case SOBBOTFLY sizeat 42 36 break
65
   case ELFUZI case ELFUZISTAYPUT sizeat 32 27 break
66
   case ELFGUN case ELFGUNSTAYPUT sizeat 32 27 break
67
   case SNOWMAN sizeat 42 36 break
68
 
69
   case 1915
70
    cactor COMMANDER // failsafe fix for NWL5 bug
71
   break
72
 
73
   case MUSICANDSFX
74
     state cutsceneambience
75
   break
76
 
77
   case JETPACK
66 h266 78
     ifspritepal 21 setvar nw_temp 1
1 h266 79
     spritepal 0
80
   break
81
 
82
/*
83
   case SNOWFLAKE
84
     cactor SNOW
85
     sizeat 8 8
86
   break
87
*/
88
 
89
   case XMASPRESENT
90
   case XMASPRESENT2
66 h266 91
     getactor[THISACTOR].hitag nw_temp
1 h266 92
     setactor[THISACTOR].hitag 0
93
   break
94
 
95
  endswitch
96
endevent
97
 
52 h266 98
onevent EVENT_SPAWN
66 h266 99
  getactor[THISACTOR].owner nw_owner
100
  getactor[THISACTOR].picnum nw_picnum
52 h266 101
endevent
102
 
1 h266 103
onevent EVENT_EGS
66 h266 104
 getactor[THISACTOR].picnum nw_picnum
14 h266 105
 
1 h266 106
 ifactor APLAYER setactor[THISACTOR].mdflags 16
107
 ifactor DUKETORSO setactor[THISACTOR].mdflags 16
108
 ifactor DUKEGUN setactor[THISACTOR].mdflags 16
109
 ifactor DUKELEG setactor[THISACTOR].mdflags 16
110
 ifactor DOORSHOCK setactor[THISACTOR].mdflags 16
111
 
112
 ifactor SNOW
113
   {
114
     sizeat 8 8
115
 
66 h266 116
     setvar nw_temp3 0
117
     randvar nw_temp3 2047
118
     setactor[THISACTOR].ang nw_temp3
1 h266 119
 
66 h266 120
     setvar nw_temp2 -2047
121
     randvar nw_temp2 2047
1 h266 122
 
123
/*
66 h266 124
     setvar nw_temp3 0
125
     ifrnd 128 addvar nw_temp3 4
126
     ifrnd 128 addvar nw_temp3 8
127
     setactor[THISACTOR].cstat nw_temp3
1 h266 128
*/
129
   }
130
endevent
131
 
132
// -----------------------------------------------------------------------------
133
 
134
state standard_bjibs
135
  guts JIBS2 1
136
  guts JIBS3 2
137
  guts JIBS4 3
138
  guts JIBS5 2
139
  guts JIBS6 3
140
  ifrnd 6
141
  {
142
    guts JIBS1 1
143
  }         // a badly drawn spine
144
ends
145
 
146
state nwbreakobject
147
  ifaction 0
148
  {
149
    action ANULLACTION
150
    cstator 257
151
  }
152
    ifhitweapon
153
    {
154
      ifdead
155
      {
156
        ifactor WOODSLATS
157
        {
158
          sound GLASS_HEAVYBREAK
159
	  debris SCRAP3 5
160
	  debris SCRAP4 3
161
          killit
162
        }
163
      else
164
        ifactor RIBBON
165
        {
166
          sound GLASS_HEAVYBREAK
167
	  debris SCRAP3 5
168
	  debris SCRAP4 3
169
          killit
170
        }
171
      else
172
        ifactor MYBOX
173
        {
174
          sound GLASS_HEAVYBREAK
175
	  debris SCRAP3 5
176
	  debris SCRAP4 3
177
          killit
178
        }
179
      else
180
        ifactor SNOWGIB killit
181
      else
182
        ifactor DRUNKELF
183
        {
184
          sound PRED_DYING
185
          guts JIBS6 2
186
          guts JIBS6 3
187
          guts JIBS6 4
188
          killit
189
        }
190
      else
191
        ifactor CHOOCHOOSLUT
192
        {
193
          sound GLASS_HEAVYBREAK
194
	  debris SCRAP3 5
195
	  debris SCRAP4 3
196
          killit
197
        }
198
      else
199
        ifactor HORSEPOWER
200
        {
201
          sound GLASS_HEAVYBREAK
202
	  debris SCRAP3 5
203
	  debris SCRAP4 3
204
          killit
205
        }
206
      else
8 h266 207
        ifactor CHANDELIER
208
        {
209
          sound GLASS_BREAKING
210
          debris SCRAP3 3
211
          debris SCRAP4 4
212
          lotsofglass 10
213
          killit
214
        }
215
      else
1 h266 216
        ifactor TREEWITHSOMETHING
217
        {
218
          sound GLASS_HEAVYBREAK
219
	  debris SCRAP3 5
220
          ifrnd 96
221
          {
222
            ifrnd 64 spawn ATOMICHEALTH else spawn SHIELD
223
          }
224
          else
225
          {
226
            ifrnd 128 spawn STEROIDS else spawn FECES
227
          }
228
          killit
229
        }
230
      else
231
        ifactor SSPEAKER
232
        {
233
	  debris SCRAP4 3
234
          killit
235
        }
236
      }
237
    }
238
ends
239
 
240
useractor notenemy WOODSLATS MEDIUMSTRENGTH state nwbreakobject enda
241
 
242
useractor notenemy RIBBON WEAK state nwbreakobject enda
243
 
244
useractor notenemy SSPEAKER WEAK state nwbreakobject enda
245
 
246
useractor notenemy MYBOX WEAK state nwbreakobject enda
247
 
248
useractor notenemy DRUNKELF WEAK state nwbreakobject enda
249
 
250
useractor notenemy CHOOCHOOSLUT WEAK state nwbreakobject enda
251
 
252
useractor notenemy HORSEPOWER WEAK state nwbreakobject enda
253
 
254
useractor notenemy SNOWGIB WEAK state nwbreakobject enda
255
 
8 h266 256
useractor notenemy CHANDELIER WEAK state nwbreakobject enda
257
 
1 h266 258
useractor notenemy TREEWITHSOMETHING TOUGH state nwbreakobject enda
259
 
260
actor JETPACK
261
  fall
262
  ifmove RESPAWN_ACTOR_FLAG
263
    state respawnit
264
  else
265
    ifp pshrunk nullop
266
    else
267
      ifp palive
268
        ifpdistl RETRIEVEDISTANCE
269
          ifcount 6
270
            ifpinventory GET_JETPACK JETPACK_AMOUNT
271
              ifcanseetarget
272
      {
66 h266 273
        ifvare nw_temp 1
1 h266 274
        {
275
          addinventory GET_JETPACK JETPACK_NEAR_EMPTY
66 h266 276
          redefinequote 122       This jetpack is almost empty!
277
          quote 122
1 h266 278
        }
279
        else
280
        {
281
          addinventory GET_JETPACK JETPACK_AMOUNT
282
          quote 41
283
        }
284
        ifspawnedby JETPACK
285
          state getcode
286
        else
287
          state quikget
288
      }
289
enda
290
 
291
action FEMHDANCE1 205 1 1 1 16
292
action FEMHDANCE3 205 1 1 1 26
293
action FEMHDANCE2 206 2 1 1 10
294
 
295
 
296
 
297
state nwbabecode
66 h266 298
 getactor[THISACTOR].cstat nw_temp
299
 ifvarand nw_temp 1 nullop else addvar nw_temp 1
300
 ifactor HALFBITCH { ifvarand nw_temp 128 nullop else addvar nw_temp 128 }
301
 ifvarand nw_temp 256 nullop else addvar nw_temp 256
1 h266 302
 
66 h266 303
 getuserdef .lockout nw_temp2
304
 ifvare nw_temp2 1
1 h266 305
   {
66 h266 306
     ifvarand nw_temp 32768 nullop else addvar nw_temp 32768
1 h266 307
   }
308
 else
309
  // {
66 h266 310
     ifvarand nw_temp 32768 subvar nw_temp 32768
1 h266 311
  // }
312
 
66 h266 313
 setactor[THISACTOR].cstat nw_temp
1 h266 314
 
315
 
316
 
317
  ifactor HALFBITCH nullop else fall
318
 
319
  ifaction FEMSHRUNK
320
  {
321
    ifcount SHRUNKDONECOUNT
322
    {
323
      action FEMANIMATE
324
      cstat 257
325
    }
326
    else
327
      ifcount SHRUNKCOUNT
328
        sizeto 40 40
329
    else
330
      state genericshrunkcode
331
  }
332
  else ifaction FEMGROW
333
  {
334
    ifcount 32
335
    {
336
      respawnhitag
337
      guts JIBS4 20
338
      guts JIBS6 20
339
      spritepal 6
340
      soundonce LADY_SCREAM
341
      ifactor SLUTASS debris SCRAP6 1
342
      sound SQUISH2
343
      killit
344
    }
345
    else
346
      sizeto MAXXSTRETCH MAXYSTRETCH
347
  }
348
 
349
 
350
  else
351
    ifaction FEMHDANCE1
352
  {
353
    ifactioncount 2
354
      action FEMHDANCE2
355
  }
356
  else
357
    ifaction FEMHDANCE2
358
  {
359
    ifactioncount 8
360
      action FEMHDANCE3
361
  }
362
  else
363
    ifaction FEMHDANCE3
364
  {
365
    ifactioncount 2
366
    action FEMANIMATE
367
  }
368
  else
369
    ifaction FEMFROZEN1
370
  {
371
    ifcount THAWTIME
372
    {
373
      action FEMANIMATE
374
      getlastpal
375
    }
376
    else
377
      ifcount FROZENDRIPTIME
378
    {
379
      ifactioncount 26
380
      {
381
        spawn WATERDRIP
382
        resetactioncount
383
      }
384
    }
385
 
386
    ifhitweapon
387
    {
388
      ifwasweapon FREEZEBLAST
389
      {
390
        strength 0
391
        break
392
      }
393
      lotsofglass 30
394
      sound GLASS_BREAKING
395
      respawnhitag
396
      ifrnd 84
397
        spawn BLOODPOOL
398
      killit
399
    }
400
    else
401
      ifp pfacing
402
        ifpdistl FROZENQUICKKICKDIST
403
          pkick
404
    break
405
  }
406
  else ifaction FEMFROZEN2
407
  {
408
    ifcount THAWTIME
409
    {
410
      action FEMANIMATE
411
      getlastpal
412
    }
413
    else
414
      ifcount FROZENDRIPTIME
415
    {
416
      ifactioncount 26
417
      {
418
        spawn WATERDRIP
419
        resetactioncount
420
      }
421
    }
422
 
423
    ifhitweapon
424
    {
425
      ifwasweapon FREEZEBLAST
426
      {
427
        strength 0
428
          break
429
      }
430
 
431
      lotsofglass 30
432
 
433
      sound GLASS_BREAKING
434
      ifrnd 84
435
        spawn BLOODPOOL
436
      respawnhitag
437
 
438
      ifrnd 128
439
        sound DUKE_HIT_STRIPPER1
440
      else
441
        sound DUKE_HIT_STRIPPER2
442
 
443
      killit
444
    }
445
    else
446
      ifp pfacing
447
        ifpdistl FROZENQUICKKICKDIST
448
          pkick
449
    break
450
  }
451
 
452
  ifhitweapon
453
  {
454
    ifdead
455
    {
456
      ifwasweapon GROWSPARK
457
      {
458
        cstat 0
459
        move 0
460
        sound ACTOR_GROWING
461
        action FEMGROW
462
        break
463
      }
464
      else ifwasweapon FREEZEBLAST
465
      {
466
        ifaction FEMSHRUNK
467
          break
468
 
469
          action FEMFROZEN1
470
 
471
        move 0
472
        spritepal 1
473
        strength 0
474
 
475
        sound SOMETHINGFROZE
476
 
477
        break
478
      }
479
 
480
      ifrnd 128
481
        sound DUKE_HIT_STRIPPER1
482
      else
483
        sound DUKE_HIT_STRIPPER2
484
 
485
      respawnhitag
486
      state standard_bjibs
487
      state random_wall_jibs
488
      spawn BLOODPOOL
489
 
490
        ifactor HALFBITCH
491
          money 3
492
      else
493
        ifactor SLUTASS
494
          money 3
495
 
496
 
497
        spritepal 6
498
        soundonce LADY_SCREAM
499
        ifactor NAKED1
500
	  debris SCRAP3 18
501
        else
502
          ifactor PODFEM1
503
	    debris SCRAP3 18
504
        killit
505
    }
506
    else
507
    {
508
      ifwasweapon SHRINKSPARK
509
      {
510
        sound ACTOR_SHRINKING
511
        move 0
512
        action FEMSHRUNK
513
        cstat 0
514
        break
515
      }
516
      else
517
        ifwasweapon GROWSPARK
518
          sound EXPANDERHIT
519
 
520
 
521
      sound SQUISH2
522
 
523
      guts JIBS6 1
524
    }
525
  }
526
 
527
 
528
 
529
  ifp pfacing
530
    ifpdistl 1280
531
      ifhitspace
532
  {
533
    tip
534
    ifrnd 128
535
      soundonce DUKE_TIP1
536
    else
537
      soundonce DUKE_TIP2
538
ifactor HALFBITCH
539
      action FEMHDANCE1
540
  }
541
ends
542
 
543
useractor notenemy HALFBITCH TOUGH
544
  state nwbabecode
545
enda
546
 
547
useractor notenemy SLUTASS TOUGH
548
  state nwbabecode
549
enda
550
 
551
state nwl3surprise
552
ifvare VOLUME 1
553
  {
554
    ifvare LEVEL 2
555
      {
66 h266 556
        getactor[THISACTOR].sectnum nw_temp
557
        switch nw_temp
1 h266 558
          case 220 case 221
66 h266 559
            ifvarn nw_musicchange 1
1 h266 560
              {
561
                starttrack 12 // doom
66 h266 562
                setvar nw_musicchange 1
1 h266 563
              }
564
          break
565
          case 563 case 564 case 565 case 566 case 567
66 h266 566
            ifvarn nw_musicchange 2
1 h266 567
              {
568
                starttrack 13 // mario
66 h266 569
                setvar nw_musicchange 2
1 h266 570
              }
571
          break
572
          case 192 case 193 case 194 case 195 case 196 case 197 case 198 case 237 case 238 case 239 case 240
573
          case 166 case 167 case 172 case 173 case 174 case 176 case 179
66 h266 574
            ifvarn nw_musicchange 0
1 h266 575
              {
8 h266 576
                starttrackvar LEVEL // level music
66 h266 577
                setvar nw_musicchange 0
1 h266 578
              }
579
          break
580
        endswitch
581
      }
582
  }
583
ends
584
 
30 h266 585
// Flying Frosty
586
 
9 h266 587
/*
588
action ACOMMBREETH  0  3  5  1  40
589
action ACOMMFROZEN  0  1  5
590
action ACOMMSPIN   -5  1  5  1  12
591
action ACOMMGET   0  3  5  1  30
592
action ACOMMSHOOT  20  1  5   1 35
593
action ACOMMABOUTTOSHOOT 20 1 5 1 30
594
action ACOMMDYING  30  8  1  1  12
595
action ACOMMDEAD   38  1  1  1  1
596
 
597
 
598
move COMMGETUPVELS 128 -64
599
move COMMGETVELS 128 64
600
move COMMSLOW 64 24
601
move COMMSTOPPED
602
 
603
ai AICOMMWAIT ACOMMBREETH COMMSTOPPED faceplayerslow
604
ai AICOMMGET ACOMMGET COMMGETVELS seekplayer
605
ai AICOMMSHOOT ACOMMSHOOT COMMSTOPPED faceplayerslow
606
ai AICOMMABOUTTOSHOOT ACOMMABOUTTOSHOOT COMMSTOPPED faceplayerslow
607
ai AICOMMSPIN ACOMMSPIN COMMGETVELS spin
608
ai AICOMMDYING ACOMMDYING COMMSTOPPED faceplayer
609
ai AICOMMSHRUNK ACOMMGET COMMSLOW furthestdir
610
ai AICOMMGROW ACOMMGET COMMSTOPPED furthestdir
611
*/
612
 
613
move COMMGETUPVELSNW 128 -64
614
move COMMGETVELSNW 128 64
615
move COMMSLOWNW 64 24
616
move COMMSTOPPEDNW
617
 
1 h266 618
action ACOMMSPINNW   0  1  5  1  12
8 h266 619
action ACOMMSHOOTNW  20  1  5 1  16 // this is custom to shorten the delay between firing freezeblasts
1 h266 620
 
9 h266 621
ai AICOMMSPINNW ACOMMSPINNW COMMGETVELSNW spin
622
ai AICOMMSHOOTNW ACOMMSHOOTNW COMMSTOPPEDNW faceplayerslow
1 h266 623
 
624
state checkcommhitstate
625
 
626
  ifhitweapon
627
  {
628
    debris SCRAP3 5
629
    ifdead
630
    {
631
      ifwasweapon FREEZEBLAST
632
      {
633
        break
634
      }
635
      else
636
        ifwasweapon GROWSPARK
637
      {
638
        sound ACTOR_GROWING
639
        ai AICOMMGROW
640
        break
641
      }
642
 
643
      addkills 1
644
 
645
      ifwasweapon RADIUSEXPLOSION
646
      {
647
        debris SCRAP3 5
648
        sound SQUISH2
649
        killit
650
      }
651
      else
652
        ifwasweapon RPG
653
      {
654
        sound SQUISH2
655
        debris SCRAP3 5
656
        state standard_jibs
657
        killit
658
      }
659
 
660
      debris SCRAP3 100
661
      sound COMM_DYING
662
      ai AICOMMDYING
663
    }
664
    else
665
    {
666
      soundonce COMM_PAIN
667
      ifwasweapon SHRINKSPARK
668
      {
669
        sound ACTOR_SHRINKING
670
        ai AICOMMSHRUNK
671
      }
672
      else
673
        ifwasweapon GROWSPARK
674
          sound EXPANDERHIT
675
      else
676
        ifrnd 24
677
          ai AICOMMABOUTTOSHOOT
678
    }
679
  }
680
ends
681
 
682
actor COMMANDERSTAYPUT COMMANDERSTRENGTH
683
  cactor COMMANDER
684
  ai AICOMMABOUTTOSHOOT
685
enda
686
 
687
actor COMMANDER COMMANDERSTRENGTH
688
 
689
  state checksquished
690
 
691
  ifaction ACOMMFROZEN
692
  {
693
    fall
694
 
695
    ifcount THAWTIME
696
    {
697
      getlastpal
698
      ai AICOMMWAIT
699
    }
700
    else
701
      ifcount FROZENDRIPTIME
702
    {
703
      ifactioncount 26
704
      {
705
        spawn WATERDRIP
706
        resetactioncount
707
      }
708
    }
709
 
710
    ifhitweapon
711
    {
712
      ifwasweapon FREEZEBLAST
713
      {
714
        strength 0
715
        break
716
      }
717
      addkills 1
718
 
719
      ifrnd 84
720
        spawn BLOODPOOL
721
      lotsofglass 30
722
      sound GLASS_BREAKING
723
      killit
724
    }
725
    ifp pfacing
726
      ifpdistl FROZENQUICKKICKDIST
727
        pkick
728
    break
729
  }
730
  ifai 0
8 h266 731
    ai AICOMMSHOOTNW
1 h266 732
  else
733
    ifai AICOMMWAIT
734
  {
735
    ifcount 20
736
    {
737
      ifcansee
738
      {
739
        ifcanshoottarget
740
        {
741
          ifrnd 96
742
            ai AICOMMGET
743
          else
744
            ai AICOMMABOUTTOSHOOT
745
        }
746
      }
747
      else
748
        ai AICOMMGET
749
    }
750
  }
751
  else
752
    ifai AICOMMABOUTTOSHOOT
753
  {
754
    ifactioncount 2
755
    {
756
      ifcansee
8 h266 757
        ai AICOMMSHOOTNW
1 h266 758
      else
759
      {
760
        ai AICOMMGET
761
        break
762
      }
763
    }
764
    ifrnd 32 soundonce COMM_ATTACK
765
  }
766
  else
8 h266 767
    ifai AICOMMSHOOTNW
1 h266 768
  {
769
    ifcanshoottarget
770
    {
771
      ifcount 12
772
        ifrnd 16
773
          ai AICOMMWAIT
8 h266 774
 
1 h266 775
      ifactioncount 1
776
      {
777
        shoot FREEZEBLAST
778
        resetactioncount
779
      }
8 h266 780
 
66 h266 781
      getplayer[THISACTOR].i nw_temp
782
      getactor[nw_temp].pal nw_temp
783
      ifvare nw_temp 1 // if player is frozen
8 h266 784
        ai AICOMMGET
1 h266 785
    }
786
    else
787
      ai AICOMMGET
788
  }
789
  else
790
    ifai AICOMMSHRUNK
791
  {
792
    ifcount SHRUNKDONECOUNT
793
      ai AICOMMGET
794
    else
795
      ifcount SHRUNKCOUNT
796
        sizeto 48 40
797
    else
798
      state genericshrunkcode
799
  }
800
  else
801
    ifai AICOMMGROW
802
      state genericgrowcode
803
  else
804
    ifai AICOMMGET
805
  {
806
    ifnotmoving
807
      ifrnd 4
808
        operate
809
    ifpdistl 1024
8 h266 810
    {
1 h266 811
      ifp palive
8 h266 812
      {
813
        sound COMM_SPIN
814
        ai AICOMMSPINNW
815
        break
816
      }
817
 
66 h266 818
      getplayer[THISACTOR].i nw_temp
819
      getactor[nw_temp].pal nw_temp
820
      ifvare nw_temp 1 // if player is frozen
8 h266 821
      {
822
        sound COMM_SPIN
823
        ai AICOMMSPINNW
824
        break
825
      }
1 h266 826
    }
827
 
828
    ifcansee
829
    {
830
      ifp phigher
831
        move COMMGETUPVELS getv geth faceplayer
832
      else
833
        move COMMGETVELS getv geth faceplayer
834
    }
835
    ifactioncount 8
836
      ifrnd 2
837
        ai AICOMMABOUTTOSHOOT
838
  }
839
  else
840
    ifai AICOMMSPINNW
841
  {
842
    soundonce COMM_SPIN
843
    ifcount 16
844
    {
845
      ifpdistl 1280
846
      {
66 h266 847
        setvar nw_tempb CAPTSPINNINGPLAYER
848
        mulvar nw_tempb -1
8 h266 849
        // addphealth CAPTSPINNINGPLAYER
66 h266 850
        getplayer[THISACTOR].i nw_temp
851
        setactor[nw_temp].htextra nw_tempb
852
        setactor[nw_temp].htpicnum KNEE
853
        setactor[nw_temp].htowner THISACTOR
8 h266 854
 
855
        globalsound DUKE_GRUNT
856
        palfrom 32 16
857
        resetcount
1 h266 858
      }
859
      else
860
        ifpdistg 2300
861
          ai AICOMMWAIT
862
    }
863
    ifactioncount 52
864
      ai AICOMMWAIT
865
    ifnotmoving
866
      ifrnd 32
867
        operate
868
  }
869
 
870
  ifai AICOMMDYING
871
  {
872
    fall
873
    strength 0
874
 
875
    ifhitweapon
876
      ifwasweapon RADIUSEXPLOSION
877
    {
878
      sound SQUISH2
879
      spawn BLOODPOOL
880
      state standard_jibs
881
 
882
      killit
883
    }
884
 
885
    ifaction ACOMMDYING
886
      ifactioncount 8
887
    {
888
      iffloordistl 8
889
        sound THUD
890
      cstat 0
891
      action ACOMMDEAD
892
    }
893
  }
894
  else
895
  {
896
    ifrnd 2
897
      soundonce COMM_ROAM
898
    state checkcommhitstate
899
  }
900
enda
901
 
30 h266 902
// Frosted Battle Mobile
903
 
1 h266 904
move TANKSTOPNW
905
 
906
useractor enemy TANK TANKSTRENGTH
907
    fall
908
 
909
//  sizeat 45 45
910
  ifaction 0
911
  {
912
    action ATANKWAIT
913
    cstat 257
914
    clipdist 100
915
  }
916
  else
917
    ifaction ATANKSPIN
918
  {
919
    soundonce TANK_ROAM
920
 
921
    ifactioncount 20
922
    {
923
      ifrnd 16
924
        ifcansee
925
          ifcanshoottarget
926
      {
927
        move TANKSTOPNW geth
928
        action ATANKSHOOTING
929
        stopsound TANK_ROAM
930
      }
931
    }
932
 
933
    ifrnd 16
934
      move TANKFORWARD seekplayer
935
  }
936
  else
937
    ifaction ATANKSHOOTING
938
  {
939
    ifactioncount 22
940
    {
941
      ifpdistg 8192
942
      {
943
        sound BOS1_ATTACK2
944
        shoot MORTER
945
      }
946
      resetcount
947
      move 0 action ATANKWAIT
948
    }
949
    else
950
      ifactioncount 2
951
    {
952
      ifcansee
953
      {
954
        ifpdistl 16384
955
        {
956
          ifrnd 128
957
          {
958
 
959
 
960
            sound PISTOL_FIRE
961
            shoot SHOTSPARK1
962
          }
963
        }
964
        else
965
          ifrnd 128
966
        {
967
          sound PRED_ATTACK
968
          shoot FIRELASER
969
        }
970
      }
971
      else
972
      {
973
        move TANKFORWARD seekplayer
974
        action ATANKSPIN
975
      }
976
    }
977
 
978
    ifrnd 16
979
    {
980
      stopsound TANK_ROAM
981
      move TANKSTOPNW faceplayerslow
982
    }
983
  }
984
  else
985
    ifaction ATANKWAIT
986
  {
987
    ifactioncount 32
988
    {
989
      move TANKFORWARD seekplayer
990
      action ATANKSPIN
991
    }
992
  }
993
  else
994
    ifaction ATANKDEAD
995
  {
996
    addkills 1
997
    hitradius 6144 TOUGH TOUGH TOUGH TOUGH
998
    sound LASERTRIP_EXPLODE
999
    debris SCRAP1 15
1000
    spawn EXPLOSION2
1001
    ifrnd 128 spawn SNOWMAN
1002
    killit
1003
  }
1004
 
1005
  ifhitweapon
1006
  {
1007
    ifdead
1008
      action ATANKDEAD
1009
    else
1010
    {
1011
      debris SCRAP1 1
1012
      ifaction ATANKSHOOTING break
1013
 
1014
      ifrnd 192
1015
      {
1016
        move TANKSTOPNW geth
1017
        action ATANKSHOOTING
1018
        stopsound TANK_ROAM
1019
      }
1020
    }
1021
  }
1022
 
1023
enda
1024
 
1025
 
1026
include NWActor.con
1027
include NWSnow.con
1028
 
1029
// -----------------------------------------------------------------------------
1030
 
1031
onevent EVENT_GAME
8 h266 1032
  ifactor APLAYER
1033
  {
1034
    state nwl3surprise
1035
 
66 h266 1036
    getplayer[THISACTOR].holoduke_on nw_holodukeid
1037
    ifvarg nw_holodukeid -1
1038
      setactor[nw_holodukeid].mdflags 16
8 h266 1039
 
1040
   // addlogvar skin
1041
  }
1042
  ifactor FRAMEEFFECT1
1043
    ifspawnedby APLAYER
1044
      setactor[THISACTOR].mdflags 16
1045
 
1 h266 1046
/*
1047
  ifactor MONEY
1048
    {
1049
      setactor[THISACTOR].mdflags 16
66 h266 1050
      // getactor[THISACTOR].owner nw_owner
1051
      switch nw_owner
1 h266 1052
      case SNOW case SNOWFLAKE case SNOWMAKER case SNOWMAKERNOMOVE
66 h266 1053
        getactor[THISACTOR].x nw_x
1054
        getactor[THISACTOR].y nw_y
1055
        getactor[THISACTOR].z nw_z
1 h266 1056
 
66 h266 1057
        updatesectorz nw_x nw_y nw_z nw_temp
1058
        ifvarn nw_temp -1 getflorzofslope nw_temp nw_x nw_y nw_temp2 else killit
1 h266 1059
 
66 h266 1060
        ifvarvare nw_z nw_temp2 killit
1 h266 1061
      break
1062
      endswitch
1063
    }
1064
*/
1065
endevent
1066
 
14 h266 1067
onevent EVENT_ANIMATESPRITES
1 h266 1068
 
66 h266 1069
 ifvare nw_picnum DOORSHOCK
1 h266 1070
   {
1071
     ifspritepal 30 settspr[THISACTOR].tsprpicnum 3656
1072
     ifvare VOLUME 1 ifvare LEVEL 2 settspr[THISACTOR].tsprpicnum 3656
1073
     break
1074
   }
66 h266 1075
 ifvare nw_picnum SNOWFLAKE
1 h266 1076
   {
1077
     settspr[THISACTOR].tsprpicnum SNOW
1078
     settspr[THISACTOR].tsprxrepeat 4
1079
     settspr[THISACTOR].tspryrepeat 4
1080
     break
1081
   }
1082
/*
66 h266 1083
 ifvare nw_picnum MONEY
1 h266 1084
   {
66 h266 1085
      switch nw_owner
1 h266 1086
      case SNOW case SNOWFLAKE case SNOWMAKER case SNOWMAKERNOMOVE
1087
        settspr[THISACTOR].tsprpicnum SNOW
1088
      break
1089
      endswitch
1090
   }
1091
*/
8 h266 1092
 
66 h266 1093
  switch nw_picnum
8 h266 1094
    case APLAYER
1095
      ifvare skin SANTA
1096
      {
66 h266 1097
        gettspr[THISACTOR].tsprpicnum nw_temp3
1098
        ifvarg nw_temp3 1399 ifvarl nw_temp3 1544 addvar nw_temp3 4096
1099
        settspr[THISACTOR].tsprpicnum nw_temp3
1 h266 1100
 
66 h266 1101
        ifvarg nw_holodukeid -1
8 h266 1102
        {
66 h266 1103
          gettspr[nw_holodukeid].tsprpicnum nw_temp3
1104
          ifvarg nw_temp3 1399 ifvarl nw_temp3 1544 addvar nw_temp3 4096
1105
          settspr[nw_holodukeid].tsprpicnum nw_temp3
8 h266 1106
        }
1107
      }
1108
      break
1109
 
1110
    case FRAMEEFFECT1
1111
      ifvare skin SANTA
1112
        ifspawnedby APLAYER
1113
        {
66 h266 1114
          gettspr[THISACTOR].tsprpicnum nw_temp3
1115
          ifvarg nw_temp3 1399 ifvarl nw_temp3 1544 addvar nw_temp3 4096
1116
          settspr[THISACTOR].tsprpicnum nw_temp3
8 h266 1117
        }
1118
      break
1119
 
1120
    case DUKETORSO
1121
    case DUKEGUN
66 h266 1122
      getactor[nw_owner].picnum nw_temp2
1123
      ifvare nw_temp2 SOBBOTWALK
8 h266 1124
      {
66 h266 1125
        gettspr[THISACTOR].tsprpicnum nw_temp3
1126
        addvar nw_temp3 2456
1127
        settspr[THISACTOR].tsprpicnum nw_temp3
8 h266 1128
      }
66 h266 1129
      ifvare nw_temp2 SOBBOTFLY
8 h266 1130
      {
66 h266 1131
        gettspr[THISACTOR].tsprpicnum nw_temp3
1132
        addvar nw_temp3 2456
1133
        settspr[THISACTOR].tsprpicnum nw_temp3
8 h266 1134
      }
66 h266 1135
      ifvare nw_temp2 APLAYER
8 h266 1136
      {
1137
        ifvare skin SANTA
1138
        {
66 h266 1139
          gettspr[THISACTOR].tsprpicnum nw_temp3
1140
          addvar nw_temp3 2456
1141
          settspr[THISACTOR].tsprpicnum nw_temp3
8 h266 1142
        }
1143
      }
1144
      break
1 h266 1145
 
8 h266 1146
    case DUKELEG
66 h266 1147
      getactor[nw_owner].picnum nw_temp2
1148
      ifvare nw_temp2 SOBBOTWALK settspr[THISACTOR].tsprpal 30
1149
      ifvare nw_temp2 SOBBOTFLY settspr[THISACTOR].tsprpal 30
1150
      ifvare nw_temp2 APLAYER ifvare skin SANTA settspr[THISACTOR].tsprpal 30
8 h266 1151
      break
1152
  endswitch
1153
 
66 h266 1154
 ifvare nw_picnum APLAYER // this fixes the bug with the misplaced TV screen tiles
1 h266 1155
   {
66 h266 1156
     gettspr[THISACTOR].tsprpicnum nw_temp
1157
     switch nw_temp
1 h266 1158
      case 1470 case 1471 case 1472 case 1473 case 1474
66 h266 1159
       subvar nw_temp 5
1160
       settspr[THISACTOR].tsprpicnum nw_temp
1 h266 1161
      break
1162
     endswitch
1163
   }
1164
endevent
1165
 
1166
 
1167
 
1168
 
1169
useractor notenemy NWEFFECTOR 0 
22 h266 1170
  cstat 32768
1171
  // sizeat 1 1
1 h266 1172
 
22 h266 1173
  ifspritepal 31 // phone ringing effect
1174
  {
1175
    /*
66 h266 1176
    getplayer[THISACTOR].cursectnum nw_temp3
1177
    switch nw_temp3
22 h266 1178
      case 60 case 61 case 62 case 63
1179
      case 86 case 87
1180
      case 299 case 300 case 301 case 302 case 303 case 304 case 305 case 306 case 307 case 308 case 309
1181
      case 310 case 311 case 312 case 313 case 314 case 315 case 316 case 317
1182
        soundonce PHONE_RING
1 h266 1183
        break
1184
 
22 h266 1185
      default
1186
        stopsound PHONE_RING
1187
        break
1188
    endswitch
1189
    */
1190
 
1191
    ifpdistl 8192 // 4096
1192
      soundonce PHONE_RING
1193
    ifpdistg 16384
1194
      stopsound PHONE_RING
1195
 
1196
    ifpdistl RETRIEVEDISTANCE
1 h266 1197
      ifp pfacing
22 h266 1198
        ifhitspace
66 h266 1199
          ifvare nw_temp2 0
22 h266 1200
          {
66 h266 1201
            setvar nw_temp 0
1202
            setvar nw_temp2 1
1203
            setvar nw_temp3 0
1204
            setvar nw_tempb 0
22 h266 1205
          }
1 h266 1206
 
66 h266 1207
    ifvare nw_temp2 1
22 h266 1208
    {
66 h266 1209
      addvar nw_temp 1
1 h266 1210
 
22 h266 1211
      stopsound PHONE_RING
66 h266 1212
      ifvare nw_temp 1
22 h266 1213
        sound PHONE_PICKUP
66 h266 1214
      else ifvare nw_temp 30
22 h266 1215
      {
66 h266 1216
        setvar nw_tempb 0
1217
        randvar nw_tempb 3
22 h266 1218
 
66 h266 1219
        switch nw_tempb
22 h266 1220
          case 0
1221
            sound LOWANG1
66 h266 1222
            setvar nw_temp3 57
22 h266 1223
            break
1224
          case 1
1225
            sound LOWANG2
66 h266 1226
            setvar nw_temp3 124
22 h266 1227
            break
1228
          case 2
1229
            sound LOWANG3
66 h266 1230
            setvar nw_temp3 121
22 h266 1231
            break
1232
          case 3
1233
            sound LOWANG4
66 h266 1234
            setvar nw_temp3 156
22 h266 1235
            break
1236
        endswitch
1237
 
66 h266 1238
        addvar nw_temp3 60
1239
        setvar nw_tempb 0
22 h266 1240
      }
66 h266 1241
      else ifvarvare nw_temp nw_temp3
22 h266 1242
      {
1243
        sound PHONE_HANGUP
66 h266 1244
        setvarvar nw_tempb nw_temp3
1245
        addvar nw_tempb 150
22 h266 1246
      }
66 h266 1247
      else ifvarvare nw_temp nw_tempb
22 h266 1248
      {
66 h266 1249
        setvar nw_temp2 0
1250
        setvar nw_temp 0
22 h266 1251
      }
1252
    }
1253
  }
1 h266 1254
enda
1255
 
1256
useractor notenemy 3831 0
1257
// cstat 32768
1258
 sizeat 12 13
66 h266 1259
 getactor[THISACTOR].sectnum nw_temp
1260
 getplayer[THISACTOR].cursectnum nw_temp2
1261
 ifvarvare nw_temp nw_temp2
1 h266 1262
   {
1263
     setuserdef[THISACTOR].volume_number 1
1264
     endofgame 13
1265
   }
1266
enda
1267
 
1268
action WOODENHORSE2FRAME  0   1   5
1269
action WOODEN2FALLFRAME  -2738  1   5
1270
useractor notenemy WOODENHORSE2 WEAK WOODENHORSE2FRAME
1271
  fall
1272
  ifhitweapon
1273
  {
1274
    ifdead
1275
    {
1276
      debris SCRAP1 4
1277
      debris SCRAP2 3
1278
      killit
1279
    }
1280
    else
1281
      action WOODEN2FALLFRAME
1282
  }
1283
enda
1284
 
1285
useractor notenemy NWSTEAM 0 
1286
  ifpdistl 6144
1287
    soundonce STEAM_HISSING
1288
enda
1289
 
1290
define title_x1 73
1291
define title_x2 306
1292
define title_y 194
1293
define title_zoom 32768
1294
 
1295
onevent EVENT_DISPLAYMENU
66 h266 1296
//  getplayer[THISACTOR].gm nw_temp
1297
//  ifvarand nw_temp 4 nullop else
1 h266 1298
// {
75 h266 1299
  rotatesprite title_x1 title_y title_zoom 0 3838 0 0 256 0 0 xdim ydim
1300
  rotatesprite title_x2 title_y title_zoom 0 3839 0 0 512 0 0 xdim ydim
1 h266 1301
// }
1302
endevent