Subversion Repositories nw_plus

Rev

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
--------------------------------------------------------------------------------
*/

state checkcommhitstate

  ifhitweapon
  {
    guts JIBS6 2

    ifdead
    {
      ifwasweapon FREEZEBLAST
      {
        sound SOMETHINGFROZE
        spritepal 1
        move 0
        action ACOMMFROZEN
        strength 0
        state icesmoke
        break
      }
      else
        ifwasweapon GROWSPARK
      {
        sound ACTOR_GROWING
        ai AICOMMGROW
        break
      }

      addkills 1 state specialdeath

      ifwasweapon RADIUSEXPLOSION
      {
        spawn BLOODPOOL
        sound SQUISHED
        state standard_jibs
        killit
      }
      else
        ifwasweapon RPG
      {
        sound SQUISHED
        spawn BLOODPOOL
        state standard_jibs
        killit
      }

      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

state commshootbot

state calczdist
ldist xydist THISACTOR target
ifvare xydist 0 setvar xydist 1

ifvarand monstflags 32
{
        mulvar zdist 768
        divvarvar zdist xydist
        setprojectile[ELECTROPROJ].workslike 36866
        ezshoot zdist ELECTROPROJ
        setthisprojectile[RETURN].extra 50
        ifvarand monstflags 8
        {
                ezshoot zdist ELECTROPROJ
                setthisprojectile[RETURN].extra 50
        }
        setprojectile[ELECTROPROJ].workslike 32770
}
ifvarand monstflags 16
{
        eshoot FIREBALLPROJ 
        ifvarand monstflags 8 
        {
                setthisprojectile[RETURN].pal 13
                setthisprojectile[RETURN].extra 64
        }
} 
else
{
        mulvar zdist 644
        divvarvar zdist xydist
        ezshoot zdist FREEZEBLAST // NOAIM
        ifvarand monstflags 8 setactor[RETURN].extra 100
        setactor[RETURN].ang sprite[THISACTOR].ang

}


resetactioncount

ends

state commshooting

ifvarn target -1 { state commshootbot break }

ifvarand monstflags 32
{
        eshoot ELECTROPROJ
        setthisprojectile[RETURN].extra 50
        ifvarand monstflags 8
        {
                eshoot ELECTROPROJ
                setthisprojectile[RETURN].extra 50
        }
} else
ifvarand monstflags 16
{
        eshoot FIREBALLPROJ 
        ifvarand monstflags 8 
        {
                setthisprojectile[RETURN].pal 13
                setthisprojectile[RETURN].extra 64
        }
} 
else
{
        shoot FREEZEBLAST
        ifvarand monstflags 8 shoot FREEZEBLAST
}


resetactioncount

ends

actor COMMANDERSTAYPUT COMMANDERSTRENGTH
  cactor COMMANDER
  ai AICOMMABOUTTOSHOOT
enda

state commspinbotstate

getactor[target].x mx
getactor[target].y my
getactor[target].z mz
getactor[THISACTOR].x x
getactor[THISACTOR].y y
getactor[THISACTOR].z z
subvarvar mx x
subvarvar my y
getangle angvar mx my

cos xvel angvar
sin yvel angvar
shiftvarr xvel 7
shiftvarr yvel 7
subvarvar z mz 
ifvarg z 2048
setvar zvel -512 else
ifvarl z -2048 setvar zvel 512
movesprite THISACTOR xvel yvel zvel CLIPMASK0 RETURN

    soundonce COMM_SPIN
    ifcount 16
    {
      ifvarl xydist 1280
      {
            setvar temp CAPTSPINNINGPLAYER
        ifvarand monstflags 8 mulvar temp -2 else mulvar temp -1
        setactor[target].htextra temp
        setactor[target].htpicnum RPG
        setactor[target].htowner THISACTOR
        //sound DUKE_GRUNT
        resetcount
      }
      else
        ifvarg xydist 2300
          ai AICOMMWAIT
    }
    ifactioncount 52
      ai AICOMMWAIT
    ifnotmoving
      ifrnd 32
        operate

ends

state commspinstate

getplayer[THISACTOR].posx mx
getplayer[THISACTOR].posy my
getactor[THISACTOR].x x
getactor[THISACTOR].y y
subvarvar mx x
subvarvar my y
getangle angvar mx my

cos xvel angvar
sin yvel angvar
shiftvarr xvel 7
shiftvarr yvel 7
setvar zvel 0
movesprite THISACTOR xvel yvel zvel CLIPMASK0 RETURN 

    soundonce COMM_SPIN
    ifcount 16
    {
      ifpdistl 1280 ifvarg canshootplayer 0
      {
        addphealth CAPTSPINNINGPLAYER
        ifvarand monstflags 8 addphealth CAPTSPINNINGPLAYER
        sound DUKE_GRUNT
        palfrom 32 16 
        resetcount
      }
      else
        ifpdistg 2300
          ai AICOMMWAIT
    }
    ifactioncount 52
      ai AICOMMWAIT
    ifnotmoving
      ifrnd 32
        operate
        
ends

state commfrisbeestate

setvar weapcount -1
ifcount 6
{
        ifcount 7 nullop else
        {
                getplayer[THISACTOR].posx mx
                getplayer[THISACTOR].posy my
                getactor[THISACTOR].x x
                getactor[THISACTOR].y y
                subvarvar mx x
                subvarvar my y
                getangle peractor5 mx my
        }
        
        cos xvel peractor5
        sin yvel peractor5
        shiftvarr xvel 5
        shiftvarr yvel 5
        setvar zvel 0
        movesprite THISACTOR xvel yvel zvel CLIPMASK0 RETURN
        ifvarn RETURN 0
        {
                addvar RETURN 16384
        ifvarl RETURN 16384
        ifvarg RETURN -1 // hit a sprite
        {
                getactor[RETURN].picnum picnum
                getactorvar[RETURN].monstatus temp
                ifvare picnum APLAYER sound SQUISHED else
                ifvare temp 1 sound SQUISHED
                setactor[RETURN].htpicnum RPG
                setactor[RETURN].htextra 100
                setactor[RETURN].htowner THISACTOR
                setactor[RETURN].htang peractor5
                sound COMM_ATTACK
                
        }
        ai AICOMMWAIT
        setvar weapcount 0
    }
}

    soundonce COMM_SPIN
    
      ifpdistl 1280
      ifvarg canseeplayer 0
      {
        addphealth -1
        ifvarand monstflags 8 addphealth -1
        sound DUKE_GRUNT
        palfrom 32 16 
      }
      
    
    ifactioncount 52
    {
      ai AICOMMWAIT
      setvar weapcount 0
    }
ends

actor COMMANDER COMMANDERSTRENGTH

ifvarn target -1
{
        getactor[THISACTOR].z z
        getactor[target].z mz
}

  state checksquished
  state monsterai
  ifaction ACOMMFROZEN
  {
    fall

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

    ifhitweapon
    {
      ifwasweapon FREEZEBLAST
      {
        strength 0
        break
      }
      addkills 1 state specialdeath

      ifrnd 84
        spawn BLOODPOOL
      lotsofglass 30
      state standard_jibs
      sound GLASS_BREAKING
      killit
    }
    ifp pfacing
      ifpdistl FROZENQUICKKICKDIST
      ifvare superkicking 0
        pkick
    break
  }
  ifai 0
    ai AICOMMSHOOT
  else
    ifai AICOMMWAIT
  {
    ifcount 20
    {
          ifvarn target -1
          {
                  ifrnd 96
                    ai AICOMMGET
                  else
                    ai AICOMMABOUTTOSHOOT
          }
          else
          {
                  ifvarand monstflags 2048
                  {
                          ifvarg targetlock 0
                          {
                                ifrnd 96
                      ai AICOMMGET
                    else ifvare playerally 0
                      ai AICOMMABOUTTOSHOOT
                  }
                  else
                     ai AICOMMGET
              }
              else
              
              ifvarg canseeplayer 0
              {
                ifvarg canshootplayer 0
                {
                  ifrnd 96
                    ai AICOMMGET
                  else ifvare playerally 0
                    ai AICOMMABOUTTOSHOOT
                }
              }
              else
                ai AICOMMGET
      }
    }
  }
  else
    ifai AICOMMABOUTTOSHOOT
  {
        ifvare target -1 ifvarn playerally 0 { ai AICOMMGET break }
    ifactioncount 2
    {
          ifvarn target -1 ai AICOMMSHOOT else
      ifvarg canseeplayer 0 ifvare playerally 0
        ai AICOMMSHOOT
      else
      {
        ai AICOMMGET
        break
      }
    }
    ifrnd 32 soundonce COMM_ATTACK
  }
  else
    ifai AICOMMSHOOT
  {
        ifvare target -1 ifvarn playerally 0 { ai AICOMMGET break }
        setvar temp 0
        ifvarn target -1 setvar temp 1
        ifvarand monstflags 2048
        ifvare playerally 0
        {
                ifangdiffl 512 
                { 
                        ai AICOMMFRISBEE 
                        break 
                } 
                else ifvarg targetlock 0 setvar temp 1 
        } else
        ifvarg canshootplayer 0 setvar temp 1
    ifvare temp 1
    {
      ifcount 24
        ifrnd 16
          ai AICOMMWAIT
      ifactioncount 2
      {
            state commshooting
      }
    }
    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
  {
        ifvarn playerally 0 ifvare target -1 ifpdistl 1280 { ai AICOMMWAIT break }
    ifnotmoving
      ifrnd 4
        operate
    ifvare playerally 0
    ifpdistl 1280
      ifp palive
    {
      sound COMM_SPIN
      ai AICOMMSPIN
      break
    }
    ifvarn target -1
      ifvarl xydist 1280
    {
          sound COMM_SPIN
          ai AICOMMSPIN
          break
    }

    ifvarg canseeplayer 0
    {
          setvar temp 0
          ifp phigher setvar temp 1
          ifvarn target -1
          ifvarvarg z mz setvar temp 1
          
      ifvare temp 1
        move COMMGETUPVELS getv geth faceplayer
      else
        move COMMGETVELS getv geth faceplayer
    }
    ifactioncount 8
      ifrnd 2
        ai AICOMMABOUTTOSHOOT
  }
  else
    ifai AICOMMSPIN
  {
        ifvarn target -1 state commspinbotstate else
        state commspinstate
  }
  else ifai AICOMMFRISBEE state commfrisbeestate

  ifai AICOMMDYING
  {
    fall
    strength 0

    ifhitweapon
      ifwasweapon RADIUSEXPLOSION
    {
      sound SQUISHED
      spawn BLOODPOOL
      state standard_jibs
      killit
    }

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




useractor enemy TANK TANKSTRENGTH fall
  state monsterai
  ifaction 0
  {
   // sizeat 60 60
    action ATANKWAIT
    cstat 257
    clipdist 100
  }
  else
    ifaction ATANKSPIN
  {
    soundonce TANK_ROAM

    ifactioncount 20
    {
          ifvare target -1 ifvarn playerally 0 nullop else
      ifrnd 16
        ifvarg canseeplayer 0
          ifvarg canshootplayer 0
      {
        move STOPPED geth
        action ATANKSHOOTING
        stopsound TANK_ROAM
      }
    }

    ifrnd 16
      move TANKFORWARD seekplayer
  }
  else
    ifaction ATANKSHOOTING
  {
        ifvarn target -1 state tankshootbot else
        {
                ifvarn playerally 0 { move 0 action ATANKWAIT break }
            ifactioncount 22
            {
              ifpdistg 8192
              {
                sound BOS1_ATTACK2
                shoot MORTER
                ifvarand monstflags 8 shoot MORTER
              }
              resetcount
              move 0 action ATANKWAIT
            }
            else
              ifactioncount 2
            {
              ifvarg canseeplayer 0
              {
                ifpdistl 16384
                {
                  ifrnd 128
                  {
                        ifvarand monstflags 16
                        {
                                ifvarand morefx 16
                                ifvarn rendmode 0 espawn SHOTSPARK5
                                sound PISTOL_LOW
                                shoot STARPROJ
                                ifvarand monstflags 8 shoot STARPROJ
                        } else
                        {
                                ifvarand morefx 16
                                ifvarn rendmode 0 espawn SHOTSPARK5
                                addvar position 1 ifvarg position 3 setvar position 0
                                setactorvar[RETURN].position position
                                ifvare dpsounds YES sound DPCHAINGUNFIRE else
                            sound PISTOL_FIRE
                            shoot SHOTSPARK1
                            ifvarand monstflags 8 shoot SHOTSPARK1
                    }
                  }
                }
                else
                  ifrnd 128
                {
                        ifvarand monstflags 16
                        {
                                sound RPG_SHOOT
                                shoot FIREBULLET
                                ifvarand monstflags 8 shoot FIREBULLET
                        }
                        else
                        {
                              ifvare dpsounds YES sound PRED_ATTACK2 else
                          sound PRED_ATTACK
                          shoot FIRELASER
                          ifvarand monstflags 8 shoot FIRELASER
                    }
                }
              }
              else
              {
                move TANKFORWARD seekplayer
                action ATANKSPIN
              }
            }
        
            ifrnd 16
            {
              stopsound TANK_ROAM
              move STOPPED faceplayerslow
            }
    }
  }
  else
    ifaction ATANKWAIT
  {
    ifactioncount 32
    {
      move TANKFORWARD seekplayer
      action ATANKSPIN
    }
  }
  else
    ifaction ATANKDEAD
  {
    addkills 1 state specialdeath
    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
          ifvare target -1 ifvarn playerally 0 nullop else
      ifrnd 192
      {
        move STOPPED geth
        action ATANKSHOOTING
        stopsound TANK_ROAM
      }
    }
  }

enda