[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Raycasting 3D demo disk
- Subject: Re: Raycasting 3D demo disk
- From: aiiadict@gmail.com
- Date: 17 Jan 2007 22:08:42 -0800
- Complaints-to: groups-abuse@google.com
- In-reply-to: <7Skrh.10979$ji1.3237@newssvr12.news.prodigy.net>
- Injection-info: 11g2000cwr.googlegroups.com; posting-host=68.33.221.238; posting-account=wL7QqAwAAADveYas09gsbDvmMNiULH_b
- Newsgroups: comp.sys.apple2, comp.sys.apple2.programmer
- Organization: http://groups.google.com
- References: <7Skrh.10979$ji1.3237@newssvr12.news.prodigy.net>
- User-agent: G2/1.0
- Xref: g2news2.google.com comp.sys.apple2:16486 comp.sys.apple2.programmer:1505
David Schmenk wrote:
> Here for your enjoyment is a technology preview/demonstration of a
> raycasting and rendering algorithm
here is a texture/ "tile" editor, as well as MAP editor...
RUN it, press 1 to go to demo...
ESC from demo back to the editor...
press 2 to go to map editor
map editor:
JKLI move, a for texture up, z for texture down
control J to change vertical to current texture
control I to change horizontal to current texture
<return> to set player position to current cursor position
<escape> to return to tex editor
Rich
10 GR
20 D$ = CHR$ (4)
30 PRINT D$;"BLOAD DEMO.OBJ"
40 PRINT D$;"BLOAD DEMO.MAP,A$2000"
50 POKE 768 + 0,0: POKE 768 + 1,32: POKE 768 + 2,32: REM
MAP POINTER & DIMENSION
60 POKE 768 + 6,0: POKE 768 + 7,64: REM TEXTURE MAP BASE
70 POKE 768 + 8,0: POKE 768 + 9,0: REM PLAYER X POS
71 POKE 768 + 10,0: POKE 768 + 11,0: REM PLAYER Y POS
72 POKE 768 + 12,0: REM PLAYER VIEW DIRECTION
80 GOSUB 12000
90 GOSUB 10000
100 VTAB 21: PRINT "TEXTURE# = ";T + 1;" ";
110 VTAB 21: HTAB 16: PRINT "COLOR= ";C;" A=+ Z=-"
4006 LA = 32784
8000 GET A$
8005 IF A$ = "1" THEN GOSUB 11000
8006 IF A$ = "2" THEN GOSUB 40000: POKE 49238,0
8010 IF A$ = "." THEN T = T + 1: GOSUB 13000
8020 IF A$ = "," THEN T = T - 1: GOSUB 13000
8040 VTAB 21: PRINT "TEXTURE# = ";T + 1;" ";
8050 IF A$ = "Q" THEN STOP
8060 IF A$ = "J" THEN JX = JX - 1
8070 IF A$ = "L" THEN JX = JX + 1
8080 IF A$ = "I" THEN JY = JY - 1
8090 IF A$ = "K" THEN JY = JY + 1
8091 IF JY > 16 THEN JY = 16
8092 IF JX > 16 THEN JX = 16
8093 IF JX < 1 THEN JX = 1
8094 IF JY < 1 THEN JY = 1
8100 IF JY < > OY OR JX < > OX THEN COLOR= OC: PLOT OX,OY: COLOR=
C:OY = JY:OX = JX:OC = SCRN( JX,JY): PLOT JX,JY
8101 IF A$ = "Z" OR A$ = "A" THEN GOSUB 20000
8110 IF A$ = " " THEN GOSUB 30000
8120 COLOR= C
8130 VTAB 21: HTAB 16: PRINT "COLOR= ";C
8150 D = 16384 + (T * 256) + ((JX - 1) * 16) + (JY - 1)
8170 IF A$ = "S" THEN VTAB 22: INPUT "NAME ";A$: PRINT CHR$
(4);"BSAVE ";A$;",A$4000,L4096": GOTO 100
9000 GOTO 8000
10000 REM
10010 T = 0: REM WHICH TEXTURE
10020 PRINT CHR$ (4);"BLOAD DEMO.TEX,A$4000"
10021 PRINT CHR$ (4);"BLOAD ROL,A$8000"
10025 C = 5
10030 JX = 8:JY = 8
10040 OX = JX:OY = JY:OC = SCRN( OX,OY)
10045 COLOR= C: PLOT JX,JY
10050 HOME
10055 VTAB 22: PRINT " I MOVE <SPC>=PLOT <=NEXT TEXTURE"
10056 VTAB 23: PRINT "JKL S=AVE Q=IT >=PREV TEXTURE"
10060 COLOR= 1: HLIN 0,17 AT 17
10070 HLIN 0,17 AT 0
10080 VLIN 0,17 AT 0
10090 VLIN 0,17 AT 17
10100 RETURN
11000 REM GOTO GAME
11010 CALL 24576
11020 GR : GOSUB 10030
11030 GOSUB 13000
11040 RETURN
12000 IF T < 0 THEN T = 0
12005 IF T > 15 THEN T = 15
12009 FOR Y = 1 TO 16
12010 FOR X = 1 TO 16
12020 B = 16384 + (T * 256) + ((Y - 1) * 16) + (X - 1)
12030 A = PEEK (B)
12040 COLOR= A
12050 PLOT Y,X
12060 NEXT X
12070 NEXT Y
12080 RETURN
13000 GOSUB 12000
13010 OC = SCRN( JX,JY)
13020 COLOR= C: PLOT JX,JY
13030 RETURN
20000 REM COLOR CHANGE
20010 IF A$ = "Z" THEN C = C - 1
20020 IF A$ = "A" THEN C = C + 1
20030 IF C < 0 THEN C = 0
20040 IF C > 15 THEN C = 15
20050 COLOR= C
20060 VTAB 21: HTAB 16: PRINT "COLOR= ";C;" ";
20070 PLOT 22,39
20080 PLOT JX,JY
20090 RETURN
30000 REM POKE PIXEL
30010 D = 16384 + (T * 256) + ((JX - 1) * 16) + (JY - 1)
30020 POKE 32768,C: CALL 32769
30030 PIX = PEEK (32768)
30040 POKE D,PIX
30050 OC = C
30060 RETURN
40000 HGR
40001 GD = 4: REM GRID SIZE
40002 HCOLOR= 7
40005 PRINT CHR$ (4);"BLOAD DEMO.MAP,A$8030"
40006 LD = 32816
40010 FOR Y = 0 TO PEEK (768 + 2) - 1
40020 FOR X = 0 TO PEEK (768 + 2) - 1
40030 W1 = PEEK (768 + 2)
40060 W = LD + (Y * W1) + (X)
40070 D = PEEK (W)
40080 POKE 32768,D
40090 CALL 32786
40095 REM LOW NIBBLE = HORIZ
40100 IF PEEK (32768) > 0 THEN HPLOT X * GD,Y * GD TO (X * GD),(Y *
GD) + GD
40200 POKE 32768,D
40210 CALL 32798
40215 REM HIGH NIBBLE = VERT
40220 IF PEEK (32768) > 0 THEN HPLOT X * GD,Y * GD TO (X * GD) +
GD,Y * GD
40230 NEXT X
40240 NEXT Y
40250 W1 = W1 - 1
40300 EX = 0:EY = 0
40500 HCOLOR= 7:X2 = (EX * GD):Y2 = EY * GD:W4 = GD - 1: HPLOT X2 +
1,Y2 + 1 TO X2 + W4,Y2 + 1 TO X2 + W4,Y2 + W4 TO X2 + 1,Y2 + W4 TO X2 +
1,Y2 + 1:X1 = EX:Y1 = EY
40505 X1 = EX:Y1 = EY
40510 GET A$
40511 IF A$ = "A" THEN TN = TN + 1: IF TN > 15 THEN TN = 0
40512 IF A$ = "Z" THEN TN = TN - 1: IF TN < 0 THEN TN = 15
40513 VTAB 21: HTAB 1: PRINT "TEXTURE= ";TN;" "
40515 IF A$ = CHR$ (13) THEN POKE 768 + 9,EX: POKE 768 + 11,EY
40520 IF A$ = "J" THEN EX = EX - 1
40525 IF A$ = "L" THEN EX = EX + 1
40526 IF A$ = "I" THEN EY = EY - 1
40527 IF A$ = "K" THEN EY = EY + 1
40528 IF ASC (A$) = 27 THEN PRINT CHR$ (4);"BLOAD
DEMO.MAP,A$2000": RETURN
40530 R = ASC (A$): IF R = 9 OR R = 10 THEN GOSUB 40900
40536 IF A$ = "Q" THEN STOP
40538 IF A$ = "S" THEN VTAB 21: INPUT "NAME ";A$: PRINT CHR$
(4);"BSAVE ";A$;",A";LD;",L";( PEEK (768 + 2) * PEEK (768 + 2))
40540 IF EX < 0 THEN EX = W1
40545 IF EX > W1 THEN EX = 0
40550 IF EY < 0 THEN EY = W1
40555 IF EY > W1 THEN EY = 0
40560 IF EX < > X1 OR EY < > Y1 THEN HCOLOR= 0:X3 = (X1 * GD):X3 =
Y1 * GD:W4 = GD - 1: HPLOT X3 + 1,Y2 + 1 TO X2 + W4,Y2 + 1 TO X2 +
W4,Y2 + W4 TO X2 + 1,Y2 + W4 TO X2 + 1,Y2 + 1:X1 = EX:Y1 = EY: GOTO
40500
40600 GOTO 40510
40900 REM EDIT ITEM
40910 W1 = PEEK (768 + 2)
40912 W = LD + (EY * W1) + (EX)
40914 D = PEEK (W)
40916 POKE 32768,D
40918 CALL 32786
40920 REM LOW NIBBLE = HORIZ
40921 L1 = PEEK (32768)
40922 POKE 32768,D
40924 CALL 32798
40926 REM HIGH NIBBLE = VERT
40928 H1 = PEEK (32768)
40930 IF R = 9 THEN GOTO 40940
40931 REM HORIZ
40932 D = H1 + TN
40934 IF TN = 0 THEN HCOLOR= 0: HPLOT EX * GD,EY * GD TO (EX *
GD),(EY * GD) + GD
40936 IF TN > 0 THEN HCOLOR= 7: HPLOT EX * GD,EY * GD TO (EX *
GD),(EY * GD) + GD
40937 POKE W,D
40938 RETURN
40940 REM VERT
40942 D = L1 + (TN * 16)
40944 IF TN = 0 THEN HCOLOR= 0: HPLOT EX * GD,EY * GD TO (EX * GD) +
GD,EY * GD
40946 IF TN > 0 THEN HCOLOR= 7: HPLOT EX * GD,EY * GD TO (EX * GD) +
GD,EY * GD
40947 POKE W,D
40948 RETURN
8000- 20 AD 00 JSR $00AD
8003- 80 2A BRA $802F
8005- 2A ROL
8006- 2A ROL
8007- 2A ROL
8008- 0D 00 80 ORA $8000
800B- 8D 00 80 STA $8000
800E- 60 RTS
800F- EA NOP
8010- EA NOP
8011- EA NOP
8012- AD 00 80 LDA $8000
8015- 29 0F AND #$0F
8017- 8D 00 80 STA $8000
801A- 60 RTS
801B- EA NOP
801C- EA NOP
801D- EA NOP
801E- AD 00 80 LDA $8000
8021- 29 F0 AND #$F0
8023- 8D 00 80 STA $8000
8026- 60 RTS
8027- 00 BRK