vbray is an extremely simple raycasting proof-of-concept. It borrows heavily from Lodev's Raycasting tutorial, but it uses GDI lines to draw the walls on a Windows form.
We've run it on a 486 DX-2 55 Mhz, but it was very slow. There are lower-resolution options for display if needed. There's also a minimap window which shows the path of the rays used for casting!
Below is an annotation of the example starting map, Arcade.csv. The annotations give a general idea of how each line is structured. Values are separated by commas.
Determines ground color by hex number. | |
1 | ground,&H3000 |
Determines sky color by hex number. | |
2 | sky,&Hffff00 |
Map width in tiles. map statements must not be longer than this number. | |
3 | width,20 |
Map height in tiles. Must not have more map statements than this number. | |
4 | height,20 |
Version of reader this map is intended for. | |
5 | version,1 |
Starting positin in tiles (X/Y) followed by facing angle. | |
6 | start,11,8,-0.5596647,0.8287189,0.5469547,0.3693788 |
Wall definitions. Each is an index used in the map statements followed by light/dark hex colors and color names. | |
7 | wall,1,&H808080,&H404040,gray |
8 | wall,2,&HFF00,&H8000,green |
9 | wall,3,&HFF,&H80,red |
10 | wall,4,&HFF00FF,&H800080,purple |
11 | wall,5,&H00,&H00,black |
12 | wall,6,&HFFFF,&H8080,yellow |
13 | wall,7,&HFFFF00,&H808000,cyan |
14 | wall,8,&H8000,&H4000,darkgreen |
15 | wall,9,&HFF0000,&H800000,blue |
Map in rows/columns. Each number is a 0 for free space or a number from the wall table above. | |
16 | map,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 |
17 | map,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 |
18 | map,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 |
19 | map,8,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,0,0,0,1 |
20 | map,8,0,0,0,0,0,0,0,0,0,0,6,0,6,0,0,0,0,0,1 |
21 | map,8,0,0,0,0,0,0,0,0,0,0,6,5,6,0,0,0,0,0,5 |
22 | map,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 |
23 | map,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 |
24 | map,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 |
25 | map,8,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,1 |
26 | map,8,0,0,0,0,0,0,0,0,0,0,0,0,0,5,0,6,0,0,1 |
27 | map,8,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,0,0,1 |
28 | map,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 |
29 | map,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 |
30 | map,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 |
31 | map,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 |
32 | map,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 |
33 | map,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 |
34 | map,8,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 |
35 | map,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,1 |
Mobile definition: name of the mobile, followed by X/Y position, two walking animation frames (in .ico format), and a string to say on interaction. | |
36 | mobile,Maid,2,2,s_maid1.ico,s_maid2.ico,Fine weather- isn't it? |
Warp definition: location to warp from on current map (X/Y), followed by name of map to warp to and location to start there (X/Y), followed by angular facing direction. | |
37 | warp,5,18,Cave.csv,4,2,7.912095E-02,0.996865,0.657931,-5.221983E-02 |
Mobile icons are 16 colors Windows 3.x format. In theory, they can be 32x32, but it's only been tested with 16x16.