Merge branch 'NetHack:NetHack-3.7' into NetHack-3.7
This commit is contained in:
@@ -1396,6 +1396,7 @@ unblind telepathy range depends on number of telepathy granting items worn
|
||||
gold thrown or kicked at a sleeping monster with the 'greedy' attribute gets
|
||||
caught instead of being treated as an attack but the catch message
|
||||
neglected to report that target monster was awakened in the process
|
||||
hero movement affects the water bubble movement direction
|
||||
|
||||
|
||||
Fixes to 3.7.0-x General Problems Exposed Via git Repository
|
||||
|
||||
@@ -1550,6 +1550,7 @@ extern void movebubbles(void);
|
||||
extern void water_friction(void);
|
||||
extern void save_waterlevel(NHFILE *) NONNULLARG1;
|
||||
extern void restore_waterlevel(NHFILE *) NONNULLARG1;
|
||||
extern void maybe_adjust_hero_bubble(void);
|
||||
|
||||
/* ### mkobj.c ### */
|
||||
|
||||
|
||||
@@ -2506,8 +2506,10 @@ domove(void)
|
||||
gd.domove_succeeded = 0L;
|
||||
domove_core();
|
||||
/* gd.domove_succeeded is available to make assessments now */
|
||||
if ((gd.domove_succeeded & (DOMOVE_RUSH | DOMOVE_WALK)) != 0)
|
||||
if ((gd.domove_succeeded & (DOMOVE_RUSH | DOMOVE_WALK)) != 0) {
|
||||
maybe_smudge_engr(ux1, uy1, u.ux, u.uy);
|
||||
maybe_adjust_hero_bubble();
|
||||
}
|
||||
gd.domove_attempting = 0L;
|
||||
}
|
||||
|
||||
|
||||
22
src/mkmaze.c
22
src/mkmaze.c
@@ -1489,6 +1489,9 @@ fumaroles(void)
|
||||
#define gbxmax (gx.xmax - 1)
|
||||
#define gbymax (gy.ymax - 1)
|
||||
|
||||
/* the bubble hero is in */
|
||||
static struct bubble *hero_bubble = NULL;
|
||||
|
||||
staticfn void set_wportal(void);
|
||||
staticfn void mk_bubble(coordxy, coordxy, int);
|
||||
staticfn void mv_bubble(struct bubble *, coordxy, coordxy, boolean);
|
||||
@@ -1513,6 +1516,8 @@ movebubbles(void)
|
||||
|
||||
vision_recalc(2);
|
||||
|
||||
hero_bubble = NULL;
|
||||
|
||||
if (Is_waterlevel(&u.uz)) {
|
||||
/* keep attached ball&chain separate from bubble objects */
|
||||
if (Punished)
|
||||
@@ -1583,6 +1588,7 @@ movebubbles(void)
|
||||
|
||||
cons->next = b->cons;
|
||||
b->cons = cons;
|
||||
hero_bubble = b;
|
||||
}
|
||||
if ((btrap = t_at(x, y)) != 0) {
|
||||
cons = (struct container *) alloc(sizeof *cons);
|
||||
@@ -1875,6 +1881,22 @@ mk_bubble(coordxy x, coordxy y, int n)
|
||||
mv_bubble(b, 0, 0, TRUE);
|
||||
}
|
||||
|
||||
/* maybe change the movement direction of the bubble hero is in */
|
||||
void
|
||||
maybe_adjust_hero_bubble(void)
|
||||
{
|
||||
if (!Is_waterlevel(&u.uz))
|
||||
return;
|
||||
|
||||
if (!u.dx && !u.dy)
|
||||
return;
|
||||
|
||||
if (hero_bubble && !rn2(2)) {
|
||||
hero_bubble->dx = u.dx;
|
||||
hero_bubble->dy = u.dy;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* The player, the portal and all other objects and monsters
|
||||
* float along with their associated bubbles. Bubbles may overlap
|
||||
|
||||
165
src/mon.c
165
src/mon.c
@@ -532,7 +532,8 @@ make_corpse(struct monst *mtmp, unsigned int corpseflags)
|
||||
struct obj *obj = (struct obj *) 0;
|
||||
struct obj *otmp = (struct obj *) 0;
|
||||
coordxy x = mtmp->mx, y = mtmp->my;
|
||||
int mndx = monsndx(mdat);
|
||||
/* int mndx = monsndx(mdat); */
|
||||
enum monnums mndx = monsndx(mdat);
|
||||
unsigned corpstatflags = corpseflags;
|
||||
boolean burythem = ((corpstatflags & CORPSTAT_BURIED) != 0);
|
||||
|
||||
@@ -687,8 +688,168 @@ make_corpse(struct monst *mtmp, unsigned int corpseflags)
|
||||
free_mgivenname(mtmp);
|
||||
newsym(x, y);
|
||||
return obj;
|
||||
case NON_PM: case LEAVESTATUE: case NUMMONS: /* never use as index */
|
||||
break;
|
||||
|
||||
#if (NH_DEVEL_STATUS != NH_STATUS_RELEASED)
|
||||
case PM_GIANT_ANT: case PM_KILLER_BEE: case PM_SOLDIER_ANT:
|
||||
case PM_FIRE_ANT: case PM_GIANT_BEETLE: case PM_QUEEN_BEE:
|
||||
|
||||
case PM_QUIVERING_BLOB: case PM_ACID_BLOB: case PM_GELATINOUS_CUBE:
|
||||
case PM_CHICKATRICE: case PM_COCKATRICE: case PM_PYROLISK:
|
||||
|
||||
case PM_JACKAL: case PM_FOX: case PM_COYOTE: case PM_WEREJACKAL:
|
||||
case PM_LITTLE_DOG: case PM_DINGO: case PM_DOG: case PM_LARGE_DOG:
|
||||
case PM_WOLF: case PM_WEREWOLF: case PM_WINTER_WOLF_CUB:
|
||||
case PM_WARG: case PM_WINTER_WOLF: case PM_HELL_HOUND_PUP:
|
||||
case PM_HELL_HOUND:
|
||||
|
||||
case PM_GAS_SPORE: case PM_FLOATING_EYE: case PM_FREEZING_SPHERE:
|
||||
case PM_FLAMING_SPHERE: case PM_SHOCKING_SPHERE:
|
||||
|
||||
case PM_KITTEN: case PM_HOUSECAT: case PM_JAGUAR: case PM_LYNX:
|
||||
case PM_PANTHER: case PM_LARGE_CAT: case PM_TIGER:
|
||||
|
||||
case PM_DISPLACER_BEAST: case PM_GREMLIN:
|
||||
case PM_GARGOYLE: case PM_WINGED_GARGOYLE:
|
||||
|
||||
case PM_HOBBIT: case PM_DWARF: case PM_BUGBEAR: case PM_DWARF_LEADER:
|
||||
case PM_DWARF_RULER:
|
||||
case PM_MIND_FLAYER: case PM_MASTER_MIND_FLAYER: case PM_MANES:
|
||||
case PM_HOMUNCULUS: case PM_IMP: case PM_LEMURE: case PM_QUASIT:
|
||||
case PM_TENGU: case PM_BLUE_JELLY: case PM_SPOTTED_JELLY:
|
||||
case PM_OCHRE_JELLY: case PM_KOBOLD: case PM_LARGE_KOBOLD:
|
||||
case PM_KOBOLD_LEADER: case PM_KOBOLD_SHAMAN: case PM_LEPRECHAUN:
|
||||
case PM_SMALL_MIMIC: case PM_LARGE_MIMIC: case PM_GIANT_MIMIC:
|
||||
case PM_WOOD_NYMPH: case PM_WATER_NYMPH: case PM_MOUNTAIN_NYMPH:
|
||||
case PM_GOBLIN: case PM_HOBGOBLIN: case PM_ORC: case PM_HILL_ORC:
|
||||
case PM_MORDOR_ORC: case PM_URUK_HAI: case PM_ORC_SHAMAN:
|
||||
case PM_ORC_CAPTAIN:
|
||||
case PM_ROCK_PIERCER: case PM_IRON_PIERCER: case PM_GLASS_PIERCER:
|
||||
case PM_ROTHE: case PM_MUMAK: case PM_LEOCROTTA: case PM_WUMPUS:
|
||||
case PM_TITANOTHERE: case PM_BALUCHITHERIUM: case PM_MASTODON:
|
||||
case PM_SEWER_RAT: case PM_GIANT_RAT: case PM_RABID_RAT:
|
||||
case PM_WERERAT:
|
||||
|
||||
case PM_ROCK_MOLE: case PM_WOODCHUCK:
|
||||
case PM_CAVE_SPIDER: case PM_CENTIPEDE: case PM_GIANT_SPIDER:
|
||||
case PM_SCORPION:
|
||||
case PM_LURKER_ABOVE: case PM_TRAPPER:
|
||||
case PM_PONY: case PM_HORSE: case PM_WARHORSE:
|
||||
case PM_FOG_CLOUD: case PM_DUST_VORTEX: case PM_ICE_VORTEX:
|
||||
case PM_ENERGY_VORTEX: case PM_STEAM_VORTEX: case PM_FIRE_VORTEX:
|
||||
|
||||
case PM_BABY_LONG_WORM: case PM_BABY_PURPLE_WORM:
|
||||
case PM_PURPLE_WORM:
|
||||
|
||||
case PM_GRID_BUG: case PM_XAN: case PM_YELLOW_LIGHT: case PM_BLACK_LIGHT:
|
||||
case PM_ZRUTY: case PM_COUATL: case PM_ALEAX: case PM_ANGEL:
|
||||
case PM_KI_RIN: case PM_ARCHON:
|
||||
|
||||
case PM_BAT: case PM_GIANT_BAT: case PM_RAVEN: case PM_VAMPIRE_BAT:
|
||||
case PM_PLAINS_CENTAUR: case PM_FOREST_CENTAUR: case PM_MOUNTAIN_CENTAUR:
|
||||
|
||||
case PM_BABY_GRAY_DRAGON: case PM_BABY_GOLD_DRAGON:
|
||||
case PM_BABY_SILVER_DRAGON: case PM_BABY_RED_DRAGON:
|
||||
case PM_BABY_WHITE_DRAGON: case PM_BABY_ORANGE_DRAGON:
|
||||
case PM_BABY_BLACK_DRAGON: case PM_BABY_BLUE_DRAGON:
|
||||
case PM_BABY_GREEN_DRAGON: case PM_BABY_YELLOW_DRAGON:
|
||||
|
||||
case PM_STALKER: case PM_AIR_ELEMENTAL: case PM_FIRE_ELEMENTAL:
|
||||
case PM_EARTH_ELEMENTAL: case PM_WATER_ELEMENTAL:
|
||||
|
||||
case PM_LICHEN: case PM_BROWN_MOLD: case PM_YELLOW_MOLD:
|
||||
case PM_GREEN_MOLD: case PM_RED_MOLD: case PM_SHRIEKER:
|
||||
case PM_VIOLET_FUNGUS:
|
||||
|
||||
case PM_GNOME: case PM_GNOME_LEADER: case PM_GNOMISH_WIZARD:
|
||||
case PM_GNOME_RULER:
|
||||
case PM_GIANT: case PM_STONE_GIANT: case PM_HILL_GIANT:
|
||||
case PM_FIRE_GIANT: case PM_FROST_GIANT: case PM_ETTIN:
|
||||
case PM_STORM_GIANT: case PM_TITAN:
|
||||
|
||||
case PM_MINOTAUR: case PM_JABBERWOCK: case PM_KEYSTONE_KOP:
|
||||
case PM_KOP_SERGEANT: case PM_KOP_LIEUTENANT: case PM_KOP_KAPTAIN:
|
||||
case PM_LICH: case PM_DEMILICH:
|
||||
case PM_MASTER_LICH: case PM_ARCH_LICH:
|
||||
|
||||
case PM_RED_NAGA_HATCHLING: case PM_BLACK_NAGA_HATCHLING:
|
||||
case PM_GOLDEN_NAGA_HATCHLING: case PM_GUARDIAN_NAGA_HATCHLING:
|
||||
case PM_RED_NAGA: case PM_BLACK_NAGA: case PM_GOLDEN_NAGA:
|
||||
case PM_GUARDIAN_NAGA:
|
||||
|
||||
case PM_OGRE: case PM_OGRE_LEADER: case PM_OGRE_TYRANT:
|
||||
|
||||
case PM_QUANTUM_MECHANIC: case PM_GENETIC_ENGINEER:
|
||||
case PM_RUST_MONSTER: case PM_DISENCHANTER:
|
||||
|
||||
case PM_GARTER_SNAKE: case PM_SNAKE: case PM_WATER_MOCCASIN:
|
||||
case PM_PYTHON: case PM_PIT_VIPER: case PM_COBRA:
|
||||
|
||||
case PM_TROLL: case PM_ICE_TROLL: case PM_ROCK_TROLL: case PM_WATER_TROLL:
|
||||
case PM_OLOG_HAI: case PM_UMBER_HULK:
|
||||
|
||||
case PM_VLAD_THE_IMPALER:
|
||||
|
||||
case PM_BARROW_WIGHT: case PM_WRAITH: case PM_NAZGUL:
|
||||
case PM_XORN: case PM_MONKEY: case PM_APE: case PM_OWLBEAR:
|
||||
case PM_YETI: case PM_CARNIVOROUS_APE: case PM_SASQUATCH:
|
||||
|
||||
case PM_GHOUL: case PM_SKELETON:
|
||||
|
||||
case PM_STRAW_GOLEM: case PM_FLESH_GOLEM:
|
||||
|
||||
case PM_HUMAN: case PM_HUMAN_WERERAT: case PM_HUMAN_WEREJACKAL:
|
||||
case PM_HUMAN_WEREWOLF: case PM_ELF: case PM_WOODLAND_ELF:
|
||||
case PM_GREEN_ELF: case PM_GREY_ELF: case PM_ELF_NOBLE:
|
||||
case PM_ELVEN_MONARCH:
|
||||
case PM_DOPPELGANGER: case PM_SHOPKEEPER:
|
||||
case PM_GUARD: case PM_PRISONER: case PM_ORACLE:
|
||||
case PM_ALIGNED_CLERIC: case PM_HIGH_CLERIC:
|
||||
case PM_SOLDIER: case PM_SERGEANT: case PM_NURSE:
|
||||
case PM_LIEUTENANT: case PM_CAPTAIN: case PM_WATCHMAN:
|
||||
case PM_WATCH_CAPTAIN:
|
||||
|
||||
case PM_MEDUSA: case PM_WIZARD_OF_YENDOR: case PM_CROESUS:
|
||||
case PM_GHOST: case PM_SHADE: case PM_WATER_DEMON:
|
||||
case PM_AMOROUS_DEMON: case PM_HORNED_DEVIL:
|
||||
case PM_ERINYS: case PM_BARBED_DEVIL: case PM_MARILITH: case PM_VROCK:
|
||||
case PM_HEZROU: case PM_BONE_DEVIL: case PM_ICE_DEVIL: case PM_NALFESHNEE:
|
||||
case PM_PIT_FIEND: case PM_SANDESTIN: case PM_BALROG: case PM_JUIBLEX:
|
||||
case PM_YEENOGHU: case PM_ORCUS: case PM_GERYON: case PM_DISPATER:
|
||||
case PM_BAALZEBUB: case PM_ASMODEUS: case PM_DEMOGORGON:
|
||||
case PM_DEATH: case PM_PESTILENCE: case PM_FAMINE:
|
||||
case PM_MAIL_DAEMON: case PM_DJINNI:
|
||||
|
||||
case PM_JELLYFISH: case PM_PIRANHA: case PM_SHARK: case PM_GIANT_EEL:
|
||||
case PM_ELECTRIC_EEL: case PM_KRAKEN:
|
||||
case PM_NEWT: case PM_GECKO: case PM_IGUANA: case PM_BABY_CROCODILE:
|
||||
case PM_LIZARD: case PM_CHAMELEON: case PM_CROCODILE:
|
||||
case PM_SALAMANDER: case PM_LONG_WORM_TAIL:
|
||||
|
||||
case PM_ARCHEOLOGIST: case PM_BARBARIAN: case PM_CAVE_DWELLER:
|
||||
case PM_HEALER: case PM_KNIGHT: case PM_MONK: case PM_CLERIC:
|
||||
case PM_RANGER: case PM_ROGUE: case PM_SAMURAI: case PM_TOURIST:
|
||||
case PM_VALKYRIE: case PM_WIZARD:
|
||||
|
||||
case PM_LORD_CARNARVON: case PM_PELIAS: case PM_SHAMAN_KARNOV:
|
||||
case PM_HIPPOCRATES: case PM_KING_ARTHUR: case PM_GRAND_MASTER:
|
||||
case PM_ARCH_PRIEST: case PM_ORION: case PM_MASTER_OF_THIEVES:
|
||||
case PM_LORD_SATO: case PM_TWOFLOWER: case PM_NORN:
|
||||
case PM_NEFERET_THE_GREEN: case PM_MINION_OF_HUHETOTL:
|
||||
case PM_THOTH_AMON: case PM_CHROMATIC_DRAGON: case PM_CYCLOPS:
|
||||
case PM_IXOTH: case PM_MASTER_KAEN: case PM_NALZOK:
|
||||
case PM_SCORPIUS: case PM_MASTER_ASSASSIN: case PM_ASHIKAGA_TAKAUJI:
|
||||
case PM_LORD_SURTUR: case PM_DARK_ONE: case PM_STUDENT:
|
||||
case PM_CHIEFTAIN: case PM_NEANDERTHAL: case PM_ATTENDANT:
|
||||
case PM_PAGE: case PM_ABBOT: case PM_ACOLYTE: case PM_HUNTER:
|
||||
case PM_THUG: case PM_NINJA: case PM_ROSHI: case PM_GUIDE:
|
||||
case PM_WARRIOR: case PM_APPRENTICE:
|
||||
/*FALLTHRU*/
|
||||
#else
|
||||
default:
|
||||
default_1:
|
||||
#endif
|
||||
default_1:
|
||||
if (gm.mvitals[mndx].mvflags & G_NOCORPSE) {
|
||||
return (struct obj *) 0;
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user