raze/polymer/eduke32/a.m32
helixhorned b9579e9db0 The actual "stuff"...
git-svn-id: https://svn.eduke32.com/eduke32@1522 1a8010ca-5511-0410-912e-c29ae57300e0
2009-10-03 13:33:47 +00:00

384 lines
8.5 KiB
Text

// m32 script test & show-off file
// do "include a" in the console
include names.h
gamevar i 0 1 // per-block (top-level, event, or state) variable
gamevar j 0 1
gamevar k 0 1
gamevar l 0 1
gamevar tmp 0 0
gamevar davr 65536 0
gamevar dayx 65536 0
gamevar drawcol 9 0
define TQUOTE 3
definequote 0 OK
definequote 1 DAMN
definequote 2 BU:%d ABS:%d
definequote TQUOTE write on me!
definequote 4 ASPECT: VR=%d, YX=%d
definequote 5 KEY:%d
definequote 6 time: %d ms
definequote 7 door sector not an island sector!
definequote 8 door sector has no SE sprite!
//light sector x y z range r g b radi fade angle horiz mins maxs prio tile
definequote 9 light %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d 0
definequote 10 --PRLIGHTS--
definequote 11 --ENDPRLIGHTS--
definequote 12 RED:
definequote 13 GREEN:
definequote 14 BLUE:
definequote 15 x/yoffset: %d %d
definequote 16 (r/g/b)color: %d %d %d
gamearray ar 128
gamearray parm 8
defstate tests
// array test
getarraysize ar tmp
resizearray ar 65536
getticks parm[2]
for j range 65536
set ar[j] j
set i 0
for j range 65536
add i ar[j]
getticks parm[3]
resizearray ar tmp
ife i 2147450880 quote 0 else quote 1
sub parm[3] parm[2]
qsprintf TQUOTE 6 parm[3]
quote TQUOTE
ends
// prints out maphack light definitions based on SE lights in map
defstate printlights
print 10
for i allsprites ifactor SECTOREFFECTOR ifge sprite[i].lotag 49 ifle sprite[i].lotag 50
{
set j 128, sub j sprite[i].shade, shiftl j 1
set k j, mul k 3, div k 4
set l 0
ifand sprite[i].cstat 2
{
ifand sprite[i].cstat 512
set l 4
else
set l 2
}
qsprintf TQUOTE 9 sprite[i].sectnum sprite[i].x sprite[i].y sprite[i].z
sprite[i].hitag sprite[i].xvel sprite[i].yvel sprite[i].zvel
j k sprite[i].ang sprite[i].extra sprite[i].xoffset sprite[i].yoffset l
print TQUOTE
}
print 11
ends
defstate fiddlewithlights
ife searchstat 3 ife sprite[searchwall].picnum SECTOREFFECTOR
ifge sprite[searchwall].lotag 49 ifle sprite[searchwall].lotag 50
{
set i searchwall
// horiz
ifeithershift set j 1 else set j 10
ifhitkey KEY_gUP add sprite[i].extra j
else ifhitkey KEY_gKP5 sub sprite[i].extra j
clamp sprite[i].extra -500 500
// angle
set j 128
ifeitherctrl set j 4
ifeithershift { ifeitherctrl set j 1 else set j 32 }
ifhitkey KEY_gLEFT sub sprite[i].ang j
else ifhitkey KEY_gRIGHT add sprite[i].ang j
// range
ifeithershift set j 10
else ifeitherctrl set j 1000
else set j 100
ifhitkey KEY_gPGUP add sprite[i].hitag j
else ifhitkey KEY_gHOME sub sprite[i].hitag j
clamp sprite[i].hitag 0 16000
// radius
ifeitherctrl
{
ifholdkey KEY_gMINUS add sprite[i].shade 9
else ifholdkey KEY_gPLUS sub sprite[i].shade 9
clamp sprite[i].shade -118 117
}
// min/max shade
ifeithershift set j -1 else set j 1
ifeitherctrl
{
ifhitkey KEY_gSLASH
{
set sprite[i].xoffset 0
set sprite[i].yoffset 0
}
}
else
{
set k 0
ifhitkey KEY_gSLASH { add sprite[i].xoffset j, set k 1 }
else ifhitkey KEY_gSTAR { add sprite[i].yoffset j, set k 1 }
ife k 1
{
qsprintf TQUOTE 15 sprite[i].xoffset sprite[i].yoffset
quote TQUOTE
}
}
// color
ifeitheralt ifhitkey KEY_gEND
{
getnumber256 sprite[i].xvel 12 255
getnumber256 sprite[i].yvel 13 255
getnumber256 sprite[i].zvel 14 255
}
else
{
ifeitherctrl set j 1 else set j 10
ifeithershift inv j
set k 0
ifhitkey KEY_gEND { add sprite[i].xvel j, set k 1 }
ifhitkey KEY_gDOWN { add sprite[i].yvel j, set k 1 }
ifhitkey KEY_gPGDN { add sprite[i].zvel j, set k 1 }
ife k 1
{
clamp sprite[i].xvel 1 255
clamp sprite[i].yvel 1 255
clamp sprite[i].zvel 1 255
qsprintf TQUOTE 16 sprite[i].xvel sprite[i].yvel sprite[i].zvel
quote TQUOTE
}
}
}
ends
onevent EVENT_PREKEYS3D
state fiddlewithlights
endevent
defstate setas
set j dayx
mul j ydim mul j 8
div j xdim div j 5
setaspect davr j
ends
onevent EVENT_ENTER3DMODE
state setas
endevent
onevent EVENT_ANALYZESPRITES
for i drawnsprites
{
switch tsprite[i].picnum
case LIZTROOP spritepal 1 break
case PIGCOP spritepal 2 break
case BOSS1 spritepal 6 break
endswitch
}
endevent
defstate cmp_by_lotag
set RETURN sprite[SV2].lotag
sub RETURN sprite[SV1].lotag
ends
onevent EVENT_DRAW2DSCREEN
ifl cursectnum 0 return
// connect LOCATORS in a sector by lines
getarraysize ar tmp
set j 0
for i spritesofsector cursectnum
{
ifge j tmp nullop else
ifactor LOCATORS
{
set ar[j] i
add j 1
}
}
set tmp j
sort ar tmp cmp_by_lotag
sub tmp 1
for i range tmp
{
set j ar[i]
set k i, add k 1, set k ar[k]
drawline16b sprite[j].x sprite[j].y sprite[k].x sprite[k].y drawcol
}
/*
set drawlinepat -1
for i allsprites
ifactor LIZTROOP
drawcircle16b sprite[i].x sprite[i].y 256 9
*/
/*
set i totalclock
shiftr i 6
drawcircle16b posx posy 256 i
set j i
add j 8
drawcircle16 halfxdim16 midydim16 12 j
qsprintf 3 2 i j
printmessage16 3
*/
endevent
onevent EVENT_OVERHEADEDITOR
for i range 27
{
ifholdkey alphakeys[i]
{
qsprintf TQUOTE 5 i
quote TQUOTE
}
}
for i range 10
{
ifholdkey numberkeys[i]
{
qsprintf TQUOTE 5 i
quote TQUOTE
}
}
endevent
onevent EVENT_KEYS3D
for i range 10
// ife 0 1
{
ifholdkey numberkeys[i]
{
qsprintf TQUOTE 5 i
quote TQUOTE
}
}
// swinging doors tester -- hit space on a door wall
ife searchstat 0
ifhitkey KEY_SPACE // SE11 ST23 up:ccw
{
set k wall[searchwall].nextsector
ifl k 0 return
ifn sector[k].lotag 23 return
set tmp 0
for i loopofwall searchwall
{
ifl wall[i].nextsector 0 set tmp 1 else
ifn wall[i].nextsector k set tmp 1
}
// a weaker condition
// for i loopofwall wall[searchwall].nextwall
// {
// ifl wall[i].nextsector 0 set tmp 1 else
// ifn wall[i].nextsector searchsector set tmp 1
// }
ifn tmp 0
{
quote 7
return
}
set l -1
for i spritesofsector k
{
ifactor SECTOREFFECTOR ife sprite[i].lotag 11
{
set l i
ifn sprite[i].ang 512 ifn sprite[i].ang 1024 ifn sprite[i].ang 1536 set l -1
}
}
ifl l 0
{
quote 8
return
}
for tmp wallsofsector k
{
rotatepoint (sprite[l].x sprite[l].y) (wall[tmp].x wall[tmp].y) sprite[l].ang (i j)
dragpoint tmp i j
}
for tmp spritesofsector k
{
ifn tmp l
{
rotatepoint (sprite[l].x sprite[l].y) (sprite[tmp].x sprite[tmp].y) sprite[l].ang (i j)
bsetsprite tmp i j sprite[tmp].z
}
}
inv sprite[l].ang
}
// teleporter -- works on SE7 and SE17 (elevator)
ife searchstat 3
ifhitkey KEY_SPACE
{
ifn sprite[searchwall].picnum SECTOREFFECTOR return
set tmp 0
ife sprite[searchwall].lotag 7 set tmp 1
ife sprite[searchwall].lotag 17 set tmp 1
ife tmp 0 return
for i allsprites
{
ifn i searchwall, ifactor SECTOREFFECTOR, ife sprite[i].lotag sprite[searchwall].lotag
ife sprite[i].hitag sprite[searchwall].hitag
{
add posx sprite[i].x, sub posx sprite[searchwall].x
add posy sprite[i].y, sub posy sprite[searchwall].y
add posz sprite[i].z, sub posz sprite[searchwall].z
updatecursectnum
return
}
}
}
ifholdkey KEY_0
// ife 0 1
{
ifeithershift sub davr 512 else add davr 512
ifl davr 32768 set davr 32768
ifg davr 256000 set davr 256000
setaspect davr yxaspect
qsprintf TQUOTE 4 davr yxaspect
quote TQUOTE
}
endevent
defstate replacestuff
for i spritesofsector searchsector
// ife sprite[i].picnum AMMO set sprite[i].picnum BATTERYAMMO
ifactor parm[0] cactor parm[1]
ends