From f5450c0f92e69b906780c231dd75dce5aae0e4dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Nov=C3=A1k?= Date: Thu, 17 Apr 2025 11:54:03 +0200 Subject: [PATCH] prepare events for achievements --- game/CMakeLists.txt | 31 ++++++++++++++++--------------- game/ach_events.c | 29 +++++++++++++++++++++++++++++ game/ach_events.h | 17 +++++++++++++++++ game/dialogy.c | 4 ++++ game/enemy.c | 5 +++++ game/globals.h | 1 + game/inv.c | 31 ++++++++++++++++++++++++++----- game/macros.c | 1 + game/menu.c | 2 ++ 9 files changed, 101 insertions(+), 20 deletions(-) create mode 100644 game/ach_events.c create mode 100644 game/ach_events.h diff --git a/game/CMakeLists.txt b/game/CMakeLists.txt index 2c47152..6e6611f 100644 --- a/game/CMakeLists.txt +++ b/game/CMakeLists.txt @@ -9,15 +9,15 @@ add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/icon.base64 add_custom_command( OUTPUT ${CMAKE_BINARY_DIR}/resources.cpp COMMAND ${CMAKE_COMMAND} -DOUT=${CMAKE_BINARY_DIR}/resources.cpp -DIN_FONT=${CMAKE_BINARY_DIR}/default_font.base64 -DIN_ICON=${CMAKE_BINARY_DIR}/icon.base64 -DTEMPLATE=${CMAKE_CURRENT_LIST_DIR}/resources.in.cpp -P ${CMAKE_CURRENT_LIST_DIR}/resources_to_cpp.cmake - DEPENDS ${CMAKE_BINARY_DIR}/default_font.base64 ${CMAKE_BINARY_DIR}/icon.base64 ${CMAKE_CURRENT_LIST_DIR}/resources_to_cpp.cmake ${CMAKE_CURRENT_LIST_DIR}/resources.in.cpp + DEPENDS ${CMAKE_BINARY_DIR}/default_font.base64 ${CMAKE_BINARY_DIR}/icon.base64 ${CMAKE_CURRENT_LIST_DIR}/resources_to_cpp.cmake ${CMAKE_CURRENT_LIST_DIR}/resources.in.cpp ) add_custom_command( OUTPUT ${CMAKE_BINARY_DIR}/default_font.cpp COMMAND ${CMAKE_COMMAND} -DOUT=${CMAKE_BINARY_DIR}/default_font.cpp -DIN=${CMAKE_BINARY_DIR}/default_font.base64 -DTEMPLATE=${CMAKE_CURRENT_LIST_DIR}/default_font.in.cpp -P ${CMAKE_CURRENT_LIST_DIR}/default_font_to_cpp.cmake - DEPENDS ${CMAKE_BINARY_DIR}/default_font.base64 ${CMAKE_CURRENT_LIST_DIR}/default_font_to_cpp.cmake ${CMAKE_CURRENT_LIST_DIR}/default_font.in.cpp + DEPENDS ${CMAKE_BINARY_DIR}/default_font.base64 ${CMAKE_CURRENT_LIST_DIR}/default_font_to_cpp.cmake ${CMAKE_CURRENT_LIST_DIR}/default_font.in.cpp ) -SET(files automap.c -clk_map.c +SET(files automap.c +clk_map.c dialogy.c dump.cpp enemy.c @@ -28,25 +28,26 @@ inv.c kouzla.c menu.c skeldal.c -souboje.c -builder.c -engine1.c -gamesave.c -interfac.c -kniha.c -macros.c -realgame.c +souboje.c +builder.c +engine1.c +gamesave.c +interfac.c +kniha.c +macros.c +realgame.c setup.c -chargen.c -sndandmus.c +chargen.c +sndandmus.c specproc.c console.c gen_stringtable.c advconfig.c temp_storage.cpp lang.c +ach_events.c ${CMAKE_BINARY_DIR}/resources.cpp ) add_library(skeldal_main ${files}) -set_property(TARGET skeldal_main PROPERTY CXX_STANDARD 20) \ No newline at end of file +set_property(TARGET skeldal_main PROPERTY CXX_STANDARD 20) diff --git a/game/ach_events.c b/game/ach_events.c new file mode 100644 index 0000000..7fe5bc8 --- /dev/null +++ b/game/ach_events.c @@ -0,0 +1,29 @@ +#include "ach_events.h" +#include +#include +#include +#include "globals.h" + + +void enable_achievements(char enable) { + +} + +void ach_event_kill_monster(int id) { + wzprintf("(event) kill monster %d\n", id); +} +void ach_event_pick_item(int id) { + wzprintf("(event) pick item %d\n", id); +} +void ach_event_end_game() { + wzprintf("(event) end_game\n"); +} +void ach_event_inv_add(int id) { + wzprintf("(event) inventory add %d\n", id); +} +void ach_event_dialog_paragraph(int pgf) { + wzprintf("(event) dialog paragraph %d\n", pgf); +} +void ach_event_full_party() { + wzprintf("(event) full party\n"); +} diff --git a/game/ach_events.h b/game/ach_events.h new file mode 100644 index 0000000..4cee30f --- /dev/null +++ b/game/ach_events.h @@ -0,0 +1,17 @@ +#ifndef SKELDAL_ACH_EVENTS_ +#define SKELDAL_ACH_EVENTS_ + + +typedef struct thuman THUMAN; + + +void ach_event_kill_monster(int id); +void ach_event_pick_item(int id); +void ach_event_end_game(); +void ach_event_inv_add(int id); +void ach_event_dialog_paragraph(int pgf); +void ach_event_full_party(); + +void enable_achievements(char enable); + +#endif diff --git a/game/dialogy.c b/game/dialogy.c index df18fd7..ebc34db 100644 --- a/game/dialogy.c +++ b/game/dialogy.c @@ -20,6 +20,7 @@ #include "globals.h" #include #include "lang.h" +#include "ach_events.h" typedef struct t_paragraph { @@ -275,8 +276,10 @@ static int find_pgnum(char *pc) static void goto_paragraph(int prgf) { + T_PARAGRAPH *z; + ach_event_dialog_paragraph(prgf+local_pgf); do { @@ -1008,6 +1011,7 @@ char join_character(int i) h->direction=viewdir; h->groupnum=cur_group; h->inmaphash=current_map_hash; + if (j == POCET_POSTAV-1) ach_event_full_party(); reg_grafiku_postav(); bott_draw(1); return 0; diff --git a/game/enemy.c b/game/enemy.c index b98cf4b..17f71b4 100644 --- a/game/enemy.c +++ b/game/enemy.c @@ -14,6 +14,9 @@ #include "specproc.h" #include + +#include "ach_events.h" + #define MOB_ZNAKY "FLBLCH" #define MOB_START 1 @@ -380,6 +383,7 @@ void load_enemies(short *data,int size,int *grptr,const TMOB *template,int32_t t mobs[i].dir=(data[1]>>14)&0x3; mobs[i].home_pos=data[0]; mobs[i].vlajky|=MOB_LIVE; + mobs[i].id = (uint8_t)j; if (mobs[i].speed<1) { char buff[256]; @@ -1347,6 +1351,7 @@ void mob_check_death(int num,TMOB *p) bott_draw(0); if (p->lives>0) return; SEND_LOG("(GAME) Monster killed ... '%s'",p->name); + ach_event_kill_monster(p->id); sect=p->sector; p->vlajky&=~MOB_IN_BATTLE & ~MOB_LIVE; free_path(num); diff --git a/game/globals.h b/game/globals.h index a992a00..5255c2b 100644 --- a/game/globals.h +++ b/game/globals.h @@ -1521,6 +1521,7 @@ typedef struct tmob char anim_counts[6]; //pocet animacnich policek pro kazdy pohyb char mobs_name[7]; //zaklad jmena souboru pro moba char vlajky2; //vlajky pro summon z konzoli (BIT0 - neukladat) + uint8_t id; //mobile id (template index); int32_t experience; //zkusenost char vlajky; //BIT0 - 1 v boji char anim_phase; //cinnost kterou mob dela diff --git a/game/inv.c b/game/inv.c index a636c4b..b7d6bed 100644 --- a/game/inv.c +++ b/game/inv.c @@ -24,6 +24,8 @@ #include #include +#include "ach_events.h" + #define neprezbrojit() (battle && (battle_mode!=MD_PREZBROJIT || select_player!=human_selected-postavy)) #define _SHOP_ST "_SHOPS.TMP" @@ -556,10 +558,11 @@ void pop_item(int sect,int pos,int mask,short **picked_item) void pick_set_cursor(void) { - if (picked_item==NULL) + if (picked_item==NULL) { item_in_cursor=H_MS_DEFAULT; - else + } else { item_in_cursor=-(glob_items[*picked_item-1].ikona); + } mouse_set_default(item_in_cursor); } @@ -574,6 +577,12 @@ void do_items_specs(void) GlobEvent(MAGLOB_ONPICKITEM,viewsector,viewdir); if (picked_item==0) return; + const short *s = picked_item; + while (*s) { + ach_event_pick_item(abs(*s)-1); + ++s; + } + p=&glob_items[*picked_item-1]; switch(p->druh) { @@ -781,6 +790,7 @@ char put_item_to_inv(THUMAN *p,short *picked_items) i--; it=abs(picked_items[i]); p->inv[pos]=it; + ach_event_inv_add(it-1); picked_items[i]=0; } return (i==0); @@ -1924,9 +1934,15 @@ static char bag_action(int xr, int yr) { while (*pk) { p=human_selected->inv[id]; - human_selected->inv[id]=abs(*pk); + int itm = abs(*pk); + human_selected->inv[id]=itm; + ach_event_inv_add(itm-1); *pk=p;pk++; - if (*pk) while (human_selected->inv[id]) if ((++id)>=human_selected->inv_size) id=0; + if (*pk) { + while (human_selected->inv[id]) { + if ((++id)>=human_selected->inv_size) id=0; + } + } } } else @@ -2042,7 +2058,11 @@ void vymen_batohy() c=picked_item; it=human_selected->wearing[PO_BATOH]=*c++; i=6; - while (*c && iinv[i++]=-*c++; + while (*c && iinv[i++]=itm; + ach_event_inv_add(itm-1); + } human_selected->inv_size=glob_items[it-1].nosnost+6; } else @@ -2219,6 +2239,7 @@ char human_click(int id,int xa,int ya,int xr,int yr) break; } human_selected->wearing[place]=*picked_item; + ach_event_inv_add(*picked_item-1); if (itsave) *picked_item=itsave; else { diff --git a/game/macros.c b/game/macros.c index e494bf7..3ec49a7 100644 --- a/game/macros.c +++ b/game/macros.c @@ -897,6 +897,7 @@ void call_macro_ex(int side, int flags, int runatside) { } rand_value = save_rand; save_load_trigger(saved_trigger); + (void)count_actions; SEND_LOG("(MULTIACTIONS) End: Sector %d, Side %d, Call %X, Actions: %d",runatside/4,runatside & 3,flags,count_actions); } diff --git a/game/menu.c b/game/menu.c index 8c056cc..944e40b 100644 --- a/game/menu.c +++ b/game/menu.c @@ -18,6 +18,7 @@ #include #include "globals.h" +#include "ach_events.h" #include "lang.h" #define MUSIC "TRACK06.MUS" @@ -616,6 +617,7 @@ void konec_hry() int task_id; int timer; + ach_event_end_game(); schovej_mysku(); curcolor=0;