From 37c4243502f19e50bfe6019e8c12a7f796625f8f Mon Sep 17 00:00:00 2001 From: flend Date: Fri, 30 Aug 2024 06:22:15 -0700 Subject: [PATCH] Increasing heavy weapons to 16 str, requiring positive enchant in vault, tweaking vault levels --- src/brogue/Architect.c | 2 +- src/brogue/Items.c | 6 +++++- src/brogue/Rogue.h | 1 + src/variants/GlobalsBulletBrogue.c | 24 ++++++++++++------------ 4 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/brogue/Architect.c b/src/brogue/Architect.c index 0b448692..addac281 100644 --- a/src/brogue/Architect.c +++ b/src/brogue/Architect.c @@ -1506,7 +1506,7 @@ boolean buildAMachine(enum machineTypes bp, while ((theItem->flags & ITEM_CURSED) || ((feature->flags & MF_REQUIRE_GOOD_RUNIC) && (!(theItem->flags & ITEM_RUNIC))) // runic if requested || ((feature->flags & MF_NO_THROWING_WEAPONS) && theItem->category == WEAPON && theItem->quantity > 1) // no throwing weapons if prohibited - || ((feature->flags & MF_REQUIRE_HEAVY_WEAPON) && !itemIsHeavyWeapon(theItem)) // must be a heavy weapon + || ((feature->flags & MF_REQUIRE_HEAVY_WEAPON) && (!itemIsHeavyWeapon(theItem) || !itemIsPositivelyEnchanted(theItem))) // must be a positively enchanted heavy weapon || itemIsADuplicate(theItem, p->spawnedItems, itemCount)) { // don't want to duplicates of rings, staffs, etc. deleteItem(theItem); theItem = generateItem(feature->itemCategory, feature->itemKind); diff --git a/src/brogue/Items.c b/src/brogue/Items.c index e2a827d6..38cef786 100644 --- a/src/brogue/Items.c +++ b/src/brogue/Items.c @@ -165,12 +165,16 @@ static boolean itemIsThrowingWeapon(const item *theItem) { boolean itemIsHeavyWeapon(const item *theItem) { if (theItem && theItem->category == WEAPON && !itemIsThrowingWeapon(theItem) - && weaponTable[theItem->kind].strengthRequired >= 15) { + && weaponTable[theItem->kind].strengthRequired > 15) { return true; } return false; } +boolean itemIsPositivelyEnchanted(const item *theItem) { + return theItem->enchant1 > 0; +} + // Sets an item to the given type and category (or chooses randomly if -1) with all other stats item *makeItemInto(item *theItem, unsigned long itemCategory, short itemKind) { const itemTable *theEntry = NULL; diff --git a/src/brogue/Rogue.h b/src/brogue/Rogue.h index 891117b3..3fbfedd0 100644 --- a/src/brogue/Rogue.h +++ b/src/brogue/Rogue.h @@ -3311,6 +3311,7 @@ extern "C" { short chooseKind(const itemTable *theTable, short numKinds); item *makeItemInto(item *theItem, unsigned long itemCategory, short itemKind); boolean itemIsHeavyWeapon(const item *theItem); + boolean itemIsPositivelyEnchanted(const item *theItem); void updateEncumbrance(void); short displayedArmorValue(void); short armorValueIfUnenchanted(item *theItem); diff --git a/src/variants/GlobalsBulletBrogue.c b/src/variants/GlobalsBulletBrogue.c index 505a4896..bfce2d20 100644 --- a/src/variants/GlobalsBulletBrogue.c +++ b/src/variants/GlobalsBulletBrogue.c @@ -197,7 +197,7 @@ const blueprint blueprintCatalog_BulletBrogue[] = { {0, ALTAR_CAGE_OPEN,DUNGEON, {4,5}, 4, (STAFF), -1, 0, 2, 0, (ITEM_IS_KEY | ITEM_KIND_AUTO_ID | ITEM_MAX_CHARGES_KNOWN | ITEM_PLAYER_AVOIDS), (MF_GENERATE_ITEM | MF_TREAT_AS_BLOCKING | MF_ALTERNATIVE | MF_IMPREGNABLE)}, {0, STATUE_INERT,DUNGEON, {2,3}, 0, 0, -1, 0, 2, 0, 0, (MF_TREAT_AS_BLOCKING | MF_BUILD_IN_WALLS | MF_IMPREGNABLE)}}}, {"Treasure room -- apothecary or archive (potions or scrolls)", - {1, DEEPEST_LEVEL-1}, {20, 40}, 20, 6, 0, (BP_ROOM | BP_PURGE_INTERIOR | BP_SURROUND_WITH_WALLS | BP_OPEN_INTERIOR | BP_IMPREGNABLE | BP_REWARD), { + {2, DEEPEST_LEVEL-1}, {20, 40}, 20, 6, 0, (BP_ROOM | BP_PURGE_INTERIOR | BP_SURROUND_WITH_WALLS | BP_OPEN_INTERIOR | BP_IMPREGNABLE | BP_REWARD), { {0, CARPET, DUNGEON, {0,0}, 0, 0, -1, 0, 0, 0, 0, (MF_EVERYWHERE)}, {0, 0, 0, {5,7}, 2, (POTION), -1, 0, 2, 0, 0, (MF_GENERATE_ITEM | MF_ALTERNATIVE | MF_TREAT_AS_BLOCKING)}, {0, 0, 0, {4,6}, 2, (SCROLL), -1, 0, 2, 0, 0, (MF_GENERATE_ITEM | MF_ALTERNATIVE | MF_TREAT_AS_BLOCKING)}, @@ -213,7 +213,7 @@ const blueprint blueprintCatalog_BulletBrogue[] = { {0, PEDESTAL, DUNGEON, {2,2}, 2, (STAFF), -1, 0, 2, 0, (ITEM_KIND_AUTO_ID | ITEM_MAX_CHARGES_KNOWN), (MF_GENERATE_ITEM | MF_ALTERNATIVE | MF_TREAT_AS_BLOCKING)}, {0, 0, 0, {1,1}, 1, 0, 0, 0, 2, 0, 0, (MF_BUILD_AT_ORIGIN | MF_PERMIT_BLOCKING | MF_BUILD_VESTIBULE)}}}, {"Guaranteed good consumable item on glowing pedestals (scrolls of enchanting, potion of life)", - {1, DEEPEST_LEVEL-1},{10, 30}, 30, 5, 0, (BP_ROOM | BP_PURGE_INTERIOR | BP_SURROUND_WITH_WALLS | BP_OPEN_INTERIOR | BP_IMPREGNABLE | BP_REWARD), { + {2, DEEPEST_LEVEL-1},{10, 30}, 30, 5, 0, (BP_ROOM | BP_PURGE_INTERIOR | BP_SURROUND_WITH_WALLS | BP_OPEN_INTERIOR | BP_IMPREGNABLE | BP_REWARD), { {0, CARPET, DUNGEON, {0,0}, 0, 0, -1, 0, 0, 0, 0, (MF_EVERYWHERE)}, {0, STATUE_INERT,DUNGEON, {1,3}, 0, 0, -1, 0, 2, 0, 0, (MF_TREAT_AS_BLOCKING | MF_BUILD_IN_WALLS | MF_IMPREGNABLE)}, {0, PEDESTAL, DUNGEON, {1,1}, 1, (SCROLL), SCROLL_ENCHANTING, 0, 2, 0, (ITEM_KIND_AUTO_ID), (MF_GENERATE_ITEM | MF_ALTERNATIVE | MF_TREAT_AS_BLOCKING)}, @@ -300,7 +300,7 @@ const blueprint blueprintCatalog_BulletBrogue[] = { {1, DEEPEST_LEVEL-1}, {1, 1}, 100, 1, 0, (BP_VESTIBULE), { {0, LOCKED_DOOR, DUNGEON, {1,1}, 1, KEY, KEY_DOOR, 0, 1, 0, (ITEM_IS_KEY | ITEM_PLAYER_AVOIDS), (MF_BUILD_AT_ORIGIN | MF_PERMIT_BLOCKING | MF_GENERATE_ITEM | MF_OUTSOURCE_ITEM_TO_MACHINE | MF_KEY_DISPOSABLE | MF_IMPREGNABLE)}}}, {"Plain secret door", - {1, DEEPEST_LEVEL-1}, {1, 1}, 10, 1, 0, (BP_VESTIBULE), { + {1, 1}, {1, 1}, 10, 1, 0, (BP_VESTIBULE), { {0, SECRET_DOOR, DUNGEON, {1,1}, 1, 0, 0, 0, 1, 0, 0, (MF_BUILD_AT_ORIGIN | MF_PERMIT_BLOCKING)}}}, {"Lever and either an exploding wall or a portcullis", {1, DEEPEST_LEVEL-1}, {1, 1}, 25, 3, 0, (BP_VESTIBULE), { @@ -326,7 +326,7 @@ const blueprint blueprintCatalog_BulletBrogue[] = { {0, PORTCULLIS_CLOSED,DUNGEON, {1,1}, 1, 0, 0, 0, 3, 0, 0, (MF_IMPREGNABLE | MF_PERMIT_BLOCKING | MF_BUILD_AT_ORIGIN | MF_ALTERNATIVE)}, {0, WORM_TUNNEL_OUTER_WALL,DUNGEON,{1,1}, 1, 0, -1, 0, 1, 0, 0, (MF_BUILD_AT_ORIGIN | MF_PERMIT_BLOCKING | MF_IMPREGNABLE | MF_ALTERNATIVE)}}}, {"Pit traps -- area outside entrance is full of pit traps", - {1, DEEPEST_LEVEL-1}, {30, 60}, 4, 3, 0, (BP_VESTIBULE | BP_OPEN_INTERIOR | BP_NO_INTERIOR_FLAG), { + {2, DEEPEST_LEVEL-1}, {30, 60}, 6, 3, 0, (BP_VESTIBULE | BP_OPEN_INTERIOR | BP_NO_INTERIOR_FLAG), { {0, DOOR, DUNGEON, {1,1}, 1, 0, 0, 0, 1, 0, 0, (MF_PERMIT_BLOCKING | MF_BUILD_AT_ORIGIN | MF_ALTERNATIVE)}, {0, SECRET_DOOR,DUNGEON, {1,1}, 1, 0, 0, 0, 1, 0, 0, (MF_IMPREGNABLE | MF_PERMIT_BLOCKING | MF_BUILD_AT_ORIGIN | MF_ALTERNATIVE)}, {0, TRAP_DOOR_HIDDEN,DUNGEON, {60, 60}, 1, 0, -1, 0, 1, 0, 0, (MF_TREAT_AS_BLOCKING | MF_REPEAT_UNTIL_NO_PROGRESS)}}}, @@ -398,7 +398,7 @@ const blueprint blueprintCatalog_BulletBrogue[] = { {0, ALTAR_SWITCH_RETRACTING,DUNGEON,{1,1}, 1, 0, -1, 0, 3, 0, 0, (MF_ADOPT_ITEM | MF_NEAR_ORIGIN | MF_TREAT_AS_BLOCKING | MF_NOT_IN_HALLWAY)}, {DF_ADD_MACHINE_COLLAPSE_EDGE_DORMANT,0,0,{3, 3}, 2, 0, -1, 0, 3, 0, 0, (MF_FAR_FROM_ORIGIN | MF_NOT_IN_HALLWAY)}}}, {"Pit traps -- key on an altar, room full of pit traps", - {1, DEEPEST_LEVEL-1}, {30, 100}, 5, 3, 0, (BP_ROOM | BP_ADOPT_ITEM), { + {2, DEEPEST_LEVEL-1}, {30, 100}, 5, 3, 0, (BP_ROOM | BP_ADOPT_ITEM), { {0, ALTAR_INERT,DUNGEON, {1,1}, 1, 0, -1, 0, 2, 0, 0, (MF_ADOPT_ITEM | MF_FAR_FROM_ORIGIN | MF_TREAT_AS_BLOCKING)}, {0, TRAP_DOOR_HIDDEN,DUNGEON, {30, 40}, 1, 0, -1, 0, 1, 0, 0, (MF_TREAT_AS_BLOCKING | MF_REPEAT_UNTIL_NO_PROGRESS)}, {0, SECRET_DOOR,DUNGEON, {1,1}, 1, 0, 0, 0, 1, 0, 0, (MF_PERMIT_BLOCKING | MF_BUILD_AT_ORIGIN)}}}, @@ -419,7 +419,7 @@ const blueprint blueprintCatalog_BulletBrogue[] = { {DF_ADD_DORMANT_CHASM_HALO, CHASM,LIQUID, {120, 120}, 1, 0, -1, 0, 1, 0, 0, (MF_TREAT_AS_BLOCKING | MF_REPEAT_UNTIL_NO_PROGRESS)}, {DF_ADD_DORMANT_CHASM_HALO, CHASM_WITH_HIDDEN_BRIDGE,LIQUID,{1,1},1,0, 0, 0, 1, 0, 0, (MF_PERMIT_BLOCKING | MF_EVERYWHERE)}}}, {"Lava moat room -- key on an altar, room filled with lava, levitation/fire immunity/lever elsewhere on level, lava retracts when you grab the key/lever", - {1, DEEPEST_LEVEL-1}, {75, 120}, 15, 7, 0, (BP_ROOM | BP_ADOPT_ITEM | BP_PURGE_INTERIOR | BP_SURROUND_WITH_WALLS | BP_OPEN_INTERIOR), { + {2, DEEPEST_LEVEL-1}, {75, 120}, 15, 7, 0, (BP_ROOM | BP_ADOPT_ITEM | BP_PURGE_INTERIOR | BP_SURROUND_WITH_WALLS | BP_OPEN_INTERIOR), { {0, ALTAR_SWITCH,DUNGEON, {1,1}, 1, 0, -1, 0, 2, 0, 0, (MF_ADOPT_ITEM | MF_FAR_FROM_ORIGIN | MF_TREAT_AS_BLOCKING)}, {0, 0, 0, {1,1}, 1, 0, 0, 0, 2, 0, 0, (MF_BUILD_AT_ORIGIN)}, {0, LAVA, LIQUID, {60,60}, 1, 0, 0, 0, 1, 0, 0, (MF_TREAT_AS_BLOCKING | MF_REPEAT_UNTIL_NO_PROGRESS)}, @@ -428,7 +428,7 @@ const blueprint blueprintCatalog_BulletBrogue[] = { {0, 0, 0, {1,1}, 1, POTION, POTION_FIRE_IMMUNITY, 0, 1, 0, 0, (MF_GENERATE_ITEM | MF_BUILD_ANYWHERE_ON_LEVEL | MF_NOT_IN_HALLWAY | MF_ALTERNATIVE)}, {0, WALL_LEVER_HIDDEN,DUNGEON, {1,1}, 1, 0, -1, 0, 1, 0, 0, (MF_BUILD_IN_WALLS | MF_IN_PASSABLE_VIEW_OF_ORIGIN | MF_BUILD_ANYWHERE_ON_LEVEL | MF_ALTERNATIVE)}}}, {"Lava moat area -- key on an altar, surrounded with lava, levitation/fire immunity elsewhere on level, lava retracts when you grab the key", - {1, DEEPEST_LEVEL-1}, {40, 60}, 15, 5, 0, (BP_ADOPT_ITEM | BP_PURGE_INTERIOR | BP_OPEN_INTERIOR | BP_TREAT_AS_BLOCKING), { + {2, DEEPEST_LEVEL-1}, {40, 60}, 15, 5, 0, (BP_ADOPT_ITEM | BP_PURGE_INTERIOR | BP_OPEN_INTERIOR | BP_TREAT_AS_BLOCKING), { {0, ALTAR_SWITCH,DUNGEON, {1,1}, 1, 0, -1, 0, 2, 0, 0, (MF_ADOPT_ITEM | MF_BUILD_AT_ORIGIN | MF_TREAT_AS_BLOCKING)}, {0, LAVA, LIQUID, {60,60}, 1, 0, 0, 0, 1, 0, 0, (MF_TREAT_AS_BLOCKING | MF_REPEAT_UNTIL_NO_PROGRESS)}, {DF_LAVA_RETRACTABLE, LAVA_RETRACTABLE, LIQUID, {1,1}, 1, 0, 0, 0, 1, 0, 0, (MF_PERMIT_BLOCKING | MF_EVERYWHERE)}, @@ -463,13 +463,13 @@ const blueprint blueprintCatalog_BulletBrogue[] = { {0, ALTAR_SWITCH,DUNGEON, {1,1}, 1, 0, -1, 0, 2, 0, 0, (MF_ADOPT_ITEM | MF_NEAR_ORIGIN | MF_TREAT_AS_BLOCKING | MF_NOT_IN_HALLWAY)}, {0, STATUE_DORMANT,DUNGEON, {3,5}, 3, 0, -1, 0, 2, HORDE_MACHINE_STATUE,0, (MF_TREAT_AS_BLOCKING | MF_NOT_IN_HALLWAY | MF_GENERATE_HORDE | MF_MONSTERS_DORMANT | MF_FAR_FROM_ORIGIN)}}}, {"Guardian water puzzle -- key held by a guardian, flood trap in the room, glyphs scattered. Lure the guardian into the water to have him drop the key.", - {12, DEEPEST_LEVEL-1}, {35, 70}, 15, 4, 0, (BP_ROOM | BP_PURGE_INTERIOR | BP_SURROUND_WITH_WALLS | BP_ADOPT_ITEM), { + {2, DEEPEST_LEVEL-1}, {35, 70}, 15, 4, 0, (BP_ROOM | BP_PURGE_INTERIOR | BP_SURROUND_WITH_WALLS | BP_ADOPT_ITEM), { {0, 0, 0, {1,1}, 1, 0, -1, 0, 2, 0, 0, (MF_BUILD_AT_ORIGIN)}, {0, 0, 0, {1,1}, 1, 0, -1, MK_GUARDIAN, 2, 0, 0, (MF_ADOPT_ITEM | MF_FAR_FROM_ORIGIN | MF_TREAT_AS_BLOCKING | MF_NOT_IN_HALLWAY | MF_MONSTER_TAKE_ITEM)}, {0, FLOOD_TRAP,DUNGEON, {1,1}, 1, 0, -1, 0, 2, 0, 0, (MF_TREAT_AS_BLOCKING | MF_NOT_IN_HALLWAY)}, {0, MACHINE_GLYPH,DUNGEON, {1,1}, 4, 0, -1, 0, 2, 0, 0, (MF_EVERYWHERE | MF_NOT_IN_HALLWAY)}}}, {"Guardian gauntlet -- key in a room full of guardians, glyphs scattered and unavoidable.", - {1, DEEPEST_LEVEL-1}, {50, 95}, 15, 6, 0, (BP_ROOM | BP_ADOPT_ITEM), { + {2, DEEPEST_LEVEL-1}, {50, 95}, 15, 6, 0, (BP_ROOM | BP_ADOPT_ITEM), { {DF_GLYPH_CIRCLE,ALTAR_INERT,DUNGEON, {1,1}, 1, 0, -1, 0, 1, 0, 0, (MF_ADOPT_ITEM | MF_TREAT_AS_BLOCKING | MF_NOT_IN_HALLWAY | MF_FAR_FROM_ORIGIN)}, {0, DOOR, DUNGEON, {1,1}, 1, 0, 0, 0, 3, 0, 0, (MF_PERMIT_BLOCKING | MF_BUILD_AT_ORIGIN)}, {0, 0, 0, {3,6}, 3, 0, -1, MK_GUARDIAN, 2, 0, 0, (MF_NEAR_ORIGIN | MF_TREAT_AS_BLOCKING | MF_NOT_IN_HALLWAY | MF_ALTERNATIVE)}, @@ -477,7 +477,7 @@ const blueprint blueprintCatalog_BulletBrogue[] = { {0, MACHINE_GLYPH,DUNGEON, {10,15}, 10, 0, -1, 0, 1, 0, 0, (MF_PERMIT_BLOCKING | MF_NOT_IN_HALLWAY)}, {0, MACHINE_GLYPH,DUNGEON, {1,1}, 0, 0, -1, 0, 2, 0, 0, (MF_EVERYWHERE | MF_PERMIT_BLOCKING | MF_NOT_IN_HALLWAY)}}}, {"Guardian corridor -- key in a small room, with a connecting corridor full of glyphs, one guardian blocking the corridor.", - {1, DEEPEST_LEVEL-1}, {85, 100}, 15, 7, 0, (BP_ROOM | BP_ADOPT_ITEM | BP_PURGE_INTERIOR | BP_OPEN_INTERIOR | BP_SURROUND_WITH_WALLS), { + {2, DEEPEST_LEVEL-1}, {85, 100}, 15, 7, 0, (BP_ROOM | BP_ADOPT_ITEM | BP_PURGE_INTERIOR | BP_OPEN_INTERIOR | BP_SURROUND_WITH_WALLS), { {DF_GLYPH_CIRCLE,ALTAR_INERT,DUNGEON, {1,1}, 1, 0, -1, MK_GUARDIAN, 3, 0, 0, (MF_ADOPT_ITEM | MF_FAR_FROM_ORIGIN | MF_ALTERNATIVE)}, {DF_GLYPH_CIRCLE,ALTAR_INERT,DUNGEON, {1,1}, 1, 0, -1, MK_WINGED_GUARDIAN,3, 0, 0, (MF_ADOPT_ITEM | MF_FAR_FROM_ORIGIN | MF_ALTERNATIVE)}, {0, MACHINE_GLYPH,DUNGEON, {3,5}, 2, 0, 0, 0, 2, 0, 0, MF_NEAR_ORIGIN | MF_NOT_IN_HALLWAY}, @@ -486,7 +486,7 @@ const blueprint blueprintCatalog_BulletBrogue[] = { {0, MACHINE_GLYPH,DUNGEON, {1,1}, 1, 0, 0, 0, 1, 0, 0, (MF_PERMIT_BLOCKING | MF_EVERYWHERE)}, {0, MACHINE_GLYPH,DUNGEON, {1,1}, 1, 0, -1, 0, 1, 0, 0, (MF_IN_PASSABLE_VIEW_OF_ORIGIN | MF_NOT_IN_HALLWAY | MF_BUILD_ANYWHERE_ON_LEVEL)}}}, {"Sacrifice altar -- lure the chosen monster from elsewhere on the level onto the altar to release the key.", - {1, DEEPEST_LEVEL-1}, {20, 60}, 15, 6, 0, (BP_ROOM | BP_ADOPT_ITEM | BP_PURGE_INTERIOR | BP_OPEN_INTERIOR | BP_SURROUND_WITH_WALLS), { + {2, DEEPEST_LEVEL-1}, {20, 60}, 15, 6, 0, (BP_ROOM | BP_ADOPT_ITEM | BP_PURGE_INTERIOR | BP_OPEN_INTERIOR | BP_SURROUND_WITH_WALLS), { {DF_BONES, 0, 0, {3,4}, 2, 0, -1, 0, 1, 0, 0, 0}, {0, 0, 0, {1,1}, 0, 0, -1, 0, 2, 0, 0, (MF_BUILD_IN_WALLS | MF_EVERYWHERE)}, {DF_TRIGGER_AREA,SACRIFICE_ALTAR_DORMANT,DUNGEON,{1,1},1, 0, -1, 0, 2, 0, 0, (MF_FAR_FROM_ORIGIN | MF_NOT_IN_HALLWAY)}, @@ -498,7 +498,7 @@ const blueprint blueprintCatalog_BulletBrogue[] = { {DF_GLYPH_CIRCLE,ALTAR_INERT,DUNGEON, {1,1}, 1, 0, -1, 0, 3, 0, 0, (MF_ADOPT_ITEM | MF_TREAT_AS_BLOCKING | MF_NOT_IN_HALLWAY | MF_FAR_FROM_ORIGIN)}, {DF_GLYPH_CIRCLE,0, 0, {1,1}, 1, 0, -1, MK_ELDRITCH_TOTEM,3, 0, 0, (MF_FAR_FROM_ORIGIN | MF_TREAT_AS_BLOCKING | MF_NOT_IN_HALLWAY)}}}, {"Beckoning obstacle -- key surrounded by glyphs in a room with a mirrored totem.", - {1, DEEPEST_LEVEL-1}, {60, 100}, 15, 4, 0, (BP_ROOM | BP_PURGE_INTERIOR | BP_SURROUND_WITH_WALLS | BP_OPEN_INTERIOR | BP_ADOPT_ITEM), { + {2, DEEPEST_LEVEL-1}, {60, 100}, 15, 4, 0, (BP_ROOM | BP_PURGE_INTERIOR | BP_SURROUND_WITH_WALLS | BP_OPEN_INTERIOR | BP_ADOPT_ITEM), { {DF_GLYPH_CIRCLE,ALTAR_INERT,DUNGEON, {1,1}, 1, 0, -1, 0, 3, 0, 0, (MF_ADOPT_ITEM | MF_TREAT_AS_BLOCKING | MF_NOT_IN_HALLWAY | MF_FAR_FROM_ORIGIN | MF_IN_VIEW_OF_ORIGIN)}, {0, 0, 0, {1,1}, 1, 0, -1, MK_MIRRORED_TOTEM,3, 0, 0, (MF_NEAR_ORIGIN | MF_TREAT_AS_BLOCKING | MF_NOT_IN_HALLWAY | MF_IN_VIEW_OF_ORIGIN)}, {0, 0, 0, {1,1}, 1, 0, -1, 0, 2, 0, 0, (MF_BUILD_AT_ORIGIN)},