Changeset 589

Show
Ignore:
Timestamp:
09/29/07 15:17:19 (1 year ago)
Author:
takkaria
Message:

Try to fix #319, where the autopickup behaviour seems strangely unpredictable. Fixed this by a global.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/cave.c

    r541 r589  
    39083908        } 
    39093909 
    3910         /* Cancel auto-pickup if badly wounded  XXX XXX */ 
    3911         if ((p_ptr->notice & (PN_PICKUP)) && 
    3912             (p_ptr->chp < (p_ptr->mhp * op_ptr->hitpoint_warn / 10))) 
    3913         { 
    3914                 p_ptr->auto_pickup_okay = FALSE; 
    3915         } 
    3916  
    39173910        /* Flush the input if requested */ 
    39183911        if (flush_disturb) flush(); 
  • trunk/src/cmd1.c

    r554 r589  
    241241static bool auto_pickup_okay(const object_type *o_ptr) 
    242242{ 
     243        /* Bad wounds prelude autopickup */ 
     244        if (p_ptr->chp < (p_ptr->mhp * op_ptr->hitpoint_warn / 10)) return FALSE; 
     245 
    243246        if (!inven_carry_okay(o_ptr)) return FALSE; 
    244247 
     
    322325 * objects.  They are truly "unknown". 
    323326 */ 
    324 byte py_pickup(int pickup
     327byte py_pickup(int pickup, bool pickup_okay
    325328{ 
    326329        int py = p_ptr->py; 
     
    344347        bool msg = TRUE; 
    345348 
    346         bool auto_okay = p_ptr->auto_pickup_okay; 
    347  
    348  
    349         /* Reset auto_pickup_okay */ 
    350         p_ptr->auto_pickup_okay = TRUE; 
    351  
    352349 
    353350        /* Nothing to pick up -- return */ 
     
    374371 
    375372                /* Automatically pick up items into the backpack */ 
    376                 if (auto_okay && auto_pickup_okay(o_ptr)) 
     373                if (pickup_okay && auto_pickup_okay(o_ptr)) 
    377374                { 
    378375                        /* Pick up the object with message */ 
     
    532529         * up.  Force the display of a menu in all cases. 
    533530         */ 
    534         if (call_function_again) objs_picked_up += py_pickup(2); 
     531        if (call_function_again) objs_picked_up += py_pickup(2, pickup_okay); 
    535532 
    536533        /* Indicate how many objects have been picked up. */ 
     
    548545 * and also handles attempting to move into walls/doors/rubble/etc. 
    549546 */ 
    550 void move_player(int dir
     547void move_player(int dir, bool pickup_okay
    551548{ 
    552549        int py = p_ptr->py; 
     
    711708 
    712709                        /* Handle objects now.  XXX */ 
    713                         p_ptr->energy_use = py_pickup(2) * 10; 
     710                        p_ptr->energy_use = py_pickup(2, pickup_okay) * 10; 
    714711                } 
    715712 
  • trunk/src/cmd2.c

    r526 r589  
    20542054 * Helper function for the "walk" command. 
    20552055 */ 
    2056 void do_cmd_walk(void
     2056static void walk(bool can_pickup
    20572057{ 
    20582058        int y, x, dir; 
     
    21002100 
    21012101        /* Move the player */ 
    2102         move_player(dir); 
     2102        move_player(dir, can_pickup); 
     2103
     2104 
     2105/* 
     2106 * Walk. 
     2107 */ 
     2108void do_cmd_walk(void) 
     2109
     2110        walk(TRUE); 
    21032111} 
    21042112 
     
    21062114 * Jump into a trap, turn off pickup. 
    21072115 * 
    2108  * What a horrible function
     2116 * What a horrible concept
    21092117 */ 
    21102118void do_cmd_jump(void) 
    21112119{ 
    21122120        bool old_easy_alter; 
    2113  
    2114         /* Picking up NOT okay, so whatever you heard is obviously wrong */ 
    2115         p_ptr->auto_pickup_okay = FALSE; 
    21162121 
    21172122        /* easy_alter can be turned off (don't disarm traps) */ 
     
    21192124        easy_alter = FALSE; 
    21202125 
    2121         /* Now actually do this silly walk */ 
    2122         do_cmd_walk(); 
     2126        /* Walk without pickup */ 
     2127        walk(FALSE); 
    21232128 
    21242129        /* Restore easy_alter */ 
     
    22242229 
    22252230        /* Handle objects now.  XXX XXX XXX */ 
    2226         p_ptr->energy_use += py_pickup(0) * 10; 
     2231        p_ptr->energy_use += py_pickup(0, TRUE) * 10; 
    22272232 
    22282233        /* Hack -- enter a store if we are on one */ 
     
    22512256 
    22522257        /* Pick up floor objects, forcing a menu for multiple objects. */ 
    2253         energy_cost = py_pickup(1) * 10; 
     2258        energy_cost = py_pickup(1, TRUE) * 10; 
    22542259 
    22552260        /* Maximum time expenditure is a full turn. */ 
  • trunk/src/dungeon.c

    r583 r589  
    12721272                { 
    12731273                        /* Recursively call the pickup function, use energy */ 
    1274                         p_ptr->energy_use = py_pickup(0) * 10; 
     1274                        p_ptr->energy_use = py_pickup(0, TRUE) * 10; 
    12751275                        p_ptr->notice &= ~(PN_PICKUP); 
    12761276                } 
  • trunk/src/externs.h

    r580 r589  
    300300/* cmd1.c */ 
    301301extern void search(void); 
    302 extern byte py_pickup(int pickup); 
    303 extern void move_player(int dir); 
     302extern byte py_pickup(int pickup, bool pickup_okay); 
     303extern void move_player(int dir, bool pickup); 
    304304 
    305305/* cmd5.c */ 
  • trunk/src/pathfind.c

    r465 r589  
    11021102 
    11031103        /* Move the player.  Never pick up objects */ 
    1104         p_ptr->auto_pickup_okay = FALSE; 
    1105         move_player(p_ptr->run_cur_dir); 
     1104        move_player(p_ptr->run_cur_dir, FALSE); 
    11061105} 
    11071106 
  • trunk/src/types.h

    r542 r589  
    929929        bool run_break_left;    /* Looking for a break (left) */ 
    930930 
    931         bool auto_pickup_okay;      /* Allow automatic pickup */ 
    932  
    933931        s16b command_cmd;               /* Gives identity of current command */ 
    934932        s16b command_arg;               /* Gives argument of current command */