summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBardur Arantsson <bardur@scientician.net>2012-06-09 20:54:07 +0200
committerBardur Arantsson <bardur@scientician.net>2012-06-09 20:58:51 +0200
commita0107d942872735f1faa0e857174a6c467180d75 (patch)
tree5e3b70534517764d3d77052a14eb8aeb1645a4f9 /src
parentd69d91b33a2e833e8b32baa29af22809ade406ba (diff)
Lua: Move automatic stat gain to C
Diffstat (limited to 'src')
-rw-r--r--src/birth.c3
-rw-r--r--src/dungeon.c1
-rw-r--r--src/externs.h1
-rw-r--r--src/loadsave.c1
-rw-r--r--src/modules.c41
-rw-r--r--src/types.h3
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 */