OSDN Git Service

Extract Process per 100 energy. Now it contains music and hex upkeep effects.
authordis- <dis-@0568b783-4c39-0410-ac80-bf13821ea2a2>
Thu, 14 Feb 2013 10:40:44 +0000 (10:40 +0000)
committerdis- <dis-@0568b783-4c39-0410-ac80-bf13821ea2a2>
Thu, 14 Feb 2013 10:40:44 +0000 (10:40 +0000)
src/defines.h
src/do-spell.c
src/dungeon.c
src/load.c
src/save.c
src/types.h

index 7929566..9362baf 100644 (file)
@@ -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
 
 
index 44945e6..c8fca41 100644 (file)
@@ -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;
 
index fcd877f..9485be2 100644 (file)
@@ -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();
index 5287cae..3bc1947 100644 (file)
@@ -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);
index 8fb7f84..83adadb 100644 (file)
@@ -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);
index 7f3b165..8fe6711 100644 (file)
@@ -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 */