From: Martin Read Date: Sat, 8 Mar 2014 20:04:41 +0000 (+0000) Subject: More fun X-Git-Tag: 1.0.0~22 X-Git-Url: http://git.blackswordsonics.com/?a=commitdiff_plain;h=c87d3dbf1f3f6b260d77124757d1ed152c83bf00;p=obumbrata More fun --- diff --git a/.gitignore b/.gitignore index e99e36f..372dec5 100644 --- a/.gitignore +++ b/.gitignore @@ -8,5 +8,7 @@ permons.cc *.bz2 *.tar *.mk +pobj_id.hh +pmon_id.hh obumbrata obumbrata-* diff --git a/Makefile b/Makefile index 1b54e00..3529790 100644 --- a/Makefile +++ b/Makefile @@ -18,9 +18,9 @@ PATCHVERS:=0 COMMON_CFLAGS:=-Wall -Wwrite-strings -Wunreachable-code -Wformat -Werror=format-security -fstack-protector --param=ssp-buffer-size=4 -DMAJVERS=$(MAJVERS) -DMINVERS=$(MINVERS) -DPATCHVERS=$(PATCHVERS)-std=gnu11 -D_FORTIFY_SOURCE=2 -I$(srcdir) COMMON_CXXFLAGS:=-Wall -Wwrite-strings -Wno-unused-but-set-variable -Wredundant-decls -Wunreachable-code -Wformat -Werror=format-security -fstack-protector --param=ssp-buffer-size=4 -DMAJVERS=$(MAJVERS) -DMINVERS=$(MINVERS) -DPATCHVERS=$(PATCHVERS) -std=gnu++11 -D_FORTIFY_SOURCE=2 -I$(srcdir) PRODUCTION_CFLAGS:=$(COMMON_CFLAGS) -DEVELOPMENT_CFLAGS:=$(COMMON_CFLAGS) -O2 -g -Werror +DEVELOPMENT_CFLAGS:=$(COMMON_CFLAGS) -g -O2 -Werror PRODUCTION_CXXFLAGS:=$(COMMON_CXXFLAGS) -DEVELOPMENT_CXXFLAGS:=$(COMMON_CXXFLAGS) -O2 -g -Werror +DEVELOPMENT_CXXFLAGS:=$(COMMON_CXXFLAGS) -g -O2 -Werror LIBS=-lpanelw -lncursesw -lxdg-basedir -lm ARCHIVEDIR:=$(GAME)-$(MAJVERS).$(MINVERS).$(PATCHVERS) ARCHIVENAME:=$(GAME)_$(MAJVERS).$(MINVERS).$(PATCHVERS) diff --git a/core b/core new file mode 100644 index 0000000..d0f1bff Binary files /dev/null and b/core differ diff --git a/display-nc.cc b/display-nc.cc index cef82a2..5e8699b 100644 --- a/display-nc.cc +++ b/display-nc.cc @@ -759,8 +759,9 @@ static void update_inv(enum poclass_num filter) } else { + Obj const *optr = obj_snap(u.inventory[i]); if ((filter == POCLASS_NONE) || - (permobjs[objects[u.inventory[i]].po_ref].poclass == filter)) + (permobjs[optr->po_ref].poclass == filter)) { wattr_set(inventory_window, colour_data[Gcol_l_grey].attr, colour_data[Gcol_l_grey].cpair, nullptr); } diff --git a/log.cc b/log.cc index 6aa7b0f..3bb7b44 100644 --- a/log.cc +++ b/log.cc @@ -156,7 +156,7 @@ void wrapped_fread(void *buf, size_t size, size_t nmemb, FILE *fp) static inline void deserialize_uint32(FILE *fp, uint32_t *i) { - wrapped_fread(&i, 1, sizeof i, fp); + wrapped_fread(i, 1, sizeof *i, fp); *i = ntohl(*i); } @@ -346,7 +346,7 @@ static void rebuild_mapobjs(void) { for (auto iter = objects.begin(); iter != objects.end(); ++iter) { - if (iter->second.flags & OF_USED) + if ((iter->second.flags & OF_USED) && !(iter->second.flags & OF_WITH_YOU)) { lvl.set_obj_at(iter->second.pos, iter->first); } diff --git a/monsters.cc b/monsters.cc index 55fee7c..25847ad 100644 --- a/monsters.cc +++ b/monsters.cc @@ -131,6 +131,7 @@ Mon_handle create_mon(int pm_idx, Coord c) if (mon != NO_MON) { Mon m; + m.self = mon; m.pm_ref = pm_idx; m.flags = MF_USED | MF_ALIVE; m.pos = c; diff --git a/monsters.hh b/monsters.hh index a845ca0..a0eb5f9 100644 --- a/monsters.hh +++ b/monsters.hh @@ -71,13 +71,13 @@ extern std::map monsters; inline Mon *mon_snapv(Mon_handle mon) { auto iter = monsters.find(mon); - return ((iter == monsters.end()) ? &(iter->second) : nullptr); + return ((iter == monsters.end()) ? nullptr : &(iter->second)); } inline Mon const *mon_snap(Mon_handle mon) { auto iter = monsters.find(mon); - return ((iter == monsters.end()) ? &(iter->second) : nullptr); + return ((iter == monsters.end()) ? nullptr : &(iter->second)); } #define PLAYER_MON (-2) diff --git a/objects.cc b/objects.cc index bd1c47e..a3c198b 100644 --- a/objects.cc +++ b/objects.cc @@ -390,6 +390,7 @@ Obj_handle create_obj(int po_idx, int quantity, bool with_you, Coord c) } } Obj o; + o.self = obj; o.po_ref = po_idx; o.flags = OF_USED | (with_you ? OF_WITH_YOU : 0); o.pos = c; @@ -406,6 +407,7 @@ Obj_handle create_obj(int po_idx, int quantity, bool with_you, Coord c) default: break; } + objects[obj] = o; if (!(o.flags & OF_WITH_YOU)) { lvl.set_obj_at(c, obj); diff --git a/objects.hh b/objects.hh index 689a992..90db33e 100644 --- a/objects.hh +++ b/objects.hh @@ -67,13 +67,13 @@ int evasion_penalty(Obj_handle obj); inline Obj *obj_snapv(Obj_handle obj) { auto iter = objects.find(obj); - return ((iter == objects.end()) ? &(iter->second) : nullptr); + return ((iter == objects.end()) ? nullptr : &(iter->second)); } inline Obj const *obj_snap(Obj_handle obj) { auto iter = objects.find(obj); - return ((iter == objects.end()) ? &(iter->second) : nullptr); + return ((iter == objects.end()) ? nullptr : &(iter->second)); } Action_cost drop_obj(int inv_idx); diff --git a/pmon_id.hh b/pmon_id.hh deleted file mode 100644 index d98d87f..0000000 --- a/pmon_id.hh +++ /dev/null @@ -1,42 +0,0 @@ -// pmon_id.hh -// This file is autogenerated from default.permons -// and is subject to the same copyright licensing terms as that file. -// Do not edit this file directly; edit default.permons -// then use pmon_comp to regenerate this file and permons.cc -#pragma once -enum Pmon_id { - PM_NEWT, - PM_RAT, - PM_WOLF, - PM_SNAKE, - PM_THUG, - PM_GOON, - PM_HUNTER, - PM_DUELLIST, - PM_WARLORD, - PM_GOBLIN, - PM_BAD_ELF, - PM_TROLL, - PM_GIANT, - PM_GIANT_JARL, - PM_WIZARD, - PM_ARCHMAGE, - PM_ZOMBIE, - PM_WRAITH, - PM_LICH, - PM_MASTER_LICH, - PM_VAMPIRE, - PM_FIRE_IMP, - PM_DEMON, - PM_DEFILER, - PM_PUTRID_EMISSARY, - PM_TORMENTOR, - PM_IRON_LORD, - PM_CENTAUR, - PM_ICE_MONSTER, - PM_DRAGON, - PM_MOONDRAKE}; - -#define NUM_OF_PERMONS 31 - -// pmon_id.hh diff --git a/pobj_id.hh b/pobj_id.hh deleted file mode 100644 index b1fcf5f..0000000 --- a/pobj_id.hh +++ /dev/null @@ -1,73 +0,0 @@ -// pobj_id.hh -// This file is autogenerated from default.permobjs -// and is subject to the same copyright licensing terms as that file. -// Do not edit this file directly; edit default.permobjs -// then use pobj_comp to regenerate this file and permobj.cc -#pragma once -enum Pobj_id { - PO_DAGGER, - PO_LONG_SWORD, - PO_MACE, - PO_RUNESWORD, - PO_HELLGLAIVE, - PO_PLAGUE_SCYTHE, - PO_TORMENTORS_LASH, - PO_DEATH_STAFF, - PO_STAFF_OF_FIRE, - PO_BOW, - PO_CROSSBOW, - PO_THUNDERBOW, - PO_LEATHER_ARMOUR, - PO_CHAINMAIL, - PO_PLATE_ARMOUR, - PO_MAGE_ARMOUR, - PO_MUNDANE_ROBE, - PO_ROBE_OF_SWIFTNESS, - PO_ROBE_OF_SHADOWS, - PO_DRAGONHIDE_ARMOUR, - PO_METEORIC_PLATE_ARMOUR, - PO_SACRED_CHAINMAIL, - PO_RAGGED_SHIFT, - PO_BATTLE_BALLGOWN, - PO_IMPERATRIX_GOWN, - PO_FOETID_VESTMENTS, - PO_LICHS_ROBE, - PO_INFERNITE_ARMOUR, - PO_IRON_RATION, - PO_PARCEL_OF_DRIED_FRUIT, - PO_ROUND_OF_ELVEN_WAYBREAD, - PO_DEVIL_SPLEEN, - PO_TELEPORT_SCROLL, - PO_FIRE_SCROLL, - PO_PROTECTION_SCROLL, - PO_HEALING_POTION, - PO_BODY_POTION, - PO_AGILITY_POTION, - PO_RESTORATION_POTION, - PO_REGENERATION_RING, - PO_FIRE_RING, - PO_VAMPIRE_RING, - PO_FROST_RING, - PO_TELEPORT_RING, - PO_SLIME_RING, - PO_PROTECTION_RING, - PO_IMPERIAL_SEAL, - PO_CORPSE}; -#define PO_FIRST_WEAPON PO_DAGGER -#define PO_LAST_WEAPON PO_THUNDERBOW -#define PO_FIRST_ARMOUR PO_LEATHER_ARMOUR -#define PO_LAST_ARMOUR PO_INFERNITE_ARMOUR -#define PO_FIRST_FOOD PO_IRON_RATION -#define PO_LAST_FOOD PO_DEVIL_SPLEEN -#define PO_FIRST_SCROLL PO_TELEPORT_SCROLL -#define PO_LAST_SCROLL PO_PROTECTION_SCROLL -#define PO_FIRST_POTION PO_HEALING_POTION -#define PO_LAST_POTION PO_RESTORATION_POTION -#define PO_FIRST_RING PO_REGENERATION_RING -#define PO_LAST_RING PO_IMPERIAL_SEAL -#define PO_FIRST_CARRION PO_CORPSE -#define PO_LAST_CARRION PO_CORPSE - -#define NUM_OF_PERMOBJS 48 - -// pobj_id.hh diff --git a/u.cc b/u.cc index e0bce27..7f42579 100644 --- a/u.cc +++ b/u.cc @@ -347,7 +347,10 @@ void u_init(char const *name) u.experience = 0; u.level = 1; u.food = 2000; - memset(u.inventory, -1, sizeof u.inventory); + for (int i = 0; i < 19; ++i) + { + u.inventory[i] = NO_OBJ; + } u.inventory[0] = create_obj(PO_DAGGER, 1, true, Nowhere); u.inventory[1] = create_obj(PO_IRON_RATION, 1, true, Nowhere); u.inventory[2] = create_obj(PO_BATTLE_BALLGOWN, 1, true, Nowhere); @@ -726,13 +729,13 @@ Action_cost do_player_action(Action *act) } else { - return player_wield(slot, Noise_std); + return player_wield(u.inventory[slot], Noise_std); } break; case WEAR_ARMOUR: slot = act->details[0]; - return wear_armour(slot); + return wear_armour(u.inventory[slot]); case EMANATE_ARMOUR: if (u.armour == NO_OBJ)