public static void BuildSpouseRooms(FarmHouse farmHouse) { if (config.DisableCustomSpousesRooms) { return; } try { if (farmHouse is Cabin) { Monitor.Log("BuildSpouseRooms for Cabin"); } Farmer f = farmHouse.owner; if (f == null) { return; } Misc.ResetSpouses(f); Monitor.Log("Building all spouse rooms"); if (Misc.GetSpouses(f, 1).Count == 0 || farmHouse.upgradeLevel > 3) { ModEntry.PMonitor.Log("No spouses"); farmHouse.showSpouseRoom(); return; } List <string> spousesWithRooms = new List <string>(); foreach (string spouse in Misc.GetSpouses(f, 1).Keys) { Monitor.Log($"checking {spouse} for spouse room"); if (roomIndexes.ContainsKey(spouse) || tmxSpouseRooms.ContainsKey(spouse)) { Monitor.Log($"Adding {spouse} to list for spouse rooms"); spousesWithRooms.Add(spouse); } } if (spousesWithRooms.Count == 0) { ModEntry.PMonitor.Log("No spouses with rooms"); return; } spousesWithRooms = new List <string>(Misc.ReorderSpousesForRooms(spousesWithRooms)); if (!spousesWithRooms.Any()) { return; } if (!ModEntry.config.BuildAllSpousesRooms) { if (f.spouse != null && !f.friendshipData[f.spouse].IsEngaged() && (roomIndexes.ContainsKey(f.spouse) || tmxSpouseRooms.ContainsKey(f.spouse))) { Monitor.Log($"Building spouse room for official spouse {f.spouse}"); BuildOneSpouseRoom(farmHouse, f.spouse, -1); } else { Monitor.Log($"No spouse room for official spouse {f.spouse}, placing for {spousesWithRooms[0]} instead."); BuildOneSpouseRoom(farmHouse, spousesWithRooms[0], -1); spousesWithRooms = new List <string>(spousesWithRooms.Skip(1)); } return; } Monitor.Log($"Building {spousesWithRooms.Count} additional spouse rooms"); List <string> sheets = new List <string>(); for (int i = 0; i < farmHouse.map.TileSheets.Count; i++) { sheets.Add(farmHouse.map.TileSheets[i].Id); } int untitled = sheets.IndexOf("untitled tile sheet"); int floorsheet = sheets.IndexOf("walls_and_floors"); int indoor = sheets.IndexOf("indoor"); Monitor.Log($"Map has sheets: {string.Join(", ", sheets)}"); int ox = ModEntry.config.ExistingSpouseRoomOffsetX; int oy = ModEntry.config.ExistingSpouseRoomOffsetY; if (farmHouse.upgradeLevel > 1) { ox += 6; oy += 9; } Monitor.Log($"Preliminary adjustments"); for (int i = 0; i < 7; i++) { farmHouse.setMapTileIndex(ox + 29 + i, oy + 11, 0, "Buildings", indoor); farmHouse.removeTile(ox + 29 + i, oy + 9, "Front"); farmHouse.removeTile(ox + 29 + i, oy + 10, "Buildings"); farmHouse.setMapTileIndex(ox + 28 + i, oy + 10, 165, "Front", indoor); farmHouse.removeTile(ox + 29 + i, oy + 10, "Back"); } for (int i = 0; i < 8; i++) { farmHouse.setMapTileIndex(ox + 28 + i, oy + 10, 165, "Front", indoor); } for (int i = 0; i < 10; i++) { farmHouse.removeTile(ox + 35, oy + 0 + i, "Buildings"); farmHouse.removeTile(ox + 35, oy + 0 + i, "Front"); } for (int i = 0; i < 7; i++) { // horiz hall farmHouse.setMapTileIndex(ox + 29 + i, oy + 10, (i % 2 == 0 ? 352: 336), "Back", floorsheet); } for (int i = 0; i < 7; i++) { //farmHouse.removeTile(ox + 28, oy + 4 + i, "Back"); //farmHouse.setMapTileIndex(ox + 28, oy + 4 + i, (i % 2 == 0 ? 352 : ModEntry.config.HallTileEven), "Back", 0); } farmHouse.removeTile(ox + 28, oy + 9, "Front"); farmHouse.removeTile(ox + 28, oy + 10, "Buildings"); if (farmHouse.upgradeLevel > 1) { farmHouse.setMapTileIndex(ox + 28, oy + 10, 163, "Front", indoor); } farmHouse.removeTile(ox + 35, oy + 0, "Front"); farmHouse.removeTile(ox + 35, oy + 0, "Buildings"); int count = -1; ExtendMap(farmHouse, ox + 37 + (7 * spousesWithRooms.Count)); // remove and rebuild spouse rooms for (int j = 0; j < spousesWithRooms.Count; j++) { farmHouse.removeTile(ox + 35 + (7 * count), oy + 0, "Buildings"); for (int i = 0; i < 10; i++) { farmHouse.removeTile(ox + 35 + (7 * count), oy + 1 + i, "Buildings"); } BuildOneSpouseRoom(farmHouse, spousesWithRooms[j], count++); } Monitor.Log($"Building far wall"); // far wall farmHouse.setMapTileIndex(ox + 35 + (7 * count), oy + 0, 11, "Buildings", indoor); for (int i = 0; i < 10; i++) { farmHouse.setMapTileIndex(ox + 35 + (7 * count), oy + 1 + i, 68, "Buildings", indoor); } farmHouse.setMapTileIndex(ox + 35 + (7 * count), oy + 10, 130, "Front", indoor); } catch (Exception ex) { Monitor.Log($"Failed in {nameof(BuildSpouseRooms)}:\n{ex}", LogLevel.Error); } }