[Scummvm-git-logs] scummvm master -> 7003cf793f2ddc5b773293088a2b5e485bc8c105

dreammaster noreply at scummvm.org
Fri Dec 3 04:48:27 UTC 2021


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
6791dc2319 ULTIMA6: Fix pointer alignment
7003cf793f ULTIMA4: Don't pack a structure with pointers in it.


Commit: 6791dc23196cd71d09ecc44c510c6dd35a3f0787
    https://github.com/scummvm/scummvm/commit/6791dc23196cd71d09ecc44c510c6dd35a3f0787
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2021-12-02T20:48:24-08:00

Commit Message:
ULTIMA6: Fix pointer alignment

This fails on Xcode arm64

Changed paths:
    engines/ultima/nuvie/usecode/u6_object_types.h
    engines/ultima/nuvie/usecode/u6_usecode.h


diff --git a/engines/ultima/nuvie/usecode/u6_object_types.h b/engines/ultima/nuvie/usecode/u6_object_types.h
index e5c9b65145..9ebb32357b 100644
--- a/engines/ultima/nuvie/usecode/u6_object_types.h
+++ b/engines/ultima/nuvie/usecode/u6_object_types.h
@@ -27,167 +27,167 @@ class U6UseCode;
 
 const U6ObjectType U6ObjectTypes[] = {
 // (object,frame,distance to trigger,event(s),function,properties)
-	{ OBJ_U6_EGG, 0, 0, USE_EVENT_USE/*|USE_EVENT_LOAD*/, &U6UseCode::use_egg, OBJTYPE_CONTAINER },
-
-	{ OBJ_U6_OAKEN_DOOR,   255, 0, USE_EVENT_USE, &U6UseCode::use_door, OBJTYPE_NONE },
-	{ OBJ_U6_WINDOWED_DOOR, 255, 0, USE_EVENT_USE, &U6UseCode::use_door, OBJTYPE_NONE },
-	{ OBJ_U6_CEDAR_DOOR,   255, 0, USE_EVENT_USE, &U6UseCode::use_door, OBJTYPE_NONE },
-	{ OBJ_U6_STEEL_DOOR,   255, 0, USE_EVENT_USE, &U6UseCode::use_door, OBJTYPE_NONE },
-	{ OBJ_U6_KEY,          255, 0, USE_EVENT_USE, &U6UseCode::use_key, OBJTYPE_NONE },
-	{ OBJ_U6_LOCK_PICK,    255, 0, USE_EVENT_USE | USE_EVENT_SEARCH | USE_EVENT_GET, &U6UseCode::use_key, OBJTYPE_NONE },
-
-	{ OBJ_U6_PROTECTION_RING, 0, 0, USE_EVENT_READY, &U6UseCode::magic_ring, OBJTYPE_NONE },
-	{ OBJ_U6_REGENERATION_RING, 0, 0, USE_EVENT_READY, &U6UseCode::magic_ring, OBJTYPE_NONE },
-	{ OBJ_U6_INVISIBILITY_RING, 0, 0, USE_EVENT_READY, &U6UseCode::magic_ring, OBJTYPE_NONE },
-
-	{ OBJ_U6_STAFF,        255, 0, USE_EVENT_USE, &U6UseCode::use_staff, OBJTYPE_NONE },
-
-	{ OBJ_U6_STORM_CLOAK, 0, 0, USE_EVENT_READY, &U6UseCode::storm_cloak, OBJTYPE_NONE },
-
-	{ OBJ_U6_SIGN,      255, 0, USE_EVENT_LOOK, &U6UseCode::look_sign, OBJTYPE_BOOK },
-	{ OBJ_U6_BOOK,      255, 0, USE_EVENT_LOOK, &U6UseCode::look_sign, OBJTYPE_BOOK },
-	{ OBJ_U6_SCROLL,    255, 0, USE_EVENT_LOOK, &U6UseCode::look_sign, OBJTYPE_BOOK },
-	{ OBJ_U6_PICTURE,   255, 0, USE_EVENT_LOOK, &U6UseCode::look_sign, OBJTYPE_BOOK },
-	{ OBJ_U6_SIGN_ARROW, 255, 0, USE_EVENT_LOOK, &U6UseCode::look_sign, OBJTYPE_BOOK },
-	{ OBJ_U6_TOMBSTONE, 255, 0, USE_EVENT_LOOK, &U6UseCode::look_sign, OBJTYPE_BOOK },
-	{ OBJ_U6_CROSS,     255, 0, USE_EVENT_LOOK, &U6UseCode::look_sign, OBJTYPE_BOOK },
-	{ OBJ_U6_CODEX,       0, 0, USE_EVENT_LOOK, &U6UseCode::look_sign, OBJTYPE_BOOK },
-	{ OBJ_U6_BOOK_OF_CIRCLES, 255, 0, USE_EVENT_LOOK, &U6UseCode::look_sign, OBJTYPE_BOOK },
-
-	{ OBJ_U6_CRATE,        0, 0, USE_EVENT_SEARCH, &U6UseCode::use_container, OBJTYPE_CONTAINER },
-	{ OBJ_U6_CRATE,      255, 0, USE_EVENT_USE,   &U6UseCode::use_container, OBJTYPE_CONTAINER },
-	{ OBJ_U6_BARREL,       0, 0, USE_EVENT_SEARCH, &U6UseCode::use_container, OBJTYPE_CONTAINER },
-	{ OBJ_U6_BARREL,     255, 0, USE_EVENT_USE,   &U6UseCode::use_container, OBJTYPE_CONTAINER },
-	{ OBJ_U6_CHEST,        0, 0, USE_EVENT_SEARCH | USE_EVENT_USE, &U6UseCode::use_container, OBJTYPE_CONTAINER },
-	{ OBJ_U6_CHEST,      255, 0, USE_EVENT_USE | USE_EVENT_GET,   &U6UseCode::use_container, OBJTYPE_CONTAINER },
-	{ OBJ_U6_SECRET_DOOR, 255, 0, USE_EVENT_USE | USE_EVENT_SEARCH, &U6UseCode::use_secret_door, OBJTYPE_NONE },
-	{ OBJ_U6_BAG,        255, 0, USE_EVENT_SEARCH | USE_EVENT_USE, &U6UseCode::use_container, OBJTYPE_CONTAINER },
-	{ OBJ_U6_BACKPACK,   255, 0, USE_EVENT_SEARCH | USE_EVENT_USE, &U6UseCode::use_container, OBJTYPE_CONTAINER },
-	{ OBJ_U6_BASKET,     255, 0, USE_EVENT_SEARCH | USE_EVENT_USE, &U6UseCode::use_container, OBJTYPE_CONTAINER },
-	{ OBJ_U6_DRAWER,     255, 0, USE_EVENT_SEARCH | USE_EVENT_USE, &U6UseCode::use_container, OBJTYPE_CONTAINER },
-	{ OBJ_U6_DESK,     255, 0, USE_EVENT_SEARCH | USE_EVENT_USE, &U6UseCode::use_container, OBJTYPE_CONTAINER },
-	{ OBJ_U6_STONE_LION,   1, 0, USE_EVENT_SEARCH | USE_EVENT_USE, &U6UseCode::use_container, OBJTYPE_NONE },
-	{ OBJ_U6_MOUSE,        255, 0, USE_EVENT_SEARCH | USE_EVENT_USE, &U6UseCode::use_container, OBJTYPE_CONTAINER },
-	{ OBJ_U6_GRAVE,        0, 0, USE_EVENT_SEARCH | USE_EVENT_USE, &U6UseCode::use_container, OBJTYPE_NONE },
-	{ OBJ_U6_DEAD_ANIMAL, 255, 0, USE_EVENT_SEARCH | USE_EVENT_USE, &U6UseCode::use_container, OBJTYPE_CONTAINER },
-	{ OBJ_U6_DEAD_BODY,  255, 0, USE_EVENT_SEARCH | USE_EVENT_USE, &U6UseCode::use_container, OBJTYPE_CONTAINER },
-	{ OBJ_U6_DRAKE,      255, 0, USE_EVENT_SEARCH | USE_EVENT_USE, &U6UseCode::use_container, OBJTYPE_CONTAINER },
-	{ OBJ_U6_DEAD_CYCLOPS, 255, 0, USE_EVENT_SEARCH | USE_EVENT_USE, &U6UseCode::use_container, OBJTYPE_CONTAINER },
-	{ OBJ_U6_DEAD_GARGOYLE, 255, 0, USE_EVENT_SEARCH | USE_EVENT_USE, &U6UseCode::use_container, OBJTYPE_CONTAINER },
-	{ OBJ_U6_REAPER,     255, 0, USE_EVENT_SEARCH | USE_EVENT_USE, &U6UseCode::use_container, OBJTYPE_CONTAINER },
-	{ OBJ_U6_REMAINS,    255, 0, USE_EVENT_SEARCH | USE_EVENT_USE, &U6UseCode::use_container, OBJTYPE_CONTAINER },
-	{ OBJ_U6_DEER,       255, 0, USE_EVENT_SEARCH | USE_EVENT_USE, &U6UseCode::use_container, OBJTYPE_CONTAINER },
-	{ OBJ_U6_MONGBAT,    255, 0, USE_EVENT_SEARCH | USE_EVENT_USE, &U6UseCode::use_container, OBJTYPE_CONTAINER },
-
-	{ OBJ_U6_V_PASSTHROUGH, 255, 0, USE_EVENT_USE, &U6UseCode::use_passthrough, OBJTYPE_NONE },
-	{ OBJ_U6_H_PASSTHROUGH, 255, 0, USE_EVENT_USE, &U6UseCode::use_passthrough, OBJTYPE_NONE },
-
-	{ OBJ_U6_LEVER, 255, 0, USE_EVENT_USE, &U6UseCode::use_switch, OBJTYPE_NONE },
-	{ OBJ_U6_SWITCH, 255, 0, USE_EVENT_USE, &U6UseCode::use_switch, OBJTYPE_NONE },
-
-	{ OBJ_U6_CHURN, 255, 0, USE_EVENT_USE, &U6UseCode::use_churn, OBJTYPE_NONE },
-
-	{ OBJ_U6_FISHING_POLE, 255, 0, USE_EVENT_USE, &U6UseCode::use_fishing_pole, OBJTYPE_NONE },
-
-
-	{ OBJ_U6_CRANK, 255, 0, USE_EVENT_USE, &U6UseCode::use_crank, OBJTYPE_NONE },
-
-	{ OBJ_U6_BED,       255, 0, USE_EVENT_SEARCH, &U6UseCode::use_container, OBJTYPE_CONTAINER },
-
-	{ OBJ_U6_FIREPLACE, 255, 0, USE_EVENT_USE, &U6UseCode::use_firedevice, OBJTYPE_NONE },
-	{ OBJ_U6_CANDLE,    255, 0, USE_EVENT_USE, &U6UseCode::use_firedevice, OBJTYPE_NONE },
-	{ OBJ_U6_CANDELABRA, 255, 0, USE_EVENT_USE, &U6UseCode::use_firedevice, OBJTYPE_NONE },
-	{ OBJ_U6_BRAZIER,   0, 0, USE_EVENT_USE, &U6UseCode::use_firedevice, OBJTYPE_NONE },
-	{ OBJ_U6_BRAZIER,   1, 0, USE_EVENT_USE, &U6UseCode::use_firedevice, OBJTYPE_NONE },
-	{ OBJ_U6_BRAZIER,   2, 0, USE_EVENT_LOOK, &U6UseCode::holy_flame, OBJTYPE_NONE },
-	{ OBJ_U6_TORCH,     255, 0, USE_EVENT_USE | USE_EVENT_READY | USE_EVENT_GET | USE_EVENT_DROP, &U6UseCode::torch, OBJTYPE_NONE },
-	{ OBJ_U6_SPELLBOOK, 255, 0, USE_EVENT_USE | USE_EVENT_LOOK, &U6UseCode::use_spellbook, OBJTYPE_NONE },
-
-	{ OBJ_U6_MOONSTONE, 255, 0, USE_EVENT_USE | USE_EVENT_GET, &U6UseCode::use_moonstone, OBJTYPE_NONE },
-	{ OBJ_U6_ORB_OF_THE_MOONS, 255, 0, USE_EVENT_USE, &U6UseCode::use_orb, OBJTYPE_NONE },
-	{ OBJ_U6_MOONGATE,  1, 0, USE_EVENT_PASS, &U6UseCode::enter_moongate, OBJTYPE_NONE },
-	{ OBJ_U6_RED_GATE,  1, 0, USE_EVENT_PASS, &U6UseCode::enter_moongate, OBJTYPE_NONE },
-	{ OBJ_U6_LADDER, 255, 0, USE_EVENT_USE, &U6UseCode::use_ladder, OBJTYPE_NONE },
-	{ OBJ_U6_CAVE,  255, 0, USE_EVENT_PASS, &U6UseCode::enter_dungeon, OBJTYPE_NONE },
-	{ OBJ_U6_HOLE,  255, 0, USE_EVENT_USE | USE_EVENT_PASS, &U6UseCode::enter_dungeon, OBJTYPE_NONE },
-
-	{ OBJ_U6_CLOCK,     255, 0, USE_EVENT_LOOK, &U6UseCode::look_clock, OBJTYPE_NONE },
-	{ OBJ_U6_SUNDIAL,   255, 0, USE_EVENT_LOOK, &U6UseCode::look_clock, OBJTYPE_NONE },
-	{ OBJ_U6_MIRROR,    255, 0, USE_EVENT_LOOK, &U6UseCode::look_mirror, OBJTYPE_NONE },
-	{ OBJ_U6_WELL,      255, 0, USE_EVENT_USE, &U6UseCode::use_well, OBJTYPE_NONE },
-	{ OBJ_U6_POWDER_KEG, 255, 0, USE_EVENT_USE | USE_EVENT_MESSAGE, &U6UseCode::use_powder_keg, OBJTYPE_NONE },
-	{ OBJ_U6_GEM,         0, 0, USE_EVENT_USE | USE_EVENT_MESSAGE, &U6UseCode::use_peer_gem, OBJTYPE_NONE },
-
-	{ OBJ_U6_BEEHIVE,   255, 0, USE_EVENT_USE, &U6UseCode::use_beehive, OBJTYPE_NONE },
-
-	{ OBJ_U6_POTION,    255, 0, USE_EVENT_USE | USE_EVENT_MESSAGE, &U6UseCode::use_potion, OBJTYPE_NONE },
-	{ OBJ_U6_BUTTER,      0, 0, USE_EVENT_USE, &U6UseCode::use_food, OBJTYPE_FOOD },
-	{ OBJ_U6_WINE,        0, 0, USE_EVENT_USE, &U6UseCode::use_food, OBJTYPE_FOOD },
-	{ OBJ_U6_MEAD,        0, 0, USE_EVENT_USE, &U6UseCode::use_food, OBJTYPE_FOOD },
-	{ OBJ_U6_ALE,         0, 0, USE_EVENT_USE, &U6UseCode::use_food, OBJTYPE_FOOD },
-	{ OBJ_U6_BREAD,       0, 0, USE_EVENT_USE, &U6UseCode::use_food, OBJTYPE_FOOD },
-	{ OBJ_U6_MEAT_PORTION, 0, 0, USE_EVENT_USE, &U6UseCode::use_food, OBJTYPE_FOOD },
-	{ OBJ_U6_ROLLS,       0, 0, USE_EVENT_USE, &U6UseCode::use_food, OBJTYPE_FOOD },
-	{ OBJ_U6_CAKE,        0, 0, USE_EVENT_USE, &U6UseCode::use_food, OBJTYPE_FOOD },
-	{ OBJ_U6_CHEESE,      0, 0, USE_EVENT_USE, &U6UseCode::use_food, OBJTYPE_FOOD },
-	{ OBJ_U6_RIBS,        0, 0, USE_EVENT_USE, &U6UseCode::use_food, OBJTYPE_FOOD },
-	{ OBJ_U6_MEAT,        0, 0, USE_EVENT_USE, &U6UseCode::use_food, OBJTYPE_FOOD },
-	{ OBJ_U6_GRAPES,      0, 0, USE_EVENT_USE, &U6UseCode::use_food, OBJTYPE_FOOD },
-	{ OBJ_U6_HAM,         0, 0, USE_EVENT_USE, &U6UseCode::use_food, OBJTYPE_FOOD },
-	{ OBJ_U6_GARLIC,      0, 0, USE_EVENT_USE, &U6UseCode::use_food, OBJTYPE_FOOD },
-	{ OBJ_U6_HORSE_CHOPS, 0, 0, USE_EVENT_USE, &U6UseCode::use_food, OBJTYPE_FOOD },
-	{ OBJ_U6_JAR_OF_HONEY, 0, 0, USE_EVENT_USE, &U6UseCode::use_food, OBJTYPE_FOOD },
-	{ OBJ_U6_DRAGON_EGG,  0, 0, USE_EVENT_USE, &U6UseCode::use_food, OBJTYPE_FOOD },
-	{ OBJ_U6_FISH,        0, 0, USE_EVENT_USE, &U6UseCode::use_food, OBJTYPE_FOOD },
-
-	{ OBJ_U6_FAN, 0, 0, USE_EVENT_USE, &U6UseCode::use_fan, OBJTYPE_NONE },
-	{ OBJ_U6_SEXTANT, 0, 0, USE_EVENT_USE, &U6UseCode::use_sextant, OBJTYPE_NONE },
-
-	{ OBJ_U6_COW, 255, 0, USE_EVENT_USE, &U6UseCode::use_cow, OBJTYPE_NONE },
-	{ OBJ_U6_HORSE, 255, 0, USE_EVENT_USE, &U6UseCode::use_horse, OBJTYPE_NONE },
-	{ OBJ_U6_HORSE_WITH_RIDER, 255, 0, USE_EVENT_USE, &U6UseCode::use_horse, OBJTYPE_NONE },
-
-	{ OBJ_U6_SHIP, 255, 0, USE_EVENT_USE | USE_EVENT_SEARCH | USE_EVENT_LOOK, &U6UseCode::use_boat, OBJTYPE_NONE },
-	{ OBJ_U6_SKIFF, 255, 0, USE_EVENT_USE | USE_EVENT_GET | USE_EVENT_LOOK, &U6UseCode::use_boat, OBJTYPE_NONE },
-	{ OBJ_U6_RAFT,   0, 0, USE_EVENT_USE, &U6UseCode::use_boat, OBJTYPE_NONE },
+	{ &U6UseCode::use_egg,              OBJ_U6_EGG, 0, 0, USE_EVENT_USE/*|USE_EVENT_LOAD*/, OBJTYPE_CONTAINER },
+
+	{ &U6UseCode::use_door,             OBJ_U6_OAKEN_DOOR,   255, 0, USE_EVENT_USE, OBJTYPE_NONE },
+	{ &U6UseCode::use_door,             OBJ_U6_WINDOWED_DOOR, 255, 0, USE_EVENT_USE, OBJTYPE_NONE },
+	{ &U6UseCode::use_door,             OBJ_U6_CEDAR_DOOR,   255, 0, USE_EVENT_USE, OBJTYPE_NONE },
+	{ &U6UseCode::use_door,             OBJ_U6_STEEL_DOOR,   255, 0, USE_EVENT_USE, OBJTYPE_NONE },
+	{ &U6UseCode::use_key,              OBJ_U6_KEY,          255, 0, USE_EVENT_USE, OBJTYPE_NONE },
+	{ &U6UseCode::use_key,              OBJ_U6_LOCK_PICK,    255, 0, USE_EVENT_USE | USE_EVENT_SEARCH | USE_EVENT_GET, OBJTYPE_NONE },
+
+	{ &U6UseCode::magic_ring,           OBJ_U6_PROTECTION_RING, 0, 0, USE_EVENT_READY, OBJTYPE_NONE },
+	{ &U6UseCode::magic_ring,           OBJ_U6_REGENERATION_RING, 0, 0, USE_EVENT_READY, OBJTYPE_NONE },
+	{ &U6UseCode::magic_ring,           OBJ_U6_INVISIBILITY_RING, 0, 0, USE_EVENT_READY, OBJTYPE_NONE },
+
+	{ &U6UseCode::use_staff,            OBJ_U6_STAFF,        255, 0, USE_EVENT_USE, OBJTYPE_NONE },
+
+	{ &U6UseCode::storm_cloak,          OBJ_U6_STORM_CLOAK, 0, 0, USE_EVENT_READY, OBJTYPE_NONE },
+
+	{ &U6UseCode::look_sign,            OBJ_U6_SIGN,      255, 0, USE_EVENT_LOOK, OBJTYPE_BOOK },
+	{ &U6UseCode::look_sign,            OBJ_U6_BOOK,      255, 0, USE_EVENT_LOOK, OBJTYPE_BOOK },
+	{ &U6UseCode::look_sign,            OBJ_U6_SCROLL,    255, 0, USE_EVENT_LOOK, OBJTYPE_BOOK },
+	{ &U6UseCode::look_sign,            OBJ_U6_PICTURE,   255, 0, USE_EVENT_LOOK, OBJTYPE_BOOK },
+	{ &U6UseCode::look_sign,            OBJ_U6_SIGN_ARROW, 255, 0, USE_EVENT_LOOK, OBJTYPE_BOOK },
+	{ &U6UseCode::look_sign,            OBJ_U6_TOMBSTONE, 255, 0, USE_EVENT_LOOK, OBJTYPE_BOOK },
+	{ &U6UseCode::look_sign,            OBJ_U6_CROSS,     255, 0, USE_EVENT_LOOK, OBJTYPE_BOOK },
+	{ &U6UseCode::look_sign,            OBJ_U6_CODEX,       0, 0, USE_EVENT_LOOK, OBJTYPE_BOOK },
+	{ &U6UseCode::look_sign,            OBJ_U6_BOOK_OF_CIRCLES, 255, 0, USE_EVENT_LOOK, OBJTYPE_BOOK },
+
+	{ &U6UseCode::use_container,        OBJ_U6_CRATE,        0, 0, USE_EVENT_SEARCH, OBJTYPE_CONTAINER },
+	{ &U6UseCode::use_container,        OBJ_U6_CRATE,      255, 0, USE_EVENT_USE, OBJTYPE_CONTAINER },
+	{ &U6UseCode::use_container,        OBJ_U6_BARREL,       0, 0, USE_EVENT_SEARCH, OBJTYPE_CONTAINER },
+	{ &U6UseCode::use_container,        OBJ_U6_BARREL,     255, 0, USE_EVENT_USE, OBJTYPE_CONTAINER },
+	{ &U6UseCode::use_container,        OBJ_U6_CHEST,        0, 0, USE_EVENT_SEARCH | USE_EVENT_USE, OBJTYPE_CONTAINER },
+	{ &U6UseCode::use_container,        OBJ_U6_CHEST,      255, 0, USE_EVENT_USE | USE_EVENT_GET, OBJTYPE_CONTAINER },
+	{ &U6UseCode::use_secret_door,      OBJ_U6_SECRET_DOOR, 255, 0, USE_EVENT_USE | USE_EVENT_SEARCH, OBJTYPE_NONE },
+	{ &U6UseCode::use_container,        OBJ_U6_BAG,        255, 0, USE_EVENT_SEARCH | USE_EVENT_USE, OBJTYPE_CONTAINER },
+	{ &U6UseCode::use_container,        OBJ_U6_BACKPACK,   255, 0, USE_EVENT_SEARCH | USE_EVENT_USE, OBJTYPE_CONTAINER },
+	{ &U6UseCode::use_container,        OBJ_U6_BASKET,     255, 0, USE_EVENT_SEARCH | USE_EVENT_USE, OBJTYPE_CONTAINER },
+	{ &U6UseCode::use_container,        OBJ_U6_DRAWER,     255, 0, USE_EVENT_SEARCH | USE_EVENT_USE, OBJTYPE_CONTAINER },
+	{ &U6UseCode::use_container,        OBJ_U6_DESK,     255, 0, USE_EVENT_SEARCH | USE_EVENT_USE, OBJTYPE_CONTAINER },
+	{ &U6UseCode::use_container,        OBJ_U6_STONE_LION,   1, 0, USE_EVENT_SEARCH | USE_EVENT_USE, OBJTYPE_NONE },
+	{ &U6UseCode::use_container,        OBJ_U6_MOUSE,        255, 0, USE_EVENT_SEARCH | USE_EVENT_USE, OBJTYPE_CONTAINER },
+	{ &U6UseCode::use_container,        OBJ_U6_GRAVE,        0, 0, USE_EVENT_SEARCH | USE_EVENT_USE, OBJTYPE_NONE },
+	{ &U6UseCode::use_container,        OBJ_U6_DEAD_ANIMAL, 255, 0, USE_EVENT_SEARCH | USE_EVENT_USE, OBJTYPE_CONTAINER },
+	{ &U6UseCode::use_container,        OBJ_U6_DEAD_BODY,  255, 0, USE_EVENT_SEARCH | USE_EVENT_USE, OBJTYPE_CONTAINER },
+	{ &U6UseCode::use_container,        OBJ_U6_DRAKE,      255, 0, USE_EVENT_SEARCH | USE_EVENT_USE, OBJTYPE_CONTAINER },
+	{ &U6UseCode::use_container,        OBJ_U6_DEAD_CYCLOPS, 255, 0, USE_EVENT_SEARCH | USE_EVENT_USE, OBJTYPE_CONTAINER },
+	{ &U6UseCode::use_container,        OBJ_U6_DEAD_GARGOYLE, 255, 0, USE_EVENT_SEARCH | USE_EVENT_USE, OBJTYPE_CONTAINER },
+	{ &U6UseCode::use_container,        OBJ_U6_REAPER,     255, 0, USE_EVENT_SEARCH | USE_EVENT_USE, OBJTYPE_CONTAINER },
+	{ &U6UseCode::use_container,        OBJ_U6_REMAINS,    255, 0, USE_EVENT_SEARCH | USE_EVENT_USE, OBJTYPE_CONTAINER },
+	{ &U6UseCode::use_container,        OBJ_U6_DEER,       255, 0, USE_EVENT_SEARCH | USE_EVENT_USE, OBJTYPE_CONTAINER },
+	{ &U6UseCode::use_container,        OBJ_U6_MONGBAT,    255, 0, USE_EVENT_SEARCH | USE_EVENT_USE, OBJTYPE_CONTAINER },
+
+	{ &U6UseCode::use_passthrough,      OBJ_U6_V_PASSTHROUGH, 255, 0, USE_EVENT_USE, OBJTYPE_NONE },
+	{ &U6UseCode::use_passthrough,      OBJ_U6_H_PASSTHROUGH, 255, 0, USE_EVENT_USE, OBJTYPE_NONE },
+
+	{ &U6UseCode::use_switch,           OBJ_U6_LEVER, 255, 0, USE_EVENT_USE, OBJTYPE_NONE },
+	{ &U6UseCode::use_switch,           OBJ_U6_SWITCH, 255, 0, USE_EVENT_USE, OBJTYPE_NONE },
+
+	{ &U6UseCode::use_churn,            OBJ_U6_CHURN, 255, 0, USE_EVENT_USE, OBJTYPE_NONE },
+
+	{ &U6UseCode::use_fishing_pole,     OBJ_U6_FISHING_POLE, 255, 0, USE_EVENT_USE, OBJTYPE_NONE },
+
+
+	{ &U6UseCode::use_crank,            OBJ_U6_CRANK, 255, 0, USE_EVENT_USE, OBJTYPE_NONE },
+
+	{ &U6UseCode::use_container,        OBJ_U6_BED,       255, 0, USE_EVENT_SEARCH, OBJTYPE_CONTAINER },
+
+	{ &U6UseCode::use_firedevice,       OBJ_U6_FIREPLACE, 255, 0, USE_EVENT_USE, OBJTYPE_NONE },
+	{ &U6UseCode::use_firedevice,       OBJ_U6_CANDLE,    255, 0, USE_EVENT_USE, OBJTYPE_NONE },
+	{ &U6UseCode::use_firedevice,       OBJ_U6_CANDELABRA, 255, 0, USE_EVENT_USE, OBJTYPE_NONE },
+	{ &U6UseCode::use_firedevice,       OBJ_U6_BRAZIER,   0, 0, USE_EVENT_USE, OBJTYPE_NONE },
+	{ &U6UseCode::use_firedevice,       OBJ_U6_BRAZIER,   1, 0, USE_EVENT_USE, OBJTYPE_NONE },
+	{ &U6UseCode::holy_flame,           OBJ_U6_BRAZIER,   2, 0, USE_EVENT_LOOK, OBJTYPE_NONE },
+	{ &U6UseCode::torch,                OBJ_U6_TORCH,     255, 0, USE_EVENT_USE | USE_EVENT_READY | USE_EVENT_GET | USE_EVENT_DROP, OBJTYPE_NONE },
+	{ &U6UseCode::use_spellbook,        OBJ_U6_SPELLBOOK, 255, 0, USE_EVENT_USE | USE_EVENT_LOOK, OBJTYPE_NONE },
+
+	{ &U6UseCode::use_moonstone,        OBJ_U6_MOONSTONE, 255, 0, USE_EVENT_USE | USE_EVENT_GET, OBJTYPE_NONE },
+	{ &U6UseCode::use_orb,              OBJ_U6_ORB_OF_THE_MOONS, 255, 0, USE_EVENT_USE, OBJTYPE_NONE },
+	{ &U6UseCode::enter_moongate,       OBJ_U6_MOONGATE,  1, 0, USE_EVENT_PASS, OBJTYPE_NONE },
+	{ &U6UseCode::enter_moongate,       OBJ_U6_RED_GATE,  1, 0, USE_EVENT_PASS, OBJTYPE_NONE },
+	{ &U6UseCode::use_ladder,           OBJ_U6_LADDER, 255, 0, USE_EVENT_USE, OBJTYPE_NONE },
+	{ &U6UseCode::enter_dungeon,        OBJ_U6_CAVE,  255, 0, USE_EVENT_PASS, OBJTYPE_NONE },
+	{ &U6UseCode::enter_dungeon,        OBJ_U6_HOLE,  255, 0, USE_EVENT_USE | USE_EVENT_PASS, OBJTYPE_NONE },
+
+	{ &U6UseCode::look_clock,           OBJ_U6_CLOCK,     255, 0, USE_EVENT_LOOK, OBJTYPE_NONE },
+	{ &U6UseCode::look_clock,           OBJ_U6_SUNDIAL,   255, 0, USE_EVENT_LOOK, OBJTYPE_NONE },
+	{ &U6UseCode::look_mirror,          OBJ_U6_MIRROR,    255, 0, USE_EVENT_LOOK, OBJTYPE_NONE },
+	{ &U6UseCode::use_well,             OBJ_U6_WELL,      255, 0, USE_EVENT_USE, OBJTYPE_NONE },
+	{ &U6UseCode::use_powder_keg,       OBJ_U6_POWDER_KEG, 255, 0, USE_EVENT_USE | USE_EVENT_MESSAGE, OBJTYPE_NONE },
+	{ &U6UseCode::use_peer_gem,         OBJ_U6_GEM,         0, 0, USE_EVENT_USE | USE_EVENT_MESSAGE, OBJTYPE_NONE },
+
+	{ &U6UseCode::use_beehive,          OBJ_U6_BEEHIVE,   255, 0, USE_EVENT_USE, OBJTYPE_NONE },
+
+	{ &U6UseCode::use_potion,           OBJ_U6_POTION,    255, 0, USE_EVENT_USE | USE_EVENT_MESSAGE, OBJTYPE_NONE },
+	{ &U6UseCode::use_food,             OBJ_U6_BUTTER,      0, 0, USE_EVENT_USE, OBJTYPE_FOOD },
+	{ &U6UseCode::use_food,             OBJ_U6_WINE,        0, 0, USE_EVENT_USE, OBJTYPE_FOOD },
+	{ &U6UseCode::use_food,             OBJ_U6_MEAD,        0, 0, USE_EVENT_USE, OBJTYPE_FOOD },
+	{ &U6UseCode::use_food,             OBJ_U6_ALE,         0, 0, USE_EVENT_USE, OBJTYPE_FOOD },
+	{ &U6UseCode::use_food,             OBJ_U6_BREAD,       0, 0, USE_EVENT_USE, OBJTYPE_FOOD },
+	{ &U6UseCode::use_food,             OBJ_U6_MEAT_PORTION, 0, 0, USE_EVENT_USE, OBJTYPE_FOOD },
+	{ &U6UseCode::use_food,             OBJ_U6_ROLLS,       0, 0, USE_EVENT_USE, OBJTYPE_FOOD },
+	{ &U6UseCode::use_food,             OBJ_U6_CAKE,        0, 0, USE_EVENT_USE, OBJTYPE_FOOD },
+	{ &U6UseCode::use_food,             OBJ_U6_CHEESE,      0, 0, USE_EVENT_USE, OBJTYPE_FOOD },
+	{ &U6UseCode::use_food,             OBJ_U6_RIBS,        0, 0, USE_EVENT_USE, OBJTYPE_FOOD },
+	{ &U6UseCode::use_food,             OBJ_U6_MEAT,        0, 0, USE_EVENT_USE, OBJTYPE_FOOD },
+	{ &U6UseCode::use_food,             OBJ_U6_GRAPES,      0, 0, USE_EVENT_USE, OBJTYPE_FOOD },
+	{ &U6UseCode::use_food,             OBJ_U6_HAM,         0, 0, USE_EVENT_USE, OBJTYPE_FOOD },
+	{ &U6UseCode::use_food,             OBJ_U6_GARLIC,      0, 0, USE_EVENT_USE, OBJTYPE_FOOD },
+	{ &U6UseCode::use_food,             OBJ_U6_HORSE_CHOPS, 0, 0, USE_EVENT_USE, OBJTYPE_FOOD },
+	{ &U6UseCode::use_food,             OBJ_U6_JAR_OF_HONEY, 0, 0, USE_EVENT_USE, OBJTYPE_FOOD },
+	{ &U6UseCode::use_food,             OBJ_U6_DRAGON_EGG,  0, 0, USE_EVENT_USE, OBJTYPE_FOOD },
+	{ &U6UseCode::use_food,             OBJ_U6_FISH,        0, 0, USE_EVENT_USE, OBJTYPE_FOOD },
+
+	{ &U6UseCode::use_fan,              OBJ_U6_FAN, 0, 0, USE_EVENT_USE, OBJTYPE_NONE },
+	{ &U6UseCode::use_sextant,          OBJ_U6_SEXTANT, 0, 0, USE_EVENT_USE, OBJTYPE_NONE },
+
+	{ &U6UseCode::use_cow,              OBJ_U6_COW, 255, 0, USE_EVENT_USE, OBJTYPE_NONE },
+	{ &U6UseCode::use_horse,            OBJ_U6_HORSE, 255, 0, USE_EVENT_USE, OBJTYPE_NONE },
+	{ &U6UseCode::use_horse,            OBJ_U6_HORSE_WITH_RIDER, 255, 0, USE_EVENT_USE, OBJTYPE_NONE },
+
+	{ &U6UseCode::use_boat,             OBJ_U6_SHIP, 255, 0, USE_EVENT_USE | USE_EVENT_SEARCH | USE_EVENT_LOOK, OBJTYPE_NONE },
+	{ &U6UseCode::use_boat,             OBJ_U6_SKIFF, 255, 0, USE_EVENT_USE | USE_EVENT_GET | USE_EVENT_LOOK, OBJTYPE_NONE },
+	{ &U6UseCode::use_boat,             OBJ_U6_RAFT,   0, 0, USE_EVENT_USE, OBJTYPE_NONE },
 	// don't want OBJTYPE_BOOK so that we will always use the plans when double clicking
-	{ OBJ_U6_BALLOON_PLANS, 0, 0, USE_EVENT_USE | USE_EVENT_LOOK, &U6UseCode::use_balloon_plans, OBJTYPE_NONE },
-	{ OBJ_U6_BALLOON, 0, 0, USE_EVENT_USE, &U6UseCode::use_balloon, OBJTYPE_NONE },
-	{ OBJ_U6_INFLATED_BALLOON, 255, 0, USE_EVENT_USE, &U6UseCode::use_balloon, OBJTYPE_NONE },
-
-	{ OBJ_U6_QUEST_GATE,  0, 0, USE_EVENT_PASS, &U6UseCode::pass_quest_barrier, OBJTYPE_NONE },
-
-	{ OBJ_U6_RUNE_HONESTY,      0, 0, USE_EVENT_USE | USE_EVENT_MESSAGE, &U6UseCode::use_rune, OBJTYPE_NONE },
-	{ OBJ_U6_RUNE_COMPASSION,   0, 0, USE_EVENT_USE | USE_EVENT_MESSAGE, &U6UseCode::use_rune, OBJTYPE_NONE },
-	{ OBJ_U6_RUNE_VALOR,        0, 0, USE_EVENT_USE | USE_EVENT_MESSAGE, &U6UseCode::use_rune, OBJTYPE_NONE },
-	{ OBJ_U6_RUNE_JUSTICE,      0, 0, USE_EVENT_USE | USE_EVENT_MESSAGE, &U6UseCode::use_rune, OBJTYPE_NONE },
-	{ OBJ_U6_RUNE_SACRIFICE,    0, 0, USE_EVENT_USE | USE_EVENT_MESSAGE, &U6UseCode::use_rune, OBJTYPE_NONE },
-	{ OBJ_U6_RUNE_HONOR,        0, 0, USE_EVENT_USE | USE_EVENT_MESSAGE, &U6UseCode::use_rune, OBJTYPE_NONE },
-	{ OBJ_U6_RUNE_SPIRITUALITY, 0, 0, USE_EVENT_USE | USE_EVENT_MESSAGE, &U6UseCode::use_rune, OBJTYPE_NONE },
-	{ OBJ_U6_RUNE_HUMILITY,     0, 0, USE_EVENT_USE | USE_EVENT_MESSAGE, &U6UseCode::use_rune, OBJTYPE_NONE },
-
-	{ OBJ_U6_CAMPFIRE, 255, 0, USE_EVENT_USE, &U6UseCode::use_firedevice, OBJTYPE_NONE },
-
-	{ OBJ_U6_VORTEX_CUBE, 0, 0, USE_EVENT_SEARCH | USE_EVENT_USE, &U6UseCode::use_vortex_cube, OBJTYPE_CONTAINER },
-	{ OBJ_U6_PULL_CHAIN,  0, 0, USE_EVENT_USE, &U6UseCode::use_bell, OBJTYPE_NONE },
-	{ OBJ_U6_BELL,      255, 0, USE_EVENT_USE, &U6UseCode::use_bell, OBJTYPE_NONE },
-	{ OBJ_U6_SHOVEL,      0, 0, USE_EVENT_USE, &U6UseCode::use_shovel, OBJTYPE_NONE },
-	{ OBJ_U6_PICK,        0, 0, USE_EVENT_USE, &U6UseCode::use_shovel, OBJTYPE_NONE },
-	{ OBJ_U6_FOUNTAIN,    0, 0, USE_EVENT_USE | USE_EVENT_MESSAGE, &U6UseCode::use_fountain, OBJTYPE_NONE },
-	{ OBJ_U6_RUBBER_DUCKY, 0, 0, USE_EVENT_USE, &U6UseCode::use_rubber_ducky, OBJTYPE_NONE },
-	{ OBJ_U6_CANNON,    255, 0, USE_EVENT_USE | USE_EVENT_MOVE | USE_EVENT_MESSAGE, &U6UseCode::use_cannon, OBJTYPE_NONE },
-	{ OBJ_U6_AMULET_OF_SUBMISSION, 0, 0, USE_EVENT_READY | USE_EVENT_DROP | USE_EVENT_MOVE, &U6UseCode::amulet_of_submission, OBJTYPE_NONE },
-	{ OBJ_U6_GARGISH_VOCABULARY,   0, 0, USE_EVENT_USE, &U6UseCode::gargish_vocabulary, OBJTYPE_NONE },
-
-	{ OBJ_U6_CRYSTAL_BALL, 0, 0, USE_EVENT_USE | USE_EVENT_MESSAGE, &U6UseCode::use_crystal_ball, OBJTYPE_NONE },
-
-	{ OBJ_U6_PANPIPES,   0, 0, USE_EVENT_USE, &U6UseCode::play_instrument, OBJTYPE_NONE },
-	{ OBJ_U6_HARPSICHORD, 0, 0, USE_EVENT_SEARCH | USE_EVENT_USE, &U6UseCode::use_harpsichord, OBJTYPE_NONE },
-	{ OBJ_U6_HARP,       0, 0, USE_EVENT_USE, &U6UseCode::play_instrument, OBJTYPE_NONE },
-	{ OBJ_U6_LUTE,       0, 0, USE_EVENT_USE, &U6UseCode::play_instrument, OBJTYPE_NONE },
-	{ OBJ_U6_XYLOPHONE,  0, 0, USE_EVENT_USE, &U6UseCode::play_instrument, OBJTYPE_NONE },
-
-	{ OBJ_U6_NOTHING, 0, 0, 0, NULL, OBJTYPE_NONE } // end indicator
+	{ &U6UseCode::use_balloon_plans,    OBJ_U6_BALLOON_PLANS, 0, 0, USE_EVENT_USE | USE_EVENT_LOOK, OBJTYPE_NONE },
+	{ &U6UseCode::use_balloon,          OBJ_U6_BALLOON, 0, 0, USE_EVENT_USE, OBJTYPE_NONE },
+	{ &U6UseCode::use_balloon,          OBJ_U6_INFLATED_BALLOON, 255, 0, USE_EVENT_USE, OBJTYPE_NONE },
+
+	{ &U6UseCode::pass_quest_barrier,   OBJ_U6_QUEST_GATE,  0, 0, USE_EVENT_PASS, OBJTYPE_NONE },
+
+	{ &U6UseCode::use_rune,             OBJ_U6_RUNE_HONESTY,      0, 0, USE_EVENT_USE | USE_EVENT_MESSAGE, OBJTYPE_NONE },
+	{ &U6UseCode::use_rune,             OBJ_U6_RUNE_COMPASSION,   0, 0, USE_EVENT_USE | USE_EVENT_MESSAGE, OBJTYPE_NONE },
+	{ &U6UseCode::use_rune,             OBJ_U6_RUNE_VALOR,        0, 0, USE_EVENT_USE | USE_EVENT_MESSAGE, OBJTYPE_NONE },
+	{ &U6UseCode::use_rune,             OBJ_U6_RUNE_JUSTICE,      0, 0, USE_EVENT_USE | USE_EVENT_MESSAGE, OBJTYPE_NONE },
+	{ &U6UseCode::use_rune,             OBJ_U6_RUNE_SACRIFICE,    0, 0, USE_EVENT_USE | USE_EVENT_MESSAGE, OBJTYPE_NONE },
+	{ &U6UseCode::use_rune,             OBJ_U6_RUNE_HONOR,        0, 0, USE_EVENT_USE | USE_EVENT_MESSAGE, OBJTYPE_NONE },
+	{ &U6UseCode::use_rune,             OBJ_U6_RUNE_SPIRITUALITY, 0, 0, USE_EVENT_USE | USE_EVENT_MESSAGE, OBJTYPE_NONE },
+	{ &U6UseCode::use_rune,             OBJ_U6_RUNE_HUMILITY,     0, 0, USE_EVENT_USE | USE_EVENT_MESSAGE, OBJTYPE_NONE },
+
+	{ &U6UseCode::use_firedevice,       OBJ_U6_CAMPFIRE, 255, 0, USE_EVENT_USE, OBJTYPE_NONE },
+
+	{ &U6UseCode::use_vortex_cube,      OBJ_U6_VORTEX_CUBE, 0, 0, USE_EVENT_SEARCH | USE_EVENT_USE, OBJTYPE_CONTAINER },
+	{ &U6UseCode::use_bell,             OBJ_U6_PULL_CHAIN,  0, 0, USE_EVENT_USE, OBJTYPE_NONE },
+	{ &U6UseCode::use_bell,             OBJ_U6_BELL,      255, 0, USE_EVENT_USE, OBJTYPE_NONE },
+	{ &U6UseCode::use_shovel,           OBJ_U6_SHOVEL,      0, 0, USE_EVENT_USE, OBJTYPE_NONE },
+	{ &U6UseCode::use_shovel,           OBJ_U6_PICK,        0, 0, USE_EVENT_USE, OBJTYPE_NONE },
+	{ &U6UseCode::use_fountain,         OBJ_U6_FOUNTAIN,    0, 0, USE_EVENT_USE | USE_EVENT_MESSAGE, OBJTYPE_NONE },
+	{ &U6UseCode::use_rubber_ducky,     OBJ_U6_RUBBER_DUCKY, 0, 0, USE_EVENT_USE, OBJTYPE_NONE },
+	{ &U6UseCode::use_cannon,           OBJ_U6_CANNON,    255, 0, USE_EVENT_USE | USE_EVENT_MOVE | USE_EVENT_MESSAGE, OBJTYPE_NONE },
+	{ &U6UseCode::amulet_of_submission, OBJ_U6_AMULET_OF_SUBMISSION, 0, 0, USE_EVENT_READY | USE_EVENT_DROP | USE_EVENT_MOVE, OBJTYPE_NONE },
+	{ &U6UseCode::gargish_vocabulary,   OBJ_U6_GARGISH_VOCABULARY,   0, 0, USE_EVENT_USE, OBJTYPE_NONE },
+
+	{ &U6UseCode::use_crystal_ball,     OBJ_U6_CRYSTAL_BALL, 0, 0, USE_EVENT_USE | USE_EVENT_MESSAGE, OBJTYPE_NONE },
+
+	{ &U6UseCode::play_instrument,      OBJ_U6_PANPIPES,   0, 0, USE_EVENT_USE, OBJTYPE_NONE },
+	{ &U6UseCode::use_harpsichord,      OBJ_U6_HARPSICHORD, 0, 0, USE_EVENT_SEARCH | USE_EVENT_USE, OBJTYPE_NONE },
+	{ &U6UseCode::play_instrument,      OBJ_U6_HARP,       0, 0, USE_EVENT_USE, OBJTYPE_NONE },
+	{ &U6UseCode::play_instrument,      OBJ_U6_LUTE,       0, 0, USE_EVENT_USE, OBJTYPE_NONE },
+	{ &U6UseCode::play_instrument,      OBJ_U6_XYLOPHONE,  0, 0, USE_EVENT_USE, OBJTYPE_NONE },
+
+	{ nullptr,                          OBJ_U6_NOTHING, 0, 0, 0, OBJTYPE_NONE } // end indicator
 };
 
 } // End of namespace Nuvie
diff --git a/engines/ultima/nuvie/usecode/u6_usecode.h b/engines/ultima/nuvie/usecode/u6_usecode.h
index df8d89bbed..51243ed450 100644
--- a/engines/ultima/nuvie/usecode/u6_usecode.h
+++ b/engines/ultima/nuvie/usecode/u6_usecode.h
@@ -51,19 +51,14 @@ class MsgScroll;
 
 #define TORCH_LIGHT_LEVEL    3
 
-// Explicit packing used below to fix MSVC warning
-#include "common/pack-start.h"	// START STRUCT PACKING
-
 struct U6ObjectType { // object properties & usecode
+	bool (U6UseCode::*usefunc)(Obj *, UseCodeEvent); // usecode function
 	uint16 obj_n; // type
 	uint8 frame_n; // 0xFF matches any frame
 	uint8 dist; // distance to trigger (depends on event, usually 0)
 	UseCodeEvent trigger; // accepted event(s)
-	bool (U6UseCode::*usefunc)(Obj *, UseCodeEvent); // usecode function
 	uint16 flags; // properties (OBJTYPE)
-} PACKED_STRUCT;
-
-#include "common/pack-end.h"	// END STRUCT PACKING
+};
 
 typedef enum {
 	LAT,


Commit: 7003cf793f2ddc5b773293088a2b5e485bc8c105
    https://github.com/scummvm/scummvm/commit/7003cf793f2ddc5b773293088a2b5e485bc8c105
Author: Le Philousophe (lephilousophe at users.noreply.github.com)
Date: 2021-12-02T20:48:24-08:00

Commit Message:
ULTIMA4: Don't pack a structure with pointers in it.

This would lead to unaligned pointer accesses which is prevented by
latest Xcode

Changed paths:
    engines/ultima/ultima4/game/item.h


diff --git a/engines/ultima/ultima4/game/item.h b/engines/ultima/ultima4/game/item.h
index ae0cb3665f..c197e0137c 100644
--- a/engines/ultima/ultima4/game/item.h
+++ b/engines/ultima/ultima4/game/item.h
@@ -44,7 +44,6 @@ class Items;
 typedef bool (Items::*IsInInventoryProc)(int item);
 typedef void (Items::*InventoryActionProc)(int item);
 
-#include "common/pack-start.h"	// START STRUCT PACKING
 struct ItemLocation {
 	const char *_name;
 	const char *_shortName;
@@ -54,8 +53,7 @@ struct ItemLocation {
 	InventoryActionProc _useItem;
 	int _data;
 	byte _conditions;
-} PACKED_STRUCT;
-#include "common/pack-end.h"	// END STRUCT PACKING
+};
 
 typedef void (*DestroyAllCreaturesCallback)();
 #define N_ITEMS 34




More information about the Scummvm-git-logs mailing list