2024-04-25 00:27:13 -04:00
-- Copyright (c) 2024 - Ognjen 'xolatile' Milan Robovic
--
-- GNU General Public Licence (version 3 or later)
2024-03-22 00:37:54 -04:00
pragma ada_2012 ;
2024-02-15 21:03:09 -05:00
2024-05-31 07:14:00 -04:00
with core , ui , effect , attribute , skill , resource , faction , deity , material , magic , equipment , unit , construction , chad , world ;
2024-02-15 21:03:09 -05:00
2024-06-04 07:52:44 -04:00
use type core . cursor_code ;
use type core . signal_code ;
use type core . point ;
2024-05-13 09:20:16 -04:00
2024-02-15 21:03:09 -05:00
procedure main is
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2024-05-04 07:22:16 -04:00
type view is (
2024-06-01 18:59:37 -04:00
map_preview_panel ,
status_preview_panel ,
text_box_panel ,
fullscreen
2024-05-03 06:10:13 -04:00
) ;
------------------------------------------------------------------------------------------
2024-05-25 01:48:03 -04:00
procedure swap_map_preview_panel ;
procedure swap_status_preview_panel ;
procedure swap_text_box_panel ;
2024-06-01 18:59:37 -04:00
procedure swap_fullscreen ;
2024-03-16 08:08:50 -04:00
2024-05-25 01:48:03 -04:00
------------------------------------------------------------------------------------------
2024-05-23 07:30:44 -04:00
2024-06-09 12:57:11 -04:00
signal_list : constant array ( core . signal_code ) of core . pointer := (
2024-05-25 01:48:03 -04:00
core . signal_up => world . player_up ' access ,
core . signal_down => world . player_down ' access ,
core . signal_left => world . player_left ' access ,
core . signal_right => world . player_right ' access ,
2024-06-09 12:57:11 -04:00
core . signal_v => ui . iterate_style ' access ,
core . signal_kp_add => core . zoom_in ' access ,
core . signal_kp_subtract => core . zoom_out ' access ,
2024-05-23 07:30:44 -04:00
core . signal_f1 => world . resource_cheat_1 ' access ,
core . signal_f2 => world . resource_cheat_2 ' access ,
core . signal_f3 => world . resource_cheat_3 ' access ,
core . signal_f4 => world . resource_cheat_4 ' access ,
core . signal_f5 => world . resource_cheat_5 ' access ,
core . signal_f6 => world . resource_cheat_6 ' access ,
core . signal_f7 => world . reveal_map ' access ,
2024-06-01 12:39:44 -04:00
core . signal_f8 => world . restore_points ' access ,
2024-05-23 07:30:44 -04:00
others => core . idle_skip ' access
2024-03-16 06:52:32 -04:00
) ;
2024-03-16 06:14:28 -04:00
2024-05-25 01:48:03 -04:00
view_show : array ( view ) of access procedure := (
swap_map_preview_panel ' access ,
swap_status_preview_panel ' access ,
2024-06-01 18:59:37 -04:00
swap_text_box_panel ' access ,
swap_fullscreen ' access
2024-05-25 01:48:03 -04:00
) ;
2024-05-08 16:17:47 -04:00
2024-06-08 07:11:40 -04:00
view_icon : array ( view , boolean ) of core . sprite := ( others => ( others => ( others => 0 ) ) ) ;
view_list : array ( view ) of boolean := ( fullscreen => false , others => true ) ;
2024-05-25 01:48:03 -04:00
2024-06-04 08:08:01 -04:00
view_text : constant array ( view ) of access string := (
2024-06-05 07:55:45 -04:00
new string ' ( "Toggle map preview panel." ) ,
new string ' ( "Toggle status preview panel." ) ,
new string ' ( "Toggle text box panel." ) ,
new string ' ( "Toggle fullscreen or windowed mode." )
2024-05-25 01:48:03 -04:00
) ;
game_title : core . sprite ;
game_preview : array ( world . biome ) of core . sprite ;
switch : natural := 0 ;
choose : world . biome := world . grass ;
2024-05-09 11:03:39 -04:00
2024-06-04 08:08:01 -04:00
view_source_code : natural := 17 ;
source_code : constant array ( 0 . . 22 ) of access string := (
2024-06-05 07:55:45 -04:00
new string ' ( core . folder & "/source/ai.adb" ) ,
new string ' ( core . folder & "/source/ai.ads" ) ,
new string ' ( core . folder & "/source/attribute.ads" ) ,
new string ' ( core . folder & "/source/chad.ads" ) ,
new string ' ( core . folder & "/source/construction.ads" ) ,
new string ' ( core . folder & "/source/core.adb" ) ,
new string ' ( core . folder & "/source/core.ads" ) ,
new string ' ( core . folder & "/source/deity.ads" ) ,
new string ' ( core . folder & "/source/effect.ads" ) ,
new string ' ( core . folder & "/source/equipment.ads" ) ,
new string ' ( core . folder & "/source/faction.ads" ) ,
new string ' ( core . folder & "/source/magic.ads" ) ,
new string ' ( core . folder & "/source/main.adb" ) ,
new string ' ( core . folder & "/source/material.ads" ) ,
new string ' ( core . folder & "/source/might.ads" ) ,
new string ' ( core . folder & "/source/ray.ads" ) ,
new string ' ( core . folder & "/source/resource.ads" ) ,
new string ' ( core . folder & "/source/skill.ads" ) ,
new string ' ( core . folder & "/source/ui.adb" ) ,
new string ' ( core . folder & "/source/ui.ads" ) ,
new string ' ( core . folder & "/source/unit.ads" ) ,
new string ' ( core . folder & "/source/world.adb" ) ,
new string ' ( core . folder & "/source/world.ads" )
2024-05-13 09:20:16 -04:00
) ;
2024-05-12 20:45:26 -04:00
2024-05-25 01:48:03 -04:00
side_panel : integer := 0 ;
preview_width : integer := 0 ;
preview_height : integer := 0 ;
text_box_height : integer := 0 ;
2024-06-01 11:56:18 -04:00
player : chad . information := (
2024-06-09 11:07:49 -04:00
skills => ( ( skill . archery , 1 , 3 ) , ( skill . athletics , 1 , 3 ) , ( skill . tactics , 1 , 3 ) , others => <> ) ,
2024-06-06 14:52:48 -04:00
--
2024-06-02 09:48:57 -04:00
equipments => ( equipment . chest => equipment . iron_chestplate ,
equipment . head => equipment . iron_helmet ,
equipment . hands => equipment . iron_gauntlets ,
equipment . feet => equipment . iron_greaves ,
equipment . main_hand => equipment . iron_sword ,
2024-05-25 01:48:03 -04:00
others => equipment . none ) ,
2024-06-09 12:38:38 -04:00
--
units => ( ( unit . dwarf_villager , 12 , 120 ) ,
( unit . dwarf_knight , 3 , 30 ) ,
others => <> ) ,
--
2024-06-05 08:29:55 -04:00
others => <>
2024-05-25 01:48:03 -04:00
) ;
------------------------------------------------------------------------------------------
procedure swap_map_preview_panel is begin view_list ( map_preview_panel ) := not view_list ( map_preview_panel ) ; end swap_map_preview_panel ;
procedure swap_status_preview_panel is begin view_list ( status_preview_panel ) := not view_list ( status_preview_panel ) ; end swap_status_preview_panel ;
procedure swap_text_box_panel is begin view_list ( text_box_panel ) := not view_list ( text_box_panel ) ; end swap_text_box_panel ;
2024-06-01 18:59:37 -04:00
procedure swap_fullscreen is begin view_list ( fullscreen ) := not view_list ( fullscreen ) ; end swap_fullscreen ;
2024-05-25 01:48:03 -04:00
------------------------------------------------------------------------------------------
2024-06-08 07:11:40 -04:00
procedure player_information ( x , y : in integer ) is
2024-06-06 10:00:51 -04:00
player_1 : chad . information renames world . map . chads ( 1 ) ;
--
2024-06-06 16:04:07 -04:00
offset : constant integer := 8 ;
2024-06-06 04:39:03 -04:00
width : constant integer := side_panel - 2 * core . icon ;
2024-06-08 05:57:00 -04:00
height : constant integer := chad . view_height + 11 * core . icon + 4 * core . base + 2 * offset ;
2024-06-06 11:00:34 -04:00
more : constant natural := 10 ;
less : constant natural := 5 ;
2024-06-06 12:34:30 -04:00
side : constant integer := chad . view_width + attribute . count * core . icon ;
2024-06-06 16:04:07 -04:00
at_x : integer := x + offset ;
at_y : integer := y + offset ;
2024-06-06 04:39:03 -04:00
begin
2024-06-08 07:11:40 -04:00
ui . draw_frame ( x , y , width , height ) ;
2024-06-06 16:04:07 -04:00
ui . draw_sprite ( chad . view ( player_1 . index ) , chad . description ( player_1 . index ) . name . all , at_x , at_y , 0 ) ;
ui . draw_text_box ( at_x + chad . view_width , at_y , width - chad . view_width - 2 * offset , core . icon ) ;
ui . write ( chad . description ( player_1 . index ) . name . all , at_x + chad . view_width + less , at_y + less ) ;
2024-06-06 09:32:47 -04:00
--
2024-06-08 05:29:14 -04:00
ui . draw_text ( chad . description ( player_1 . index ) . title . all , at_x + side , at_y + 1 * core . icon , width - side - 2 * offset , core . icon , more ) ;
ui . draw_text ( "Level" & player_1 . level ' image , at_x + side , at_y + 2 * core . icon , width - side - 2 * offset , core . icon , more ) ;
2024-06-06 09:32:47 -04:00
--
2024-06-06 16:04:07 -04:00
at_x := x + chad . view_width + offset ;
at_y := y + core . icon + offset ;
2024-06-06 09:32:47 -04:00
--
2024-06-06 16:04:07 -04:00
for index in attribute . enumeration loop
2024-06-08 05:29:14 -04:00
ui . draw_icon ( attribute . icon ( index ) , attribute . description ( index ) . text . all , at_x , at_y ) ;
ui . draw_text ( player_1 . attributes ( index ) . value ' image , at_x , at_y + core . icon , core . icon , core . icon , more ) ;
2024-06-06 16:04:07 -04:00
--
at_x := at_x + core . icon ;
end loop ;
2024-06-06 09:46:18 -04:00
--
at_x := x + offset ;
2024-06-06 16:04:07 -04:00
at_y := y + offset + chad . view_height ;
--
ui . draw_separator ( at_x , at_y , width - 2 * offset ) ;
--
at_y := at_y + core . base + core . icon ;
2024-06-06 09:46:18 -04:00
--
2024-06-06 12:34:30 -04:00
ui . draw_tiny_fill_bar ( at_x , at_y + 0 * core . icon , side , float ( player_1 . health . value ) / float ( player_1 . health . limit ) , ( 127 , 0 , 0 , 255 ) ) ;
ui . draw_tiny_fill_bar ( at_x , at_y + 1 * core . icon , side , float ( player_1 . mana . value ) / float ( player_1 . mana . limit ) , ( 0 , 0 , 127 , 255 ) ) ;
ui . draw_tiny_fill_bar ( at_x , at_y + 2 * core . icon , side , float ( player_1 . movement . value ) / float ( player_1 . movement . limit ) , ( 0 , 127 , 0 , 255 ) ) ;
2024-06-06 04:39:03 -04:00
--
2024-06-08 05:29:14 -04:00
ui . draw_text ( "Health" , at_x + side , at_y - core . icon , width - side - 2 * offset , core . icon , more ) ;
ui . draw_text ( "Mana" , at_x + side , at_y , width - side - 2 * offset , core . icon , more ) ;
ui . draw_text ( "Movement" , at_x + side , at_y + core . icon , width - side - 2 * offset , core . icon , more ) ;
2024-06-06 12:34:30 -04:00
--
ui . write ( player_1 . health . value ' image & " /" & player_1 . health . limit ' image , at_x + core . icon , at_y - core . icon + more , code => true ) ;
ui . write ( player_1 . mana . value ' image & " /" & player_1 . mana . limit ' image , at_x + core . icon , at_y + more , code => true ) ;
ui . write ( player_1 . movement . value ' image & " /" & player_1 . movement . limit ' image , at_x + core . icon , at_y + core . icon + more , code => true ) ;
2024-06-06 04:39:03 -04:00
--
2024-06-06 16:04:07 -04:00
at_y := at_y + 2 * core . icon ;
--
ui . draw_separator ( at_x , at_y , width - 2 * offset ) ;
--
at_y := at_y + core . base ;
2024-06-06 10:50:00 -04:00
--
for index in equipment . kind loop
if equipment . enumeration ' pos ( player_1 . equipments ( index ) ) / = equipment . enumeration ' pos ( equipment . none ) then
ui . draw_overicon ( data => equipment . icon ( player_1 . equipments ( index ) ) ,
text => equipment . description ( player_1 . equipments ( index ) ) . name . all ,
x => at_x + equipment . kind ' pos ( index ) * core . icon ,
y => at_y ) ;
else
ui . draw_overicon ( data => equipment . slot ( index ) ,
text => "Slot '" & core . lowercase ( equipment . kind ( index ) ' image ) & "' is empty." ,
x => at_x + equipment . kind ' pos ( index ) * core . icon ,
y => at_y ) ;
end if ;
end loop ;
--
2024-06-08 05:29:14 -04:00
ui . draw_text ( "Equipment" , at_x + 8 * core . icon , at_y , width - 8 * core . icon - 2 * offset , core . icon , more ) ;
2024-06-06 10:50:00 -04:00
--
2024-06-06 11:00:34 -04:00
at_y := at_y + core . icon ;
--
2024-06-08 05:29:14 -04:00
ui . draw_text ( "Skills" , at_x + side , at_y , width - side - 2 * offset , core . icon , more ) ;
2024-06-06 16:04:07 -04:00
--
2024-06-09 11:07:49 -04:00
for index in 0 . . skill . limit - 1 loop
ui . draw_icon ( skill . icon ( player_1 . skills ( index ) . index ) , skill . description ( player_1 . skills ( index ) . index ) . text . all , at_x + index * core . icon , at_y ) ;
2024-06-06 16:04:07 -04:00
--~ui.write (player_1.points (index).value'image, at_x + index * core.icon + more, at_y + more, code => true);
end loop ;
--
at_y := at_y + core . icon ;
--
ui . draw_separator ( at_x , at_y , width - 2 * offset ) ;
--
at_y := at_y + core . base ;
--
2024-06-06 11:00:34 -04:00
for index_y in 0 . . 2 loop
for index_x in 0 . . 7 loop
ui . draw_icon ( data => equipment . icon ( player_1 . items ( 8 * index_y + index_x ) ) ,
text => equipment . description ( player_1 . items ( 8 * index_y + index_x ) ) . name . all ,
x => at_x + index_x * core . icon ,
y => at_y + index_y * core . icon ) ;
end loop ;
end loop ;
2024-06-09 12:38:38 -04:00
--
at_y := at_y + 3 * core . icon ;
--
ui . draw_separator ( at_x , at_y , width - 2 * offset ) ;
--
at_y := at_y + core . base ;
--
for index in 0 . . unit . limit - 1 loop
2024-06-09 12:57:11 -04:00
world . draw_unit ( player_1 . units ( index ) . index , core . walk , at_x + index * core . icon + 8 , at_y + 8 ) ;
world . show_unit_data := player_1 . units ( index ) . index ;
ui . draw_icon_menu ( at_x + index * core . icon , at_y , core . icon , 3 * core . icon , unit . description ( player_1 . units ( index ) . index ) . name . all , world . show_unit ' access ) ;
2024-06-09 12:38:38 -04:00
end loop ;
2024-06-08 07:11:40 -04:00
end player_information ;
------------------------------------------------------------------------------------------
procedure time_information ( x , y : in integer ) is
offset : constant integer := 8 ;
width : constant integer := side_panel - 2 * core . icon ;
height : constant integer := 3 * core . icon + 2 * offset ;
more : constant natural := 10 ;
begin
ui . draw_frame ( x , y , width , height ) ;
2024-06-08 04:38:28 -04:00
--
2024-06-08 07:11:40 -04:00
ui . draw_text ( world . day_name ( 7 ) . all , x + offset , y + 0 * core . icon + offset , width - 2 * offset - 64 , core . icon , more , 0 ) ;
ui . draw_text ( world . week_name ( 6 ) . all , x + offset , y + 1 * core . icon + offset , width - 2 * offset - 64 , core . icon , more , 0 ) ;
ui . draw_text ( world . month_name ( 2 ) . all , x + offset , y + 2 * core . icon + offset , width - 2 * offset - 64 , core . icon , more , 0 ) ;
2024-06-08 05:57:00 -04:00
--
2024-06-08 07:11:40 -04:00
ui . draw_end_turn_button ( x + width - offset - 64 , y + offset + core . icon / 2 ) ;
end time_information ;
2024-06-06 04:39:03 -04:00
2024-02-24 14:51:53 -05:00
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2024-02-15 21:03:09 -05:00
2024-02-24 14:51:53 -05:00
begin
2024-02-22 06:16:09 -05:00
2024-05-23 07:30:44 -04:00
core . dash ;
core . echo ( core . comment , "Copyright (C) 2024 -- Ognjen 'xolatile' Milan Robovic" ) ;
core . echo ( core . comment , "Version -- 1.0.0" ) ;
core . echo ( core . comment , "License -- GNU/GPLv3+" ) ;
2024-05-31 07:14:00 -04:00
core . echo ( core . comment , "Xorana is free software, you can redistribute it and modify it under the terms of the GNU General Public License by Free Software Foundation." ) ;
2024-05-23 07:30:44 -04:00
core . dash ;
2024-03-11 08:42:25 -04:00
2024-05-23 07:30:44 -04:00
core . initialize ;
2024-03-17 15:15:18 -04:00
2024-05-10 22:09:30 -04:00
ui . active := ui . main ;
2024-02-15 21:03:09 -05:00
ui . configure ;
2024-03-11 14:37:26 -04:00
2024-05-23 07:30:44 -04:00
--~core.play (core.import_song (core.c_string (core.folder & "/song/main_menu.ogg")).index);
2024-03-11 14:37:26 -04:00
2024-06-02 10:15:47 -04:00
core . echo ( core . comment , "Configuring" & attribute . count ' image & " attribute components..." ) ;
--
for index in attribute . enumeration loop
attribute . icon ( index ) := core . import_sprite ( core . folder & "/icon/attribute/" & core . lowercase ( attribute . enumeration ' image ( index ) ) & ".png" , 1 , 1 ) ;
end loop ;
core . echo ( core . comment , "Configuring" & skill . count ' image & " skill components..." ) ;
--
for index in skill . enumeration loop
skill . icon ( index ) := core . import_sprite ( core . folder & "/icon/skill/" & core . lowercase ( skill . enumeration ' image ( index ) ) & ".png" , 1 , 1 ) ;
end loop ;
core . echo ( core . comment , "Configuring" & resource . count ' image & " resource components..." ) ;
--
for index in resource . enumeration loop
resource . icon ( index ) := core . import_sprite ( core . folder & "/icon/resource/" & core . lowercase ( resource . enumeration ' image ( index ) ) & ".png" , 1 , 1 ) ;
end loop ;
2024-06-02 13:00:54 -04:00
core . echo ( core . comment , "Configuring" & magic . count ' image & " magic components..." ) ;
--
for index in magic . enumeration loop
declare folder : constant string := core . lowercase ( magic . school ' image ( magic . description ( index ) . kind ) ) ;
file : constant string := core . lowercase ( magic . enumeration ' image ( index ) ) ;
begin
magic . view ( index ) := core . import_sprite ( core . folder & "/view/magic/" & folder & "/" & file & ".png" , 1 , 1 ) ;
end ;
end loop ;
2024-06-02 10:15:47 -04:00
core . echo ( core . comment , "Configuring" & material . count ' image & " material components..." ) ;
--
for index in material . enumeration loop
material . icon ( index ) := core . import_sprite ( core . folder & "/icon/material/" & core . lowercase ( material . enumeration ' image ( index ) ) & ".png" , 1 , 1 ) ;
end loop ;
2024-06-02 11:12:17 -04:00
core . echo ( core . comment , "Configuring" & equipment . count ' image & " equipment components..." ) ;
--
for index in equipment . enumeration loop
2024-06-06 10:31:17 -04:00
declare folder : constant string := core . lowercase ( equipment . kind ' image ( equipment . description ( index ) . slot ) ) ;
2024-06-02 11:12:17 -04:00
file : constant string := core . lowercase ( equipment . enumeration ' image ( index ) ) ;
begin
equipment . sprite ( index ) := core . import_sprite ( core . folder & "/game/equipment/" & folder & "/" & file & ".png" , 4 , 6 ) ;
equipment . icon ( index ) := core . import_sprite ( core . folder & "/icon/equipment/" & folder & "/" & file & ".png" , 1 , 1 ) ;
end ;
end loop ;
2024-06-06 10:31:17 -04:00
--
for index in equipment . kind loop
declare file : constant string := core . lowercase ( equipment . kind ' image ( index ) ) ;
begin
equipment . slot ( index ) := core . import_sprite ( core . folder & "/icon/engine/" & file & ".png" , 1 , 1 ) ;
end ;
end loop ;
2024-06-02 11:12:17 -04:00
2024-06-03 13:49:22 -04:00
core . echo ( core . comment , "Configuring" & unit . count ' image & " unit components..." ) ;
--
2024-06-09 12:38:38 -04:00
for index in faction . enumeration loop
2024-06-03 13:49:22 -04:00
unit . base ( index ) := core . import_sprite ( core . folder & "/game/unit/" & core . lowercase ( faction . enumeration ' image ( index ) ) & "/base.png" , 4 , 6 ) ;
end loop ;
2024-06-09 13:30:05 -04:00
--
for index in unit . enumeration loop
unit . icon ( index ) := core . import_sprite ( core . folder & "/icon/unit/" & core . lowercase ( unit . enumeration ' image ( index ) ) & ".png" , 1 , 1 ) ;
unit . view ( index ) := core . import_sprite ( core . folder & "/view/unit/" & core . lowercase ( unit . enumeration ' image ( index ) ) & ".png" , 1 , 1 ) ;
end loop ;
2024-06-02 13:00:54 -04:00
core . echo ( core . comment , "Configuring" & deity . count ' image & " deity components..." ) ;
--
for index in deity . enumeration loop
deity . sprite ( index ) := core . import_sprite ( core . folder & "/game/deity/" & deity . enumeration ' image ( index ) & ".png" , 4 , 1 ) ;
end loop ;
2024-06-02 11:12:17 -04:00
2024-06-09 13:30:05 -04:00
core . echo ( core . comment , "Configuring" & construction . count ' image & " construction components..." ) ;
2024-06-02 11:12:17 -04:00
--
for index in construction . enumeration loop
declare folder : constant string := core . lowercase ( faction . enumeration ' image ( construction . description ( index ) . kind ) ) ;
file : constant string := core . lowercase ( construction . enumeration ' image ( index ) ) ;
frames : constant integer := construction . description ( index ) . frames ;
begin
construction . sprite ( index ) := core . import_sprite ( core . folder & "/game/construction/" & folder & "/" & file & ".png" , frames , 1 ) ;
end ;
end loop ;
2024-06-09 13:30:05 -04:00
core . echo ( core . comment , "Configuring" & chad . count ' image & " chad components..." ) ;
2024-06-03 16:06:31 -04:00
--
for index in chad . enumeration loop
chad . sprite ( index ) := core . import_sprite ( core . folder & "/game/chad/" & core . lowercase ( chad . enumeration ' image ( index ) ) & ".png" , 4 , 6 ) ;
chad . view ( index ) := core . import_sprite ( core . folder & "/view/chad/" & core . lowercase ( chad . enumeration ' image ( index ) ) & ".png" , 1 , 1 ) ;
end loop ;
2024-04-25 03:46:07 -04:00
world . configure ;
2024-05-08 15:43:44 -04:00
--~ai.configure;
2024-03-17 17:52:59 -04:00
2024-05-27 17:37:53 -04:00
world . make ( world . grass , 640 , 480 , 8 ) ;
2024-05-19 13:29:28 -04:00
world . add_chad ( player ) ;
2024-05-17 18:35:31 -04:00
2024-05-23 07:30:44 -04:00
core . dash ;
core . echo ( core . success , "Successfully initialized game data, entering main gameplay loop." ) ;
core . dash ;
2024-03-11 08:42:25 -04:00
2024-05-04 07:22:16 -04:00
for index in view loop
2024-06-09 11:07:49 -04:00
view_icon ( index , false ) := core . import_sprite ( core . folder & "/icon/engine/" & core . lowercase ( view ' image ( index ) ) & "_off.png" , 1 , 1 ) ;
view_icon ( index , true ) := core . import_sprite ( core . folder & "/icon/engine/" & core . lowercase ( view ' image ( index ) ) & "_on.png" , 1 , 1 ) ;
2024-05-03 06:10:13 -04:00
end loop ;
2024-05-23 07:30:44 -04:00
game_title := core . import_sprite ( core . folder & "/ui/game_title.png" , 1 , 1 ) ;
2024-05-03 07:55:17 -04:00
2024-05-10 22:09:30 -04:00
for index in world . biome loop
2024-05-23 07:30:44 -04:00
game_preview ( index ) := core . import_sprite ( core . folder & "/ui/preview/" & core . lowercase ( world . biome ' image ( index ) ) & "land.png" , 1 , 1 ) ;
2024-05-10 22:09:30 -04:00
end loop ;
2024-05-09 09:11:26 -04:00
2024-03-16 08:08:50 -04:00
------------------------------------------------------------------------------------------
2024-05-08 16:17:47 -04:00
introduction_loop : loop
2024-05-23 07:30:44 -04:00
core . synchronize ;
2024-02-15 21:03:09 -05:00
--
2024-05-23 07:30:44 -04:00
exit when core . signal_mode = core . signal_space or core . cursor_mode = core . cursor_right ;
2024-03-16 08:08:50 -04:00
--
2024-05-23 07:30:44 -04:00
case core . signal_mode is
when core . signal_none => null ;
when core . signal_space => null ;
when others => switch := ( switch + 1 ) mod world . biome_count ;
choose := world . biome ' val ( switch ) ;
2024-05-10 23:44:09 -04:00
end case ;
--
2024-05-23 07:30:44 -04:00
core . draw ( game_preview ( choose ) , core . center_x ( game_preview ( choose ) . width * 2 ) , core . center_y ( game_preview ( choose ) . height * 2 ) , factor => 2 ) ;
core . draw ( game_title , core . center_x ( game_title . width * 2 ) , core . center_y ( game_title . height * 2 ) , factor => 2 ) ;
2024-05-10 23:44:09 -04:00
--
2024-05-23 07:30:44 -04:00
ui . write ( "[-- Press Spacebar or RMB to continue]" , 0 , core . center_y ( 24 ) , ( 102 , 102 , 102 , 255 ) ) ;
2024-05-08 16:17:47 -04:00
end loop introduction_loop ;
2024-05-23 07:30:44 -04:00
core . cursor_mode := core . cursor_none ;
2024-05-11 03:20:04 -04:00
2024-06-04 08:21:24 -04:00
--~main_menu_loop: loop
--~core.synchronize;
--~--
--~exit when core.signal_mode = core.signal_space or core.cursor_mode = core.cursor_right;
--~--
--~declare source_code_data : core.string_box_data;
--~begin
--~core.import_text (source_code_data, source_code (view_source_code).all);
--~--
--~if core.cursor_mode = core.cursor_left then
--~view_source_code := (view_source_code + 1) mod 23;
--~core.cursor_mode := core.cursor_none;
--~core.wheel := 0.0;
--~end if;
--~--
--~ui.write_ada_code (source_code_data, 0, integer (core.wheel) * 30);
--~end;
--~end loop main_menu_loop;
--~core.cursor_mode := core.cursor_none;
2024-05-11 03:20:04 -04:00
2024-06-06 04:39:03 -04:00
world . load ( "heyo" ) ;
2024-05-25 03:53:53 -04:00
2024-06-01 11:27:59 -04:00
ui . active := ui . style ' val ( faction . enumeration ' pos ( chad . description ( player . index ) . kind ) + 1 ) ;
2024-05-25 04:39:07 -04:00
2024-05-08 16:17:47 -04:00
gameplay_loop : loop
2024-05-23 07:30:44 -04:00
core . synchronize ;
2024-03-24 09:14:54 -04:00
--
2024-05-23 07:30:44 -04:00
exit when core . engine_active = false ;
2024-05-01 14:41:55 -04:00
--
2024-05-11 03:03:28 -04:00
if not view_list ( status_preview_panel ) then
side_panel := 0 ;
else
2024-06-06 16:04:07 -04:00
side_panel := 480 ;
2024-05-11 03:03:28 -04:00
end if ;
--
2024-05-23 07:30:44 -04:00
preview_width := core . window_width - side_panel ;
preview_height := core . window_height - text_box_height ;
2024-05-11 03:03:28 -04:00
text_box_height := 32 ;
--
world . draw ;
--
if view_list ( map_preview_panel ) then
ui . draw_menu ( 0 , 0 , preview_width , preview_height ) ;
end if ;
--
if view_list ( status_preview_panel ) then
2024-06-03 17:41:01 -04:00
ui . draw_tiny_menu ( preview_width , 0 , side_panel , preview_height ) ;
--
2024-06-08 07:11:40 -04:00
player_information ( preview_width + core . icon , core . icon ) ;
time_information ( preview_width + core . icon , core . icon + chad . view_height + 11 * core . icon + 4 * core . base + 3 * 8 ) ;
2024-05-31 07:14:00 -04:00
--
ui . draw_console_box ( x => core . window_width - core . icon - ( side_panel - 2 * core . icon ) ,
y => core . window_height - core . icon - text_box_height - 106 ,
width => side_panel - 2 * core . icon ,
height => 106 ) ;
2024-05-11 03:03:28 -04:00
--~ui.draw_state_box (preview_width + 32, 32);
end if ;
--
if view_list ( text_box_panel ) then
2024-05-23 07:30:44 -04:00
ui . draw_help_box ( 0 , core . window_height - text_box_height , core . window_width - core . icon * ( view ' pos ( view ' last ) + 1 ) , text_box_height ) ;
2024-05-31 07:14:00 -04:00
--
2024-06-01 18:59:37 -04:00
ui . write ( core . framerate ' image , core . window_width - core . icon * ( view ' pos ( view ' last ) + 1 ) - 64 , core . window_height - 27 ) ;
2024-05-11 03:03:28 -04:00
end if ;
--
for index in view loop
2024-06-08 07:11:40 -04:00
ui . draw_icon ( data => view_icon ( index , view_list ( index ) ) ,
text => view_text ( index ) . all ,
x => core . window_width - core . icon * ( view ' pos ( view ' last ) + 1 ) + core . icon * view ' pos ( index ) ,
y => core . window_height - core . icon ,
action => view_show ( index ) ) ;
2024-05-11 03:03:28 -04:00
end loop ;
--
2024-06-02 10:31:34 -04:00
for index in resource . enumeration loop
2024-06-08 07:11:40 -04:00
ui . draw_icon ( resource . icon ( index ) , resource . description ( index ) . text . all ,
( preview_width - 5 * core . icon * resource . count ) / 2 + ( 5 * core . icon ) * resource . enumeration ' pos ( index ) , core . base ) ;
ui . draw_text ( world . map . chads ( 1 ) . resources ( index ) . value ' image & " /" & world . map . chads ( 1 ) . resources ( index ) . limit ' image ,
( preview_width - 5 * core . icon * resource . count ) / 2 + ( 5 * core . icon ) * resource . enumeration ' pos ( index ) + core . icon , core . base , 4 * core . icon , core . icon , 10 ) ;
2024-06-02 10:31:34 -04:00
end loop ;
--
2024-06-02 10:43:17 -04:00
declare move_x : integer := ( preview_width - core . icon * material . count ) / 2 ;
begin
for index in material . enumeration loop
if world . map . chads ( 1 ) . materials ( index ) . value > 0 then
2024-06-08 07:11:40 -04:00
ui . draw_icon ( material . icon ( index ) , material . description ( index ) . name . all , move_x , core . base + core . icon ) ;
ui . draw_text ( world . map . chads ( 1 ) . materials ( index ) . value ' image , move_x , core . base + 2 * core . icon , core . icon , core . icon , 10 ) ;
2024-06-02 10:43:17 -04:00
--
move_x := move_x + core . icon ;
end if ;
end loop ;
end ;
2024-05-11 03:03:28 -04:00
--
2024-05-23 07:30:44 -04:00
signal_list ( core . signal_mode ) . all ;
2024-05-11 03:03:28 -04:00
--
2024-05-23 07:30:44 -04:00
core . camera . x := world . map . chads ( 1 ) . x ;
core . camera . y := world . map . chads ( 1 ) . y ;
2024-05-19 13:29:28 -04:00
--
2024-06-02 08:11:48 -04:00
--~world.draw_performance_box;
2024-06-01 20:42:12 -04:00
--
2024-05-11 03:03:28 -04:00
ui . synchronize ;
2024-05-08 16:17:47 -04:00
end loop gameplay_loop ;
2024-02-15 21:03:09 -05:00
2024-05-23 08:03:38 -04:00
world . save ( "heyo" ) ;
2024-06-06 12:34:30 -04:00
--~world.mapshot (core.folder & "/mapshot.png");
2024-05-09 14:52:19 -04:00
2024-03-16 08:08:50 -04:00
------------------------------------------------------------------------------------------
2024-02-16 09:59:19 -05:00
2024-05-23 07:30:44 -04:00
core . deinitialize ;
2024-03-17 15:15:18 -04:00
2024-05-23 07:30:44 -04:00
core . dash ;
2024-03-21 19:03:15 -04:00
2024-06-06 04:39:03 -04:00
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
2024-02-15 21:03:09 -05:00
end main ;