From cfd7d479ec7d0bae4a7b7a10eafb5a2d977fa040 Mon Sep 17 00:00:00 2001 From: gered Date: Wed, 29 Mar 2023 15:43:58 -0400 Subject: [PATCH] add variable_screen_size example project not a super exciting project. might be removed later on when i eventually get to adding more exciting examples --- examples/variable_screen_size/Cargo.toml | 10 ++ .../assets/arena.map.json | 9 ++ examples/variable_screen_size/assets/db16.pal | Bin 0 -> 768 bytes examples/variable_screen_size/assets/dp.fnt | Bin 0 -> 2305 bytes .../variable_screen_size/assets/tiles.pcx | Bin 0 -> 33941 bytes examples/variable_screen_size/src/main.rs | 139 ++++++++++++++++++ 6 files changed, 158 insertions(+) create mode 100644 examples/variable_screen_size/Cargo.toml create mode 100644 examples/variable_screen_size/assets/arena.map.json create mode 100644 examples/variable_screen_size/assets/db16.pal create mode 100644 examples/variable_screen_size/assets/dp.fnt create mode 100644 examples/variable_screen_size/assets/tiles.pcx create mode 100644 examples/variable_screen_size/src/main.rs diff --git a/examples/variable_screen_size/Cargo.toml b/examples/variable_screen_size/Cargo.toml new file mode 100644 index 0000000..c3edcde --- /dev/null +++ b/examples/variable_screen_size/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "variable_screen_size" +version = "0.1.0" +edition = "2021" + +[dependencies] +anyhow = "=1.0.55" +ggdt = { path = "../../ggdt" } +serde = { version = "1.0.136", features = ["derive"] } +serde_json = "1.0.79" diff --git a/examples/variable_screen_size/assets/arena.map.json b/examples/variable_screen_size/assets/arena.map.json new file mode 100644 index 0000000..d1e4a6f --- /dev/null +++ b/examples/variable_screen_size/assets/arena.map.json @@ -0,0 +1,9 @@ +{ + "width":40, + "height":30, + "layers":[ + [96,96,96,96,96,96,96,96,96,96,96,96,16,17,16,16,16,16,16,17,17,32,16,16,16,16,16,32,16,16,16,16,16,16,16,16,16,33,16,16,96,96,96,96,96,96,96,96,96,96,96,16,17,17,17,32,17,32,16,16,32,16,16,32,16,16,16,16,16,16,32,16,33,16,16,16,16,16,16,16,96,96,96,96,96,96,96,96,96,96,181,178,178,178,178,183,32,16,17,181,178,178,178,178,178,178,178,178,178,178,178,183,16,16,16,16,16,16,16,32,96,96,96,96,96,96,96,96,96,181,195,16,32,17,17,193,178,178,178,195,16,16,16,16,16,16,32,16,16,16,16,193,178,183,16,32,16,16,16,16,96,96,96,96,96,96,96,181,178,195,16,16,16,32,17,17,17,17,32,16,16,16,33,16,16,16,16,16,16,16,16,16,16,193,183,16,16,16,33,16,96,96,96,96,96,96,181,195,32,16,16,16,16,16,16,16,32,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,32,16,193,183,16,16,16,16,16,17,16,16,96,181,195,16,16,33,16,16,16,16,16,32,16,16,16,16,16,32,16,16,16,16,48,48,48,48,16,16,16,16,16,196,16,16,16,16,32,16,17,16,181,195,16,16,16,16,16,32,16,16,16,16,16,16,16,16,16,16,16,16,48,48,48,48,48,48,48,48,16,16,32,193,183,16,32,16,8,8,8,181,195,16,16,16,16,17,32,16,16,16,16,16,16,16,16,16,16,16,16,48,48,48,48,48,48,48,48,48,48,16,16,16,196,16,16,16,7,7,7,196,16,32,16,32,17,17,17,16,16,16,16,33,16,16,16,16,16,16,48,48,48,48,48,48,48,48,48,48,48,48,16,16,193,183,16,32,7,7,181,195,16,16,16,16,16,32,16,16,16,16,16,16,16,16,16,32,16,16,16,48,48,48,48,48,48,48,48,48,48,48,48,32,16,196,32,16,7,7,196,16,16,32,16,16,32,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,48,48,48,48,48,48,48,48,48,48,16,16,16,196,16,16,7,7,196,8,8,16,16,16,16,16,16,32,16,16,16,16,32,16,16,16,16,16,16,16,16,48,48,48,48,48,48,48,48,16,16,16,16,196,17,16,7,7,196,7,7,16,16,16,16,16,16,16,16,16,33,16,16,16,16,16,16,16,16,16,32,16,16,48,48,48,48,48,16,16,16,16,16,196,17,16,7,7,196,7,7,16,16,16,16,16,33,16,16,16,16,16,16,16,16,16,32,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,196,17,16,16,16,196,16,33,16,16,16,16,16,16,16,16,16,16,16,32,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,196,32,16,16,16,196,16,16,16,16,16,32,16,16,16,16,32,16,16,16,32,16,16,16,16,16,16,16,16,32,16,16,16,16,16,16,16,16,16,16,196,16,16,16,16,196,32,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,32,16,16,16,16,16,16,16,33,16,16,16,16,16,32,16,196,16,33,32,16,196,16,16,16,16,32,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,33,16,16,16,16,16,16,16,16,16,16,16,16,16,196,32,16,16,16,196,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,32,16,16,16,16,16,196,16,16,16,16,193,183,16,16,48,48,48,48,48,16,16,16,16,16,32,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,196,32,16,32,16,33,196,48,48,48,48,48,48,48,48,16,16,16,16,16,16,16,16,32,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,196,16,16,16,16,16,193,183,48,48,48,48,48,48,48,48,16,16,32,16,16,16,16,16,16,16,16,33,16,16,16,16,16,16,16,16,16,16,16,16,196,16,16,16,32,16,16,196,48,48,48,48,48,48,48,48,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,32,16,196,16,16,16,16,16,16,193,183,48,48,48,48,48,48,48,48,48,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,181,195,16,16,16,16,16,16,16,193,183,48,48,48,48,48,48,48,48,48,48,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,196,16,16,16,16,16,16,16,16,16,193,178,178,183,48,48,48,48,48,48,48,48,16,16,16,16,16,32,16,16,16,16,32,16,16,16,16,16,16,181,195,16,16,16,32,16,16,33,16,32,16,16,16,193,178,178,178,178,178,178,178,178,183,16,32,16,16,16,16,16,33,16,16,16,16,16,16,181,178,195,32,16,16,16,16,16,16,16,16,16,16,32,16,16,16,16,16,16,16,33,32,17,193,178,178,178,178,178,178,178,178,178,178,178,178,178,178,195,16,16,16,16,16,48,16,16,32,16,16,16,16,16,16,16,16,16,16,32,16,16,16,16,32,16,16,32,16,16,16,32,16,16,16,33,16,16,32,16,16,16,16,16,48,48], + [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,87,-1,104,108,108,108,105,-1,-1,-1,-1,-1,80,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,98,105,-1,-1,-1,26,-1,26,80,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,27,-1,-1,-1,80,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,80,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,80,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,266,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,80,-1,266,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,26,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,26,-1,-1,80,108,108,108,97,-1,-1,-1,-1,266,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,49,51,-1,-1,-1,-1,52,50,-1,-1,-1,-1,-1,-1,-1,-1,46,46,46,102,-1,-1,27,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,49,51,-1,-1,-1,-1,-1,-1,27,-1,52,50,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,51,-1,-1,26,-1,-1,-1,-1,-1,-1,27,52,50,-1,-1,-1,-1,-1,-1,-1,-1,-1,266,-1,-1,-1,-1,-1,-1,-1,-1,80,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,278,-1,-1,-1,-1,52,-1,-1,-1,26,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,26,-1,-1,-1,-1,67,-1,-1,27,279,-1,-1,294,-1,-1,-1,-1,-1,-1,-1,-1,-1,83,-1,-1,-1,46,46,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,65,67,-1,-1,-1,-1,-1,-1,26,-1,-1,266,68,-1,-1,-1,-1,86,-1,-1,-1,-1,-1,29,-1,-1,-1,-1,-1,-1,26,-1,-1,-1,-1,-1,-1,-1,-1,27,-1,65,67,-1,-1,-1,-1,-1,-1,-1,-1,68,66,-1,-1,-1,-1,86,-1,-1,-1,-1,-1,29,-1,27,-1,80,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,65,67,-1,-1,-1,-1,-1,68,66,-1,-1,26,-1,-1,86,-1,-1,-1,-1,-1,29,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,86,14,14,-1,14,14,-1,80,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,86,-1,282,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,80,-1,-1,-1,-1,104,-1,282,-1,-1,-1,259,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,26,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,26,-1,80,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,80,-1,281,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,49,51,-1,-1,-1,-1,-1,52,-1,-1,-1,-1,-1,-1,-1,80,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,80,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,52,-1,-1,-1,-1,-1,-1,-1,-1,-1,278,-1,-1,278,-1,-1,266,27,-1,278,-1,-1,-1,-1,26,-1,-1,-1,-1,-1,-1,-1,-1,26,-1,-1,-1,-1,-1,27,-1,50,-1,-1,-1,-1,-1,-1,-1,-1,294,-1,-1,294,-1,27,279,-1,-1,294,-1,-1,26,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,52,50,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,278,-1,-1,-1,-1,266,-1,-1,-1,-1,-1,-1,-1,-1,52,50,-1,-1,-1,-1,-1,-1,-1,-1,278,-1,-1,278,-1,-1,278,-1,-1,80,-1,-1,-1,-1,26,-1,294,-1,-1,-1,-1,-1,27,-1,-1,-1,-1,-1,-1,-1,-1,266,52,-1,-1,-1,27,279,-1,-1,294,-1,-1,294,-1,-1,294,-1,266,-1,-1,-1,26,-1,-1,-1,-1,-1,260,-1,-1,-1,-1,-1,-1,27,-1,-1,-1,26,-1,-1,-1,50,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,27,-1,-1,27,-1,49,-1,278,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,266,-1,-1,-1,-1,-1,-1,-1,27,-1,-1,-1,-1,-1,49,51,-1,294,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,27,-1,49,51,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,49,51,27,-1], + [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,-1,-1,-1,-1,-1,-1,-1,-1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,-1,-1,-1,-1,-1,-1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,-1,-1,-1,-1,-1,-1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,0,0,-1,-1,-1,-1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,-1,0,1,1,0,1,1,1,1,1,1,1,0,-1,-1,-1,-1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,-1,-1,-1,-1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,-1,-1,-1,-1,0,0,0,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,-1,-1,-1,-1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,-1,-1,-1,-1,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,-1,-1,-1,-1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,-1,-1,-1,-1,0,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,-1,-1,-1,-1,0,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,-1,-1,-1,-1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,-1,-1,-1,-1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,0,-1,-1,-1,-1,-1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,1,1,1,1,1,0,-1,-1,-1,-1,-1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,0,1,1,1,1,1,0,-1,-1,-1,-1,-1,-1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,-1,-1,-1,-1,-1,-1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,0,1,0,0,-1,-1,-1,-1,-1,-1,-1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,0,1,1,0,1,1,1,1,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1] + ] +} \ No newline at end of file diff --git a/examples/variable_screen_size/assets/db16.pal b/examples/variable_screen_size/assets/db16.pal new file mode 100644 index 0000000000000000000000000000000000000000..869edaafb7a8f927e9b62f09faca07d455db41fe GIT binary patch literal 768 zcmZQ&W*6k-<>8eU77|tz=HZp(G!Yb%m5~sWH#U*yR#erH*5WqNQj<0?GBXu7w>GtB NupdREAuw!0008_`dx!u4 literal 0 HcmV?d00001 diff --git a/examples/variable_screen_size/assets/dp.fnt b/examples/variable_screen_size/assets/dp.fnt new file mode 100644 index 0000000000000000000000000000000000000000..038ecc6d0b241b9da97978e6270f53c837db2654 GIT binary patch literal 2305 zcmeHGy=vqz5FWBWb|I3KhJ>r~0D@~=hy?N&sRRqY#zm@NIGuO%82bSC7y-e8Dv>fQ zWLaEgyWlFgFmk?;lWVWM;xb-)G@5U|8GZH=jaJ|PzJFNX*Y)r`Yz{+Rh7e4CN~gJr zJ~ugUnA35?5M@ebM8j~{06&l_uCEJ4!)E>Pu-*(O$;mJ8eWi+`P+6T_eZP|Owr!S+ zvj-jW1C?>%+i^N$RUWv$^D)}g=cEan=$jrpB7ge1y5wLCuN|Ar}f zPUpAn);nSru5+*9$vH>vyn#i2=5h%72$G=7O0+D8GXVOb*Hu>hzW@yy5PALGtOJ`fV^8s_2t`0z;U z9_0!#;BgKv;}44kV7@58n8!SL$q=BYb154s&xyJC<^WrCw*!=og>d}G__8krz7+Uh z6-fVLv&lS7(sVkTrO7mzr0Fb4(u8d?ohS2;HNsiSxR}9%gBh-L`nfZiC(}Ra5jlbT G=k^Y8n7@Mn literal 0 HcmV?d00001 diff --git a/examples/variable_screen_size/assets/tiles.pcx b/examples/variable_screen_size/assets/tiles.pcx new file mode 100644 index 0000000000000000000000000000000000000000..1801a1117f92626ef640f44793be67162231e879 GIT binary patch literal 33941 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 Result { + Palette::load_from_file(path, PaletteFormat::Vga).context(format!("Loading palette: {:?}", path)) +} + +fn load_font(path: &std::path::Path) -> Result { + BitmaskFont::load_from_file(path).context(format!("Loading font: {:?}", path)) +} + +fn load_bitmap_atlas_autogrid(path: &std::path::Path) -> Result> { + let (bmp, _) = IndexedBitmap::load_file(path).context(format!("Loading bitmap atlas: {:?}", path))?; + let mut atlas = BitmapAtlas::new(bmp); + atlas.add_grid(TILE_WIDTH, TILE_HEIGHT)?; + Ok(atlas) +} + +#[derive(Debug, Deserialize)] +struct TileMap { + width: u32, + height: u32, + layers: Vec>, +} + +impl TileMap { + pub fn load_from(path: &std::path::Path) -> Result { + let f = std::fs::File::open(path)?; + let reader = std::io::BufReader::new(f); + serde_json::from_reader(reader).context(format!("Loading json tilemap: {:?}", path)) + } + + #[inline] + pub fn index_to(&self, x: i32, y: i32) -> Option { + if x >= 0 && y >= 0 && x < self.width as i32 && y < self.height as i32 { + Some(((y * self.width as i32) + x) as usize) + } else { + None + } + } + + pub fn draw(&self, dest: &mut IndexedBitmap, tiles: &BitmapAtlas, camera_x: i32, camera_y: i32) { + let xt = camera_x / TILE_WIDTH as i32; + let yt = camera_y / TILE_HEIGHT as i32; + let xp = camera_x % TILE_WIDTH as i32; + let yp = camera_y % TILE_HEIGHT as i32; + + let tiles_y = (dest.height() as f32 / TILE_HEIGHT as f32).ceil() as i32 + 1; + let tiles_x = (dest.width() as f32 / TILE_WIDTH as f32).ceil() as i32 + 1; + + for y in 0..tiles_y { + for x in 0..tiles_x { + if let Some(index) = self.index_to(x + xt, y + yt) { + let xd = (x * TILE_WIDTH as i32) - xp; + let yd = (y * TILE_HEIGHT as i32) - yp; + + let lower = self.layers[0][index]; + if lower >= 0 { + dest.blit_region(IndexedBlitMethod::Solid, tiles.bitmap(), &tiles[lower as usize], xd, yd); + } + let upper = self.layers[1][index]; + if upper >= 0 { + dest.blit_region( + IndexedBlitMethod::Transparent(0), + tiles.bitmap(), + &tiles[upper as usize], + xd, + yd, + ); + } + } + } + } + } +} + +fn main() -> Result<()> { + let config = DosLikeConfig::variable_screen_size(320, 240).scale_factor(3); + let mut system = SystemBuilder::new() // + .window_title("Variable Screen Size") + .vsync(true) + .build(config)?; + + let palette = load_palette(std::path::Path::new("./assets/db16.pal"))?; + let font = load_font(std::path::Path::new("./assets/dp.fnt"))?; + let tiles = load_bitmap_atlas_autogrid(std::path::Path::new("./assets/tiles.pcx"))?; + let tilemap = TileMap::load_from(std::path::Path::new("./assets/arena.map.json"))?; + + system.res.palette = palette; + system.res.cursor.enable_cursor(true); + + let mut camera_x = 0; + let mut camera_y = 0; + + while !system.do_events()? { + if system.res.keyboard.is_key_pressed(Scancode::Escape) { + break; + } + if system.res.mouse.is_button_down(1) { + camera_x -= system.res.mouse.x_delta() * 2; + camera_y -= system.res.mouse.y_delta() * 2; + } + + system.update()?; + + system.res.video.clear(0); + tilemap.draw(&mut system.res.video, &tiles, camera_x, camera_y); + + system.res.video.print_string( + &format!( + "Camera: {}, {}\nDisplay Size: {}, {}", + camera_x, + camera_y, + system.res.video.width(), + system.res.video.height() + ), + 10, + 10, + FontRenderOpts::Color(15), + &font, + ); + system.res.video.print_string( + "Click-and-drag to scroll", + 10, + system.res.video.height() as i32 - 20, + FontRenderOpts::Color(15), + &font, + ); + + system.display()?; + } + + Ok(()) +}