render ground layer + csv -> json + around player only (WIP)

This commit is contained in:
bgiraudr 2021-07-30 02:01:05 +02:00
parent 61aed97416
commit ef4e9e58b0
11 changed files with 214 additions and 58 deletions

View File

@ -12,9 +12,9 @@ find_package(Gint 2.1 REQUIRED)
fxconv_declare_converters(assets-cg/converters.py)
add_custom_command(
OUTPUT "${CMAKE_CURRENT_LIST_DIR}/assets-cg/maps/testCarte.csv"
COMMENT "Convert tmx map to csv"
COMMAND tiled --export-map csv testCarte.tmx testCarte.csv
OUTPUT "${CMAKE_CURRENT_LIST_DIR}/assets-cg/maps/testCarte.json"
COMMENT "Convert tmx map to json"
COMMAND tiled --export-map json testCarte.tmx testCarte.json
WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/assets-cg/maps/
DEPENDS assets-cg/maps/testCarte.tmx assets-cg/tileset.png assets-cg/converters.py)
@ -26,7 +26,7 @@ set(SOURCES
set(ASSETS_cg
assets-cg/tileset.png
assets-cg/maps/testCarte.csv
assets-cg/maps/testCarte.json
assets-cg/spritesheet.png
)
@ -35,6 +35,7 @@ fxconv_declare_assets(${ASSETS} ${ASSETS_fx} ${ASSETS_cg} WITH_METADATA)
add_executable(myaddin ${SOURCES} ${ASSETS} ${ASSETS_${FXSDK_PLATFORM}})
target_compile_options(myaddin PRIVATE -Wall -Wextra -Os)
target_link_libraries(myaddin Gint::Gint)
target_link_options(myaddin PRIVATE -Wl,-Map=map)
if("${FXSDK_PLATFORM_LONG}" STREQUAL fxCG50)
generate_g3a(TARGET myaddin OUTPUT "MyAddin.g3a"

View File

@ -1,5 +1,5 @@
import fxconv
import csv
import json
def convert(input, output, params, target):
if params["custom-type"] == "map":
@ -9,7 +9,7 @@ def convert(input, output, params, target):
return 1
def convert_map(input, output, params, target):
with open(input, "r") as csvData:
"""with open(input, "r") as csvData:
tiles = []
csvReader = csv.reader(csvData)
for row in csvReader:
@ -21,11 +21,24 @@ def convert_map(input, output, params, target):
encoded_tiles = bytearray()
for(y, i) in enumerate(tiles):
for(x, j) in enumerate(i):
encoded_tiles += bytearray(fxconv.u16((int)(j)+1))
encoded_tiles += bytearray(fxconv.u16((int)(j)+1))"""
o = fxconv.ObjectData()
o += fxconv.u32(w) + fxconv.u32(h)
o += fxconv.ref("img_tileset")
o += fxconv.ref(encoded_tiles)
with open(input, "r") as jsonData:
data = json.load(jsonData)
w = data["layers"][0]["width"]
h = data["layers"][0]["height"]
o = fxconv.ObjectData()
o += fxconv.u32(w) + fxconv.u32(h)
o += fxconv.ref("img_tileset")
for i in range(len(data["layers"])):
tiles = data["layers"][i]["data"]
byte_tiles = bytearray()
for j in tiles:
byte_tiles += bytearray(fxconv.u16(j))
o += fxconv.ref(byte_tiles)
fxconv.elf(o, output, "_" + params["name"], **target)

View File

@ -1,7 +1,6 @@
tileset.png:
type: bopti-image
name: img_tileset
profile:p4
spritesheet.png:
type: bopti-image

View File

@ -1,3 +1,3 @@
testCarte.csv:
testCarte.json:
custom-type: map
name: map_1

View File

@ -1,16 +0,0 @@
575,576,577,578,579,-1,-1,-1,-1,397,398,399,79,80,81,343,344,345,346,347,79,80,81,-1,-1,-1
604,605,606,607,608,-1,58,59,60,426,427,428,108,109,110,372,373,374,375,376,108,109,110,-1,-1,-1
633,634,635,636,637,-1,87,88,89,455,456,457,137,138,139,401,402,403,404,405,137,138,139,76,77,77
662,663,664,665,666,-1,116,117,118,484,485,486,-1,-1,-1,430,431,432,433,434,-1,-1,-1,105,106,106
691,692,693,694,695,210,211,212,213,214,215,216,217,-1,-1,459,460,461,462,463,-1,-1,-1,105,106,106
720,721,722,723,724,239,240,241,242,243,244,245,246,162,163,488,489,490,491,492,273,274,275,105,106,106
749,750,251,752,753,592,593,594,595,-1,-1,-1,-1,191,192,517,518,519,520,521,302,303,304,105,106,106
-1,18,251,592,593,594,595,-1,-1,592,593,594,595,220,221,546,251,548,549,550,331,332,333,105,106,106
-1,15,251,14,20,18,13,17,18,18,13,14,18,17,12,20,251,18,676,-1,360,361,362,134,135,135
-1,18,251,251,251,251,251,251,251,251,251,251,251,251,251,251,251,15,705,-1,575,576,577,578,579,-1
-1,13,17,18,13,15,18,19,20,16,20,14,18,18,18,16,18,18,-1,-1,604,605,606,607,608,-1
508,509,510,676,-1,-1,-1,-1,-1,-1,-1,-1,148,149,150,67,68,69,-1,-1,633,634,635,636,637,-1
537,538,539,705,79,80,81,-1,-1,79,80,81,177,178,179,96,97,97,69,-1,662,663,664,665,666,-1
-1,-1,-1,-1,108,109,109,80,80,109,109,110,206,207,208,125,126,126,127,-1,691,692,693,694,695,-1
-1,-1,-1,-1,108,109,109,138,138,109,109,110,235,236,237,-1,-1,-1,-1,-1,720,721,722,723,724,-1
-1,-1,-1,-1,108,109,110,-1,-1,108,109,110,-1,-1,-1,-1,-1,-1,-1,-1,749,750,751,752,753,-1
1 575 576 577 578 579 -1 -1 -1 -1 397 398 399 79 80 81 343 344 345 346 347 79 80 81 -1 -1 -1
2 604 605 606 607 608 -1 58 59 60 426 427 428 108 109 110 372 373 374 375 376 108 109 110 -1 -1 -1
3 633 634 635 636 637 -1 87 88 89 455 456 457 137 138 139 401 402 403 404 405 137 138 139 76 77 77
4 662 663 664 665 666 -1 116 117 118 484 485 486 -1 -1 -1 430 431 432 433 434 -1 -1 -1 105 106 106
5 691 692 693 694 695 210 211 212 213 214 215 216 217 -1 -1 459 460 461 462 463 -1 -1 -1 105 106 106
6 720 721 722 723 724 239 240 241 242 243 244 245 246 162 163 488 489 490 491 492 273 274 275 105 106 106
7 749 750 251 752 753 592 593 594 595 -1 -1 -1 -1 191 192 517 518 519 520 521 302 303 304 105 106 106
8 -1 18 251 592 593 594 595 -1 -1 592 593 594 595 220 221 546 251 548 549 550 331 332 333 105 106 106
9 -1 15 251 14 20 18 13 17 18 18 13 14 18 17 12 20 251 18 676 -1 360 361 362 134 135 135
10 -1 18 251 251 251 251 251 251 251 251 251 251 251 251 251 251 251 15 705 -1 575 576 577 578 579 -1
11 -1 13 17 18 13 15 18 19 20 16 20 14 18 18 18 16 18 18 -1 -1 604 605 606 607 608 -1
12 508 509 510 676 -1 -1 -1 -1 -1 -1 -1 -1 148 149 150 67 68 69 -1 -1 633 634 635 636 637 -1
13 537 538 539 705 79 80 81 -1 -1 79 80 81 177 178 179 96 97 97 69 -1 662 663 664 665 666 -1
14 -1 -1 -1 -1 108 109 109 80 80 109 109 110 206 207 208 125 126 126 127 -1 691 692 693 694 695 -1
15 -1 -1 -1 -1 108 109 109 138 138 109 109 110 235 236 237 -1 -1 -1 -1 -1 720 721 722 723 724 -1
16 -1 -1 -1 -1 108 109 110 -1 -1 108 109 110 -1 -1 -1 -1 -1 -1 -1 -1 749 750 751 752 753 -1

View File

@ -0,0 +1,44 @@
{ "compressionlevel":-1,
"height":19,
"infinite":false,
"layers":[
{
"data":[104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 103, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 252, 252, 252, 252, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 252, 252, 104, 104, 104, 104, 95, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 95, 104, 104, 104, 95, 104, 104, 104, 104, 107, 107, 104, 252, 252, 104, 104, 104, 252, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 95, 104, 104, 104, 95, 104, 104, 104, 104, 107, 107, 104, 252, 252, 104, 104, 104, 252, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 252, 104, 104, 104, 252, 104, 104, 104, 104, 107, 107, 104, 252, 252, 252, 252, 252, 252, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 252, 104, 104, 104, 252, 104, 104, 104, 104, 107, 107, 104, 252, 104, 95, 252, 95, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 252, 252, 252, 252, 252, 104, 104, 104, 104, 107, 107, 104, 252, 104, 95, 252, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 252, 95, 104, 104, 104, 104, 104, 104, 104, 104, 104, 252, 104, 95, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, 95, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 252, 95, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 98, 252, 98, 98, 98, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 98, 252, 252, 252, 252, 252, 252, 252, 252, 252, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 98, 98, 98, 98, 252, 252, 252, 252, 95, 252, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 98, 252, 252, 252, 252, 104, 252, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 113, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 98, 252, 252, 252, 252, 252, 252, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 113, 104, 104, 104, 104, 104, 98, 98, 98, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 98, 98, 98, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 98, 98, 98, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104, 104],
"height":19,
"id":5,
"name":"1",
"opacity":1,
"type":"tilelayer",
"visible":true,
"width":28,
"x":0,
"y":0
},
{
"data":[576, 577, 578, 579, 580, 19, 20, 21, 0, 398, 399, 400, 80, 81, 82, 344, 345, 346, 240, 241, 240, 241, 242, 243, 244, 245, 246, 247, 605, 606, 607, 608, 609, 0, 59, 60, 61, 427, 428, 429, 109, 110, 111, 373, 374, 375, 376, 377, 80, 81, 82, 0, 0, 0, 0, 211, 634, 635, 636, 637, 638, 0, 88, 89, 90, 456, 457, 458, 138, 139, 140, 402, 403, 404, 405, 406, 138, 139, 140, 77, 78, 78, 79, 240, 663, 664, 665, 666, 667, 0, 117, 118, 119, 485, 486, 487, 19, 20, 21, 431, 432, 433, 434, 435, 13, 0, 0, 106, 0, 10, 108, 211, 692, 693, 694, 695, 696, 211, 212, 213, 214, 215, 216, 217, 218, 0, 0, 460, 461, 462, 463, 464, 19, 20, 21, 106, 10, 0, 108, 240, 721, 722, 723, 724, 725, 240, 241, 242, 243, 244, 245, 246, 247, 163, 164, 489, 490, 491, 492, 493, 274, 275, 276, 106, 23, 0, 108, 211, 750, 751, 0, 753, 754, 593, 594, 595, 596, 0, 0, 0, 0, 192, 193, 518, 519, 520, 521, 522, 303, 304, 305, 106, 0, 0, 108, 240, 0, 19, 0, 593, 594, 595, 596, 0, 0, 593, 594, 595, 596, 221, 222, 547, 0, 549, 550, 551, 332, 333, 334, 106, 0, 23, 108, 211, 0, 16, 0, 15, 21, 19, 14, 18, 19, 19, 14, 15, 19, 18, 13, 21, 0, 19, 677, 0, 361, 362, 363, 135, 136, 136, 137, 240, 0, 19, 0, 0, 0, 0, 281, 281, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 706, 619, 576, 577, 578, 579, 580, 0, 595, 595, 0, 14, 18, 19, 14, 16, 19, 20, 21, 17, 21, 15, 19, 19, 19, 17, 0, 19, 619, 0, 605, 606, 607, 608, 609, 0, 595, 595, 509, 510, 511, 677, 0, 0, 0, 0, 0, 0, 0, 0, 149, 150, 151, 18, 0, 17, 18, 15, 634, 635, 636, 637, 638, 0, 595, 595, 538, 539, 540, 706, 80, 81, 82, 0, 18, 80, 81, 82, 178, 179, 180, 20, 0, 0, 0, 0, 663, 664, 665, 666, 667, 0, 595, 595, 0, 0, 0, 0, 109, 110, 111, 62, 64, 109, 110, 111, 207, 208, 209, 16, 15, 16, 20, 0, 692, 693, 694, 695, 696, 15, 595, 595, 0, 19, 20, 21, 109, 110, 111, 120, 122, 109, 110, 111, 236, 237, 238, 19, 20, 21, 20, 0, 721, 722, 723, 724, 725, 0, 595, 595, 500, 501, 502, 0, 109, 110, 111, 14, 0, 109, 110, 111, 0, 18, 500, 501, 502, 0, 18, 0, 750, 751, 752, 753, 754, 0, 595, 595, 529, 530, 531, 0, 138, 139, 140, 0, 14, 138, 139, 140, 0, 0, 529, 530, 531, 0, 535, 536, 537, 537, 535, 535, 536, 537, 595, 595, 558, 559, 560, 0, 153, 154, 155, 156, 157, 158, 159, 160, 0, 0, 558, 559, 560, 0, 564, 565, 566, 566, 564, 564, 565, 566, 595, 595, 587, 588, 589, 0, 182, 183, 184, 185, 186, 187, 188, 189, 0, 15, 587, 588, 589, 0, 593, 594, 595, 595, 593, 593, 594, 595, 595, 595],
"height":19,
"id":1,
"name":"2",
"opacity":1,
"type":"tilelayer",
"visible":true,
"width":28,
"x":0,
"y":0
}],
"nextlayerid":6,
"nextobjectid":1,
"orientation":"orthogonal",
"renderorder":"right-down",
"tiledversion":"1.7.1",
"tileheight":16,
"tilesets":[
{
"firstgid":1,
"source":"tileset.tsx"
}],
"tilewidth":16,
"type":"map",
"version":"1.6",
"width":28
}

View File

@ -1,27 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.5" tiledversion="1.7.1" orientation="orthogonal" renderorder="right-down" width="26" height="16" tilewidth="16" tileheight="16" infinite="0" nextlayerid="4" nextobjectid="1">
<map version="1.5" tiledversion="1.7.1" orientation="orthogonal" renderorder="right-down" width="28" height="19" tilewidth="16" tileheight="16" infinite="0" nextlayerid="6" nextobjectid="1">
<editorsettings>
<export target="testCarte.csv" format="csv"/>
<export target="testCarte.json" format="json"/>
</editorsettings>
<tileset firstgid="1" source="tileset.tsx"/>
<layer id="1" name="1" width="26" height="16">
<layer id="5" name="1" width="28" height="19">
<data encoding="csv">
576,577,578,579,580,0,0,0,0,398,399,400,80,81,82,344,345,346,347,348,80,81,82,0,0,0,
605,606,607,608,609,0,59,60,61,427,428,429,109,110,111,373,374,375,376,377,109,110,111,0,0,0,
634,635,636,637,638,0,88,89,90,456,457,458,138,139,140,402,403,404,405,406,138,139,140,77,78,78,
663,664,665,666,667,0,117,118,119,485,486,487,0,0,0,431,432,433,434,435,0,0,0,106,107,107,
692,693,694,695,696,211,212,213,214,215,216,217,218,0,0,460,461,462,463,464,0,0,0,106,107,107,
721,722,723,724,725,240,241,242,243,244,245,246,247,163,164,489,490,491,492,493,274,275,276,106,107,107,
750,751,252,753,754,593,594,595,596,0,0,0,0,192,193,518,519,520,521,522,303,304,305,106,107,107,
0,19,252,593,594,595,596,0,0,593,594,595,596,221,222,547,252,549,550,551,332,333,334,106,107,107,
0,16,252,15,21,19,14,18,19,19,14,15,19,18,13,21,252,19,677,0,361,362,363,135,136,136,
0,19,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,16,706,0,576,577,578,579,580,0,
0,14,18,19,14,16,19,20,21,17,21,15,19,19,19,17,19,19,0,0,605,606,607,608,609,0,
509,510,511,677,0,0,0,0,0,0,0,0,149,150,151,68,69,70,0,0,634,635,636,637,638,0,
538,539,540,706,80,81,82,0,0,80,81,82,178,179,180,97,98,98,70,0,663,664,665,666,667,0,
0,0,0,0,109,110,110,81,81,110,110,111,207,208,209,126,127,127,128,0,692,693,694,695,696,0,
0,0,0,0,109,110,110,139,139,110,110,111,236,237,238,0,0,0,0,0,721,722,723,724,725,0,
0,0,0,0,109,110,111,0,0,109,110,111,0,0,0,0,0,0,0,0,750,751,752,753,754,0
104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,252,252,252,252,252,252,252,252,252,252,252,
103,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,252,252,252,252,
104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,252,252,
104,104,104,104,95,104,104,104,104,104,104,104,104,104,104,95,104,104,104,95,104,104,104,104,107,107,104,252,
252,104,104,104,252,104,104,104,104,104,104,104,104,104,104,95,104,104,104,95,104,104,104,104,107,107,104,252,
252,104,104,104,252,104,104,104,104,104,104,104,104,104,104,252,104,104,104,252,104,104,104,104,107,107,104,252,
252,252,252,252,252,104,104,104,104,104,104,104,104,104,104,252,104,104,104,252,104,104,104,104,107,107,104,252,
104,95,252,95,104,104,104,104,104,104,104,104,104,104,104,252,252,252,252,252,104,104,104,104,107,107,104,252,
104,95,252,95,95,95,95,95,95,95,95,95,95,95,95,95,252,95,104,104,104,104,104,104,104,104,104,252,
104,95,252,252,252,252,252,252,252,252,252,252,252,252,252,252,252,95,104,104,104,104,104,104,104,104,104,104,
104,95,95,95,95,95,95,95,95,95,95,95,95,95,95,95,252,95,104,104,104,104,104,104,104,104,104,104,
104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,98,252,98,98,98,104,104,104,104,104,104,104,104,
104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,98,252,252,252,252,252,252,252,252,252,104,104,104,
104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,98,98,98,98,252,252,252,252,95,252,104,104,104,
104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,104,98,252,252,252,252,104,252,104,104,104,
104,104,104,104,104,104,104,113,104,104,104,104,104,104,104,104,104,104,98,252,252,252,252,252,252,104,104,104,
104,104,104,104,104,104,104,104,113,104,104,104,104,104,98,98,98,104,104,104,104,104,104,104,104,104,104,104,
104,104,104,104,104,104,104,104,104,104,104,104,104,104,98,98,98,104,104,104,104,104,104,104,104,104,104,104,
104,104,104,104,104,104,104,104,104,104,104,104,104,104,98,98,98,104,104,104,104,104,104,104,104,104,104,104
</data>
</layer>
<layer id="1" name="2" width="28" height="19">
<data encoding="csv">
576,577,578,579,580,19,20,21,0,398,399,400,80,81,82,344,345,346,240,241,240,241,242,243,244,245,246,247,
605,606,607,608,609,0,59,60,61,427,428,429,109,110,111,373,374,375,376,377,80,81,82,0,0,0,0,211,
634,635,636,637,638,0,88,89,90,456,457,458,138,139,140,402,403,404,405,406,138,139,140,77,78,78,79,240,
663,664,665,666,667,0,117,118,119,485,486,487,19,20,21,431,432,433,434,435,13,0,0,106,0,10,108,211,
692,693,694,695,696,211,212,213,214,215,216,217,218,0,0,460,461,462,463,464,19,20,21,106,10,0,108,240,
721,722,723,724,725,240,241,242,243,244,245,246,247,163,164,489,490,491,492,493,274,275,276,106,23,0,108,211,
750,751,0,753,754,593,594,595,596,0,0,0,0,192,193,518,519,520,521,522,303,304,305,106,0,0,108,240,
0,19,0,593,594,595,596,0,0,593,594,595,596,221,222,547,0,549,550,551,332,333,334,106,0,23,108,211,
0,16,0,15,21,19,14,18,19,19,14,15,19,18,13,21,0,19,677,0,361,362,363,135,136,136,137,240,
0,19,0,0,0,0,281,281,0,0,0,0,0,0,0,0,0,16,706,619,576,577,578,579,580,0,595,595,
0,14,18,19,14,16,19,20,21,17,21,15,19,19,19,17,0,19,619,0,605,606,607,608,609,0,595,595,
509,510,511,677,0,0,0,0,0,0,0,0,149,150,151,18,0,17,18,15,634,635,636,637,638,0,595,595,
538,539,540,706,80,81,82,0,18,80,81,82,178,179,180,20,0,0,0,0,663,664,665,666,667,0,595,595,
0,0,0,0,109,110,111,62,64,109,110,111,207,208,209,16,15,16,20,0,692,693,694,695,696,15,595,595,
0,19,20,21,109,110,111,120,122,109,110,111,236,237,238,19,20,21,20,0,721,722,723,724,725,0,595,595,
500,501,502,0,109,110,111,14,0,109,110,111,0,18,500,501,502,0,18,0,750,751,752,753,754,0,595,595,
529,530,531,0,138,139,140,0,14,138,139,140,0,0,529,530,531,0,535,536,537,537,535,535,536,537,595,595,
558,559,560,0,153,154,155,156,157,158,159,160,0,0,558,559,560,0,564,565,566,566,564,564,565,566,595,595,
587,588,589,0,182,183,184,185,186,187,188,189,0,15,587,588,589,0,593,594,595,595,593,593,594,595,595,595
</data>
</layer>
</map>

View File

@ -3,7 +3,8 @@
struct map {
int w, h;
bopti_image_t *tileset;
short *tiles;
short *tiles_layer1;
short *tiles_layer2;
};
enum map_state {

View File

@ -6,11 +6,13 @@
#include "player.h"
#define TILESET_WIDTH 29
#define HEIGHT_VISIBLE 14
#define WIDTH_VISIBLE 24
void engine_draw(struct game const *game) {
dclear(C_WHITE);
for(int y = 0; y < game->map->h; y++) {
for(int x = 0; x < game->map->w; x++) {
/*void engine_draw(struct game const *game) {
dclear(C_BLACK);
for(int y = 0; y < HEIGHT_VISIBLE; y++) {
for(int x = 0; x < WIDTH_VISIBLE; x++) {
int tile = game->map->tiles[y * game->map->w + x] - 1;
if(tile != -1) {
int tile_x = tile % TILESET_WIDTH;
@ -22,18 +24,104 @@ void engine_draw(struct game const *game) {
}
}
engine_draw_player(game->player);
}*/
void engine_draw(struct game const *game) {
dclear(C_WHITE);
int j = 0;
int x = 0;
int level_width = game->map->w;
int taillemap = game->map->h*game->map->w;
int player_view = 12;
int coomap = game->player->x + game->player->y*level_width;
int beginmap = coomap - player_view - level_width*player_view;
int beginline = coomap - player_view * level_width - coomap%level_width;
if(beginmap < 0) {
beginmap = game->player->x - player_view;
if(beginmap < 0) beginmap = 0;
}
if((coomap - player_view)%level_width > coomap%level_width) {
if(beginline > 0) {
beginmap = beginline;
} else {
beginmap = 0;
}
}
int next = game->player->x + player_view + beginmap/level_width * level_width;
int endline = beginmap+level_width-beginmap%level_width-1;
if(next > endline) next = endline;
if(next < 0) {
next = game->player->x + player_view;
}
int indypro = game->player->y + player_view;
if(indypro > taillemap/level_width-1) {
indypro = taillemap/level_width-1;
}
int endmap = next%level_width + level_width*indypro;
int ecart = next - beginmap;
int xcentre = 0, ycentre = 0;
for(int i = beginmap; i <= endmap; i++) {
x++;
if(i == coomap) {xcentre = x-1; ycentre = j; break;}
if(i == beginmap + ecart + j * level_width) {
j++;
x=0;
i = beginmap + j*level_width-1;
}
}
j=0;
x=12-xcentre;
for(int i = beginmap; i <= endmap; i++) {
int y = j + (7-ycentre);
for(int layer = 0; layer < 2; layer++) {
int tile;
tile = layer == 0 ? game->map->tiles_layer1[i] - 1 : game->map->tiles_layer2[i] - 1;
if(tile != -1) {
int tile_x = tile % TILESET_WIDTH;
int tile_y = tile / TILESET_WIDTH;
//dprint(x * 55, y * 16, C_BLACK,"%d(%d:%d)",tile, tile_x, tile_y);
dsubimage(x * 16, y * 16, game->map->tileset, tile_x * 16, tile_y * 16, 16, 16, DIMAGE_NONE);
}
}
x++;
if(i==beginmap+ecart+j*level_width) {
j++;
x=12-xcentre;
i = beginmap + j*level_width-1;
}
}
engine_draw_player(game->player);
}
void engine_draw_player(struct player const *player) {
extern bopti_image_t img_spritesheet;
dsubimage(12 * 16, 7 * 16 - 5, &img_spritesheet, player->direction * 16, 0, 16, 21, DIMAGE_NONE);
dprint(1,1,C_BLACK,"%d:%d",player->x, player->y);
}
void engine_move(struct player *player, int direction) {
int dx = (direction == DIR_RIGHT) - (direction == DIR_LEFT);
int dy = (direction == DIR_DOWN) - (direction == DIR_UP);
player->direction = direction;
player->x += dx;
player->y += dy;
if(player->direction == direction) {
player->x += dx;
player->y += dy;
} else {
player->direction = direction;
}
}

View File

@ -13,8 +13,8 @@ struct map *maps[] = {
void play() {
struct player player = {
.x = 2,
.y = 3,
.x = 16,
.y = 7,
.direction = 0
};