mirror of
https://github.com/DrBeef/Raze.git
synced 2024-11-15 17:01:51 +00:00
102b702fc0
git-svn-id: https://svn.eduke32.com/eduke32@1579 1a8010ca-5511-0410-912e-c29ae57300e0
519 lines
12 KiB
Text
519 lines
12 KiB
Text
// m32 script test & show-off file
|
|
// do "include a" in the console
|
|
|
|
include names.h
|
|
|
|
// flag 1: per-block (top-level, event, or state) variable
|
|
gamevar i 0 1
|
|
gamevar j 0 1
|
|
gamevar k 0 1
|
|
gamevar l 0 1
|
|
gamevar m 0 1
|
|
gamevar p 0 1
|
|
gamevar q 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 ALPHA KEY: %d (SCANCODE: %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 %d
|
|
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
|
|
definequote 17 PICNUM:
|
|
|
|
definequote 18 NUMBER KEY: %d (SCANCODE: %d)
|
|
|
|
gamearray ar 128
|
|
gamearray parm 8
|
|
|
|
// various tests of m32-script features
|
|
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
|
|
|
|
// iteration and break test
|
|
for i range 10
|
|
{
|
|
addlogvar i
|
|
ife i 5 break
|
|
}
|
|
ife i 5 quote 0 else quote 1
|
|
ends
|
|
|
|
// prints out maphack light definitions based on SE lights in map
|
|
defstate printlights
|
|
print 10
|
|
for i allsprites, ifactor SECTOREFFECTOR, ifge .lotag 49, ifle .lotag 50
|
|
{
|
|
ife .lotag 50
|
|
{
|
|
set j 128, sub j .shade, shiftl j 1
|
|
set k j, mul k 3, div k 4
|
|
}
|
|
else
|
|
{
|
|
set j 0, set k 0
|
|
}
|
|
|
|
set l 0
|
|
ifand .cstat 2
|
|
{
|
|
ifand .cstat 512
|
|
set l 4
|
|
else
|
|
set l 2
|
|
}
|
|
qsprintf TQUOTE 9 .sectnum .x .y .z .hitag .xvel .yvel .zvel
|
|
j k .ang .extra .xoffset .yoffset l .owner
|
|
print TQUOTE
|
|
}
|
|
print 11
|
|
ends
|
|
|
|
// convenient polymer SE light manipulation with keypad keys
|
|
defstate fiddlewithlights
|
|
ife searchstat 3 ife sprite[searchwall].picnum SECTOREFFECTOR
|
|
ifge sprite[searchwall].lotag 49 ifle sprite[searchwall].lotag 50
|
|
{
|
|
set i searchwall, seti i
|
|
|
|
// horiz
|
|
ifeithershift set j 1 else set j 10
|
|
ifhitkey KEY_gUP add .extra j
|
|
else ifhitkey KEY_gKP5 sub .extra j
|
|
clamp .extra -500 500
|
|
|
|
// angle
|
|
set j 128
|
|
ifeitherctrl set j 4
|
|
ifeithershift { ifeitherctrl set j 1 else set j 32 }
|
|
ifhitkey KEY_gLEFT sub .ang j
|
|
else ifhitkey KEY_gRIGHT add .ang j
|
|
|
|
// range
|
|
ifeithershift set j 10
|
|
else ifeitherctrl set j 1000
|
|
else set j 100
|
|
ifhitkey KEY_gPGUP add .hitag j
|
|
else ifhitkey KEY_gHOME sub .hitag j
|
|
clamp .hitag 0 16000
|
|
|
|
// radius
|
|
ifeitherctrl
|
|
{
|
|
ifholdkey KEY_gMINUS add .shade 9
|
|
else ifholdkey KEY_gPLUS sub .shade 9
|
|
|
|
clamp .shade -118 117
|
|
}
|
|
|
|
// min/max shade
|
|
ifeithershift set j -1 else set j 1
|
|
ifeitherctrl
|
|
{
|
|
ifhitkey KEY_gSLASH
|
|
{
|
|
set .xoffset 0
|
|
set .yoffset 0
|
|
}
|
|
}
|
|
else
|
|
{
|
|
set k 0
|
|
ifhitkey KEY_gSLASH { add .xoffset j, set k 1 }
|
|
else ifhitkey KEY_gSTAR { add .yoffset j, set k 1 }
|
|
|
|
ife k 1
|
|
{
|
|
qsprintf TQUOTE 15 .xoffset .yoffset
|
|
quote TQUOTE
|
|
}
|
|
}
|
|
|
|
// color/picnum
|
|
ifeitheralt
|
|
{
|
|
ifhitkey KEY_gEND
|
|
{
|
|
getnumber256 .xvel 12 255
|
|
getnumber256 .yvel 13 255
|
|
getnumber256 .zvel 14 255
|
|
}
|
|
else ifhitkey KEY_gDOWN
|
|
{
|
|
getnumber256 .owner 17 -MAXTILES
|
|
}
|
|
}
|
|
else
|
|
{
|
|
ifeitherctrl set j 1 else set j 10
|
|
ifeithershift inv j
|
|
|
|
set k 0
|
|
ifhitkey KEY_gEND { add .xvel j, set k 1 }
|
|
ifhitkey KEY_gDOWN { add .yvel j, set k 1 }
|
|
ifhitkey KEY_gPGDN { add .zvel j, set k 1 }
|
|
|
|
ife k 1
|
|
{
|
|
clamp .xvel 1 255
|
|
clamp .yvel 1 255
|
|
clamp .zvel 1 255
|
|
|
|
qsprintf TQUOTE 16 .xvel .yvel .zvel
|
|
quote TQUOTE
|
|
}
|
|
}
|
|
}
|
|
ends
|
|
|
|
defstate testkeyavail
|
|
for i range 27
|
|
{
|
|
ifholdkey alphakeys[i]
|
|
{
|
|
qsprintf TQUOTE 5 i alphakeys[i]
|
|
quote TQUOTE
|
|
}
|
|
}
|
|
|
|
for i range 10
|
|
{
|
|
ifholdkey numberkeys[i]
|
|
{
|
|
qsprintf TQUOTE 18 i numberkeys[i]
|
|
quote TQUOTE
|
|
}
|
|
}
|
|
ends
|
|
|
|
//onevent EVENT_PREKEYS2D
|
|
// state testkeyavail
|
|
//endevent
|
|
|
|
onevent EVENT_PREKEYS3D
|
|
// state testkeyavail
|
|
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
|
|
|
|
defstate cmp_by_lotag // comparator subroutine for sorting
|
|
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 drawcol
|
|
*/
|
|
endevent
|
|
|
|
// LOCATORS auto-incrementer
|
|
onevent EVENT_INSERTSPRITE2D
|
|
set k I
|
|
set j -1
|
|
for i spritesofsector .sectnum
|
|
{
|
|
ifn i k, ifactor LOCATORS, ifg .lotag j
|
|
set j .lotag
|
|
}
|
|
ifg j -1
|
|
{
|
|
add j 1
|
|
set .lotag j
|
|
}
|
|
endevent
|
|
|
|
// rotates and duplicates selected sprites around
|
|
// pivot sprite (extra=123, ang:dang, yrepeat<<5:dz (pos. if pal!=0), lo:cnt)
|
|
defstate duprot
|
|
ifn searchstat 3 return
|
|
ifn sprite[searchwall].extra 123 return
|
|
ifl sprite[searchwall].shade 1 return
|
|
set k searchwall
|
|
|
|
for i range sprite[k].shade
|
|
{
|
|
for j selsprites, ifn j k
|
|
{
|
|
dupsprite j
|
|
set tmp i, add tmp 1, mul tmp sprite[k].ang
|
|
rotatepoint sprite[k].x sprite[k].y .x .y tmp (l m)
|
|
add .ang tmp
|
|
set tmp i, add tmp 1, mul tmp sprite[k].yrepeat, shiftl tmp 5
|
|
ife sprite[k].pal 0 inv tmp
|
|
add tmp .z
|
|
bsetsprite I l m tmp
|
|
}
|
|
}
|
|
ends
|
|
|
|
// same as above but with tsprite[], as a kind of preview
|
|
defstate tduprot
|
|
ifn searchstat 3 return
|
|
ifn sprite[searchwall].extra 123 return
|
|
ifl sprite[searchwall].shade 1 return
|
|
set k searchwall
|
|
|
|
for i range sprite[k].shade
|
|
{
|
|
for j selsprites, ifn j k
|
|
{
|
|
set p spritesortcnt
|
|
tdupsprite j
|
|
set tmp i, add tmp 1, mul tmp sprite[k].ang
|
|
rotatepoint sprite[k].x sprite[k].y tsprite[p].x tsprite[p].y tmp (l m)
|
|
add tsprite[p].ang tmp
|
|
set tmp i, add tmp 1, mul tmp sprite[k].yrepeat, shiftl tmp 5
|
|
ife sprite[k].pal 0 inv tmp
|
|
add tmp tsprite[p].z
|
|
set tsprite[p].x l
|
|
set tsprite[p].y m
|
|
set tsprite[p].z tmp
|
|
or tsprite[p].cstat 514
|
|
// bsetsprite I l m tmp
|
|
}
|
|
}
|
|
ends
|
|
|
|
onevent EVENT_ANALYZESPRITES
|
|
state tduprot
|
|
/*
|
|
for i drawnsprites
|
|
{
|
|
set j tsprite[i].owner
|
|
switch sprite[j].picnum
|
|
case LIZTROOP spritepal 1 break
|
|
case PIGCOP spritepal 2 break
|
|
case BOSS1 spritepal 6 break
|
|
endswitch
|
|
}
|
|
*/
|
|
endevent
|
|
|
|
onevent EVENT_KEYS3D
|
|
// door sound tester
|
|
ife searchstat 0
|
|
ifholdkey KEY_SPACE
|
|
{
|
|
set k wall[searchwall].nextsector
|
|
ifl k 0 set k searchsector
|
|
|
|
ife sector[k].lotag 0 return
|
|
|
|
for i spritesofsector k
|
|
{
|
|
ifactor MUSICANDSFX
|
|
ifge .lotag 0 ifl .lotag MAXSOUNDS
|
|
{
|
|
getsoundflags .lotag m
|
|
ifand m 1 nullop else soundonce .lotag
|
|
}
|
|
}
|
|
}
|
|
|
|
// 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
|
|
{
|
|
ife sprite[searchwall].picnum SECTOREFFECTOR
|
|
{
|
|
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
|
|
}
|
|
}
|
|
}
|
|
else ife sprite[searchwall].extra 123
|
|
{
|
|
state duprot
|
|
add sprite[searchwall].extra 1
|
|
}
|
|
}
|
|
|
|
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
|
|
|
|
defstate convlights // convert (0,0,0) lights to (255,255,255)-ones
|
|
for i allsprites ifactor 1 ifge .lotag 49 ifle .lotag 50 ife .xvel 0 ife .yvel 0 ife .zvel 0
|
|
{ set .xvel 255 set .yvel 255 set .zvel 255 }
|
|
ends
|
|
|
|
defstate resetallws // reset all sprites and walls to default repeat/panning
|
|
for i allsprites
|
|
{
|
|
set .xrepeat 64
|
|
set .yrepeat 64
|
|
}
|
|
for i allwalls
|
|
{
|
|
set wall[i].cstat 0
|
|
set wall[i].xpanning 0
|
|
set wall[i].ypanning 0
|
|
set wall[i].yrepeat 8
|
|
fixrepeats i
|
|
}
|
|
ends
|