diff --git a/data/tiles/tiles.blend b/data/tiles/tiles.blend index 408a913..b4bb826 100644 Binary files a/data/tiles/tiles.blend and b/data/tiles/tiles.blend differ diff --git a/data/tiles/tiles.hacks b/data/tiles/tiles.hacks deleted file mode 100644 index 62a1455..0000000 --- a/data/tiles/tiles.hacks +++ /dev/null @@ -1,5 +0,0 @@ -water = _water mesh grass -sand = _sand mesh grass -rock = _rock mesh grass -mud = _mud mesh grass -lava = _lava mesh grass diff --git a/data/tiles/tiles.mtl b/data/tiles/tiles.mtl index 995710d..d181610 100644 --- a/data/tiles/tiles.mtl +++ b/data/tiles/tiles.mtl @@ -1,10 +1,8 @@ -# Blender 3.2.2 MTL File: 'tiles.blend' +# Blender 3.3.1 MTL File: 'tiles.blend' # www.blender.org newmtl forest -Ns 10.000005 Ka 1.000000 1.000000 1.000000 -Kd 0.800000 0.800000 0.800000 Ks 0.100000 0.100000 0.100000 Ke 0.000000 0.000000 0.000000 Ni 0.000000 @@ -16,7 +14,6 @@ map_Ns forest_r.png newmtl grass Ns 0.000000 Ka 1.000000 1.000000 1.000000 -Kd 0.800000 0.800000 0.800000 Ks 0.100000 0.100000 0.100000 Ke 0.000000 0.000000 0.000000 Ni 0.000000 @@ -27,8 +24,7 @@ map_Kd grass.png newmtl lava Ns 0.000000 Ka 1.000000 1.000000 1.000000 -Kd 0.800000 0.800000 0.800000 -Ks 0.200000 0.200000 0.200000 +Ks 0.100000 0.100000 0.100000 Ke 0.000000 0.000000 0.000000 Ni 0.000000 d 1.000000 @@ -38,7 +34,6 @@ map_Kd lava.png newmtl mud Ns 0.000000 Ka 1.000000 1.000000 1.000000 -Kd 0.800000 0.800000 0.800000 Ks 0.100000 0.100000 0.100000 Ke 0.000000 0.000000 0.000000 Ni 0.000000 @@ -49,7 +44,6 @@ map_Kd mud.png newmtl rock Ns 0.000000 Ka 1.000000 1.000000 1.000000 -Kd 0.800000 0.800000 0.800000 Ks 0.100000 0.100000 0.100000 Ke 0.000000 0.000000 0.000000 Ni 0.000000 @@ -60,7 +54,6 @@ map_Kd rock.png newmtl sand Ns 0.000000 Ka 1.000000 1.000000 1.000000 -Kd 0.800000 0.800000 0.800000 Ks 0.100000 0.100000 0.100000 Ke 0.000000 0.000000 0.000000 Ni 0.000000 @@ -69,10 +62,9 @@ illum 2 map_Kd sand.png newmtl water -Ns 62.500000 +Ns 0.000000 Ka 1.000000 1.000000 1.000000 -Kd 0.800000 0.800000 0.800000 -Ks 1.000000 1.000000 1.000000 +Ks 0.100000 0.100000 0.100000 Ke 0.000000 0.000000 0.000000 Ni 0.000000 d 1.000000 diff --git a/data/tiles/tiles.obj b/data/tiles/tiles.obj index d754d3f..3acabfc 100644 --- a/data/tiles/tiles.obj +++ b/data/tiles/tiles.obj @@ -1,4 +1,4 @@ -# Blender 3.2.2 +# Blender 3.3.1 # www.blender.org mtllib tiles.mtl o grass @@ -47,76 +47,6 @@ f 7/7/1 4/4/1 12/12/1 f 6/6/1 9/9/1 13/13/1 f 9/9/1 8/8/1 13/13/1 f 8/8/1 5/5/1 13/13/1 -o _water -v 4.000000 4.000000 0.000000 -v -4.000000 4.000000 0.000000 -v 4.000000 -4.000000 0.000000 -v -4.000000 -4.000000 0.000000 -vn -0.0000 -0.0000 1.0000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -s 0 -usemtl water -f 16/16/2 14/14/2 15/15/2 -f 16/16/2 15/15/2 17/17/2 -o _sand -v 4.000000 4.000000 0.000000 -v -4.000000 4.000000 0.000000 -v 4.000000 -4.000000 0.000000 -v -4.000000 -4.000000 0.000000 -vn -0.0000 -0.0000 1.0000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -s 0 -usemtl sand -f 20/20/3 18/18/3 19/19/3 -f 20/20/3 19/19/3 21/21/3 -o _rock -v 4.000000 4.000000 0.000000 -v -4.000000 4.000000 0.000000 -v 4.000000 -4.000000 0.000000 -v -4.000000 -4.000000 0.000000 -vn -0.0000 -0.0000 1.0000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -s 0 -usemtl rock -f 24/24/4 22/22/4 23/23/4 -f 24/24/4 23/23/4 25/25/4 -o _mud -v 4.000000 4.000000 0.000000 -v -4.000000 4.000000 0.000000 -v 4.000000 -4.000000 0.000000 -v -4.000000 -4.000000 0.000000 -vn -0.0000 -0.0000 1.0000 -vt 1.000000 1.000000 -vt 0.000000 1.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -s 0 -usemtl mud -f 28/28/5 26/26/5 27/27/5 -f 28/28/5 27/27/5 29/29/5 -o _lava -v -4.000000 -4.000000 0.000000 -v 4.000000 -4.000000 0.000000 -v -4.000000 4.000000 0.000000 -v 4.000000 4.000000 0.000000 -vn -0.0000 -0.0000 1.0000 -vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 0.000000 1.000000 -vt 1.000000 1.000000 -s 0 -usemtl lava -f 31/31/6 32/32/6 30/30/6 -f 31/31/6 33/33/6 32/32/6 o forest v -4.000000 -4.000000 0.000000 v 0.000000 -4.000000 0.000000 @@ -308,88 +238,318 @@ vt 0.664062 0.664062 vt 0.710938 0.695312 s 0 usemtl forest -f 35/35/7 36/36/7 47/51/8 -f 34/34/7 35/35/7 45/47/9 -f 37/37/10 34/34/7 45/47/11 -f 36/36/7 38/38/12 47/51/13 -f 40/40/14 39/39/7 48/52/15 -f 39/39/7 37/37/16 48/52/17 -f 38/38/18 41/41/7 44/46/19 -f 41/41/7 40/40/20 44/46/21 +f 15/15/2 16/16/2 27/31/3 +f 14/14/2 15/15/2 25/27/4 +f 17/17/5 14/14/2 25/27/6 +f 16/16/2 18/18/7 27/31/8 +f 20/20/9 19/19/2 28/32/10 +f 19/19/2 17/17/11 28/32/12 +f 18/18/13 21/21/2 24/26/14 +f 21/21/2 20/20/15 24/26/16 s 1 -f 50/56/22 42/42/23 46/48/24 -f 51/57/25 43/44/26 49/53/27 -f 52/58/28 74/88/29 73/85/30 -f 53/59/31 74/88/29 52/58/28 -f 53/59/31 76/93/32 75/90/33 -f 50/56/22 46/48/24 43/44/26 -f 51/57/25 50/56/22 43/44/26 -f 51/57/25 49/53/27 76/93/32 -f 53/59/31 51/57/25 76/93/32 -f 53/59/31 75/90/33 74/88/29 -f 52/58/28 73/85/30 42/42/23 -f 52/58/28 42/42/23 50/56/22 -f 51/57/25 55/61/34 50/56/22 +f 30/36/17 22/22/18 26/28/19 +f 31/37/20 23/24/21 29/33/22 +f 32/38/23 54/68/24 53/65/25 +f 33/39/26 54/68/24 32/38/23 +f 33/39/26 56/73/27 55/70/28 +f 30/36/17 26/28/19 23/24/21 +f 31/37/20 30/36/17 23/24/21 +f 31/37/20 29/33/22 56/73/27 +f 33/39/26 31/37/20 56/73/27 +f 33/39/26 55/70/28 54/68/24 +f 32/38/23 53/65/25 22/22/18 +f 32/38/23 22/22/18 30/36/17 +f 31/37/20 35/41/29 30/36/17 s 0 -f 45/47/35 46/49/7 42/43/7 -f 45/47/36 73/86/7 37/37/37 -f 47/51/38 46/50/7 35/35/7 -f 47/51/39 49/54/7 43/45/7 -f 48/52/40 73/87/7 74/89/7 -f 48/52/41 75/91/7 40/40/42 -f 44/46/43 49/55/7 38/38/44 -f 44/46/45 75/92/7 76/94/7 +f 25/27/30 26/29/2 22/23/2 +f 25/27/31 53/66/2 17/17/32 +f 27/31/33 26/30/2 15/15/2 +f 27/31/34 29/34/2 23/25/2 +f 28/32/35 53/67/2 54/69/2 +f 28/32/36 55/71/2 20/20/37 +f 24/26/38 29/35/2 18/18/39 +f 24/26/40 55/72/2 56/74/2 s 1 -f 56/62/46 57/63/47 71/82/48 -f 53/59/31 54/60/49 51/57/25 -f 52/58/28 56/62/46 53/59/31 -f 50/56/22 57/63/47 52/58/28 -f 60/68/50 61/70/51 67/77/52 -f 57/63/47 55/61/34 72/84/53 -f 58/64/54 60/68/50 68/78/55 -f 59/67/56 58/64/54 69/79/57 -f 63/73/58 62/72/59 70/80/60 +f 36/42/41 37/43/42 51/62/43 +f 33/39/26 34/40/44 31/37/20 +f 32/38/23 36/42/41 33/39/26 +f 30/36/17 37/43/42 32/38/23 +f 40/48/45 41/50/46 47/57/47 +f 37/43/42 35/41/29 52/64/48 +f 38/44/49 40/48/45 48/58/50 +f 39/47/51 38/44/49 49/59/52 +f 43/53/53 42/52/54 50/60/55 s 0 -f 45/47/61 35/35/7 46/49/7 -f 45/47/62 42/43/7 73/86/7 -f 47/51/63 43/45/7 46/50/7 -f 47/51/64 38/38/65 49/54/7 -f 48/52/66 37/37/67 73/87/7 -f 48/52/68 74/89/7 75/91/7 -f 44/46/69 76/94/7 49/55/7 -f 44/46/70 40/40/71 75/92/7 +f 25/27/56 15/15/2 26/29/2 +f 25/27/57 22/23/2 53/66/2 +f 27/31/58 23/25/2 26/30/2 +f 27/31/59 18/18/60 29/34/2 +f 28/32/61 17/17/62 53/67/2 +f 28/32/63 54/69/2 55/71/2 +f 24/26/64 56/74/2 29/35/2 +f 24/26/65 20/20/66 55/72/2 s 1 -f 61/70/51 59/67/56 66/76/72 -f 59/67/56 63/73/58 66/76/72 -f 63/73/58 65/75/73 66/76/72 -f 65/75/73 61/70/51 66/76/72 -f 61/70/51 65/75/73 67/77/52 -f 65/75/73 64/74/74 67/77/52 -f 64/74/74 60/68/50 67/77/52 -f 60/68/50 64/74/74 68/78/55 -f 64/74/74 62/72/59 68/78/55 -f 62/72/59 58/64/54 68/78/55 -f 58/64/54 62/72/59 69/79/57 -f 62/72/59 63/73/58 69/79/57 -f 63/73/58 59/67/56 69/79/57 -f 62/72/59 64/74/74 70/80/60 -f 64/74/74 65/75/73 70/80/60 -f 65/75/73 63/73/58 70/80/60 -f 55/61/34 54/60/49 77/96/75 -f 54/60/49 58/65/76 77/96/75 -f 58/64/54 59/67/56 77/95/77 -f 59/66/78 55/61/34 77/96/75 -f 54/60/49 56/62/46 78/98/79 -f 56/62/46 60/69/80 78/98/79 -f 60/68/50 58/64/54 78/97/81 -f 58/65/76 54/60/49 78/98/79 -f 57/63/47 61/71/82 71/82/48 -f 61/70/51 60/68/50 71/81/83 -f 60/69/80 56/62/46 71/82/48 -f 55/61/34 59/66/78 72/84/53 -f 59/67/56 61/70/51 72/83/84 -f 61/71/82 57/63/47 72/84/53 -f 51/57/25 54/60/49 55/61/34 -f 53/59/31 56/62/46 54/60/49 -f 52/58/28 57/63/47 56/62/46 -f 50/56/22 55/61/34 57/63/47 +f 41/50/46 39/47/51 46/56/67 +f 39/47/51 43/53/53 46/56/67 +f 43/53/53 45/55/68 46/56/67 +f 45/55/68 41/50/46 46/56/67 +f 41/50/46 45/55/68 47/57/47 +f 45/55/68 44/54/69 47/57/47 +f 44/54/69 40/48/45 47/57/47 +f 40/48/45 44/54/69 48/58/50 +f 44/54/69 42/52/54 48/58/50 +f 42/52/54 38/44/49 48/58/50 +f 38/44/49 42/52/54 49/59/52 +f 42/52/54 43/53/53 49/59/52 +f 43/53/53 39/47/51 49/59/52 +f 42/52/54 44/54/69 50/60/55 +f 44/54/69 45/55/68 50/60/55 +f 45/55/68 43/53/53 50/60/55 +f 35/41/29 34/40/44 57/76/70 +f 34/40/44 38/45/71 57/76/70 +f 38/44/49 39/47/51 57/75/72 +f 39/46/73 35/41/29 57/76/70 +f 34/40/44 36/42/41 58/78/74 +f 36/42/41 40/49/75 58/78/74 +f 40/48/45 38/44/49 58/77/76 +f 38/45/71 34/40/44 58/78/74 +f 37/43/42 41/51/77 51/62/43 +f 41/50/46 40/48/45 51/61/78 +f 40/49/75 36/42/41 51/62/43 +f 35/41/29 39/46/73 52/64/48 +f 39/47/51 41/50/46 52/63/79 +f 41/51/77 37/43/42 52/64/48 +f 31/37/20 34/40/44 35/41/29 +f 33/39/26 36/42/41 34/40/44 +f 32/38/23 37/43/42 36/42/41 +f 30/36/17 35/41/29 37/43/42 +o lava +v -4.000000 -4.000000 0.000000 +v 0.000000 -4.000000 0.000000 +v 4.000000 -4.000000 0.000000 +v -4.000000 0.000000 0.000000 +v 0.000000 0.000000 0.000000 +v 4.000000 0.000000 0.000000 +v -4.000000 4.000000 0.000000 +v 0.000000 4.000000 0.000000 +v 4.000000 4.000000 0.000000 +v -2.000000 -2.000000 0.000000 +v 2.000000 -2.000000 0.000000 +v -2.000000 2.000000 0.000000 +v 2.000000 2.000000 0.000000 +vn -0.0000 -0.0000 1.0000 +vt 0.000000 0.000000 +vt 0.500000 0.000000 +vt 1.000000 0.000000 +vt 0.000000 0.500000 +vt 0.500000 0.500000 +vt 1.000000 0.500000 +vt 0.000000 1.000000 +vt 0.500000 1.000000 +vt 1.000000 1.000000 +vt 0.250000 0.250000 +vt 0.750000 0.250000 +vt 0.250000 0.750000 +vt 0.750000 0.750000 +s 0 +usemtl lava +f 60/80/80 61/81/80 69/89/80 +f 62/82/80 63/83/80 70/90/80 +f 63/83/80 64/84/80 71/91/80 +f 59/79/80 60/80/80 68/88/80 +f 60/80/80 63/83/80 68/88/80 +f 63/83/80 62/82/80 68/88/80 +f 62/82/80 59/79/80 68/88/80 +f 61/81/80 64/84/80 69/89/80 +f 64/84/80 63/83/80 69/89/80 +f 63/83/80 60/80/80 69/89/80 +f 63/83/80 66/86/80 70/90/80 +f 66/86/80 65/85/80 70/90/80 +f 65/85/80 62/82/80 70/90/80 +f 64/84/80 67/87/80 71/91/80 +f 67/87/80 66/86/80 71/91/80 +f 66/86/80 63/83/80 71/91/80 +o mud +v -4.000000 -4.000000 0.000000 +v 0.000000 -4.000000 0.000000 +v 4.000000 -4.000000 0.000000 +v -4.000000 0.000000 0.000000 +v 0.000000 0.000000 0.000000 +v 4.000000 0.000000 0.000000 +v -4.000000 4.000000 0.000000 +v 0.000000 4.000000 0.000000 +v 4.000000 4.000000 0.000000 +v -2.000000 -2.000000 0.000000 +v 2.000000 -2.000000 0.000000 +v -2.000000 2.000000 0.000000 +v 2.000000 2.000000 0.000000 +vn -0.0000 -0.0000 1.0000 +vt 0.000000 0.000000 +vt 0.500000 0.000000 +vt 1.000000 0.000000 +vt 0.000000 0.500000 +vt 0.500000 0.500000 +vt 1.000000 0.500000 +vt 0.000000 1.000000 +vt 0.500000 1.000000 +vt 1.000000 1.000000 +vt 0.250000 0.250000 +vt 0.750000 0.250000 +vt 0.250000 0.750000 +vt 0.750000 0.750000 +s 0 +usemtl mud +f 73/93/81 74/94/81 82/102/81 +f 75/95/81 76/96/81 83/103/81 +f 76/96/81 77/97/81 84/104/81 +f 72/92/81 73/93/81 81/101/81 +f 73/93/81 76/96/81 81/101/81 +f 76/96/81 75/95/81 81/101/81 +f 75/95/81 72/92/81 81/101/81 +f 74/94/81 77/97/81 82/102/81 +f 77/97/81 76/96/81 82/102/81 +f 76/96/81 73/93/81 82/102/81 +f 76/96/81 79/99/81 83/103/81 +f 79/99/81 78/98/81 83/103/81 +f 78/98/81 75/95/81 83/103/81 +f 77/97/81 80/100/81 84/104/81 +f 80/100/81 79/99/81 84/104/81 +f 79/99/81 76/96/81 84/104/81 +o rock +v -4.000000 -4.000000 0.000000 +v 0.000000 -4.000000 0.000000 +v 4.000000 -4.000000 0.000000 +v -4.000000 0.000000 0.000000 +v 0.000000 0.000000 0.000000 +v 4.000000 0.000000 0.000000 +v -4.000000 4.000000 0.000000 +v 0.000000 4.000000 0.000000 +v 4.000000 4.000000 0.000000 +v -2.000000 -2.000000 0.000000 +v 2.000000 -2.000000 0.000000 +v -2.000000 2.000000 0.000000 +v 2.000000 2.000000 0.000000 +vn -0.0000 -0.0000 1.0000 +vt 0.000000 0.000000 +vt 0.500000 0.000000 +vt 1.000000 0.000000 +vt 0.000000 0.500000 +vt 0.500000 0.500000 +vt 1.000000 0.500000 +vt 0.000000 1.000000 +vt 0.500000 1.000000 +vt 1.000000 1.000000 +vt 0.250000 0.250000 +vt 0.750000 0.250000 +vt 0.250000 0.750000 +vt 0.750000 0.750000 +s 0 +usemtl rock +f 86/106/82 87/107/82 95/115/82 +f 88/108/82 89/109/82 96/116/82 +f 89/109/82 90/110/82 97/117/82 +f 85/105/82 86/106/82 94/114/82 +f 86/106/82 89/109/82 94/114/82 +f 89/109/82 88/108/82 94/114/82 +f 88/108/82 85/105/82 94/114/82 +f 87/107/82 90/110/82 95/115/82 +f 90/110/82 89/109/82 95/115/82 +f 89/109/82 86/106/82 95/115/82 +f 89/109/82 92/112/82 96/116/82 +f 92/112/82 91/111/82 96/116/82 +f 91/111/82 88/108/82 96/116/82 +f 90/110/82 93/113/82 97/117/82 +f 93/113/82 92/112/82 97/117/82 +f 92/112/82 89/109/82 97/117/82 +o sand +v -4.000000 -4.000000 0.000000 +v 0.000000 -4.000000 0.000000 +v 4.000000 -4.000000 0.000000 +v -4.000000 0.000000 0.000000 +v 0.000000 0.000000 0.000000 +v 4.000000 0.000000 0.000000 +v -4.000000 4.000000 0.000000 +v 0.000000 4.000000 0.000000 +v 4.000000 4.000000 0.000000 +v -2.000000 -2.000000 0.000000 +v 2.000000 -2.000000 0.000000 +v -2.000000 2.000000 0.000000 +v 2.000000 2.000000 0.000000 +vn -0.0000 -0.0000 1.0000 +vt 0.000000 0.000000 +vt 0.500000 0.000000 +vt 1.000000 0.000000 +vt 0.000000 0.500000 +vt 0.500000 0.500000 +vt 1.000000 0.500000 +vt 0.000000 1.000000 +vt 0.500000 1.000000 +vt 1.000000 1.000000 +vt 0.250000 0.250000 +vt 0.750000 0.250000 +vt 0.250000 0.750000 +vt 0.750000 0.750000 +s 0 +usemtl sand +f 99/119/83 100/120/83 108/128/83 +f 101/121/83 102/122/83 109/129/83 +f 102/122/83 103/123/83 110/130/83 +f 98/118/83 99/119/83 107/127/83 +f 99/119/83 102/122/83 107/127/83 +f 102/122/83 101/121/83 107/127/83 +f 101/121/83 98/118/83 107/127/83 +f 100/120/83 103/123/83 108/128/83 +f 103/123/83 102/122/83 108/128/83 +f 102/122/83 99/119/83 108/128/83 +f 102/122/83 105/125/83 109/129/83 +f 105/125/83 104/124/83 109/129/83 +f 104/124/83 101/121/83 109/129/83 +f 103/123/83 106/126/83 110/130/83 +f 106/126/83 105/125/83 110/130/83 +f 105/125/83 102/122/83 110/130/83 +o water +v -4.000000 -4.000000 0.000000 +v 0.000000 -4.000000 0.000000 +v 4.000000 -4.000000 0.000000 +v -4.000000 0.000000 0.000000 +v 0.000000 0.000000 0.000000 +v 4.000000 0.000000 0.000000 +v -4.000000 4.000000 0.000000 +v 0.000000 4.000000 0.000000 +v 4.000000 4.000000 0.000000 +v -2.000000 -2.000000 0.000000 +v 2.000000 -2.000000 0.000000 +v -2.000000 2.000000 0.000000 +v 2.000000 2.000000 0.000000 +vn -0.0000 -0.0000 1.0000 +vt 0.000000 0.000000 +vt 0.500000 0.000000 +vt 1.000000 0.000000 +vt 0.000000 0.500000 +vt 0.500000 0.500000 +vt 1.000000 0.500000 +vt 0.000000 1.000000 +vt 0.500000 1.000000 +vt 1.000000 1.000000 +vt 0.250000 0.250000 +vt 0.750000 0.250000 +vt 0.250000 0.750000 +vt 0.750000 0.750000 +s 0 +usemtl water +f 112/132/84 113/133/84 121/141/84 +f 114/134/84 115/135/84 122/142/84 +f 115/135/84 116/136/84 123/143/84 +f 111/131/84 112/132/84 120/140/84 +f 112/132/84 115/135/84 120/140/84 +f 115/135/84 114/134/84 120/140/84 +f 114/134/84 111/131/84 120/140/84 +f 113/133/84 116/136/84 121/141/84 +f 116/136/84 115/135/84 121/141/84 +f 115/135/84 112/132/84 121/141/84 +f 115/135/84 118/138/84 122/142/84 +f 118/138/84 117/137/84 122/142/84 +f 117/137/84 114/134/84 122/142/84 +f 116/136/84 119/139/84 123/143/84 +f 119/139/84 118/138/84 123/143/84 +f 118/138/84 115/135/84 123/143/84 diff --git a/engine b/engine index af25548..8f3612b 160000 --- a/engine +++ b/engine @@ -1 +1 @@ -Subproject commit af25548752d7ae7004a937307e06bd4810e46cc7 +Subproject commit 8f3612bed26d4bdb9f6c62541bf6068285f760b3 diff --git a/game/batch.py b/game/batch.py index 3de0d03..3fe4c6f 100644 --- a/game/batch.py +++ b/game/batch.py @@ -19,14 +19,13 @@ from engine import ( INSTANCE_FLAG_SPAWNED, BATCH_MAX_SIZE, BATCH_ORIENTATION_FORMAT_NONE, create_batch, draw_batch, destroy_batch) class Batch: - __slots__ = '_batch', 'max_size', 'flags', 'texlevels', 'meshes', 'translations', 'orientations' + __slots__ = '_batch', 'max_size', 'flags', 'meshes', 'translations', 'orientations' def __init__(self, max_size, translation_format, orientation_format): assert max_size <= BATCH_MAX_SIZE self._batch = create_batch(max_size, translation_format, orientation_format) self.max_size = max_size self.flags = array('B') - self.texlevels = array('H') self.meshes = array('I') self.translations = array('f') if orientation_format != BATCH_ORIENTATION_FORMAT_NONE: @@ -37,13 +36,12 @@ class Batch: def __del__(self): destroy_batch(self._batch) - def append(self, flags, texlevel, mesh, translation, orientation): + def append(self, flags, mesh, translation, orientation): assert len(translation) == 3 assert orientation is None or len(orientation) == 3 index = len(self.flags) assert index < self.max_size self.flags.append(flags | INSTANCE_FLAG_SPAWNED) - self.texlevels.append(texlevel) self.meshes.append(mesh) self.translations.extend(translation) if self.orientations is not None: @@ -57,4 +55,4 @@ class Batch: self.orientations[index * 3 : index * 3 + 3] = orientation def draw(self): - draw_batch(self._batch, self.flags, self.texlevels, self.meshes, self.translations, self.orientations) + draw_batch(self._batch, self.flags, self.meshes, self.translations, self.orientations) diff --git a/game/obj2rkar.py b/game/obj2rkar.py index 41c5059..680a036 100644 --- a/game/obj2rkar.py +++ b/game/obj2rkar.py @@ -30,23 +30,6 @@ class ObjArchive(Archive): def __init__(self): super().__init__() - def import_hacks(self, path): - print("Importing hacks", path) - hacks = {} - for line in open(path): - data = line.split() - if not data: - continue - name = data.pop(0) - if name == '#': - continue - assert len(data) == 4 and data[0] == '=' and data[2] == 'mesh' - alias = data[1] - mesh = data[3] - assert name not in hacks.keys() - hacks[name] = (alias, mesh) - return hacks - def import_mtl(self, mtlpath): def load_value(x): x = round(float(x), 6) @@ -178,12 +161,10 @@ class ObjArchive(Archive): elif code == 'o': if name: assert mesh - objects[name] = (texlevel, mesh) + objects[name] = mesh name = data[0] print("Importing object", name) mesh = [] - elif code == 'usemtl': - texlevel = texlevels[data[0]] elif code == 'v': position = tuple(map(load_coord, data)) assert len(position) == 3 @@ -196,66 +177,57 @@ class ObjArchive(Archive): texcoord = tuple(map(load_coord, data)) assert len(texcoord) == 2 texcoords.append((texcoord[0], 1.0 - texcoord[1])) + elif code == 'usemtl': + texlevel = texlevels[data[0]] elif code == 'f': indices = tuple(map(lambda x: tuple(map(load_index, x.split('/'))), data)) assert len(indices) == 3 assert len(indices[0]) == 3 assert len(indices[1]) == 3 assert len(indices[2]) == 3 - triangle = tuple(map(lambda x: positions[x[0]] + normals[x[2]] + texcoords[x[1]], indices)) + triangle = tuple(map( + lambda x: positions[x[0]] + normals[x[2]] + texcoords[x[1]] + (texlevel,), indices)) assert len(triangle) == 3 and len(set(triangle)) == 3 mesh.append(triangle) if name: assert mesh - objects[name] = (texlevel, mesh) + objects[name] = mesh vertices = set() - for _, mesh in objects.values(): + for mesh in objects.values(): vertices |= frozenset(chain.from_iterable(mesh)) vertices = tuple(vertices) indices = [] models = {} - for name, (texlevel, mesh) in sorted(objects.items()): - if name[0] == '_': - print(name, ": texlevel =", texlevel) - models[name] = (texlevel, -1, -1) - else: - offset = len(indices) - assert offset < 65536 - indices.extend(map(vertices.index, chain.from_iterable(mesh))) - count = len(indices) - offset - assert count % 3 == 0 - count //= 3 - assert count < 65536 - print(name, ": texlevel =", texlevel, "offset =", offset, "count =", count) - models[name] = (texlevel, offset, count) + for name, mesh in sorted(objects.items()): + offset = len(indices) + assert offset < 65536 + indices.extend(map(vertices.index, chain.from_iterable(mesh))) + count = len(indices) - offset + assert count % 3 == 0 + count //= 3 + assert count < 65536 + print(name, ": offset =", offset, "triangles =", count) + models[name] = (offset, count) name = str(objpath.stem) assert name not in self.vertices_db.keys() #TODO: move to math def pack_10(_x): return round(_x * (512.0 if _x < 0.0 else 511.0)) & 1023 - def pack_vertex(_px, _py, _pz, _nx, _ny, _nz, _s, _t): - n = (pack_10(_nx) << 20) | (pack_10(_ny) << 10) | (pack_10(_nz) << 0) - s = max(0, min(65535, round(_s * 65535.0))) - t = max(0, min(65535, round(_t * 65535.0))) - return struct.pack('fffIHH', _px, _py, _pz, n, s, t) + def pack_u10(_x): + return round(_x * 1023.0) & 1023 + def pack_vertex(_px, _py, _pz, _nx, _ny, _nz, _s, _t, _tl): + n = (pack_10(_nz) << 20) | (pack_10(_ny) << 10) | pack_10(_nx) + t = ((_tl & 1023) << 20) | (pack_u10(_t) << 10) | pack_u10(_s) + return struct.pack('fffII', _px, _py, _pz, n, t) self.vertices_db[name] = VerticesData(name, array('B', b''.join(starmap(pack_vertex, vertices))), array('H', indices)) - path = objpath.parent / (objpath.stem + '.hacks') - if path.exists(): - hacks = self.import_hacks(path) - for name, (alias, mesh) in hacks.items(): - print("Hacking", name, "from", alias, "with mesh", mesh) - assert name not in models.keys() and alias in models.keys() and mesh in models.keys() - texlevel, _, _ = models[alias] - _, offset, count = models[mesh] - models[name] = (texlevel, offset, count) - for name, (texlevel, offset, count) in sorted(models.items()): + for name, (offset, count) in sorted(models.items()): if name[0] != '_': print("Storing", name) assert name not in self.models_db.keys() self.models_db[name] = ModelData( - name, INSTANCE_FLAG_VISIBLE, texlevel, offset | count << 16) + name, INSTANCE_FLAG_VISIBLE, offset | count << 16) if __name__ == '__main__': if len(sys.argv) < 3: diff --git a/game/resources.py b/game/resources.py index 21290cd..d8b9750 100644 --- a/game/resources.py +++ b/game/resources.py @@ -23,9 +23,9 @@ import engine VERTEX_SIZE = 20 VERTEX_FORMAT = engine.vertex_format( - engine.VERTEX_FORMAT_VEC3_FLOAT, - engine.VERTEX_FORMAT_VEC3_INT10, - engine.VERTEX_FORMAT_VEC2_USHORT) + engine.VERTEX_FORMAT_VEC3_FLOAT, # position + engine.VERTEX_FORMAT_VEC3_INT10 | engine.VERTEX_FORMAT_NORMALIZE, # normal + engine.VERTEX_FORMAT_VEC3_UINT10) # texcoords def load_png(path): width, height, data, _ = png.Reader(filename = path).read_flat() @@ -166,39 +166,37 @@ def create_vertices(data): return engine.create_vertices(VERTEX_FORMAT, len(data.vertices) // VERTEX_SIZE, data.vertices, data.indices) class ModelData: - __slots__ = 'name', 'flags', 'texlevel', 'mesh' + __slots__ = 'name', 'flags', 'mesh' - def __init__(self, name, flags, texlevel, mesh): + def __init__(self, name, flags, mesh): self.name = name self.flags = flags - self.texlevel = texlevel self.mesh = mesh @classmethod def from_archive(cls, file): _read_magic(file, b'MD') name = _read_string(file) - flags, texlevel, mesh = _read_struct(file, 'BHI') - return ModelData(name, flags, texlevel, mesh) + flags, mesh = _read_struct(file, 'II') + return ModelData(name, flags, mesh) def to_archive(self, file): _write_magic(file, b'MD') _write_string(file, self.name) - _write_struct(file, 'BHI', (self.flags, self.texlevel, self.mesh)) + _write_struct(file, 'II', (self.flags, self.mesh)) class Model: - __slots__ = 'flags', 'texlevel', 'mesh' + __slots__ = 'flags', 'mesh' - def __init__(self, flags, texlevel, mesh): + def __init__(self, flags, mesh): self.flags = flags - self.texlevel = texlevel self.mesh = mesh def spawn(self, batch, translation = engine.vec3_zero, orientation = engine.vec3_forward): - return batch.append(self.flags, self.texlevel, self.mesh, translation, orientation) + return batch.append(self.flags, self.mesh, translation, orientation) def create_model(data): - return Model(data.flags, data.texlevel, data.mesh) + return Model(data.flags, data.mesh) class Archive: __slots__ = 'textures_db', 'vertices_db', 'models_db' diff --git a/game/shaders/terrain_opengles.vert b/game/shaders/terrain_opengles.vert index c1f4dcf..abc65d3 100644 --- a/game/shaders/terrain_opengles.vert +++ b/game/shaders/terrain_opengles.vert @@ -18,13 +18,11 @@ precision highp float; layout(location = 0) in vec3 a_position; // model space layout(location = 1) in vec3 a_normal; // model space -layout(location = 2) in vec2 a_texcoord; // texture space +layout(location = 2) in vec3 a_texcoord; // texture space -layout(location = 3) in vec4 i_translation; // per mesh, model space -> world space (x, y, z, texlevel) +layout(location = 3) in vec3 i_translation; // per mesh, model space -> world space layout(location = 4) in vec3 i_orientation; // per mesh, model space -> world space -#define i_texlevel i_translation.w - uniform mat4 u_view; // world space -> view space uniform mat4 u_projection; // view space -> screen space @@ -33,6 +31,7 @@ uniform highp sampler2D u_normal_sampler; const vec3 c_normal_scale = vec3(2.0, 2.0, 1.0); const vec3 c_normal_shift = vec3(-1.0, -1.0, 0.0); +const vec2 c_st_scale = vec2(1.0 / 1023.0, 1.0 / 1023.0); const vec2 c_terrain_scale = vec2(1.0 / 2048.0, -1.0 / 2048.0); const vec2 c_terrain_shift = vec2(0.5, 0.5); const float c_weight_scale = 1.0 / 64.f; @@ -58,6 +57,6 @@ void main(void) { v_position = view_position.xyz; v_normal = (u_view * vec4(world_normal, 0.0)).xyz; v_terrain_normal = vec4((u_view * vec4(terrain_normal, 0.0)).xyz, weight); - v_texcoord = vec4(a_texcoord, i_texlevel, i_texlevel + 1.0); + v_texcoord = vec4(a_texcoord.st * c_st_scale, a_texcoord.p, a_texcoord.p + 1.0); gl_Position = u_projection * view_position; }