Fix #H5056/bz1086: Bug in Achievement Recording
Bug report was: > "Completed sokoban" achievement was logged when picking up > a randomly generated bag of holding in the gnomish mines. The picking-up code was missing checks for the branches, so you could get the achievements outside the correct branches.
This commit is contained in:
@@ -366,6 +366,7 @@ when sitting at a trap spot: You sit down. You step on a level teleporter.
|
|||||||
(likewise for polymorph trap, and similar issue for web)
|
(likewise for polymorph trap, and similar issue for web)
|
||||||
show all statusline information in #attributes
|
show all statusline information in #attributes
|
||||||
add option status_updates to prevent bottom of screen status line updates
|
add option status_updates to prevent bottom of screen status line updates
|
||||||
|
fix achievement recording bug with mines and sokoban prizes
|
||||||
|
|
||||||
|
|
||||||
Fixes to Post-3.6.0 Problems that Were Exposed Via git Repository
|
Fixes to Post-3.6.0 Problems that Were Exposed Via git Repository
|
||||||
|
|||||||
@@ -342,6 +342,14 @@ struct obj {
|
|||||||
&& !undiscovered_artifact(ART_EYES_OF_THE_OVERWORLD)))
|
&& !undiscovered_artifact(ART_EYES_OF_THE_OVERWORLD)))
|
||||||
#define pair_of(o) ((o)->otyp == LENSES || is_gloves(o) || is_boots(o))
|
#define pair_of(o) ((o)->otyp == LENSES || is_gloves(o) || is_boots(o))
|
||||||
|
|
||||||
|
#define is_mines_prize(o) \
|
||||||
|
((o)->otyp == LUCKSTONE && Is_mineend_level(&u.uz))
|
||||||
|
#define is_soko_prize(o) \
|
||||||
|
(((o)->otyp == AMULET_OF_REFLECTION \
|
||||||
|
|| (o)->otyp == BAG_OF_HOLDING) \
|
||||||
|
&& Is_sokoend_level(&u.uz))
|
||||||
|
|
||||||
|
|
||||||
/* Flags for get_obj_location(). */
|
/* Flags for get_obj_location(). */
|
||||||
#define CONTAINED_TOO 0x1
|
#define CONTAINED_TOO 0x1
|
||||||
#define BURIED_TOO 0x2
|
#define BURIED_TOO 0x2
|
||||||
|
|||||||
@@ -513,12 +513,10 @@ struct obj *obj;
|
|||||||
}
|
}
|
||||||
set_artifact_intrinsic(obj, 1, W_ART);
|
set_artifact_intrinsic(obj, 1, W_ART);
|
||||||
}
|
}
|
||||||
if (obj->otyp == LUCKSTONE && obj->record_achieve_special) {
|
if (is_mines_prize(obj) && obj->record_achieve_special) {
|
||||||
u.uachieve.mines_luckstone = 1;
|
u.uachieve.mines_luckstone = 1;
|
||||||
obj->record_achieve_special = 0;
|
obj->record_achieve_special = 0;
|
||||||
} else if ((obj->otyp == AMULET_OF_REFLECTION
|
} else if (is_soko_prize(obj) && obj->record_achieve_special) {
|
||||||
|| obj->otyp == BAG_OF_HOLDING)
|
|
||||||
&& obj->record_achieve_special) {
|
|
||||||
u.uachieve.finish_sokoban = 1;
|
u.uachieve.finish_sokoban = 1;
|
||||||
obj->record_achieve_special = 0;
|
obj->record_achieve_special = 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1951,11 +1951,7 @@ struct mkroom *croom;
|
|||||||
* "prize" and then set record_achieve_special (maps to corpsenm)
|
* "prize" and then set record_achieve_special (maps to corpsenm)
|
||||||
* for the object. That field will later be checked to find out if
|
* for the object. That field will later be checked to find out if
|
||||||
* the player obtained the prize. */
|
* the player obtained the prize. */
|
||||||
if (otmp->otyp == LUCKSTONE && Is_mineend_level(&u.uz)) {
|
if (is_mines_prize(otmp) || is_soko_prize(otmp)) {
|
||||||
otmp->record_achieve_special = 1;
|
|
||||||
} else if ((otmp->otyp == AMULET_OF_REFLECTION
|
|
||||||
|| otmp->otyp == BAG_OF_HOLDING)
|
|
||||||
&& Is_sokoend_level(&u.uz)) {
|
|
||||||
otmp->record_achieve_special = 1;
|
otmp->record_achieve_special = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user