From 2a43c01f4c0b0e96ba9e8d37a620068e4eb5fe3c Mon Sep 17 00:00:00 2001 From: xolatile Date: Fri, 16 Feb 2024 05:52:11 -0500 Subject: [PATCH] Core system and file path changes... --- .gitignore | 2 ++ source/core.adb | 44 ++++++++++++++++++++++-------------------- source/core.ads | 3 +++ source/item.adb | 13 ++++++------- source/item.ads | 8 ++++---- source/magic.adb | 6 ++---- source/main.adb | 58 ++++++-------------------------------------------------- source/makefile | 4 ++-- source/might.adb | 6 ++---- 9 files changed, 50 insertions(+), 94 deletions(-) diff --git a/.gitignore b/.gitignore index dcf1f98..5cf53d2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ source/*.o source/*.ali +xhads +sprite/* diff --git a/source/core.adb b/source/core.adb index 466f252..5608421 100644 --- a/source/core.adb +++ b/source/core.adb @@ -6,6 +6,29 @@ package body core is ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + procedure configure is + begin + engine_configure; + -- + hexagon_grid_sprite := load_sprite ("sprite/menu/hexagon_grid_tile.png", 1, 1); + hexagon_fill_sprite := load_sprite ("sprite/menu/hexagon_fill_tile.png", 1, 1); + end configure; + + ------------------------------------------------------------------------------------------ + + procedure synchronize is + begin + global_time := global_time + 1; + -- + global_time := global_time mod (gameplay_framerate * animation_framerate); + gameplay_time := global_time mod (gameplay_framerate); + animation_time := global_time / (gameplay_framerate / animation_framerate); + -- + engine_synchronize; + end synchronize; + + ------------------------------------------------------------------------------------------ + function flip_coin return integer is begin return (random_integer (0, 1)); @@ -87,44 +110,23 @@ package body core is crop_width : constant integer := width mod hexagon_grid_sprite.width; crop_height : constant integer := height mod hexagon_grid_sprite.height; use_sprite : constant sprite := (if fill then hexagon_fill_sprite else hexagon_grid_sprite); - --~u, v : integer; begin for move_y in 0 .. height / hexagon_grid_sprite.height - 1 loop for move_x in 0 .. width / hexagon_grid_sprite.width - 1 loop - --~u := hexagon_grid_sprite.width * codex'pos (map.terrain) * 4; - --~v := hexagon_grid_sprite.height * map.block (move_x, move_y); - -- draw (use_sprite, x + move_x * hexagon_grid_sprite.width, y + move_y * hexagon_grid_sprite.height); end loop; -- - --~u := 0; - --~v := hexagon_grid_sprite.height * map.block (width / hexagon_grid_sprite.width, move_y); - -- crop (use_sprite, x + width - crop_width, y + move_y * hexagon_grid_sprite.height, 0, 0, crop_width, hexagon_grid_sprite.height); end loop; -- for move_x in 0 .. width / hexagon_grid_sprite.width - 1 loop - --~u := 0; - --~v := hexagon_grid_sprite.height * map.block (move_x, height / hexagon_grid_sprite.height); - -- crop (use_sprite, x + move_x * hexagon_grid_sprite.width, y + height - crop_height, 0, 0, hexagon_grid_sprite.width, crop_height); end loop; -- - --~u := 0; - --~v := hexagon_grid_sprite.height * map.block (width / hexagon_grid_sprite.width, height / hexagon_grid_sprite.height); - -- crop (use_sprite, x + width - crop_width, y + height - crop_height, 0, 0, crop_width, crop_height); - --~begin - --~for y in 0 .. window_height / 48 - --~loop - --~for x in 0 .. window_width / 32 - --~loop - --~draw ((if fill then hexagon_fill_sprite else hexagon_grid_sprite), x * hexagon_grid_sprite.width, y * hexagon_grid_sprite.height); - --~end loop; - --~end loop; end hexagonal_grid; ------------------------------------------------------------------------------------------ diff --git a/source/core.ads b/source/core.ads index a8ea816..947fe4f 100644 --- a/source/core.ads +++ b/source/core.ads @@ -84,6 +84,9 @@ package core is ------------------------------------------------------------------------------------------ + procedure configure; + procedure synchronize; + function flip_coin return integer; function roll_dice return integer; function by_chance (chance : in integer) return integer; diff --git a/source/item.adb b/source/item.adb index 8ce7783..42052c4 100644 --- a/source/item.adb +++ b/source/item.adb @@ -18,13 +18,12 @@ package body item is begin for index in codex loop - --~declare - --~folder : constant string := core.lowercase (school'image (trait (index).kind)); - --~file : constant string := core.lowercase (codex'image (index)); - --~begin - --~icon (index) := core.load_sprite ("sprite/ui/item/" & folder & "/" & file & ".png", 1, 1); - --~end; - sprite (index) := core.load_sprite ("sprite/item/" & core.lowercase (codex'image (index)) & ".png", 1, 1); + declare + folder : constant string := core.lowercase (slot'image (trait (index).kind)); + file : constant string := core.lowercase (codex'image (index)); + begin + sprite (index) := core.load_sprite ("sprite/item/" & folder & "/" & file & ".png", 1, 1); + end; end loop; end configure; diff --git a/source/item.ads b/source/item.ads index d9e8d0a..380aa4d 100644 --- a/source/item.ads +++ b/source/item.ads @@ -176,10 +176,10 @@ package item is ("Titan's Cuirass ", chest, 3, effect.none), ("Titan's Gladius ", main_hand, 3, effect.none), ("Titan's Thunder ", main_hand, 3, effect.none), - ("Tome of Air ", bag, 3, effect.none), - ("Tome of Earth ", bag, 3, effect.none), - ("Tome of Fire ", bag, 3, effect.none), - ("Tome of Water ", bag, 3, effect.none), + ("Tome of Air ", off_hand, 3, effect.none), + ("Tome of Earth ", off_hand, 3, effect.none), + ("Tome of Fire ", off_hand, 3, effect.none), + ("Tome of Water ", off_hand, 3, effect.none), ("Torso of Legion ", bag, 3, effect.none), ("Cyclop's Tunic ", chest, 3, effect.none), ("Vampire's Cowl ", full_body, 3, effect.none), diff --git a/source/magic.adb b/source/magic.adb index 2b8ae1a..cfde1ed 100644 --- a/source/magic.adb +++ b/source/magic.adb @@ -1,4 +1,4 @@ -with core, ui, menu, effect, magic; +with core, effect, magic; use magic; @@ -30,10 +30,8 @@ package body magic is ------------------------------------------------------------------------------------------ procedure draw (index : in codex; x, y : in integer) is - offset : constant integer := 16; begin - ui.draw_frame (x, y, icon (index).width + offset, icon (index).height + offset); - core.draw (icon (index), x + offset / 2, y + offset / 2); + core.draw (icon (index), x, y); end draw; ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ diff --git a/source/main.adb b/source/main.adb index 78ef2ae..e13e41c 100644 --- a/source/main.adb +++ b/source/main.adb @@ -21,17 +21,7 @@ procedure main is begin - core.engine_configure; - - core.hexagon_grid_sprite := core.load_sprite ("sprite/menu/hexagon_grid_tile.png", 1, 1); - core.hexagon_fill_sprite := core.load_sprite ("sprite/menu/hexagon_fill_tile.png", 1, 1); - - --~attribute.sprite := core.load_sprite ("sprite/ui/attribute.png", 1, 1); - --~skill.sprite := core.load_sprite ("sprite/ui/skill.png", 1, 1); - --~resource.sprite := core.load_sprite ("sprite/ui/resource.png", 1, 1); - --~magic.sprite := core.load_sprite ("sprite/ui/magic.png", 1, 1); - --~item.sprite := core.load_sprite ("sprite/ui/item.png", 1, 1); - + core.configure; ui.configure; might.configure; magic.configure; @@ -47,29 +37,20 @@ begin gameplay: loop exit when core.engine_active = false; -- - core.global_time := core.global_time + 1; - -- - core.global_time := core.global_time mod (core.gameplay_framerate * core.animation_framerate); - core.gameplay_time := core.global_time mod (core.gameplay_framerate); - core.animation_time := core.global_time / (core.gameplay_framerate / core.animation_framerate); - -- - delay duration (1.0 / 60.0); - -- - core.engine_synchronize; + core.synchronize; -- --~if core.cursor_mode = 1 then --~world_active := world.codex'val ((world.codex'pos (world_active) + 1) mod 6); --~delay duration (0.333); --~end if; - --~world.render (world_active, 0, 0); -- world.draw (24, 24, core.window_width - 480 - 48, core.window_height - 48, core.cursor_mode = 2); -- - ui.active := ui.steam; if core.signal_mode = core.signal_code'pos (core.signal_left) then core.camera.x := core.camera.x - 1; end if; if core.signal_mode = core.signal_code'pos (core.signal_right) then core.camera.x := core.camera.x + 1; end if; if core.signal_mode = core.signal_code'pos (core.signal_up) then core.camera.y := core.camera.y - 1; end if; if core.signal_mode = core.signal_code'pos (core.signal_down) then core.camera.y := core.camera.y + 1; end if; + ui.active := ui.steam; if core.cursor_mode = 3 then --~ui.active := ui.style'val (ui.style'pos (ui.active) mod 4); --~case ui.active is @@ -86,17 +67,6 @@ begin --~might.draw (this, 112 * (might.codex'pos (this) / 7) + 64, 112 * (might.codex'pos (this) mod 7) + 64); --~end loop; -- - --~unit.render (unit.angel, unit.attack, 300, 300); - --~unit.render (unit.arch_angel, unit.moving, 600, 300); - -- - --~for this in unit.goblin .. unit.ancient_behemoth - --~loop - --~for anim in unit.animation - --~loop - --~unit.draw (this, anim, 80 * (unit.codex'pos (this) mod 14) + 40, 64 * unit.animation'pos (anim) + 40); - --~end loop; - --~end loop; - -- --~for this in unit.pikeman .. unit.ghost_dragon --~loop --~unit.render (this, unit.idle, 96 * (unit.codex'pos (this) / 7) + 32, 96 * (unit.codex'pos (this) mod 7) + 32); @@ -107,17 +77,6 @@ begin --~construction.draw (this, 128 * (construction.codex'pos (this) mod 12) + 32, 128 * (construction.codex'pos (this) / 12) + 32); --~end loop; -- - --~attribute.render (attribute.defense, 0, 100); - --~skill.render (skill.archery, 1, 100, 100); - --~skill.render (skill.tactics, 2, 200, 100); - --~skill.render (skill.fire_magic, 3, 300, 100); - --~resource.render (resource.mercury, 400, 100); - -- - --~core.animate_sprite (test, 700, 100, (64, 64, 0, 0), 10); - -- - --~menu.render (menu.attribute_list, 1200, 400, 0, 0); - --~menu.render (menu.skill_list, 400, 400, 0, 0); - -- ui.draw_menu (0, 0, core.window_width - 480, core.window_height, false); ui.draw_tiny_menu (core.window_width - 480, 0, 480, core.window_height, true); -- @@ -137,14 +96,9 @@ begin core.render_string (core.c_string ("M :" & core.signal_code'image (core.signal_code'val (core.signal_mode))), 1352, 128, 16#CCCCCC#, false); core.render_string (core.c_string ("U :" & integer'image (core.camera.x)), 1352, 160, 16#CCCCCC#, false); core.render_string (core.c_string ("V :" & integer'image (core.camera.y)), 1352, 192, 16#CCCCCC#, false); - -- - --~ui.draw_tiny_menu (400, 400, 400, 400, true); - --~menu.draw_menu (200, 100, 400, 200, true); - --~menu.draw_tiny_menu (800, 200, 400, 200, true); - -- - --~menu.draw_background (menu.main_background, 96, 96, 288, 128); - --~menu.draw_background (menu.main_background, 96, 300, 200, 100); - --~menu.draw_background (menu.main_background, 96, 450, 96, 96); + core.render_string (core.c_string ("t :" & integer'image (core.global_time)), 1352, 224, 16#CCCCCC#, false); + core.render_string (core.c_string ("g :" & integer'image (core.gameplay_time)), 1352, 256, 16#CCCCCC#, false); + core.render_string (core.c_string ("a :" & integer'image (core.animation_time)), 1352, 288, 16#CCCCCC#, false); end loop gameplay; end main; diff --git a/source/makefile b/source/makefile index 30cd196..f469a4a 100644 --- a/source/makefile +++ b/source/makefile @@ -7,8 +7,8 @@ default: gnatmake -O3 -fstack-check -c main.adb gnatbind main.ali gcc -g -ansi -Wall -Wextra -Wpedantic -Ofast -fstack-check -c -fPIC -o raylib.o raylib.c - gnatlink main.ali system.o raylib.o ai.o -o mam_raylib -lraylib -lc -lgfortran - mv mam_raylib ../mam_raylib + gnatlink main.ali system.o raylib.o ai.o -o xhads -lraylib -lc -lgfortran + mv xhads ../xhads # #~ gnatmake -O3 -fstack-check -c main.adb #~ gnatbind main.ali diff --git a/source/might.adb b/source/might.adb index 65ba164..ee50378 100644 --- a/source/might.adb +++ b/source/might.adb @@ -1,4 +1,4 @@ -with core, ui, menu, effect, might; +with core, effect, might; use might; @@ -30,10 +30,8 @@ package body might is ------------------------------------------------------------------------------------------ procedure draw (value : in codex; x, y : in integer) is - offset : constant integer := 16; begin - ui.draw_frame (x, y, icon (value).width + offset, icon (value).height + offset); - core.draw (icon (value), x + offset / 2, y + offset / 2); + core.draw (icon (value), x, y); end draw; ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------