From 6e85588237d0f6e3d808b436ec549ca45aa0807e Mon Sep 17 00:00:00 2001 From: xolatile Date: Thu, 16 May 2024 12:35:36 -0400 Subject: [PATCH] Added chads and more chad information, also refactored UI... --- source/chad.adb | 16 +++++++++++-- source/chad.ads | 4 ++++ source/core.adb | 52 +++++++++++++++++++++++++++++++++++++----- source/core.ads | 13 +++++++++-- source/magic.adb | 2 +- source/main.adb | 34 +++++++++++++++++++++++---- source/ui.adb | 15 +++--------- source/world.adb | 16 ++++++------- sprite/chad/ada.png | Bin 0 -> 1115 bytes sprite/chad/gentle_flower.png | Bin 0 -> 991 bytes sprite/chad/horned_maiden.png | Bin 0 -> 1056 bytes sprite/chad/silent_autumn.png | Bin 0 -> 1041 bytes sprite/chad/view/ada.png | Bin 0 -> 1323 bytes 13 files changed, 117 insertions(+), 35 deletions(-) create mode 100644 sprite/chad/ada.png create mode 100644 sprite/chad/gentle_flower.png create mode 100644 sprite/chad/horned_maiden.png create mode 100644 sprite/chad/silent_autumn.png create mode 100644 sprite/chad/view/ada.png diff --git a/source/chad.adb b/source/chad.adb index f6882ce..359d770 100644 --- a/source/chad.adb +++ b/source/chad.adb @@ -8,7 +8,11 @@ package body chad is ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ - sprite : array (enumeration) of core.sprite; + view_width : constant integer := 64; + view_height : constant integer := 96; + + sprite : array (enumeration) of core.sprite; + view_sprite : array (enumeration) of core.sprite; pepe_the_frog : core.sprite; alice_the_mad : core.sprite; @@ -23,7 +27,8 @@ package body chad is alice_the_mad := core.import_sprite ("./sprite/unit/alice_the_mad.png", 4, 6); -- for index in enumeration loop - --~sprite (index) := core.import_sprite ("./sprite/chad/" & core.lowercase (enumeration'image (index)) & ".png", 4, 6); + sprite (index) := core.import_sprite ("./sprite/chad/" & core.lowercase (enumeration'image (index)) & ".png", 4, 6); + view_sprite (index) := core.import_sprite ("./sprite/chad/view/" & core.lowercase (enumeration'image (index)) & ".png", 1, 1); null; end loop; end configure; @@ -37,6 +42,13 @@ package body chad is ------------------------------------------------------------------------------------------ + procedure view (index : in enumeration; x, y : in integer) is + begin + ui.draw_sprite (view_sprite (index), trait (index).name, x, y, 0); + end view; + + ------------------------------------------------------------------------------------------ + procedure draw_data (player : in data; x, y : in integer) is begin attribute.draw_points (player.attributes, x, y, true); diff --git a/source/chad.ads b/source/chad.ads index 6a57bae..d4ed16b 100644 --- a/source/chad.ads +++ b/source/chad.ads @@ -24,6 +24,9 @@ package chad is type data is record index : enumeration; + health : core.point; + mana : core.point; + stamina : core.point; attributes : attribute.points; skills : skill.points; resources : resource.points; @@ -47,6 +50,7 @@ package chad is procedure configure; procedure draw (index : in enumeration; x, y : in integer); + procedure view (index : in enumeration; x, y : in integer); procedure draw_data (player : in data; x, y : in integer); procedure draw_pepe; diff --git a/source/core.adb b/source/core.adb index 110976f..5c2f54d 100644 --- a/source/core.adb +++ b/source/core.adb @@ -46,6 +46,46 @@ package body core is ------------------------------------------------------------------------------------------ + function "+" (data : in point; modifier : in natural) return point is + this : point := data; + begin + this.value := (if (data.value + modifier) > data.limit then data.limit else (data.value + modifier)); + -- + return this; + end "+"; + + ------------------------------------------------------------------------------------------ + + function "-" (data : in point; modifier : in natural) return point is + this : point := data; + begin + this.value := (if (data.value - modifier) <= 0 then 0 else (data.value - modifier)); + -- + return this; + end "-"; + + ------------------------------------------------------------------------------------------ + + function "*" (data : in point; modifier : in natural) return point is + this : point := data; + begin + this.value := (if (data.value * modifier) > data.limit then data.limit else (data.value * modifier)); + -- + return this; + end "*"; + + ------------------------------------------------------------------------------------------ + + function "/" (data : in point; modifier : in natural) return point is + this : point := data; + begin + this.value := (if (data.value / modifier) <= 0 then 0 else (data.value / modifier)); + -- + return this; + end "/"; + + ------------------------------------------------------------------------------------------ + procedure echo (status : in echo_status; text : in string) is begin @@ -265,27 +305,27 @@ package body core is ------------------------------------------------------------------------------------------ - procedure draw_horizontally (data : in sprite; x, y, width : in integer) is + procedure draw_horizontally (data : in sprite; x, y, width, factor : in integer) is begin for move in 0 .. width / data.width - 1 loop - draw (data, x + move * data.width, y); + draw (data, x + move * data.width, y, factor => 1); end loop; -- if width mod data.width > 0 then - draw (data, x + (width / data.width) * data.width, y, 0, 0, width mod data.width, data.height); + draw (data, x + (width / data.width) * data.width, y, 0, 0, width mod data.width, data.height, factor => 1); end if; end draw_horizontally; ------------------------------------------------------------------------------------------ - procedure draw_vertically (data : in sprite; x, y, height : in integer) is + procedure draw_vertically (data : in sprite; x, y, height, factor : in integer) is begin for move in 0 .. height / data.height - 1 loop - draw (data, x, y + move * data.height); + draw (data, x, y + move * data.height, factor => 1); end loop; -- if height mod data.height > 0 then - draw (data, x, y + (height / data.height) * data.height, 0, 0, data.width, height mod data.height); + draw (data, x, y + (height / data.height) * data.height, 0, 0, data.width, height mod data.height, factor => 1); end if; end draw_vertically; diff --git a/source/core.ads b/source/core.ads index 625acf6..08649e5 100644 --- a/source/core.ads +++ b/source/core.ads @@ -44,6 +44,10 @@ package core is type pointer is access procedure; + type point is record + value, limit : natural; + end record; + type vector is record x, y : integer; end record; type sprite is record index, width, height, frames, states : integer; end record; type font is record index, scale, space : integer; end record; @@ -107,6 +111,11 @@ package core is ------------------------------------------------------------------------------------------ + function "+" (data : in point; modifier : in natural) return point; + function "-" (data : in point; modifier : in natural) return point; + function "*" (data : in point; modifier : in natural) return point; + function "/" (data : in point; modifier : in natural) return point; + procedure echo (status : in echo_status; text : in string); procedure dash; @@ -148,8 +157,8 @@ package core is factor : in integer := zoom; tint : in colour := (others => 255)); - procedure draw_horizontally (data : in sprite; x, y, width : in integer); - procedure draw_vertically (data : in sprite; x, y, height : in integer); + procedure draw_horizontally (data : in sprite; x, y, width, factor : in integer); + procedure draw_vertically (data : in sprite; x, y, height, factor : in integer); procedure write (text : in string := ""; x : in integer := 0; diff --git a/source/magic.adb b/source/magic.adb index 81febdf..d1c39b2 100644 --- a/source/magic.adb +++ b/source/magic.adb @@ -32,7 +32,7 @@ package body magic is procedure view (index : in enumeration; x, y : in integer) is begin - ui.draw_sprite (view_sprite (index), trait (index).text, x, y, 8); + ui.draw_sprite (view_sprite (index), trait (index).text, x, y, 0); end view; ------------------------------------------------------------------------------------------ diff --git a/source/main.adb b/source/main.adb index 42d94ee..a460ed3 100644 --- a/source/main.adb +++ b/source/main.adb @@ -22,7 +22,10 @@ procedure main is text_box_height : integer := 0; player : chad.data := ( - index => chad.ognjen, + index => chad.ada, + health => (30, 40), + mana => (20, 30), + stamina => (10, 20), attributes => (1, 2, 3, 4, 5, 6), skills => (1, 2, 3, 4, 5, 6, 7, 8, 9, others => 0), resources => (101, 103, 107, 109, 113, 127) @@ -283,8 +286,31 @@ begin end if; -- if view_list (status_preview_panel) then - ui.draw_tiny_menu (preview_width, 0, side_panel, preview_height); - chad.draw_data (player, preview_width + 32, 32); + ui.draw_tiny_menu (preview_width, 0, side_panel, preview_height); + chad.draw_data (player, preview_width + 32, 128); + chad.view (chad.ada, preview_width + 32, 32); + ui.draw_tiny_fill_bar (preview_width + 32 + 64, 32 + 32, 128, float (player.health.value) / float (player.health.limit)); + ui.draw_tiny_fill_bar (preview_width + 32 + 64, 32 + 64, 128, float (player.mana.value) / float (player.mana.limit)); + ui.draw_tiny_fill_bar (preview_width + 32 + 64, 32 + 96, 128, float (player.stamina.value) / float (player.stamina.limit)); + -- + ui.write (text => "Health " & player.health.value'image & " /" & player.health.limit'image, + x => preview_width + 32 + 64 + 128 + 2, + y => 32 + 8, + tint => (255, 0, 0, 255), + size => 15, + code => true); + ui.write (text => "Mana " & player.mana.value'image & " /" & player.mana.limit'image, + x => preview_width + 32 + 64 + 128 + 2, + y => 64 + 8, + tint => (0, 0, 255, 255), + size => 15, + code => true); + ui.write (text => "Stamina" & player.stamina.value'image & " /" & player.stamina.limit'image, + x => preview_width + 32 + 64 + 128 + 2, + y => 96 + 8, + tint => (0, 255, 0, 255), + size => 15, + code => true); --~ui.draw_state_box (preview_width + 32, 32); end if; -- @@ -305,7 +331,7 @@ begin -- signal_list (signal_mode).all; -- - --~magic.menu (0, 0, true); + magic.menu (0, 0, true); --~might.menu (0, 0, true); -- chad.draw_alice; diff --git a/source/ui.adb b/source/ui.adb index 0c98e26..d771e35 100644 --- a/source/ui.adb +++ b/source/ui.adb @@ -83,21 +83,15 @@ package body ui is y : in integer := 0; width : in integer := 0; height : in integer := 0) is - save_zoom : natural := core.zoom; begin - core.zoom := 1; - core.draw (sprite (active, index), x, y, 0, 0, width, height); - core.zoom := save_zoom; + core.draw (sprite (active, index), x, y, 0, 0, width, height, factor => 1); end draw; ------------------------------------------------------------------------------------------ procedure draw_horizontally (index : in element; x, y, width : in integer; action : core.pointer := core.idle_skip'access) is - save_zoom : natural := core.zoom; begin - core.zoom := 1; - core.draw_horizontally (sprite (active, index), x, y, width); - core.zoom := save_zoom; + core.draw_horizontally (sprite (active, index), x, y, width, factor => 1); -- --~if core.cursor_mode = 1 and cursor_inside (x, y, width / core.zoom, sprite (active, index).height / core.zoom) then --~action.all; @@ -108,11 +102,8 @@ package body ui is ------------------------------------------------------------------------------------------ procedure draw_vertically (index : in element; x, y, height : in integer; action : core.pointer := core.idle_skip'access) is - save_zoom : natural := core.zoom; begin - core.zoom := 1; - core.draw_vertically (sprite (active, index), x, y, height); - core.zoom := save_zoom; + core.draw_vertically (sprite (active, index), x, y, height, factor => 1); -- --~if core.cursor_mode = 1 and cursor_inside (x, y, sprite (active, index).width / core.zoom, height / core.zoom) then --~action.all; diff --git a/source/world.adb b/source/world.adb index 7f773d7..d36aa36 100644 --- a/source/world.adb +++ b/source/world.adb @@ -157,15 +157,15 @@ package body world is width : integer := core.base * core.zoom * (map.width + 2); height : integer := core.base * core.zoom * (map.height + 2); begin - core.draw_horizontally (border_upper, x + core.base, y, width - 2 * core.base); - core.draw_horizontally (border_lower, x + core.base, y + height - core.base, width - 2 * core.base); - core.draw_vertically (border_left, x, y + core.base, height - 2 * core.base); - core.draw_vertically (border_right, x + width - core.base, y + core.base, height - 2 * core.base); + core.draw_horizontally (border_upper, x + core.base, y, width - 2 * core.base, core.zoom); + core.draw_horizontally (border_lower, x + core.base, y + height - core.base, width - 2 * core.base, core.zoom); + core.draw_vertically (border_left, x, y + core.base, height - 2 * core.base, core.zoom); + core.draw_vertically (border_right, x + width - core.base, y + core.base, height - 2 * core.base, core.zoom); -- - core.draw (corner_upper_left, x, y); - core.draw (corner_upper_right, x + width - core.base, y); - core.draw (corner_lower_left, x, y + height - core.base); - core.draw (corner_lower_right, x + width - core.base, y + height - core.base); + core.draw (corner_upper_left, x, y, core.zoom); + core.draw (corner_upper_right, x + width - core.base, y, core.zoom); + core.draw (corner_lower_left, x, y + height - core.base, core.zoom); + core.draw (corner_lower_right, x + width - core.base, y + height - core.base, core.zoom); end; -- for vertical in 0 .. map.height - 1 loop diff --git a/sprite/chad/ada.png b/sprite/chad/ada.png new file mode 100644 index 0000000000000000000000000000000000000000..a059b08abb85999c586a9f8a5d8fec666c49e2cd GIT binary patch literal 1115 zcmV-h1f=_kP)iFc5_=9vXO-Knt`$3sM3t_)5?gD1mJuEzklb zxFxVZ02#w11R_Y*$vGYoxfvKIL*@ekqnjqih|p=b=ir~ z^e3A*MNXCr*0Ux()vnR|+SmIq>Ei@w8*M1O8t#^BRGP6-N0)z)BVqb6>3!|b>0kTE zCj0(ekpS%lReJ+kTpum2kIC`{RXc1u^?vugO>5Ho+NXM3AA{bQ1cwmPJvjUVHA-tT z3Q-?ZF9Hfcfs*Mw1pp{;AvdQ_d*f^MOYGMGfC}|w81VY%7#>nb39vbot}g-5PD0k7 z#`7dSXY#GFWZ+QsasNf6n8c*E0`3|<=A@AUxyxZTgs<;z_G zP%j2U*9#But*1lR3l9(;AUr^Lfbf7V>+zCFT3hmf28afmhu{Hg>hO2f^S=8bO?ZIt z0O0|`1B3?%4-g*kwt75+g7U2A?USB^^MI^Bgk}{%O(GMvqcH`HQGM}7Qj;7~W!0moE>R&?0^bmyZ;REv_ctO<` zU3J#p`uF1b@B=r!ul-wZo4!o?Nm-dPwe;ZK8o6~s;i5NrpZYZwO8w+r)$q)a3 zfhG0!+HH>be*qRvW!>_`gL89g7yVoa@2wXeAUr^Lfbalm!UNu1kB8LW&I3YoV!Wgt z-wSH&*}QqcyP*c{M}KV+0s8fI)4_M|6#&(8^*DEvLfzNr^j&u%Kds#_g4p{5{#>&O zP`KQc_4>Ro)NqNQPH*3brRRHXCfHp*OzvkS_cKbeOuskHvl}3)QKCkL-|OS)yrzGR zHz{=6+J@7bVMwESaRm7C0AHx$kHxwiQ9z;W?*(!>1I79rI# zKfT#VnTw#b%P-GuO6_>KJ~rV2Lj)AevgzP6W=9)laM+TtKF^r5yBQCleb7@=v%nq} hM^M(nF-Oq8{sA0)^v0@qyF35@002ovPDHLkV1lAA7zF?T literal 0 HcmV?d00001 diff --git a/sprite/chad/gentle_flower.png b/sprite/chad/gentle_flower.png new file mode 100644 index 0000000000000000000000000000000000000000..d16eca76e81fb91c4d418eb6b39742a7a7bd5102 GIT binary patch literal 991 zcmeAS@N?(olHy`uVBq!ia0vp^4nUm1!3HGP9xZtRq&N#aB8wRq^pruEv0|xx83P0J zL{AsTkcwMx=e(Y{MnRzUwx;q9MS;`3ts>V1Ziw_8jj(F*J^0r!YwHagka&_=jIlt|8wq%@1EQ0vDf-ShwzzLy=*`kBYJTcoA#iTcW)xiI8W^Z)AfziAu-f`7yBY={>ZDLZ)T%f%)U zZnf~>tuN(oHHP(w&phvI`ci)7#zR}|uP(_ix~p;g@4qfNP8$XwRIr}6F82PkW0$wS z?tc98*4GD&OFx#pt@^+Kg$>$|KgP}6vhE3^&y_ESp2nYJ?mO}@{pjbVZylKU8IYib zuH1GP6Om(|=S1y!n^V8LbNTXii5#1Ga?KwrT;!uSKD~BdJ9*!dzuP}GC|+uoKggW) z`s1BnmdbUEKtm3EX1rNtBj3Ox$AAPk=qSV$)Yo6tHvin<>r?;zZ{^Cf7r!$yi`mO> zDDSOJvpKK7CcgCO?)UG13kz2;z@QM2aUl8wgI3S+_?72>{yX42+c5UQdb7*>R^QXC z^u2#VUdG}Ezm^AQ+da?x{mY)d|88|(Rq58z)+PhR%dBs=SWdjZSbyz(&1jGPoL)ii z-!IQAi2L}rQTuC_&wb60Tevqg#QeRzU%w!APrduk?H?QFRR5`n2ZbdVzHF{^xXL!; z{d&#c`K?m=o=ZRehzxjqF60bzk!{8&hFi%l^}E+S-~0aO&Ik|5AM@smP0Ff&+Igg> zVmkZE^Xz{#93I{;uaVPem9mtZGOK&ba@VrzrZ=gZ-+eUPcCOE{S470}a&ytG6;%$J z{2HxVM&WT9Sfb#uGS-I{Yo{|qc1oxWn<*%IZx$ouP&lgYaXkkASaZ2mw zg_FOJXYgC|b$agT-tsU^?!nnty=UGZjkqai5-(@D|MZL%KUrTHb4H5(asLX;u?(KB KelF{r5}E)UZPjZ4 literal 0 HcmV?d00001 diff --git a/sprite/chad/horned_maiden.png b/sprite/chad/horned_maiden.png new file mode 100644 index 0000000000000000000000000000000000000000..efda4ab6cae9e82d8e1ee1f6584aa66b0afbda49 GIT binary patch literal 1056 zcmV+*1mF9KP)f(nuSPF=M=qh?-oZHR(G^Y>bhP9dk~iHhr5C zTSUH3^z53RYmewl>yK@$={o~3Qq&Z9#eN;Foma+mvvou;f}J&eY5iMz{{P^d!!?~Z z;=N=Mq5qtO!vn%PJa9S*q7eXqSL$sTW8m*^T4;yI&#xHkOY4vIzDPFkd#azGdn1KV z>_Ptv5K*!-s!`wZkOCqAV_=YsPhBZUA-APBuJWV$J@u2n*tic`(T6tNyA6Xo;kf-0 zBJg9lk(%`_YsZ^~4(_|Ne&)r{YxEy@Fw2PhB7&ZleFccuAs?fR}XpRQf6JfJk6u3g_P@@WSp z`q+E(e0p5X$1Bq-4^SSUJV1HCrTO?EK+G$700A@u3;CDxfFpVMS^0eFd1z4{pgcf% zfbsz40m=iE2b`9VTOz>1d_FnoxjPRqiIdN*e-Ip44G+M?kn}BhKx#amTR&ywFUkXy z2k88OY`xA8(4ss*d4Tc&4o)+q4@0Q`|;Rad4Tc&09-utn7CeCMJCu*VQlInvfmZ4XpJD%LJRs*8 zzrHV^JV1GX@&M%lTHcrk)KpIA0kt`?+mnw!3u-*G6!UoU-?xi=9soWb(=xDizJG0;O#lrM z0a^?F=a2KqEdffnW6zEtK3imW1eEdsZpR1{6nu0LVltaMjKy5@=!wEypqx8U7muM$ zVtj2fhM+wF0OFPt7oi&dCmPY(G*(+_x&Qz;^;6;ZDE}uT afaV`l{0mvmb5m>p0000HOjV literal 0 HcmV?d00001 diff --git a/sprite/chad/silent_autumn.png b/sprite/chad/silent_autumn.png new file mode 100644 index 0000000000000000000000000000000000000000..d25002a6a58c66fbe7fce15da600f07545d662b4 GIT binary patch literal 1041 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 literal 0 HcmV?d00001