From: dis- Date: Thu, 14 Feb 2013 10:40:44 +0000 (+0000) Subject: Extract Process per 100 energy. Now it contains music and hex upkeep effects. X-Git-Tag: v2.1.2~89 X-Git-Url: http://git.osdn.net/view?p=hengband%2Fhengband.git;a=commitdiff_plain;h=58a7d419a85e47f77e0fa2b7764e37f691b91f9e Extract Process per 100 energy. Now it contains music and hex upkeep effects. --- diff --git a/src/defines.h b/src/defines.h index 792956692..9362baf7e 100644 --- a/src/defines.h +++ b/src/defines.h @@ -75,7 +75,7 @@ */ #define H_VER_MAJOR 2 #define H_VER_MINOR 1 -#define H_VER_PATCH 1 +#define H_VER_PATCH 2 #define H_VER_EXTRA 0 diff --git a/src/do-spell.c b/src/do-spell.c index 44945e6ec..c8fca41d3 100644 --- a/src/do-spell.c +++ b/src/do-spell.c @@ -9349,6 +9349,7 @@ static cptr do_music_spell(int spell, int mode) if (cont) { project_hack(GF_PSI, damroll(dice, sides)); + energy_use += 10; } } @@ -9459,6 +9460,7 @@ static cptr do_music_spell(int spell, int mode) if (cont) { confuse_monsters(power); + energy_use += 10; } } @@ -9495,6 +9497,7 @@ static cptr do_music_spell(int spell, int mode) if (cont) { project_hack(GF_SOUND, damroll(dice, sides)); + energy_use += 10; } } @@ -9768,6 +9771,7 @@ static cptr do_music_spell(int spell, int mode) { dispel_monsters(randint1(m_sides)); dispel_evil(randint1(e_sides)); + energy_use += 10; } } break; @@ -9803,6 +9807,7 @@ static cptr do_music_spell(int spell, int mode) { slow_monsters(plev); sleep_monsters(plev); + energy_use += 10; } } @@ -9932,6 +9937,7 @@ static cptr do_music_spell(int spell, int mode) if (cont) { stasis_monsters(power); + energy_use += 10; } } @@ -10023,6 +10029,7 @@ static cptr do_music_spell(int spell, int mode) if (cont) { dispel_monsters(damroll(dice, sides)); + energy_use += 10; } } break; @@ -11534,6 +11541,10 @@ static cptr do_hex_spell(int spell, int mode) if (cast || cont) { project_hack(GF_POIS, randint1(power)); + if(cont) + { + energy_use += 10; + } } break; @@ -11833,6 +11844,10 @@ static cptr do_hex_spell(int spell, int mode) if (cast || cont) { project_hack(GF_OLD_DRAIN, randint1(power)); + if(cont) + { + energy_use += 10; + } } break; @@ -12423,6 +12438,10 @@ static cptr do_hex_spell(int spell, int mode) if (cast || cont) { stun_monsters(power); + if(cont) + { + energy_use += 10; + } } break; diff --git a/src/dungeon.c b/src/dungeon.c index fcd877fa7..9485be2d8 100644 --- a/src/dungeon.c +++ b/src/dungeon.c @@ -5483,6 +5483,34 @@ static void pack_overflow(void) } } +/* + * process the effects per 100 energy at player speed. + */ +static void process_upkeep_with_speed(void) +{ + /* Give the player some energy */ + if (!load && p_ptr->enchant_energy_need > 0 && !p_ptr->leaving) + { + p_ptr->enchant_energy_need -= SPEED_TO_ENERGY(p_ptr->pspeed); + } + + /* No turn yet */ + if (p_ptr->enchant_energy_need > 0) return; + + while (p_ptr->enchant_energy_need <= 0) + { + /* Handle the player song */ + if (!load) check_music(); + + /* Hex - Handle the hex spells */ + if (!load) check_hex(); + if (!load) revenge_spell(); + + /* There is some randomness of needed energy */ + p_ptr->enchant_energy_need += ENERGY_NEED(); + } +} + /* * Process the player @@ -5723,14 +5751,7 @@ msg_print(" /* Handle "p_ptr->update" and "p_ptr->redraw" and "p_ptr->window" */ handle_stuff(); } - - /* Handle the player song */ - if (!load) check_music(); - - /* Hex - Handle the hex spells */ - if (!load) check_hex(); - if (!load) revenge_spell(); - + load = FALSE; /* Fast */ @@ -6318,9 +6339,11 @@ msg_print(" /* Hack -- Compress the object list occasionally */ if (o_cnt + 32 < o_max) compact_objects(0); - + /* Process the player */ process_player(); + + process_upkeep_with_speed(); /* Handle "p_ptr->notice" */ notice_stuff(); diff --git a/src/load.c b/src/load.c index 5287cae1b..3bc194798 100644 --- a/src/load.c +++ b/src/load.c @@ -1796,6 +1796,10 @@ static void rd_extra(void) rd_s16b(&p_ptr->energy_need); if (z_older_than(11, 0, 13)) p_ptr->energy_need = 100 - p_ptr->energy_need; + if (z_older_than(12, 1, 20)) + p_ptr->enchant_energy_need = 0; + else + rd_s16b(&p_ptr->enchant_energy_need); rd_s16b(&p_ptr->fast); rd_s16b(&p_ptr->slow); diff --git a/src/save.c b/src/save.c index 8fb7f84ee..83adadb58 100644 --- a/src/save.c +++ b/src/save.c @@ -680,6 +680,7 @@ static void wr_extra(void) wr_s16b(0); /* old "food_digested" */ wr_s16b(0); /* old "protection" */ wr_s16b(p_ptr->energy_need); + wr_s16b(p_ptr->enchant_energy_need); wr_s16b(p_ptr->fast); wr_s16b(p_ptr->slow); wr_s16b(p_ptr->afraid); diff --git a/src/types.h b/src/types.h index 7f3b1652e..8fe6711d2 100644 --- a/src/types.h +++ b/src/types.h @@ -1082,6 +1082,7 @@ struct player_type byte recall_dungeon; /* Dungeon set to be recalled */ s16b energy_need; /* Energy needed for next move */ + s16b enchant_energy_need; /* Energy needed for next upkeep effect */ s16b food; /* Current nutrition */