More fun
authorMartin Read <mpread@chiark.greenend.org.uk>
Sat, 8 Mar 2014 20:04:41 +0000 (20:04 +0000)
committerMartin Read <mpread@chiark.greenend.org.uk>
Sat, 8 Mar 2014 20:04:41 +0000 (20:04 +0000)
12 files changed:
.gitignore
Makefile
core [new file with mode: 0644]
display-nc.cc
log.cc
monsters.cc
monsters.hh
objects.cc
objects.hh
pmon_id.hh [deleted file]
pobj_id.hh [deleted file]
u.cc

index e99e36f..372dec5 100644 (file)
@@ -8,5 +8,7 @@ permons.cc
 *.bz2
 *.tar
 *.mk
+pobj_id.hh
+pmon_id.hh
 obumbrata
 obumbrata-*
index 1b54e00..3529790 100644 (file)
--- 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 (file)
index 0000000..d0f1bff
Binary files /dev/null and b/core differ
index cef82a2..5e8699b 100644 (file)
@@ -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 (file)
--- 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);
         }
index 55fee7c..25847ad 100644 (file)
@@ -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;
index a845ca0..a0eb5f9 100644 (file)
@@ -71,13 +71,13 @@ extern std::map<Mon_handle, Mon> 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)
index bd1c47e..a3c198b 100644 (file)
@@ -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);
index 689a992..90db33e 100644 (file)
@@ -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 (file)
index d98d87f..0000000
+++ /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 (file)
index b1fcf5f..0000000
+++ /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 (file)
--- 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)