Subversion Repositories nw_plus

Rev

Rev 52 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
--------------------------------------------------------------------------------
Duke: Nuclear Winter
By Joris Weimar
© 1997 Simply Silly Software
--------------------------------------------------------------------------------
Duke: Nuclear Winter Plus
By Hendricks266
--------------------------------------------------------------------------------
*/

include NWDefs.con
include NWUser.con

setgamename Duke: Nuclear Winter

gamevar nw_picnum 0 2
gamevar nw_temp 0 2
gamevar nw_tempb 0 2
gamevar nw_x 0 2
gamevar nw_y 0 2
gamevar nw_z 0 2

gamevar nw_owner 0 2
gamevar nw_temp2 0 2
gamevar nw_temp3 0 2
// gamevar nw_temp4 0 0
// gamevar nw_ptemp 0 1
gamevar nw_holodukeid 0 1
gamevar nw_musicchange 0 1
gamevar skin DUKE 132097 // do not reset flag enabled

gamevar LOGO_FLAGS 767 0 // default; TEN screen reenabled

state cutsceneambience
  getactor[THISACTOR].lotag nw_temp

  switch nw_temp

    case WIND_AMBIENCE
    case WIND_REPEAT
     setactor[THISACTOR].lotag WIND2
    break

    case FLY_BY
     setactor[THISACTOR].lotag FLY_BY2
    break

  endswitch
ends

onevent EVENT_LOADACTOR
  getactor[THISACTOR].picnum nw_picnum
  switch nw_picnum

   case SNOWYDOORSHOCK 
     spritepal 30
     cactor DOORSHOCK
   break

   case 3765 case 3766 case 3767 case 3768 cactor WOODENHORSE2 break

  // case PIGCOP case PIGCOPSTAYPUT case PIGCOPDIVE sizeat 48 40 break
   case SOBBOTWALK case SOBBOTFLY sizeat 42 36 break
   case ELFUZI case ELFUZISTAYPUT sizeat 32 27 break
   case ELFGUN case ELFGUNSTAYPUT sizeat 32 27 break
   case SNOWMAN sizeat 42 36 break

   case 1915
    cactor COMMANDER // failsafe fix for NWL5 bug
   break

   case MUSICANDSFX
     state cutsceneambience
   break

   case JETPACK
     ifspritepal 21 setvar nw_temp 1
     spritepal 0
   break

/*
   case SNOWFLAKE
     cactor SNOW
     sizeat 8 8
   break
*/

   case XMASPRESENT
   case XMASPRESENT2
     getactor[THISACTOR].hitag nw_temp
     setactor[THISACTOR].hitag 0
   break

  endswitch
endevent

onevent EVENT_SPAWN
  getactor[THISACTOR].owner nw_owner
  getactor[THISACTOR].picnum nw_picnum
endevent

onevent EVENT_EGS
 getactor[THISACTOR].picnum nw_picnum

 ifactor APLAYER setactor[THISACTOR].mdflags 16
 ifactor DUKETORSO setactor[THISACTOR].mdflags 16
 ifactor DUKEGUN setactor[THISACTOR].mdflags 16
 ifactor DUKELEG setactor[THISACTOR].mdflags 16
 ifactor DOORSHOCK setactor[THISACTOR].mdflags 16

 ifactor SNOW
   {
     sizeat 8 8

     setvar nw_temp3 0
     randvar nw_temp3 2047
     setactor[THISACTOR].ang nw_temp3

     setvar nw_temp2 -2047
     randvar nw_temp2 2047

/*
     setvar nw_temp3 0
     ifrnd 128 addvar nw_temp3 4
     ifrnd 128 addvar nw_temp3 8
     setactor[THISACTOR].cstat nw_temp3
*/
   }
endevent

// -----------------------------------------------------------------------------

state standard_bjibs
  guts JIBS2 1
  guts JIBS3 2
  guts JIBS4 3
  guts JIBS5 2
  guts JIBS6 3
  ifrnd 6
  {
    guts JIBS1 1
  }         // a badly drawn spine
ends

state nwbreakobject
  ifaction 0
  {
    action ANULLACTION
    cstator 257
  }
    ifhitweapon
    {
      ifdead
      {
        ifactor WOODSLATS
        {
          sound GLASS_HEAVYBREAK
          debris SCRAP3 5
          debris SCRAP4 3
          killit
        }
      else
        ifactor RIBBON
        {
          sound GLASS_HEAVYBREAK
          debris SCRAP3 5
          debris SCRAP4 3
          killit
        }
      else
        ifactor MYBOX
        {
          sound GLASS_HEAVYBREAK
          debris SCRAP3 5
          debris SCRAP4 3
          killit
        }
      else
        ifactor SNOWGIB killit
      else
        ifactor DRUNKELF
        {
          sound PRED_DYING
          guts JIBS6 2
          guts JIBS6 3
          guts JIBS6 4
          killit
        }
      else
        ifactor CHOOCHOOSLUT
        {
          sound GLASS_HEAVYBREAK
          debris SCRAP3 5
          debris SCRAP4 3
          killit
        }
      else
        ifactor HORSEPOWER
        {
          sound GLASS_HEAVYBREAK
          debris SCRAP3 5
          debris SCRAP4 3
          killit
        }
      else
        ifactor CHANDELIER
        {
          sound GLASS_BREAKING
          debris SCRAP3 3
          debris SCRAP4 4
          lotsofglass 10
          killit
        }
      else
        ifactor TREEWITHSOMETHING
        {
          sound GLASS_HEAVYBREAK
          debris SCRAP3 5
          ifrnd 96
          {
            ifrnd 64 spawn ATOMICHEALTH else spawn SHIELD
          }
          else
          {
            ifrnd 128 spawn STEROIDS else spawn FECES
          }
          killit
        }
      else
        ifactor SSPEAKER
        {
          debris SCRAP4 3
          killit
        }
      }
    }
ends

useractor notenemy WOODSLATS MEDIUMSTRENGTH state nwbreakobject enda

useractor notenemy RIBBON WEAK state nwbreakobject enda

useractor notenemy SSPEAKER WEAK state nwbreakobject enda

useractor notenemy MYBOX WEAK state nwbreakobject enda

useractor notenemy DRUNKELF WEAK state nwbreakobject enda

useractor notenemy CHOOCHOOSLUT WEAK state nwbreakobject enda

useractor notenemy HORSEPOWER WEAK state nwbreakobject enda

useractor notenemy SNOWGIB WEAK state nwbreakobject enda

useractor notenemy CHANDELIER WEAK state nwbreakobject enda

useractor notenemy TREEWITHSOMETHING TOUGH state nwbreakobject enda

actor JETPACK
  fall
  ifmove RESPAWN_ACTOR_FLAG
    state respawnit
  else
    ifp pshrunk nullop
    else
      ifp palive
        ifpdistl RETRIEVEDISTANCE
          ifcount 6
            ifpinventory GET_JETPACK JETPACK_AMOUNT
              ifcanseetarget
      {
        ifvare nw_temp 1
        {
          addinventory GET_JETPACK JETPACK_NEAR_EMPTY
          redefinequote 122       This jetpack is almost empty!
          quote 122
        }
        else
        {
          addinventory GET_JETPACK JETPACK_AMOUNT
          quote 41
        }
        ifspawnedby JETPACK
          state getcode
        else
          state quikget
      }
enda

action FEMHDANCE1 205 1 1 1 16
action FEMHDANCE3 205 1 1 1 26
action FEMHDANCE2 206 2 1 1 10



state nwbabecode
 getactor[THISACTOR].cstat nw_temp
 ifvarand nw_temp 1 nullop else addvar nw_temp 1
 ifactor HALFBITCH { ifvarand nw_temp 128 nullop else addvar nw_temp 128 }
 ifvarand nw_temp 256 nullop else addvar nw_temp 256

 getuserdef .lockout nw_temp2
 ifvare nw_temp2 1
   {
     ifvarand nw_temp 32768 nullop else addvar nw_temp 32768
   }
 else
  // {
     ifvarand nw_temp 32768 subvar nw_temp 32768
  // }

 setactor[THISACTOR].cstat nw_temp



  ifactor HALFBITCH nullop else fall

  ifaction FEMSHRUNK
  {
    ifcount SHRUNKDONECOUNT
    {
      action FEMANIMATE
      cstat 257
    }
    else
      ifcount SHRUNKCOUNT
        sizeto 40 40
    else
      state genericshrunkcode
  }
  else ifaction FEMGROW
  {
    ifcount 32
    {
      respawnhitag
      guts JIBS4 20
      guts JIBS6 20
      spritepal 6
      soundonce LADY_SCREAM
      ifactor SLUTASS debris SCRAP6 1
      sound SQUISH2
      killit
    }
    else
      sizeto MAXXSTRETCH MAXYSTRETCH
  }


  else
    ifaction FEMHDANCE1
  {
    ifactioncount 2
      action FEMHDANCE2
  }
  else
    ifaction FEMHDANCE2
  {
    ifactioncount 8
      action FEMHDANCE3
  }
  else
    ifaction FEMHDANCE3
  {
    ifactioncount 2
    action FEMANIMATE
  }
  else
    ifaction FEMFROZEN1
  {
    ifcount THAWTIME
    {
      action FEMANIMATE
      getlastpal
    }
    else
      ifcount FROZENDRIPTIME
    {
      ifactioncount 26
      {
        spawn WATERDRIP
        resetactioncount
      }
    }

    ifhitweapon
    {
      ifwasweapon FREEZEBLAST
      {
        strength 0
        break
      }
      lotsofglass 30
      sound GLASS_BREAKING
      respawnhitag
      ifrnd 84
        spawn BLOODPOOL
      killit
    }
    else
      ifp pfacing
        ifpdistl FROZENQUICKKICKDIST
          pkick
    break
  }
  else ifaction FEMFROZEN2
  {
    ifcount THAWTIME
    {
      action FEMANIMATE
      getlastpal
    }
    else
      ifcount FROZENDRIPTIME
    {
      ifactioncount 26
      {
        spawn WATERDRIP
        resetactioncount
      }
    }

    ifhitweapon
    {
      ifwasweapon FREEZEBLAST
      {
        strength 0
          break
      }

      lotsofglass 30

      sound GLASS_BREAKING
      ifrnd 84
        spawn BLOODPOOL
      respawnhitag

      ifrnd 128
        sound DUKE_HIT_STRIPPER1
      else
        sound DUKE_HIT_STRIPPER2

      killit
    }
    else
      ifp pfacing
        ifpdistl FROZENQUICKKICKDIST
          pkick
    break
  }

  ifhitweapon
  {
    ifdead
    {
      ifwasweapon GROWSPARK
      {
        cstat 0
        move 0
        sound ACTOR_GROWING
        action FEMGROW
        break
      }
      else ifwasweapon FREEZEBLAST
      {
        ifaction FEMSHRUNK
          break

          action FEMFROZEN1

        move 0
        spritepal 1
        strength 0

        sound SOMETHINGFROZE

        break
      }

      ifrnd 128
        sound DUKE_HIT_STRIPPER1
      else
        sound DUKE_HIT_STRIPPER2

      respawnhitag
      state standard_bjibs
      state random_wall_jibs
      spawn BLOODPOOL

        ifactor HALFBITCH
          money 3
      else
        ifactor SLUTASS
          money 3


        spritepal 6
        soundonce LADY_SCREAM
        ifactor NAKED1
          debris SCRAP3 18
        else
          ifactor PODFEM1
            debris SCRAP3 18
        killit
    }
    else
    {
      ifwasweapon SHRINKSPARK
      {
        sound ACTOR_SHRINKING
        move 0
        action FEMSHRUNK
        cstat 0
        break
      }
      else
        ifwasweapon GROWSPARK
          sound EXPANDERHIT


      sound SQUISH2

      guts JIBS6 1
    }
  }



  ifp pfacing
    ifpdistl 1280
      ifhitspace
  {
    tip
    ifrnd 128
      soundonce DUKE_TIP1
    else
      soundonce DUKE_TIP2
ifactor HALFBITCH
      action FEMHDANCE1
  }
ends

useractor notenemy HALFBITCH TOUGH
  state nwbabecode
enda

useractor notenemy SLUTASS TOUGH
  state nwbabecode
enda

state nwl3surprise
ifvare VOLUME 1
  {
    ifvare LEVEL 2
      {
        getactor[THISACTOR].sectnum nw_temp
        switch nw_temp
          case 220 case 221
            ifvarn nw_musicchange 1
              {
                starttrack 12 // doom
                setvar nw_musicchange 1
              }
          break
          case 563 case 564 case 565 case 566 case 567
            ifvarn nw_musicchange 2
              {
                starttrack 13 // mario
                setvar nw_musicchange 2
              }
          break
          case 192 case 193 case 194 case 195 case 196 case 197 case 198 case 237 case 238 case 239 case 240
          case 166 case 167 case 172 case 173 case 174 case 176 case 179
            ifvarn nw_musicchange 0
              {
                starttrackvar LEVEL // level music
                setvar nw_musicchange 0
              }
          break
        endswitch
      }
  }
ends

// Flying Frosty

/*
action ACOMMBREETH  0  3  5  1  40
action ACOMMFROZEN  0  1  5
action ACOMMSPIN   -5  1  5  1  12
action ACOMMGET   0  3  5  1  30
action ACOMMSHOOT  20  1  5   1 35
action ACOMMABOUTTOSHOOT 20 1 5 1 30
action ACOMMDYING  30  8  1  1  12
action ACOMMDEAD   38  1  1  1  1


move COMMGETUPVELS 128 -64
move COMMGETVELS 128 64
move COMMSLOW 64 24
move COMMSTOPPED

ai AICOMMWAIT ACOMMBREETH COMMSTOPPED faceplayerslow
ai AICOMMGET ACOMMGET COMMGETVELS seekplayer
ai AICOMMSHOOT ACOMMSHOOT COMMSTOPPED faceplayerslow
ai AICOMMABOUTTOSHOOT ACOMMABOUTTOSHOOT COMMSTOPPED faceplayerslow
ai AICOMMSPIN ACOMMSPIN COMMGETVELS spin
ai AICOMMDYING ACOMMDYING COMMSTOPPED faceplayer
ai AICOMMSHRUNK ACOMMGET COMMSLOW furthestdir
ai AICOMMGROW ACOMMGET COMMSTOPPED furthestdir
*/

move COMMGETUPVELSNW 128 -64
move COMMGETVELSNW 128 64
move COMMSLOWNW 64 24
move COMMSTOPPEDNW

action ACOMMSPINNW   0  1  5  1  12
action ACOMMSHOOTNW  20  1  5 1  16 // this is custom to shorten the delay between firing freezeblasts

ai AICOMMSPINNW ACOMMSPINNW COMMGETVELSNW spin
ai AICOMMSHOOTNW ACOMMSHOOTNW COMMSTOPPEDNW faceplayerslow

state checkcommhitstate

  ifhitweapon
  {
    debris SCRAP3 5
    ifdead
    {
      ifwasweapon FREEZEBLAST
      {
        break
      }
      else
        ifwasweapon GROWSPARK
      {
        sound ACTOR_GROWING
        ai AICOMMGROW
        break
      }

      addkills 1

      ifwasweapon RADIUSEXPLOSION
      {
        debris SCRAP3 5
        sound SQUISH2
        killit
      }
      else
        ifwasweapon RPG
      {
        sound SQUISH2
        debris SCRAP3 5
        state standard_jibs
        killit
      }

      debris SCRAP3 100
      sound COMM_DYING
      ai AICOMMDYING
    }
    else
    {
      soundonce COMM_PAIN
      ifwasweapon SHRINKSPARK
      {
        sound ACTOR_SHRINKING
        ai AICOMMSHRUNK
      }
      else
        ifwasweapon GROWSPARK
          sound EXPANDERHIT
      else
        ifrnd 24
          ai AICOMMABOUTTOSHOOT
    }
  }
ends

actor COMMANDERSTAYPUT COMMANDERSTRENGTH
  cactor COMMANDER
  ai AICOMMABOUTTOSHOOT
enda

actor COMMANDER COMMANDERSTRENGTH

  state checksquished

  ifaction ACOMMFROZEN
  {
    fall

    ifcount THAWTIME
    {
      getlastpal
      ai AICOMMWAIT
    }
    else
      ifcount FROZENDRIPTIME
    {
      ifactioncount 26
      {
        spawn WATERDRIP
        resetactioncount
      }
    }

    ifhitweapon
    {
      ifwasweapon FREEZEBLAST
      {
        strength 0
        break
      }
      addkills 1

      ifrnd 84
        spawn BLOODPOOL
      lotsofglass 30
      sound GLASS_BREAKING
      killit
    }
    ifp pfacing
      ifpdistl FROZENQUICKKICKDIST
        pkick
    break
  }
  ifai 0
    ai AICOMMSHOOTNW
  else
    ifai AICOMMWAIT
  {
    ifcount 20
    {
      ifcansee
      {
        ifcanshoottarget
        {
          ifrnd 96
            ai AICOMMGET
          else
            ai AICOMMABOUTTOSHOOT
        }
      }
      else
        ai AICOMMGET
    }
  }
  else
    ifai AICOMMABOUTTOSHOOT
  {
    ifactioncount 2
    {
      ifcansee
        ai AICOMMSHOOTNW
      else
      {
        ai AICOMMGET
        break
      }
    }
    ifrnd 32 soundonce COMM_ATTACK
  }
  else
    ifai AICOMMSHOOTNW
  {
    ifcanshoottarget
    {
      ifcount 12
        ifrnd 16
          ai AICOMMWAIT
        
      ifactioncount 1
      {
        shoot FREEZEBLAST
        resetactioncount
      }
 
      getplayer[THISACTOR].i nw_temp
      getactor[nw_temp].pal nw_temp
      ifvare nw_temp 1 // if player is frozen
        ai AICOMMGET
    }
    else
      ai AICOMMGET
  }
  else
    ifai AICOMMSHRUNK
  {
    ifcount SHRUNKDONECOUNT
      ai AICOMMGET
    else
      ifcount SHRUNKCOUNT
        sizeto 48 40
    else
      state genericshrunkcode
  }
  else
    ifai AICOMMGROW
      state genericgrowcode
  else
    ifai AICOMMGET
  {
    ifnotmoving
      ifrnd 4
        operate
    ifpdistl 1024
    {
      ifp palive
      {
        sound COMM_SPIN
        ai AICOMMSPINNW
        break
      }
      
      getplayer[THISACTOR].i nw_temp
      getactor[nw_temp].pal nw_temp
      ifvare nw_temp 1 // if player is frozen
      {
        sound COMM_SPIN
        ai AICOMMSPINNW
        break
      }
    }

    ifcansee
    {
      ifp phigher
        move COMMGETUPVELS getv geth faceplayer
      else
        move COMMGETVELS getv geth faceplayer
    }
    ifactioncount 8
      ifrnd 2
        ai AICOMMABOUTTOSHOOT
  }
  else
    ifai AICOMMSPINNW
  {
    soundonce COMM_SPIN
    ifcount 16
    {
      ifpdistl 1280
      {
        setvar nw_tempb CAPTSPINNINGPLAYER
        mulvar nw_tempb -1
        // addphealth CAPTSPINNINGPLAYER
        getplayer[THISACTOR].i nw_temp
        setactor[nw_temp].htextra nw_tempb
        setactor[nw_temp].htpicnum KNEE
        setactor[nw_temp].htowner THISACTOR

        globalsound DUKE_GRUNT
        palfrom 32 16
        resetcount
      }
      else
        ifpdistg 2300
          ai AICOMMWAIT
    }
    ifactioncount 52
      ai AICOMMWAIT
    ifnotmoving
      ifrnd 32
        operate
  }

  ifai AICOMMDYING
  {
    fall
    strength 0

    ifhitweapon
      ifwasweapon RADIUSEXPLOSION
    {
      sound SQUISH2
      spawn BLOODPOOL
      state standard_jibs

      killit
    }

    ifaction ACOMMDYING
      ifactioncount 8
    {
      iffloordistl 8
        sound THUD
      cstat 0
      action ACOMMDEAD
    }
  }
  else
  {
    ifrnd 2
      soundonce COMM_ROAM
    state checkcommhitstate
  }
enda

// Frosted Battle Mobile

move TANKSTOPNW

useractor enemy TANK TANKSTRENGTH
    fall

//  sizeat 45 45
  ifaction 0
  {
    action ATANKWAIT
    cstat 257
    clipdist 100
  }
  else
    ifaction ATANKSPIN
  {
    soundonce TANK_ROAM

    ifactioncount 20
    {
      ifrnd 16
        ifcansee
          ifcanshoottarget
      {
        move TANKSTOPNW geth
        action ATANKSHOOTING
        stopsound TANK_ROAM
      }
    }

    ifrnd 16
      move TANKFORWARD seekplayer
  }
  else
    ifaction ATANKSHOOTING
  {
    ifactioncount 22
    {
      ifpdistg 8192
      {
        sound BOS1_ATTACK2
        shoot MORTER
      }
      resetcount
      move 0 action ATANKWAIT
    }
    else
      ifactioncount 2
    {
      ifcansee
      {
        ifpdistl 16384
        {
          ifrnd 128
          {


            sound PISTOL_FIRE
            shoot SHOTSPARK1
          }
        }
        else
          ifrnd 128
        {
          sound PRED_ATTACK
          shoot FIRELASER
        }
      }
      else
      {
        move TANKFORWARD seekplayer
        action ATANKSPIN
      }
    }

    ifrnd 16
    {
      stopsound TANK_ROAM
      move TANKSTOPNW faceplayerslow
    }
  }
  else
    ifaction ATANKWAIT
  {
    ifactioncount 32
    {
      move TANKFORWARD seekplayer
      action ATANKSPIN
    }
  }
  else
    ifaction ATANKDEAD
  {
    addkills 1
    hitradius 6144 TOUGH TOUGH TOUGH TOUGH
    sound LASERTRIP_EXPLODE
    debris SCRAP1 15
    spawn EXPLOSION2
    ifrnd 128 spawn SNOWMAN
    killit
  }

  ifhitweapon
  {
    ifdead
      action ATANKDEAD
    else
    {
      debris SCRAP1 1
      ifaction ATANKSHOOTING break

      ifrnd 192
      {
        move TANKSTOPNW geth
        action ATANKSHOOTING
        stopsound TANK_ROAM
      }
    }
  }

enda


include NWActor.con
include NWSnow.con

// -----------------------------------------------------------------------------

onevent EVENT_GAME
  ifactor APLAYER
  {
    state nwl3surprise
    
    getplayer[THISACTOR].holoduke_on nw_holodukeid
    ifvarg nw_holodukeid -1
      setactor[nw_holodukeid].mdflags 16
    
   // addlogvar skin
  }
  ifactor FRAMEEFFECT1
    ifspawnedby APLAYER
      setactor[THISACTOR].mdflags 16

/*
  ifactor MONEY
    {
      setactor[THISACTOR].mdflags 16
      // getactor[THISACTOR].owner nw_owner
      switch nw_owner
      case SNOW case SNOWFLAKE case SNOWMAKER case SNOWMAKERNOMOVE
        getactor[THISACTOR].x nw_x
        getactor[THISACTOR].y nw_y
        getactor[THISACTOR].z nw_z

        updatesectorz nw_x nw_y nw_z nw_temp
        ifvarn nw_temp -1 getflorzofslope nw_temp nw_x nw_y nw_temp2 else killit

        ifvarvare nw_z nw_temp2 killit
      break
      endswitch
    }
*/
endevent

onevent EVENT_ANIMATESPRITES

 ifvare nw_picnum DOORSHOCK
   {
     ifspritepal 30 settspr[THISACTOR].tsprpicnum 3656
     ifvare VOLUME 1 ifvare LEVEL 2 settspr[THISACTOR].tsprpicnum 3656
     break
   }
 ifvare nw_picnum SNOWFLAKE
   {
     settspr[THISACTOR].tsprpicnum SNOW
     settspr[THISACTOR].tsprxrepeat 4
     settspr[THISACTOR].tspryrepeat 4
     break
   }
/*
 ifvare nw_picnum MONEY
   {
      switch nw_owner
      case SNOW case SNOWFLAKE case SNOWMAKER case SNOWMAKERNOMOVE
        settspr[THISACTOR].tsprpicnum SNOW
      break
      endswitch
   }
*/
 
  switch nw_picnum
    case APLAYER
      ifvare skin SANTA
      {
        gettspr[THISACTOR].tsprpicnum nw_temp3
        ifvarg nw_temp3 1399 ifvarl nw_temp3 1544 addvar nw_temp3 4096
        settspr[THISACTOR].tsprpicnum nw_temp3

        ifvarg nw_holodukeid -1
        {
          gettspr[nw_holodukeid].tsprpicnum nw_temp3
          ifvarg nw_temp3 1399 ifvarl nw_temp3 1544 addvar nw_temp3 4096
          settspr[nw_holodukeid].tsprpicnum nw_temp3
        }
      }
      break
 
    case FRAMEEFFECT1
      ifvare skin SANTA
        ifspawnedby APLAYER
        {
          gettspr[THISACTOR].tsprpicnum nw_temp3
          ifvarg nw_temp3 1399 ifvarl nw_temp3 1544 addvar nw_temp3 4096
          settspr[THISACTOR].tsprpicnum nw_temp3
        }
      break
 
    case DUKETORSO
    case DUKEGUN
      getactor[nw_owner].picnum nw_temp2
      ifvare nw_temp2 SOBBOTWALK
      {
        gettspr[THISACTOR].tsprpicnum nw_temp3
        addvar nw_temp3 2456
        settspr[THISACTOR].tsprpicnum nw_temp3
      }
      ifvare nw_temp2 SOBBOTFLY
      {
        gettspr[THISACTOR].tsprpicnum nw_temp3
        addvar nw_temp3 2456
        settspr[THISACTOR].tsprpicnum nw_temp3
      }
      ifvare nw_temp2 APLAYER
      {
        ifvare skin SANTA
        {
          gettspr[THISACTOR].tsprpicnum nw_temp3
          addvar nw_temp3 2456
          settspr[THISACTOR].tsprpicnum nw_temp3
        }
      }
      break

    case DUKELEG
      getactor[nw_owner].picnum nw_temp2
      ifvare nw_temp2 SOBBOTWALK settspr[THISACTOR].tsprpal 30
      ifvare nw_temp2 SOBBOTFLY settspr[THISACTOR].tsprpal 30
      ifvare nw_temp2 APLAYER ifvare skin SANTA settspr[THISACTOR].tsprpal 30
      break
  endswitch

 ifvare nw_picnum APLAYER // this fixes the bug with the misplaced TV screen tiles
   {
     gettspr[THISACTOR].tsprpicnum nw_temp
     switch nw_temp
      case 1470 case 1471 case 1472 case 1473 case 1474
       subvar nw_temp 5
       settspr[THISACTOR].tsprpicnum nw_temp
      break
     endswitch
   }
endevent




useractor notenemy NWEFFECTOR 0 
  cstat 32768
  // sizeat 1 1

  ifspritepal 31 // phone ringing effect
  {
    /*
    getplayer[THISACTOR].cursectnum nw_temp3
    switch nw_temp3
      case 60 case 61 case 62 case 63
      case 86 case 87
      case 299 case 300 case 301 case 302 case 303 case 304 case 305 case 306 case 307 case 308 case 309
      case 310 case 311 case 312 case 313 case 314 case 315 case 316 case 317
        soundonce PHONE_RING
        break

      default
        stopsound PHONE_RING
        break
    endswitch
    */

    ifpdistl 8192 // 4096
      soundonce PHONE_RING
    ifpdistg 16384
      stopsound PHONE_RING

    ifpdistl RETRIEVEDISTANCE
      ifp pfacing
        ifhitspace
          ifvare nw_temp2 0
          {
            setvar nw_temp 0
            setvar nw_temp2 1
            setvar nw_temp3 0
            setvar nw_tempb 0
          }

    ifvare nw_temp2 1
    {
      addvar nw_temp 1

      stopsound PHONE_RING
      ifvare nw_temp 1
        sound PHONE_PICKUP
      else ifvare nw_temp 30
      {
        setvar nw_tempb 0
        randvar nw_tempb 3

        switch nw_tempb
          case 0
            sound LOWANG1
            setvar nw_temp3 57
            break
          case 1
            sound LOWANG2
            setvar nw_temp3 124
            break
          case 2
            sound LOWANG3
            setvar nw_temp3 121
            break
          case 3
            sound LOWANG4
            setvar nw_temp3 156
            break
        endswitch

        addvar nw_temp3 60
        setvar nw_tempb 0
      }
      else ifvarvare nw_temp nw_temp3
      {
        sound PHONE_HANGUP
        setvarvar nw_tempb nw_temp3
        addvar nw_tempb 150
      }
      else ifvarvare nw_temp nw_tempb
      {
        setvar nw_temp2 0
        setvar nw_temp 0
      }
    }
  }
enda

useractor notenemy 3831 0
// cstat 32768
 sizeat 12 13
 getactor[THISACTOR].sectnum nw_temp
 getplayer[THISACTOR].cursectnum nw_temp2
 ifvarvare nw_temp nw_temp2
   {
     setuserdef[THISACTOR].volume_number 1
     endofgame 13
   }
enda

action WOODENHORSE2FRAME  0   1   5
action WOODEN2FALLFRAME  -2738  1   5
useractor notenemy WOODENHORSE2 WEAK WOODENHORSE2FRAME
  fall
  ifhitweapon
  {
    ifdead
    {
      debris SCRAP1 4
      debris SCRAP2 3
      killit
    }
    else
      action WOODEN2FALLFRAME
  }
enda

useractor notenemy NWSTEAM 0 
  ifpdistl 6144
    soundonce STEAM_HISSING
enda

define title_x1 73
define title_x2 306
define title_y 194
define title_zoom 32768

onevent EVENT_DISPLAYMENU
//  getplayer[THISACTOR].gm nw_temp
//  ifvarand nw_temp 4 nullop else
// {
  rotatesprite title_x1 title_y title_zoom 0 3838 0 0 0 0 0 xdim ydim
  rotatesprite title_x2 title_y title_zoom 0 3839 0 0 0 0 0 xdim ydim
// }
endevent

/*
onevent EVENT_DISPLAYTITLE
  rotatesprite title_x1 title_y title_zoom 0 3838 0 0 0 0 0 xdim ydim
  rotatesprite title_x2 title_y title_zoom 0 3839 0 0 0 0 0 xdim ydim
endevent
*/