mirror of
https://github.com/dschmenk/PLASMA.git
synced 2025-03-20 18:31:13 +00:00
Use calculated octant beam from octbeam.bas
This commit is contained in:
parent
22a9965951
commit
292847898d
47
src/samplesrc/octbeam.bas
Normal file
47
src/samplesrc/octbeam.bas
Normal file
@ -0,0 +1,47 @@
|
||||
NEW
|
||||
10 GR: COLOR=15: PLOT 0, 0
|
||||
20 RI = 24: P = 1: DIM DB(RI): DIM XB(500): DIM YB(500):DIM VB(500)
|
||||
30 PRINT "const beamdepth = "; RI: PRINT: PRINT "byte dbeam = 0";: FOR R = 1 TO RI
|
||||
50 X = R * .7071: Y = R * .7071
|
||||
60 SX = INT(X): SY = INT(Y + .25): IF SCRN(SX,SY) <> 0 THEN 80
|
||||
70 PLOT SX,SY: XB(P) = SX: YB(P) = SY: P = P + 1
|
||||
80 X = X - .25
|
||||
90 Y = SQR(R * R - X * X)
|
||||
100 IF X > 0 THEN 60
|
||||
110 DB(R) = P - 1
|
||||
120 PRINT ","; DB(R);
|
||||
130 NEXT
|
||||
140 PRINT: PRINT "const beampts = "; P: PRINT
|
||||
|
||||
200 PRINT "byte[] xbeam": PRINT "byte = 0": FOR R = 1 TO RI
|
||||
210 PRINT "byte = ";
|
||||
220 FOR L = DB(R-1)+1 TO DB(R)
|
||||
230 PRINT XB(L);: IF L <> DB(R) THEN PRINT ",";
|
||||
240 NEXT: PRINT
|
||||
250 NEXT
|
||||
260 PRINT
|
||||
|
||||
300 PRINT "byte[] ybeam": PRINT "byte = 0": FOR R = 1 TO RI
|
||||
310 PRINT "byte = ";
|
||||
320 FOR L = DB(R-1)+1 TO DB(R)
|
||||
330 PRINT YB(L);: IF L <> DB(R) THEN PRINT ",";
|
||||
340 NEXT: PRINT
|
||||
350 NEXT
|
||||
360 PRINT
|
||||
|
||||
400 PRINT "byte[] vbeam": PRINT "byte = 0": FOR R = 1 TO RI
|
||||
410 PRINT "byte = ";: FOR L = DB(R-1)+1 TO DB(R)
|
||||
420 M = 0: IF YB(L) <> 0 THEN M = XB(L)/YB(L)
|
||||
430 SY = INT(YB(L) - 1): SX = INT(XB(L) - M + .5)
|
||||
440 FOR P = 0 TO L
|
||||
450 IF SY = YB(P) AND SX = XB(P) THEN VB(L) = P: P = L
|
||||
460 NEXT
|
||||
470 PRINT VB(L);: IF L <> DB(R) THEN PRINT ",";
|
||||
480 NEXT: PRINT
|
||||
490 NEXT
|
||||
500 PRINT
|
||||
|
||||
999 END
|
||||
|
||||
RUN
|
||||
]
|
@ -7,60 +7,100 @@ end
|
||||
|
||||
const FALSE = 0
|
||||
const TRUE = not FALSE
|
||||
|
||||
//
|
||||
// Octant beam parameters
|
||||
//
|
||||
const beamdepth = 10
|
||||
const octpts = 52
|
||||
//
|
||||
// X offsets
|
||||
//
|
||||
|
||||
const beamdepth = 24
|
||||
const beampts = 249
|
||||
|
||||
byte dbeam = 0,1,3,7,10,15,20,25,33,40,50,59,68,80,90,103,117,131,145
|
||||
byte = 159,178,195,213,231,248
|
||||
|
||||
byte[] xbeam
|
||||
byte = 0
|
||||
byte = 0, 1
|
||||
byte = 0, 1
|
||||
byte = 0, 1, 2
|
||||
byte = 0, 1, 2, 3
|
||||
byte = 0, 1, 2, 2, 3
|
||||
byte = 0, 1, 2, 3, 4
|
||||
byte = 0, 1, 2, 3, 4, 5
|
||||
byte = 0, 1, 2, 3, 4, 4, 5
|
||||
byte = 0, 1, 2, 3, 4, 5, 6, 6
|
||||
byte = 0, 1, 2, 3, 3, 4, 5, 5, 6, 7
|
||||
//
|
||||
// Y offest
|
||||
//
|
||||
byte = 0
|
||||
byte = 1,0
|
||||
byte = 2,1,1,0
|
||||
byte = 2,1,0
|
||||
byte = 3,3,2,1,0
|
||||
byte = 4,3,2,1,0
|
||||
byte = 4,3,2,1,0
|
||||
byte = 5,5,4,4,3,2,1,0
|
||||
byte = 6,5,4,3,2,1,0
|
||||
byte = 7,6,6,5,4,3,2,2,1,0
|
||||
byte = 7,6,5,5,4,3,2,1,0
|
||||
byte = 8,7,6,5,4,3,2,1,0
|
||||
byte = 9,8,8,7,7,6,5,4,3,2,1,0
|
||||
byte = 9,8,7,6,5,4,3,2,1,0
|
||||
byte = 10,10,9,9,8,7,6,5,4,3,2,1,0
|
||||
byte = 11,10,9,8,8,7,6,6,5,4,3,2,1,0
|
||||
byte = 12,11,11,10,9,8,7,6,5,4,3,2,1,0
|
||||
byte = 12,11,10,10,9,8,7,6,5,4,3,2,1,0
|
||||
byte = 13,12,11,10,9,8,7,6,5,4,3,2,1,0
|
||||
byte = 14,13,13,12,12,11,10,9,9,8,7,6,5,4,3,3,2,1,0
|
||||
byte = 14,13,12,11,11,10,9,8,7,7,6,5,4,3,2,1,0
|
||||
byte = 15,15,14,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
|
||||
byte = 16,15,14,13,13,12,11,10,9,8,7,6,5,4,3,2,1,0
|
||||
byte = 16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
|
||||
|
||||
byte[] ybeam
|
||||
byte = 0
|
||||
byte = 1, 1
|
||||
byte = 2, 2
|
||||
byte = 3, 3, 2
|
||||
byte = 4, 4, 3, 3
|
||||
byte = 5, 5, 5, 4, 4
|
||||
byte = 6, 6, 6, 5, 4
|
||||
byte = 7, 7, 7, 6, 5, 5
|
||||
byte = 8, 8, 8, 7, 7, 6, 6
|
||||
byte = 9, 9, 9, 8, 8, 7, 7, 6
|
||||
byte = 10, 10, 10, 10, 9, 9, 9, 8, 8, 7
|
||||
//
|
||||
// Visibilty parent indeces
|
||||
//
|
||||
byte = 1
|
||||
byte = 1,2
|
||||
byte = 2,2,3,3
|
||||
byte = 3,4,4
|
||||
byte = 3,4,4,5,5
|
||||
byte = 4,5,5,6,6
|
||||
byte = 5,6,6,7,7
|
||||
byte = 5,6,6,7,7,7,8,8
|
||||
byte = 6,7,8,8,8,9,9
|
||||
byte = 7,7,8,8,9,9,9,10,10,10
|
||||
byte = 8,9,9,10,10,10,11,11,11
|
||||
byte = 8,9,10,11,11,11,12,12,12
|
||||
byte = 9,9,10,10,11,11,12,12,12,13,13,13
|
||||
byte = 10,11,12,12,13,13,13,14,14,14
|
||||
byte = 10,11,11,12,12,13,13,14,14,14,15,15,15
|
||||
byte = 11,12,13,13,14,14,14,15,15,15,15,16,16,16
|
||||
byte = 12,12,13,13,14,15,15,16,16,16,16,17,17,17
|
||||
byte = 13,14,14,15,15,16,16,17,17,17,17,18,18,18
|
||||
byte = 13,14,15,16,16,17,17,18,18,18,18,19,19,19
|
||||
byte = 14,14,15,15,16,16,17,17,18,18,18,19,19,19,19,20,20,20,20
|
||||
byte = 15,16,17,17,18,18,19,19,19,20,20,20,20,21,21,21,21
|
||||
byte = 15,16,16,17,17,18,19,19,20,20,21,21,21,21,22,22,22,22
|
||||
byte = 16,17,18,18,19,19,20,20,21,21,22,22,22,22,23,23,23,23
|
||||
byte = 17,18,19,20,20,21,21,22,22,23,23,23,23,24,24,24,24
|
||||
|
||||
byte[] vbeam
|
||||
byte = 0
|
||||
byte = 0, 0
|
||||
byte = 1, 1
|
||||
byte = 3, 4, 2
|
||||
byte = 5, 6, 4, 7
|
||||
byte = 8, 9, 9, 6, 10
|
||||
byte = 12, 13, 14, 15, 11
|
||||
byte = 17, 18, 19, 14, 16, 21
|
||||
byte = 22, 23, 24, 19, 25, 20, 26
|
||||
byte = 28, 29, 30, 24, 31, 33, 34, 27
|
||||
byte = 35, 36, 37, 37, 38, 38, 39, 32, 40, 42
|
||||
//
|
||||
// Depth level indeces
|
||||
//
|
||||
byte dbeam = 0, 2, 4, 7, 11, 16, 21, 27, 34, 42, 52
|
||||
byte = 0
|
||||
byte = 0,1
|
||||
byte = 2,2,5,3
|
||||
byte = 5,6,7
|
||||
byte = 4,8,8,9,10
|
||||
byte = 11,13,13,14,15
|
||||
byte = 12,17,18,19,20
|
||||
byte = 16,21,17,22,22,23,24,25
|
||||
byte = 26,28,29,30,31,32,33
|
||||
byte = 34,27,35,29,36,37,38,47,39,40
|
||||
byte = 42,44,36,53,45,46,48,49,50
|
||||
byte = 41,43,53,54,55,56,57,58,59
|
||||
byte = 60,51,61,52,62,54,63,64,65,66,67,68
|
||||
byte = 70,72,74,74,75,76,77,78,79,80
|
||||
byte = 69,81,71,82,73,84,84,85,86,87,88,89,90
|
||||
byte = 91,93,95,83,96,96,97,110,98,99,100,101,102,103
|
||||
byte = 104,92,105,94,107,109,109,111,112,113,114,115,116,117
|
||||
byte = 119,121,106,122,108,123,124,125,126,127,128,129,130,131
|
||||
byte = 118,120,134,136,123,137,138,139,140,141,142,143,144,145
|
||||
byte = 146,132,147,133,148,135,150,137,167,151,152,153,154,155,156,174,157,158
|
||||
byte = 159
|
||||
byte = 161,163,165,149,166,167,168,169,170,187,171,172,173,175,176,177,178
|
||||
byte = 160,179,162,180,164,182,184,168,185,186,188,189,190,191,192,193,194,195
|
||||
byte = 196,198,200,181,201,183,203,203,204,205,206,207,208,209,210,211,212,213
|
||||
byte = 197,199,217,219,202,221,221,222,223,224,225,226,227,228,229,230,231
|
||||
|
||||
byte[beampts] vispix
|
||||
|
||||
const maprows = 21
|
||||
const mapcols = 32
|
||||
@ -103,6 +143,7 @@ word = $450, $4D0, $550, $5D0, $650, $6D0, $750, $7D0
|
||||
|
||||
const SPEAKER = $C030
|
||||
|
||||
const maxlight = 10
|
||||
word xdir = 0, 1, 1, 1, 0, -1, -1, -1
|
||||
word ydir = -1, -1, 0, 1, 1, 1, 0, -1
|
||||
word xplayer = 5
|
||||
@ -132,8 +173,7 @@ def ouch
|
||||
end
|
||||
|
||||
def drawmap(xorg, yorg, dir, light)
|
||||
byte[octpts] vispix
|
||||
byte o, l, tile, occlude
|
||||
byte o, l, dist, tile, occlude
|
||||
word ymap, xmap, imap
|
||||
byte yscr, xscr
|
||||
|
||||
@ -145,197 +185,197 @@ def drawmap(xorg, yorg, dir, light)
|
||||
// Draw background map
|
||||
//
|
||||
if light
|
||||
xmap = xorg - xcentr
|
||||
if xmap < 0
|
||||
l = mapcols + xmap
|
||||
xscr = -xmap
|
||||
xmap = 0
|
||||
else
|
||||
l = mapcols - xmap - 1
|
||||
xscr = 0
|
||||
fin
|
||||
if xscr + l > 40
|
||||
l = 40 - xscr
|
||||
fin
|
||||
for yscr = 0 to 23
|
||||
ymap = yscr - ycentr + yorg
|
||||
if ymap >= 0 and ymap < maprows
|
||||
memcpy(screen[yscr] + xscr, vismap + (ymap << 5) + xmap + 1, l)
|
||||
xmap = xorg - xcentr
|
||||
if xmap < 0
|
||||
l = mapcols + xmap
|
||||
xscr = -xmap
|
||||
xmap = 0
|
||||
else
|
||||
l = mapcols - xmap - 1
|
||||
xscr = 0
|
||||
fin
|
||||
next
|
||||
//
|
||||
// Draw visible octants
|
||||
//
|
||||
for o = dir - fov - 1 to dir + fov
|
||||
memset(@vispix, dbeam[light], TRUE)
|
||||
when o & 7
|
||||
is 0
|
||||
for l = 1 to dbeam[light]
|
||||
if vispix[vbeam[l]]
|
||||
imap = ((yorg - ybeam[l]) << 5) + xorg + xbeam[l] + 1
|
||||
tile = map[imap]
|
||||
^(vismap + imap) = tile | $80
|
||||
if tile <> FLOOR
|
||||
vispix[l] = FALSE
|
||||
else
|
||||
if map[imap + 1] == WALL
|
||||
^(vismap + imap + 1) = VISWALL
|
||||
screen.[ycentr - ybeam[l], xcentr + xbeam[l] + 1] = WALL
|
||||
if xscr + l > 40
|
||||
l = 40 - xscr
|
||||
fin
|
||||
for yscr = 0 to 23
|
||||
ymap = yscr - ycentr + yorg
|
||||
if ymap >= 0 and ymap < maprows
|
||||
memcpy(screen[yscr] + xscr, vismap + (ymap << 5) + xmap + 1, l)
|
||||
fin
|
||||
next
|
||||
//
|
||||
// Draw visible octants
|
||||
//
|
||||
for o = dir - fov - 1 to dir + fov
|
||||
memset(@vispix, dbeam[light], TRUE)
|
||||
when o & 7
|
||||
is 0
|
||||
for l = 1 to dbeam[light]
|
||||
if vispix[vbeam[l]]
|
||||
imap = ((yorg - ybeam[l]) << 5) + xorg + xbeam[l] + 1
|
||||
tile = map[imap]
|
||||
^(vismap + imap) = tile | $80
|
||||
if tile <> FLOOR
|
||||
vispix[l] = FALSE
|
||||
else
|
||||
if map[imap + 1] == WALL
|
||||
^(vismap + imap + 1) = VISWALL
|
||||
screen.[ycentr - ybeam[l], xcentr + xbeam[l] + 1] = WALL
|
||||
fin
|
||||
fin
|
||||
fin
|
||||
screen.[ycentr - ybeam[l], xcentr + xbeam[l]] = tile
|
||||
else
|
||||
vispix[l] = FALSE
|
||||
fin
|
||||
next
|
||||
break
|
||||
is 1
|
||||
for l = 1 to dbeam[light]
|
||||
if vispix[vbeam[l]]
|
||||
imap = ((yorg - xbeam[l]) << 5) + xorg + ybeam[l] + 1
|
||||
tile = map[imap]
|
||||
^(vismap + imap) = tile | $80
|
||||
if tile <> FLOOR
|
||||
vispix[l] = FALSE
|
||||
screen.[ycentr - ybeam[l], xcentr + xbeam[l]] = tile
|
||||
else
|
||||
if map[imap - mapcols] == WALL
|
||||
^(vismap + imap - mapcols) = VISWALL
|
||||
screen.[ycentr - xbeam[l] - 1, xcentr + ybeam[l]] = WALL
|
||||
fin
|
||||
fin
|
||||
screen.[ycentr - xbeam[l], xcentr + ybeam[l]] = tile
|
||||
else
|
||||
vispix[l] = FALSE
|
||||
fin
|
||||
next
|
||||
break
|
||||
is 2
|
||||
for l = 1 to dbeam[light]
|
||||
if vispix[vbeam[l]]
|
||||
imap = ((yorg + xbeam[l]) << 5) + xorg + ybeam[l] + 1
|
||||
tile = map[imap]
|
||||
^(vismap + imap) = tile | $80
|
||||
if tile <> FLOOR
|
||||
vispix[l] = FALSE
|
||||
else
|
||||
if map[imap + mapcols] == WALL
|
||||
^(vismap + imap + mapcols) = VISWALL
|
||||
screen.[ycentr + xbeam[l] + 1, xcentr + ybeam[l]] = WALL
|
||||
fin
|
||||
fin
|
||||
screen.[ycentr + xbeam[l], xcentr + ybeam[l]] = tile
|
||||
else
|
||||
vispix[l] = FALSE
|
||||
fin
|
||||
next
|
||||
break
|
||||
is 3
|
||||
for l = 1 to dbeam[light]
|
||||
if vispix[vbeam[l]]
|
||||
imap = ((yorg + ybeam[l]) << 5) + xorg + xbeam[l] + 1
|
||||
tile = map[imap]
|
||||
^(vismap + imap) = tile | $80
|
||||
if tile <> FLOOR
|
||||
next
|
||||
break
|
||||
is 1
|
||||
for l = 1 to dbeam[light]
|
||||
if vispix[vbeam[l]]
|
||||
imap = ((yorg - xbeam[l]) << 5) + xorg + ybeam[l] + 1
|
||||
tile = map[imap]
|
||||
^(vismap + imap) = tile | $80
|
||||
if tile <> FLOOR
|
||||
vispix[l] = FALSE
|
||||
else
|
||||
if map[imap - mapcols] == WALL
|
||||
^(vismap + imap - mapcols) = VISWALL
|
||||
screen.[ycentr - xbeam[l] - 1, xcentr + ybeam[l]] = WALL
|
||||
fin
|
||||
fin
|
||||
screen.[ycentr - xbeam[l], xcentr + ybeam[l]] = tile
|
||||
else
|
||||
vispix[l] = FALSE
|
||||
else
|
||||
if map[imap + 1] == WALL
|
||||
^(vismap + imap + 1) = VISWALL
|
||||
screen.[ycentr + ybeam[l], xcentr + xbeam[l] + 1] = WALL
|
||||
fin
|
||||
fin
|
||||
screen.[ycentr + ybeam[l], xcentr + xbeam[l]] = tile
|
||||
else
|
||||
vispix[l] = FALSE
|
||||
fin
|
||||
next
|
||||
break
|
||||
is 4
|
||||
for l = 1 to dbeam[light]
|
||||
if vispix[vbeam[l]]
|
||||
imap = ((yorg + ybeam[l]) << 5) + xorg - xbeam[l] + 1
|
||||
tile = map[imap]
|
||||
^(vismap + imap) = tile | $80
|
||||
if tile <> FLOOR
|
||||
next
|
||||
break
|
||||
is 2
|
||||
for l = 1 to dbeam[light]
|
||||
if vispix[vbeam[l]]
|
||||
imap = ((yorg + xbeam[l]) << 5) + xorg + ybeam[l] + 1
|
||||
tile = map[imap]
|
||||
^(vismap + imap) = tile | $80
|
||||
if tile <> FLOOR
|
||||
vispix[l] = FALSE
|
||||
else
|
||||
if map[imap + mapcols] == WALL
|
||||
^(vismap + imap + mapcols) = VISWALL
|
||||
screen.[ycentr + xbeam[l] + 1, xcentr + ybeam[l]] = WALL
|
||||
fin
|
||||
fin
|
||||
screen.[ycentr + xbeam[l], xcentr + ybeam[l]] = tile
|
||||
else
|
||||
vispix[l] = FALSE
|
||||
else
|
||||
if map[imap - 1] == WALL
|
||||
^(vismap + imap - 1) = VISWALL
|
||||
screen.[ycentr + ybeam[l], xcentr - xbeam[l] - 1] = WALL
|
||||
fin
|
||||
fin
|
||||
screen.[ycentr + ybeam[l], xcentr - xbeam[l]] = tile
|
||||
else
|
||||
vispix[l] = FALSE
|
||||
fin
|
||||
next
|
||||
break
|
||||
is 5
|
||||
for l = 1 to dbeam[light]
|
||||
if vispix[vbeam[l]]
|
||||
imap = ((yorg + xbeam[l]) << 5) + xorg - ybeam[l] + 1
|
||||
tile = map[imap]
|
||||
^(vismap + imap) = tile | $80
|
||||
if tile <> FLOOR
|
||||
next
|
||||
break
|
||||
is 3
|
||||
for l = 1 to dbeam[light]
|
||||
if vispix[vbeam[l]]
|
||||
imap = ((yorg + ybeam[l]) << 5) + xorg + xbeam[l] + 1
|
||||
tile = map[imap]
|
||||
^(vismap + imap) = tile | $80
|
||||
if tile <> FLOOR
|
||||
vispix[l] = FALSE
|
||||
else
|
||||
if map[imap + 1] == WALL
|
||||
^(vismap + imap + 1) = VISWALL
|
||||
screen.[ycentr + ybeam[l], xcentr + xbeam[l] + 1] = WALL
|
||||
fin
|
||||
fin
|
||||
screen.[ycentr + ybeam[l], xcentr + xbeam[l]] = tile
|
||||
else
|
||||
vispix[l] = FALSE
|
||||
else
|
||||
if map[imap + mapcols] == WALL
|
||||
^(vismap + imap + mapcols) = VISWALL
|
||||
screen.[ycentr + xbeam[l] + 1, xcentr - ybeam[l]] = WALL
|
||||
fin
|
||||
fin
|
||||
screen.[ycentr + xbeam[l], xcentr - ybeam[l]] = tile
|
||||
else
|
||||
vispix[l] = FALSE
|
||||
fin
|
||||
next
|
||||
break
|
||||
is 6
|
||||
for l = 1 to dbeam[light]
|
||||
if vispix[vbeam[l]]
|
||||
imap = ((yorg - xbeam[l]) << 5) + xorg - ybeam[l] + 1
|
||||
tile = map[imap]
|
||||
^(vismap + imap) = tile | $80
|
||||
if tile <> FLOOR
|
||||
next
|
||||
break
|
||||
is 4
|
||||
for l = 1 to dbeam[light]
|
||||
if vispix[vbeam[l]]
|
||||
imap = ((yorg + ybeam[l]) << 5) + xorg - xbeam[l] + 1
|
||||
tile = map[imap]
|
||||
^(vismap + imap) = tile | $80
|
||||
if tile <> FLOOR
|
||||
vispix[l] = FALSE
|
||||
else
|
||||
if map[imap - 1] == WALL
|
||||
^(vismap + imap - 1) = VISWALL
|
||||
screen.[ycentr + ybeam[l], xcentr - xbeam[l] - 1] = WALL
|
||||
fin
|
||||
fin
|
||||
screen.[ycentr + ybeam[l], xcentr - xbeam[l]] = tile
|
||||
else
|
||||
vispix[l] = FALSE
|
||||
else
|
||||
if map[imap - mapcols] == WALL
|
||||
^(vismap + imap - mapcols) = VISWALL
|
||||
screen.[ycentr - xbeam[l] - 1, xcentr - ybeam[l]] = WALL
|
||||
fin
|
||||
fin
|
||||
screen.[ycentr - xbeam[l], xcentr - ybeam[l]] = tile
|
||||
else
|
||||
vispix[l] = FALSE
|
||||
fin
|
||||
next
|
||||
break
|
||||
is 7
|
||||
for l = 1 to dbeam[light]
|
||||
if vispix[vbeam[l]]
|
||||
imap = ((yorg - ybeam[l]) << 5) + xorg - xbeam[l] + 1
|
||||
tile = map[imap]
|
||||
^(vismap + imap) = tile | $80
|
||||
if tile <> FLOOR
|
||||
next
|
||||
break
|
||||
is 5
|
||||
for l = 1 to dbeam[light]
|
||||
if vispix[vbeam[l]]
|
||||
imap = ((yorg + xbeam[l]) << 5) + xorg - ybeam[l] + 1
|
||||
tile = map[imap]
|
||||
^(vismap + imap) = tile | $80
|
||||
if tile <> FLOOR
|
||||
vispix[l] = FALSE
|
||||
else
|
||||
if map[imap + mapcols] == WALL
|
||||
^(vismap + imap + mapcols) = VISWALL
|
||||
screen.[ycentr + xbeam[l] + 1, xcentr - ybeam[l]] = WALL
|
||||
fin
|
||||
fin
|
||||
screen.[ycentr + xbeam[l], xcentr - ybeam[l]] = tile
|
||||
else
|
||||
vispix[l] = FALSE
|
||||
else
|
||||
if map[imap - 1] == WALL
|
||||
^(vismap + imap - 1) = VISWALL
|
||||
screen.[ycentr - ybeam[l], xcentr - xbeam[l] - 1] = WALL
|
||||
fin
|
||||
fin
|
||||
screen.[ycentr - ybeam[l], xcentr - xbeam[l]] = tile
|
||||
else
|
||||
vispix[l] = FALSE
|
||||
fin
|
||||
next
|
||||
break
|
||||
wend
|
||||
next
|
||||
gotoxy(xcentr, ycentr)
|
||||
putc(vplayer[dir])
|
||||
next
|
||||
break
|
||||
is 6
|
||||
for l = 1 to dbeam[light]
|
||||
if vispix[vbeam[l]]
|
||||
imap = ((yorg - xbeam[l]) << 5) + xorg - ybeam[l] + 1
|
||||
tile = map[imap]
|
||||
^(vismap + imap) = tile | $80
|
||||
if tile <> FLOOR
|
||||
vispix[l] = FALSE
|
||||
else
|
||||
if map[imap - mapcols] == WALL
|
||||
^(vismap + imap - mapcols) = VISWALL
|
||||
screen.[ycentr - xbeam[l] - 1, xcentr - ybeam[l]] = WALL
|
||||
fin
|
||||
fin
|
||||
screen.[ycentr - xbeam[l], xcentr - ybeam[l]] = tile
|
||||
else
|
||||
vispix[l] = FALSE
|
||||
fin
|
||||
next
|
||||
break
|
||||
is 7
|
||||
for l = 1 to dbeam[light]
|
||||
if vispix[vbeam[l]]
|
||||
imap = ((yorg - ybeam[l]) << 5) + xorg - xbeam[l] + 1
|
||||
tile = map[imap]
|
||||
^(vismap + imap) = tile | $80
|
||||
if tile <> FLOOR
|
||||
vispix[l] = FALSE
|
||||
else
|
||||
if map[imap - 1] == WALL
|
||||
^(vismap + imap - 1) = VISWALL
|
||||
screen.[ycentr - ybeam[l], xcentr - xbeam[l] - 1] = WALL
|
||||
fin
|
||||
fin
|
||||
screen.[ycentr - ybeam[l], xcentr - xbeam[l]] = tile
|
||||
else
|
||||
vispix[l] = FALSE
|
||||
fin
|
||||
next
|
||||
break
|
||||
wend
|
||||
next
|
||||
gotoxy(xcentr, ycentr)
|
||||
putc(vplayer[dir])
|
||||
else
|
||||
gotoxy(xcentr, ycentr)
|
||||
putc('@')
|
||||
gotoxy(xcentr, ycentr)
|
||||
putc('@')
|
||||
fin
|
||||
gotoxy(xcentr, ycentr)
|
||||
end
|
||||
@ -373,7 +413,7 @@ while TRUE
|
||||
fin
|
||||
break
|
||||
is '+'
|
||||
if lamp < beamdepth - 1
|
||||
if lamp < maxlight - 1
|
||||
lamp = lamp + 1
|
||||
fin
|
||||
break
|
||||
|
Loading…
x
Reference in New Issue
Block a user