diff --git a/CMakeLists.txt b/CMakeLists.txt index a044f0f..05d6370 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -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" diff --git a/assets-cg/__pycache__/converters.cpython-39.pyc b/assets-cg/__pycache__/converters.cpython-39.pyc index 2c080ee..1678e89 100644 Binary files a/assets-cg/__pycache__/converters.cpython-39.pyc and b/assets-cg/__pycache__/converters.cpython-39.pyc differ diff --git a/assets-cg/converters.py b/assets-cg/converters.py index 6f53232..56824cc 100644 --- a/assets-cg/converters.py +++ b/assets-cg/converters.py @@ -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) \ No newline at end of file diff --git a/assets-cg/fxconv-metadata.txt b/assets-cg/fxconv-metadata.txt index be2bccc..25c0b4f 100644 --- a/assets-cg/fxconv-metadata.txt +++ b/assets-cg/fxconv-metadata.txt @@ -1,7 +1,6 @@ tileset.png: type: bopti-image name: img_tileset - profile:p4 spritesheet.png: type: bopti-image diff --git a/assets-cg/maps/fxconv-metadata.txt b/assets-cg/maps/fxconv-metadata.txt index e75ebdd..f4c8d95 100644 --- a/assets-cg/maps/fxconv-metadata.txt +++ b/assets-cg/maps/fxconv-metadata.txt @@ -1,3 +1,3 @@ -testCarte.csv: +testCarte.json: custom-type: map name: map_1 diff --git a/assets-cg/maps/testCarte.csv b/assets-cg/maps/testCarte.csv deleted file mode 100644 index 3f646ac..0000000 --- a/assets-cg/maps/testCarte.csv +++ /dev/null @@ -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 diff --git a/assets-cg/maps/testCarte.json b/assets-cg/maps/testCarte.json new file mode 100644 index 0000000..63e6a79 --- /dev/null +++ b/assets-cg/maps/testCarte.json @@ -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 +} \ No newline at end of file diff --git a/assets-cg/maps/testCarte.tmx b/assets-cg/maps/testCarte.tmx index b87e846..91556bf 100644 --- a/assets-cg/maps/testCarte.tmx +++ b/assets-cg/maps/testCarte.tmx @@ -1,27 +1,53 @@ - + - + - + -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 + + + + +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 diff --git a/include/map.h b/include/map.h index 768da08..b05b415 100644 --- a/include/map.h +++ b/include/map.h @@ -3,7 +3,8 @@ struct map { int w, h; bopti_image_t *tileset; - short *tiles; + short *tiles_layer1; + short *tiles_layer2; }; enum map_state { diff --git a/src/engine.c b/src/engine.c index 97c544b..c62879f 100644 --- a/src/engine.c +++ b/src/engine.c @@ -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; + } } \ No newline at end of file diff --git a/src/game.c b/src/game.c index 486298e..7c46491 100644 --- a/src/game.c +++ b/src/game.c @@ -13,8 +13,8 @@ struct map *maps[] = { void play() { struct player player = { - .x = 2, - .y = 3, + .x = 16, + .y = 7, .direction = 0 };