Laxley Grandfather Clock puzzle artwork done.

This commit is contained in:
2026-03-28 18:53:38 +00:00
parent 69306a141b
commit 83e9a35d2f
152 changed files with 12822 additions and 194 deletions

View File

@@ -1,12 +1,15 @@
using System;
[AttributeUsage(AttributeTargets.Field)]
public abstract class DisplayNameAttribute : Attribute
namespace BriarQueen.Data.Attributes
{
public string Name { get; }
public DisplayNameAttribute(string name)
[AttributeUsage(AttributeTargets.Field)]
public class DisplayNameAttribute : Attribute
{
Name = name;
public string Name { get; }
public DisplayNameAttribute(string name)
{
Name = name;
}
}
}

View File

@@ -108,6 +108,9 @@ namespace BriarQueen.Data.IO.Saves
VillageStreetVinesCut,
LaxleyFireplaceExtinguished,
LaxleyLockboxOpened,
LaxleyClockSolved,
LaxleyHourHandRetrieved,
LaxleyMinuteHandRetrieved,
}
[Serializable]

View File

@@ -6,5 +6,6 @@ namespace BriarQueen.Data.Identifiers
WorkshopPuzzleBoxSolved,
FountainGemPuzzleSolved,
FireplaceLockboxPuzzleBoxSolved,
LaxleyGrandfatherClockPuzzleSolved,
}
}

View File

@@ -53,7 +53,9 @@ namespace BriarQueen.Data.Identifiers
ChapterOneVillageMarketSquareStatue,
ChapterOneVillageMarketSquareFirepit,
ChapterOneVillageEnd,
ChapterOneVillageEndChurch
ChapterOneVillageEndChurch,
ChapterOneLaxleyHouseLockbox,
ChapterOneLaxleyHouseUpstairsStudy,
}
public enum AssetItemKey

View File

@@ -21,6 +21,7 @@ namespace BriarQueen.Data.Identifiers
SharpenKnife,
LockBoxNumberReel,
LockboxOpening,
ClockOpening,
}
public enum UIFXKey
@@ -63,6 +64,8 @@ namespace BriarQueen.Data.Identifiers
{ SFXKey.ResetPuzzle, "SFX_ResetPuzzle" },
{ SFXKey.SharpenKnife, "SFX_SharpenKnife"},
{ SFXKey.LockBoxNumberReel, "SFX_LockBoxNumberReel" },
{ SFXKey.LockboxOpening, "SFX_LockboxOpening" },
{ SFXKey.ClockOpening, "SFX_ClockOpening" },
});
public static readonly IReadOnlyDictionary<UIFXKey, string> UIFX =

View File

@@ -8,6 +8,7 @@ namespace BriarQueen.Data.Identifiers
None = 0,
WorkshopDiary = 1,
LaxleyHouseBillOfSale = 2,
GranddfatherClockPlaque = 3
}
public enum ClueEntryID
@@ -25,20 +26,15 @@ namespace BriarQueen.Data.Identifiers
WorkshopFadedPhoto = 1
}
public enum LocationEntryID
{
None = 0,
Village = 1,
Workshop = 2
}
public static class CodexEntryIDs
{
public static readonly IReadOnlyDictionary<BookEntryID, string> Books =
new ReadOnlyDictionary<BookEntryID, string>(
new Dictionary<BookEntryID, string>
{
{ BookEntryID.WorkshopDiary, "BOOK_WorkshopDiary" }
{ BookEntryID.WorkshopDiary, "BOOK_WorkshopDiary" },
{ BookEntryID.LaxleyHouseBillOfSale, "BOOK_LaxleyHouseBillOfSale" },
{ BookEntryID.GranddfatherClockPlaque, "BOOK_GranddfatherClockPlaque" },
});
public static readonly IReadOnlyDictionary<ClueEntryID, string> Clues =

View File

@@ -15,7 +15,7 @@ namespace BriarQueen.Data.Identifiers
RagFallsApart = 7,
LooksImportant = 8,
WrongTool = 9,
RefillBucket = 10,
CollectEndlessGoblets = 10,
}
public enum LevelInteractKey
@@ -50,7 +50,11 @@ namespace BriarQueen.Data.Identifiers
PumpTurnOn = 16,
FireHot = 17,
ExtinguishFire = 18,
CauldronBoiledAway = 19
CauldronBoiledAway = 19,
LaxleyHouseBrokenClock = 20,
LaxleyGrandfatherClockMissingBothHands = 21,
LaxleyGrandfatherClockMissingHourHand = 22,
LaxleyGrandfatherClockMissingMinuteHand = 23,
}
public enum UIInteractKey
@@ -58,66 +62,72 @@ namespace BriarQueen.Data.Identifiers
None = 0,
EmptySlot = 1,
}
public static class InteractEventIDs
{
public static readonly IReadOnlyDictionary<ItemInteractKey, string> ItemInteractions =
new ReadOnlyDictionary<ItemInteractKey, string>(
new Dictionary<ItemInteractKey, string>
{
{ ItemInteractKey.EmptyHands, "I need to put my tools away." },
{ ItemInteractKey.CantUseItem, "That won't work here." },
{ ItemInteractKey.RustyKnife, "It's too blunt to be useful." },
{ ItemInteractKey.SomethingMissing, "Something's missing." },
{ ItemInteractKey.PliersSnapped, "The pliers snapped. They're no use now." },
{ ItemInteractKey.CarefulInteract, "I need to be careful with this." },
{ ItemInteractKey.RagFallsApart, "The rag fell apart." },
{ ItemInteractKey.LooksImportant, "That looks important." },
{ ItemInteractKey.WrongTool, "I need the proper tool for this."},
{ ItemInteractKey.RefillBucket, "I need to refill this before I can use."}
{ ItemInteractKey.EmptyHands, "My hands are too full for that." },
{ ItemInteractKey.CantUseItem, "That wont work here." },
{ ItemInteractKey.RustyKnife, "Too dull to be of any use." },
{ ItemInteractKey.SomethingMissing, "Something isnt right." },
{ ItemInteractKey.PliersSnapped, "The pliers snap. Thats the end of them." },
{ ItemInteractKey.CarefulInteract, "I should take care with this." },
{ ItemInteractKey.RagFallsApart, "It fell apart in my hands." },
{ ItemInteractKey.LooksImportant, "This feels important." },
{ ItemInteractKey.WrongTool, "This isnt the right tool." },
{ ItemInteractKey.CollectEndlessGoblets, "Faint symbols coil across the goblets surface." },
});
public static readonly IReadOnlyDictionary<LevelInteractKey, string> LevelInteractions =
new ReadOnlyDictionary<LevelInteractKey, string>(
new Dictionary<LevelInteractKey, string>
{
{ LevelInteractKey.WaterValve, "I've already turned the water on." },
{ LevelInteractKey.ClearVinesOutside, "I need to clear the vines outside first." },
{ LevelInteractKey.PumphouseChain, "There must be a key around here somewhere." },
{ LevelInteractKey.CutVines, "I need something to cut through these." },
{ LevelInteractKey.WorkshopLockedSafe, "It's locked tight." },
{ LevelInteractKey.UnlockedPumphouse, "You used the Pumphouse Key."},
{ LevelInteractKey.WaterValve, "The water is already flowing." },
{ LevelInteractKey.ClearVinesOutside, "The vines still block the way outside." },
{ LevelInteractKey.PumphouseChain, "Its locked by something more than rust." },
{ LevelInteractKey.CutVines, "These wont give way by hand." },
{ LevelInteractKey.WorkshopLockedSafe, "Sealed tight." },
{ LevelInteractKey.UnlockedPumphouse, "The lock gives with a dull click." },
});
public static readonly IReadOnlyDictionary<EnvironmentInteractKey, string> EnvironmentInteractions =
new ReadOnlyDictionary<EnvironmentInteractKey, string>(
new Dictionary<EnvironmentInteractKey, string>
{
{ EnvironmentInteractKey.BrokenLantern, "It's too broken to use." },
{ EnvironmentInteractKey.WorkshopWriting, "It could be worse... it could be blood." },
{ EnvironmentInteractKey.UseGrindstone, "I could sharpen something on this." },
{ EnvironmentInteractKey.WorkshopBookDisintegrating, "It fell apart in my hands." },
{ EnvironmentInteractKey.UsingKnife, "I should be careful cutting these." },
{ EnvironmentInteractKey.AlreadySharpened, "That should be sharp enough now." },
{ EnvironmentInteractKey.Locked, "It's locked." },
{ EnvironmentInteractKey.CantGoThere, "I can't go that way." },
{ EnvironmentInteractKey.DirtyWindow, "I can't see through all this grime." },
{ EnvironmentInteractKey.WorkshopBagNoItems, "There's nothing left inside." },
{ EnvironmentInteractKey.FindCandle, "I should look for the candle." },
{ EnvironmentInteractKey.DoesntBelong, "That doesn't belong here." },
{ EnvironmentInteractKey.SharpGlass, "Ow... that's sharp." },
{ EnvironmentInteractKey.FreshAndCoolWater, "The water feels cool and refreshing." },
{ EnvironmentInteractKey.WorkshopBooks, "The books are ancient and crumbling." },
{ EnvironmentInteractKey.PumpTurnOn, "The water pumps splutter into life."},
{ EnvironmentInteractKey.FireHot, "I should put the fire out first."},
{ EnvironmentInteractKey.CauldronBoiledAway, "Whatever was in the cauldron, boiled away long ago."}
{ EnvironmentInteractKey.BrokenLantern, "Beyond repair." },
{ EnvironmentInteractKey.WorkshopWriting, "At least it isnt blood." },
{ EnvironmentInteractKey.UseGrindstone, "This could still sharpen an edge." },
{ EnvironmentInteractKey.WorkshopBookDisintegrating, "It crumbles at a touch." },
{ EnvironmentInteractKey.UsingKnife, "Careful… one slip." },
{ EnvironmentInteractKey.AlreadySharpened, "That edge will do." },
{ EnvironmentInteractKey.Locked, "Locked." },
{ EnvironmentInteractKey.CantGoThere, "No way through." },
{ EnvironmentInteractKey.DirtyWindow, "Nothing visible through the grime." },
{ EnvironmentInteractKey.WorkshopBagNoItems, "Picked clean." },
{ EnvironmentInteractKey.FindCandle, "I need the candle that goes here." },
{ EnvironmentInteractKey.DoesntBelong, "This feels out of place." },
{ EnvironmentInteractKey.SharpGlass, "Still sharp enough to bite." },
{ EnvironmentInteractKey.FreshAndCoolWater, "Cool. Clean. Unexpected." },
{ EnvironmentInteractKey.WorkshopBooks, "Time hasnt been kind to these." },
{ EnvironmentInteractKey.PumpTurnOn, "The pumps shudder back to life." },
{ EnvironmentInteractKey.FireHot, "Too hot to get close." },
{ EnvironmentInteractKey.CauldronBoiledAway, "Whatever it held is long gone." },
{ EnvironmentInteractKey.ExtinguishFire, "The symbols begin to glow as the goblet fills." },
{ EnvironmentInteractKey.LaxleyHouseBrokenClock, "The clock stopped at three-thirty-three." },
{ EnvironmentInteractKey.LaxleyGrandfatherClockMissingBothHands, "It's missing both hands. "},
{ EnvironmentInteractKey.LaxleyGrandfatherClockMissingHourHand, "The hour hand is missing."},
{ EnvironmentInteractKey.LaxleyGrandfatherClockMissingMinuteHand, "The minute hand is missing."},
});
public static readonly IReadOnlyDictionary<UIInteractKey, string> UIInteractions =
new ReadOnlyDictionary<UIInteractKey, string>(
new Dictionary<UIInteractKey, string>
{
{ UIInteractKey.EmptySlot, "Empty slot." },
{ UIInteractKey.EmptySlot, "Empty." },
});
public static string Get(ItemInteractKey key)

View File

@@ -37,7 +37,10 @@ namespace BriarQueen.Data.Identifiers
TornPage4 = 29,
TornPage5 = 30,
IncompleteBook = 31,
CompleteBook = 32
CompleteBook = 32,
Stamp = 33,
LaxleyClockHourHand = 34,
LaxleyClockMinuteHand = 35,
}
public enum EnvironmentKey
@@ -56,6 +59,7 @@ namespace BriarQueen.Data.Identifiers
WorkshopBrokenLantern = 11,
WorkshopWriting = 12,
StreetVines = 13,
GrandfatherClockPlaque = 14,
}
public enum PuzzleSlotKey
@@ -64,7 +68,9 @@ namespace BriarQueen.Data.Identifiers
WorkshopCandleSlot = 1,
WorkshopPuzzleBoxSlot = 2,
FountainGemSlot = 3,
FireplaceLockboxSlot = 4,
GrandfatherClockFace = 5,
GrandfatherClockHand = 6,
}
public static class ItemIDs
@@ -74,7 +80,11 @@ namespace BriarQueen.Data.Identifiers
new Dictionary<PuzzleSlotKey, string>
{
{ PuzzleSlotKey.WorkshopCandleSlot, "PUZ_WorkshopCandleSlot" },
{ PuzzleSlotKey.WorkshopPuzzleBoxSlot, "PUZ_WorkshopPuzzleBoxSlot" }
{ PuzzleSlotKey.WorkshopPuzzleBoxSlot, "PUZ_WorkshopPuzzleBoxSlot" },
{ PuzzleSlotKey.FountainGemSlot, "PUZ_FountainGemSlot" },
{ PuzzleSlotKey.FireplaceLockboxSlot, "PUZ_FireplaceLockboxSlot" },
{ PuzzleSlotKey.GrandfatherClockFace, "PUZ_GrandfatherClockFace" },
{ PuzzleSlotKey.GrandfatherClockHand, "PUZ_GrandfatherClockHand" },
});
public static readonly IReadOnlyDictionary<EnvironmentKey, string> Environment =
@@ -94,37 +104,48 @@ namespace BriarQueen.Data.Identifiers
{ EnvironmentKey.WorkshopBrokenLantern, "ENV_WorkshopBrokenLantern" },
{ EnvironmentKey.WorkshopWriting, "ENV_WorkshopWriting" },
{ EnvironmentKey.StreetVines, "ENV_StreetVines" },
{ EnvironmentKey.GrandfatherClockPlaque, "ENV_GrandfatherClockPlaque" },
});
public static readonly IReadOnlyDictionary<ItemKey, string> Pickups =
new ReadOnlyDictionary<ItemKey, string>(
new Dictionary<ItemKey, string>
{
{ ItemKey.RustedKnife, "00_RustedKnife" },
{ ItemKey.SharpenedKnife, "01_SharpenedKnife" },
{ ItemKey.EmeraldAmulet, "02_EmeraldAmulet" },
{ ItemKey.DustyMirror, "03_DustyMirror" },
{ ItemKey.SmallRag, "04_SmallRag" },
{ ItemKey.GreenCandle, "05_GreenCandle" },
{ ItemKey.IndigoCandle, "06_IndigoCandle" },
{ ItemKey.DirtyMagnifyingGlass, "07_DirtyMagnifyingGlass" },
{ ItemKey.PumphouseKey, "08_PumphouseKey" },
{ ItemKey.RedCandle, "09_RedCandle" },
{ ItemKey.OrangeCandle, "10_OrangeCandle" },
{ ItemKey.YellowCandle, "11_YellowCandle" },
{ ItemKey.BlueCandle, "12_BlueCandle" },
{ ItemKey.VioletCandle, "13_VioletCandle" },
{ ItemKey.Pliers, "14_Pliers" },
{ ItemKey.Emerald, "15_Emerald" },
{ ItemKey.Sapphire, "16_Sapphire" },
{ ItemKey.Ruby, "17_Ruby" },
{ ItemKey.RubyRing, "18_RubyRing" },
{ ItemKey.SilverCoin, "19_SilverCoin" },
{ ItemKey.GoldCoin, "20_GoldCoin" },
{ ItemKey.GrindstoneAxlePin, "21_GrindstoneAxlePin" },
{ ItemKey.Diamond, "22_Diamond" },
{ ItemKey.DiamondTiara, "23_DiamondTiara" },
{ ItemKey.DustySapphire, "24_DustySapphire" },
{ ItemKey.RustedKnife, "01_RustedKnife" },
{ ItemKey.SharpenedKnife, "02_SharpenedKnife" },
{ ItemKey.EmeraldAmulet, "03_EmeraldAmulet" },
{ ItemKey.DustyMirror, "04_DustyMirror" },
{ ItemKey.SmallRag, "05_SmallRag" },
{ ItemKey.GreenCandle, "06_GreenCandle" },
{ ItemKey.IndigoCandle, "07_IndigoCandle" },
{ ItemKey.DirtyMagnifyingGlass, "08_DirtyMagnifyingGlass" },
{ ItemKey.PumphouseKey, "09_PumphouseKey" },
{ ItemKey.RedCandle, "10_RedCandle" },
{ ItemKey.OrangeCandle, "11_OrangeCandle" },
{ ItemKey.YellowCandle, "12_YellowCandle" },
{ ItemKey.BlueCandle, "13_BlueCandle" },
{ ItemKey.VioletCandle, "14_VioletCandle" },
{ ItemKey.Pliers, "15_Pliers" },
{ ItemKey.Emerald, "16_Emerald" },
{ ItemKey.Sapphire, "17_Sapphire" },
{ ItemKey.Ruby, "18_Ruby" },
{ ItemKey.RubyRing, "19_RubyRing" },
{ ItemKey.SilverCoin, "20_SilverCoin" },
{ ItemKey.GoldCoin, "21_GoldCoin" },
{ ItemKey.GrindstoneAxlePin, "22_GrindstoneAxlePin" },
{ ItemKey.Diamond, "23_Diamond" },
{ ItemKey.DiamondTiara, "24_DiamondTiara" },
{ ItemKey.DustySapphire, "25_DustySapphire" },
{ ItemKey.TornPage1, "26_TornPage1" },
{ ItemKey.TornPage2, "27_TornPage2" },
{ ItemKey.TornPage3, "28_TornPage3" },
{ ItemKey.TornPage4, "29_TornPage4" },
{ ItemKey.TornPage5, "30_TornPage5" },
{ ItemKey.IncompleteBook, "31_IncompleteBook" },
{ ItemKey.CompleteBook, "32_CompleteBook" },
{ ItemKey.Stamp, "33_Stamp" },
{ ItemKey.LaxleyClockHourHand, "34_LaxleyClockHourHand" },
{ ItemKey.LaxleyClockMinuteHand, "35_LaxleyClockMinuteHand" },
});
public static string Get(ItemKey key)

View File

@@ -6,5 +6,6 @@ namespace BriarQueen.Data.Identifiers
Village = 1,
Workshop = 2,
LaxleyHouse = 3,
Pumphouse = 4,
}
}

View File

@@ -8,6 +8,7 @@ namespace BriarQueen.Data.Identifiers
WorkshopPuzzleBox,
FountainGemPuzzle,
FireplaceLockboxPuzzle,
LaxleyClock
}
public static class PuzzleIdentifiers
@@ -18,6 +19,7 @@ namespace BriarQueen.Data.Identifiers
{ PuzzleKey.WorkshopPuzzleBox, "CH1:Puzzle:WorkshopBox" },
{ PuzzleKey.FountainGemPuzzle , "CH1:Puzzle:FountainGems" },
{ PuzzleKey.FireplaceLockboxPuzzle, "CH1:Puzzle:FireplaceLockboxPuzzle" },
{ PuzzleKey.LaxleyClock, "CH1:Puzzle:LaxleyClock" },
};
// Optional helper to get all puzzle IDs

View File

@@ -1,10 +1,17 @@
using BriarQueen.Data.Attributes;
namespace BriarQueen.Data.Identifiers
{
public enum ToolID
{
[DisplayName("Empty Hands")]
None = 0,
[DisplayName("Sharpened Knife")]
Knife = 1,
WaterBucket,
[DisplayName("Water Goblet")]
EndlessGoblet,
}
}

View File

@@ -25,15 +25,15 @@ namespace BriarQueen.Data.Identifiers
{
{
TutorialPopupID.ReturnToPreviousLevel,
"Click the bottom corners to go back the way you came."
"Click the bottom corners to return to the previous area."
},
{
TutorialPopupID.UsingItemsTogether,
"Select an item, then click another to use it on that object."
"Select one item, then click another to use them together."
},
{
TutorialPopupID.HideHUD,
"Press 'H' to hide the HUD and see the world more clearly."
"Press 'H' to hide the HUD."
},
{
TutorialPopupID.ExitItems,
@@ -41,31 +41,31 @@ namespace BriarQueen.Data.Identifiers
},
{
TutorialPopupID.MultipleUseItems,
"Some items can be used more than once, but will eventually wear out."
"Some items can be used multiple times, but they may wear out."
},
{
TutorialPopupID.DarkRooms,
"Dark rooms hide what matters. Look carefully—light reveals what they conceal."
"Dark rooms can hide important details. Use light to reveal them."
},
{
TutorialPopupID.Codex,
"New discoveries are added to your codex. Press 'C' to review what you've gathered."
"The Codex stores information you've discovered. Press 'C' to open it."
},
{
TutorialPopupID.HiddenItems,
"Some things are hidden on purpose. Search carefully to uncover them."
"Some items are hidden. Search carefully."
},
{
TutorialPopupID.ResetPuzzles,
"Some puzzles can be reset if you make a mistake."
"Some puzzles can be reset."
},
{
TutorialPopupID.Tools,
"You'll find tools as you explore. Each has its own purpose—try them on different objects. Press 'Y' to view your tools."
"You'll find tools as you explore. Try them on different objects. Press 'Y' to view your tools."
},
{
TutorialPopupID.ItemsAway,
"Right-click to put away any items."
"Right-click to put away the current item."
},
{
TutorialPopupID.ItemCycling,