diff options
author | Bardur Arantsson <bardur@scientician.net> | 2012-06-09 20:54:07 +0200 |
---|---|---|
committer | Bardur Arantsson <bardur@scientician.net> | 2012-06-09 20:58:51 +0200 |
commit | a0107d942872735f1faa0e857174a6c467180d75 (patch) | |
tree | 5e3b70534517764d3d77052a14eb8aeb1645a4f9 /src | |
parent | d69d91b33a2e833e8b32baa29af22809ade406ba (diff) |
Lua: Move automatic stat gain to C
Diffstat (limited to 'src')
-rw-r--r-- | src/birth.c | 3 | ||||
-rw-r--r-- | src/dungeon.c | 1 | ||||
-rw-r--r-- | src/externs.h | 1 | ||||
-rw-r--r-- | src/loadsave.c | 1 | ||||
-rw-r--r-- | src/modules.c | 41 | ||||
-rw-r--r-- | src/types.h | 3 |
6 files changed, 50 insertions, 0 deletions
diff --git a/src/birth.c b/src/birth.c index 14c0b44f..41abe3ad 100644 --- a/src/birth.c +++ b/src/birth.c @@ -1041,6 +1041,9 @@ static void player_wipe(void) /* Inertia control */ p_ptr->inertia_controlled_spell = -1; + + /* Automatic stat-gain */ + p_ptr->last_rewarded_level = 1; } diff --git a/src/dungeon.c b/src/dungeon.c index f4803e3b..af46976d 100644 --- a/src/dungeon.c +++ b/src/dungeon.c @@ -5631,6 +5631,7 @@ void play_game(bool_ new_game) /* Initialize hooks */ init_hooks(); init_hooks_help(); + init_hooks_module(); /* React to changes */ Term_xtra(TERM_XTRA_REACT, 0); diff --git a/src/externs.h b/src/externs.h index e1f77bc1..38511e48 100644 --- a/src/externs.h +++ b/src/externs.h @@ -2362,6 +2362,7 @@ extern bool_ select_module(void); extern bool_ module_savefile_loadable(cptr savefile_mod); extern void tome_intro(); extern void theme_intro(); +extern void init_hooks_module(); /* lua_bind.c */ diff --git a/src/loadsave.c b/src/loadsave.c index 349db36d..65d72d9c 100644 --- a/src/loadsave.c +++ b/src/loadsave.c @@ -580,6 +580,7 @@ static bool_ do_extra(int flag) do_s32b(&p_ptr->loan_time, flag); do_s16b(&p_ptr->absorb_soul, flag); do_s32b(&p_ptr->inertia_controlled_spell, flag); + do_s16b(&p_ptr->last_rewarded_level, flag); do_s16b(&p_ptr->chaos_patron, flag); diff --git a/src/modules.c b/src/modules.c index 8a4c5644..ff8a24fb 100644 --- a/src/modules.c +++ b/src/modules.c @@ -495,3 +495,44 @@ void theme_intro() exit: screen_load(); } + +static bool_ auto_stat_gain_hook(void *data, void *in, void *out) +{ + while (p_ptr->last_rewarded_level * 5 <= p_ptr->lev) + { + do_inc_stat(A_STR); + do_inc_stat(A_INT); + do_inc_stat(A_WIS); + do_inc_stat(A_DEX); + do_inc_stat(A_CON); + do_inc_stat(A_CHR); + + p_ptr->last_rewarded_level += 1; + } + + return FALSE; +} + +void init_hooks_module() +{ + switch (game_module_idx) + { + case MODULE_TOME: + { + break; + } + + case MODULE_THEME: + { + add_hook_new(HOOK_PLAYER_LEVEL, + auto_stat_gain_hook, + "auto_stat_gain", + NULL); + + break; + } + + default: + assert(FALSE); + } +} diff --git a/src/types.h b/src/types.h index 3e634beb..44ffd67a 100644 --- a/src/types.h +++ b/src/types.h @@ -1863,6 +1863,9 @@ struct player_type /* Inertia control */ s32b inertia_controlled_spell; + /* For automatic stat-gain */ + s16b last_rewarded_level; + /*** Temporary fields ***/ bool_ did_nothing; /* True if the last action wasnt a real action */ |