Documentation ¶
Overview ¶
Package levels contains the game's level data by providing IDs for map and zone files. All relevant level data (maps and zones) is documented in https://datacrystal.romhacking.net/wiki/Vagrant_Story:level_data.
Index ¶
Constants ¶
This section is empty.
Variables ¶
var Rooms = map[int][]Room{ 9: { {Id: 9, Name: `Entrance to Darkness`}, {Id: 10, Name: `Room of Cheap Red Wine`}, {Id: 11, Name: `Room of Cheap White Wine`}, {Id: 12, Name: `Hall of Struggle`}, {Id: 13, Name: `Smokebarrel Stair`}, {Id: 14, Name: `Wine Guild Hall`}, {Id: 15, Name: `Wine Magnate's Chambers`}, {Id: 16, Name: `Fine Vintage Vault`}, {Id: 17, Name: `Chamber of Fear`}, {Id: 18, Name: `The Reckoning Room`, HasChest: true}, {Id: 19, Name: `A Laborer's Thirst`}, {Id: 20, Name: `The Rich Drown in Wine`}, {Id: 21, Name: `Room of Rotten Grapes`}, {Id: 24, Name: `The Greedy One's Den`}, {Id: 27, Name: `Worker's Breakroom`, HasChest: true}, {Id: 409, Name: `Blackmarket of Wines`, HasChest: true}, }, 11: { {Id: 25, Name: `The Hero's Winehall`, HasChest: true, HasBoss: true}, }, 12: { {Id: 26, Name: `The Gallows`, HasChest: true, HasBoss: true}, }, 13: { {Id: 28, Name: `Hall of Sworn Revenge`}, {Id: 29, Name: `The Last Blessing`}, {Id: 30, Name: `The Weeping Corridor`}, {Id: 31, Name: `Persecution Hall`}, {Id: 32, Name: `The Lamenting Mother`, HasChest: true}, {Id: 33, Name: `Rodent-Ridden Chamber`, HasChest: true}, {Id: 34, Name: `Shrine to the Martyrs`}, {Id: 36, Name: `Hall of Dying Hope`}, {Id: 37, Name: `Bandits' Hideout`, HasChest: true}, {Id: 38, Name: `The Bloody Hallway`}, {Id: 39, Name: `Faith Overcame Fear`}, {Id: 40, Name: `The Withered Spring`}, {Id: 41, Name: `Repent, O ye Sinners`}, {Id: 42, Name: `The Reaper's Victims`}, {Id: 43, Name: `The Last Stab of Hope`}, {Id: 44, Name: `Hallway of Heroes`}, }, 14: { {Id: 46, Name: `The Beast's Domain`}, }, 15: { {Id: 47, Name: `Prisoners' Niche`}, {Id: 48, Name: `Corridor of the Clerics`}, {Id: 49, Name: `Priests' Confinement`}, {Id: 50, Name: `Alchemists' Laboratory`, HasChest: true}, {Id: 51, Name: `Theology Classroom`}, {Id: 52, Name: `Shrine of the Martyrs`}, {Id: 53, Name: `Advent Ground`}, {Id: 54, Name: `Passage of the Refugees`}, {Id: 57, Name: `Stairway to the Light`}, {Id: 58, Name: `Hallowed Hope`}, {Id: 59, Name: `The Academia Corridor`}, }, 16: { {Id: 60, Name: `Hall of Sacrilege`, HasBoss: true}, }, 17: { {Id: 61, Name: `The Cleansing Chantry`, HasBoss: true}, }, 50: { {Id: 260, Name: `Dreamers' Entrance`}, {Id: 261, Name: `Miners' Resting Hall`, HasChest: true}, {Id: 262, Name: `The Crossing`}, {Id: 263, Name: `Conflict and Accord`}, {Id: 264, Name: `The Suicide King`}, {Id: 265, Name: `The End of the Line`}, {Id: 266, Name: `The Battle's Beginning`, HasBoss: true}, {Id: 267, Name: `What Lies Ahead?`}, {Id: 268, Name: `The Fruits of Friendship`}, {Id: 269, Name: `The Earthquake's Mark`}, {Id: 270, Name: `Coal Mine Storage`, HasChest: true}, {Id: 271, Name: `The Passion of Lovers`}, {Id: 272, Name: `The Hall of Hope`}, {Id: 273, Name: `The Dark Tunnel`}, {Id: 274, Name: `Rust in Peace`, HasChest: true}, {Id: 275, Name: `Everwant Passage`}, {Id: 276, Name: `Mining Regrets`, HasChest: true}, {Id: 277, Name: `The Smeltry`, HasBoss: true}, {Id: 278, Name: `Clash of Hyaenas`}, {Id: 279, Name: `Greed Knows No Bounds`}, {Id: 280, Name: `Live Long and Prosper`}, {Id: 281, Name: `Pray to the Mineral Gods`}, {Id: 282, Name: `Traitor's Parting`, HasBoss: true}, {Id: 283, Name: `Escapeway`}, }, 51: { {Id: 284, Name: `Gambler's Passage`}, {Id: 285, Name: `Treaty Room`}, {Id: 286, Name: `The Miner's End`, HasBoss: true}, {Id: 287, Name: `Work, Then Die`}, {Id: 288, Name: `Bandits' Hollow`}, {Id: 289, Name: `Delusions of Happiness`, HasChest: true}, {Id: 290, Name: `Dining in Darkness`, HasBoss: true}, {Id: 291, Name: `Subtellurian Horrors`}, {Id: 292, Name: `Hidden Resources`, HasChest: true}, {Id: 293, Name: `Way of Lost Children`}, {Id: 294, Name: `Hall of the Empty Sconce`}, {Id: 295, Name: `Acolyte's Burial Vault`, HasChest: true}, {Id: 296, Name: `Hall of Contemplation`}, {Id: 297, Name: `The Abandoned Catspaw`}, {Id: 298, Name: `Tomb of the Reborn`, HasBoss: true}, {Id: 299, Name: `The Fallen Bricklayer`}, {Id: 300, Name: `Crossing of Blood`}, {Id: 301, Name: `Fool's Gold, Fool's Loss`}, {Id: 302, Name: `Cry of the Beast`}, {Id: 303, Name: `Senses Lost`}, {Id: 304, Name: `Desire's Passage`}, {Id: 305, Name: `Kilroy Was Here`}, {Id: 306, Name: `Suicidal Desires`, HasChest: true}, {Id: 307, Name: `The Ore of Legend`}, {Id: 308, Name: `Lambs to the Slaughter`}, {Id: 309, Name: `A Wager of Noble Gold`}, {Id: 310, Name: `The Lunatic Veins`}, {Id: 410, Name: `Corridor of Shade`}, {Id: 411, Name: `Revelation Shaft`}, }, 53: { {Id: 311, Name: `Dark Abhors Light`}, {Id: 312, Name: `Dream of the Holy Land`, HasBoss: true}, {Id: 313, Name: `The Ore Road`}, {Id: 314, Name: `Atone for Eternity`}, {Id: 315, Name: `The Air Stirs`}, {Id: 316, Name: `Bonds of Friendship`, HasChest: true}, {Id: 317, Name: `Stair to Sanctuary`}, {Id: 318, Name: `The Fallen Hall`}, {Id: 319, Name: `The Rotten Core`}, {Id: 320, Name: `Bacchus is Cheap`}, {Id: 321, Name: `Screams of the Wounded`}, {Id: 322, Name: `The Ore-Bearers`}, {Id: 323, Name: `The Dreamer's Climb`}, {Id: 324, Name: `Sinner's Sustenence`}, {Id: 325, Name: `The Timely Dew of Sleep`}, {Id: 326, Name: `Companions in Arms`, HasChest: true}, {Id: 327, Name: `The Auction Block`}, {Id: 328, Name: `Ascension`}, {Id: 329, Name: `Where the Serpent Hunts`}, {Id: 330, Name: `Ants Prepare for Winter`}, {Id: 331, Name: `Drowned in Fleeting Joy`, HasChest: true}, {Id: 332, Name: `The Laborer's Bonfire`}, {Id: 333, Name: `Stone and Sulfurous Fire`, HasChest: true}, {Id: 334, Name: `Torture Without End`, HasBoss: true}, {Id: 335, Name: `Way Down`}, {Id: 336, Name: `Excavated Hollow`, HasChest: true}, {Id: 337, Name: `Parting Regrets`}, {Id: 338, Name: `Corridor of Tales`}, {Id: 339, Name: `Dust Shall Eat the Days`}, {Id: 340, Name: `Hall of the Wage-Paying`, HasBoss: true}, {Id: 342, Name: `Tunnel of the Heartless`}, }, 30: { {Id: 139, Name: `The Dark Coast`}, {Id: 140, Name: `Hall of Prayer`}, {Id: 141, Name: `Those who Drink the Dark`}, {Id: 142, Name: `The Chapel of Meschaunce`, HasChest: true}, {Id: 143, Name: `The Resentful Ones`}, {Id: 144, Name: `Those who Fear the Light`}, }, 31: { {Id: 145, Name: `Chamber of Reason`, HasBoss: true}, {Id: 146, Name: `Exit to City Center`}, }, 22: { {Id: 63, Name: `Sanity and Madness`, HasBoss: true}, {Id: 67, Name: `Truth and Lies`, HasBoss: true}, {Id: 69, Name: `Order and Chaos`, HasBoss: true}, {Id: 70, Name: `The Victor's Laurels`}, {Id: 71, Name: `Struggle for the Soul`}, {Id: 72, Name: `An Offering of Souls`}, }, 24: { {Id: 79, Name: `The Flayed Confessional`, HasChest: true, HasBoss: true}, {Id: 80, Name: `Monk's Leap`}, {Id: 81, Name: `Where Darkness Spreads`, HasChest: true}, {Id: 82, Name: `Hieratic Recollections`}, {Id: 83, Name: `A Light in the Dark`}, {Id: 84, Name: `The Poisoned Chapel`}, {Id: 85, Name: `Sin and Punishment`}, {Id: 86, Name: `Cracked Pleasures`}, {Id: 87, Name: `Into Holy Battle`}, {Id: 88, Name: `Maelstrom of Malice`}, {Id: 89, Name: `The Acolyte's Weakness`}, {Id: 90, Name: `The Hall of Broken Vows`}, {Id: 91, Name: `The Melodics of Madness`}, {Id: 92, Name: `Free from Base Desires`}, {Id: 93, Name: `The Convent Room`}, {Id: 94, Name: `Hopes of the Idealist`, HasBoss: true}, }, 23: { {Id: 74, Name: `He Screams for Mercy`}, {Id: 75, Name: `Light and Dark Wage War`}, {Id: 76, Name: `Abasement from Above`}, {Id: 77, Name: `The Heretics' Story`}, {Id: 78, Name: `The Wine-Lecher's Fall`}, }, 25: { {Id: 95, Name: `An Arrow into Darkness`, HasChest: true}, {Id: 96, Name: `What Ails You, Kills You`, HasBoss: true}, {Id: 97, Name: `Where the Soul Rots`}, {Id: 98, Name: `Despair of the Fallen`}, {Id: 99, Name: `The Atrium`}, }, 54: { {Id: 343, Name: `Stair to the Sinners`}, {Id: 344, Name: `Slaugher of the Innocent`}, {Id: 345, Name: `The Fallen Knight`, HasChest: true}, {Id: 346, Name: `The Oracle Sins No More`}, {Id: 347, Name: `Awaiting Retribution`, HasChest: true}, }, 52: { {Id: 351, Name: `Shelter From the Quake`}, {Id: 352, Name: `Buried Alive`, HasChest: true}, {Id: 353, Name: `Movement of Fear`}, {Id: 354, Name: `Facing Your Illusions`}, {Id: 355, Name: `The Darkness Drinks`}, {Id: 356, Name: `Fear and Loathing`}, {Id: 357, Name: `Blood and the Beast`}, {Id: 358, Name: `Where Body and Soul Part`, HasChest: true}, }, 55: { {Id: 359, Name: `The Cage`}, {Id: 360, Name: `The Cauldron`}, {Id: 361, Name: `Wooden Horse`}, {Id: 362, Name: `Starvation`}, {Id: 363, Name: `The Breast Ripper`}, {Id: 364, Name: `The Pear`}, {Id: 365, Name: `The Whirligig`}, {Id: 366, Name: `Spanish Tickler`}, {Id: 367, Name: `Heretic's Fork`}, {Id: 368, Name: `The Chair of Spikes`}, {Id: 369, Name: `Blooding`}, {Id: 370, Name: `Bootikens`}, {Id: 371, Name: `Burial`, HasBoss: true}, {Id: 372, Name: `Burning`}, {Id: 373, Name: `Cleansing the Soul`}, {Id: 374, Name: `The Garotte`}, {Id: 375, Name: `Hanging`}, {Id: 376, Name: `Impalement`}, {Id: 377, Name: `Knotting`}, {Id: 378, Name: `The Branks`, HasChest: true}, {Id: 379, Name: `The Wheel`, HasChest: true}, {Id: 380, Name: `The Judas Cradle`, HasChest: true}, {Id: 381, Name: `The Ducking Stool`, HasChest: true}, }, 56: { {Id: 382, Name: `The Eunics' Lot`}, {Id: 383, Name: `Ordeal By Fire`}, {Id: 384, Name: `Tablillas`}, {Id: 385, Name: `The Oven at Neisse`}, {Id: 386, Name: `Strangulation`}, {Id: 387, Name: `Pressing`}, {Id: 388, Name: `The Strappado`}, {Id: 389, Name: `The Mind Burns`}, {Id: 390, Name: `Thumbscrews`}, {Id: 391, Name: `The Rack`}, {Id: 392, Name: `The Saw`}, {Id: 393, Name: `Ordeal By Water`}, {Id: 394, Name: `The Cold's Bridle`}, {Id: 395, Name: `Brank`}, {Id: 396, Name: `The Shin-Vice`}, {Id: 397, Name: `Squassation`, HasChest: true}, {Id: 398, Name: `The Spider`}, {Id: 399, Name: `Lead Sprinkler`, HasChest: true}, {Id: 400, Name: `Pendulum`}, {Id: 401, Name: `Dragging`}, {Id: 402, Name: `Tongue Slicer`}, {Id: 403, Name: `Tormentum Insomniae`}, {Id: 404, Name: `The Iron Maiden`, HasBoss: true}, {Id: 405, Name: `Saint Elmo's Belt`, HasChest: true}, {Id: 406, Name: `Judgement`}, {Id: 407, Name: `Dunking the Witch`, HasChest: true}, }, 48: { {Id: 220, Name: `The Bread Peddler's Way`}, {Id: 221, Name: `Way of the Mother Lode`}, {Id: 222, Name: `Sewer of Ravenous Rats`}, {Id: 223, Name: `Underdark Fishmarket`, HasBoss: true}, {Id: 224, Name: `The Sunless Way`}, {Id: 225, Name: `Remembering Days of Yore`}, {Id: 226, Name: `Where the Hunter Climbed`}, {Id: 227, Name: `Larder for a Lean Winter`, HasChest: true}, {Id: 228, Name: `Hall of Poverty`}, {Id: 229, Name: `The Washing-Woman's Way`}, {Id: 230, Name: `Beggars of the Mouthharp`}, {Id: 231, Name: `Corner of the Wretched`}, {Id: 232, Name: `Path to the Greengrocer`}, {Id: 233, Name: `Crossroads of Rest`}, {Id: 234, Name: `Path of the Children`}, {Id: 235, Name: `Fear of the Fall`, HasBoss: true}, {Id: 236, Name: `Sinner's Corner`}, {Id: 237, Name: `Nameless Dark Oblivion`}, {Id: 238, Name: `Corner of Prayers`}, {Id: 239, Name: `Hope Obstructed`}, {Id: 240, Name: `The Children's Hideout`, HasChest: true}, {Id: 241, Name: `The Crumbling Market`, HasChest: true}, {Id: 242, Name: `Tears from Empty Sockets`}, {Id: 243, Name: `Where Flood Waters Ran`}, {Id: 244, Name: `The Body Fragile Yields`}, {Id: 245, Name: `Salvation for the Mother`}, {Id: 246, Name: `Bite the Master's Wounds`}, }, 49: { {Id: 247, Name: `Hall to a New World`}, {Id: 248, Name: `Place of Free Words`}, {Id: 249, Name: `Bazaar of the Bizarre`, HasBoss: true}, {Id: 250, Name: `Noble Gold and Silk`}, {Id: 251, Name: `A Knight Sells his Sword`}, {Id: 252, Name: `Gemsword Blackmarket`, HasBoss: true}, {Id: 253, Name: `The Pirate's Son`}, {Id: 254, Name: `Sale of the Sword`, HasChest: true}, {Id: 255, Name: `Weapons Not Allowed`, HasChest: true}, {Id: 256, Name: `The Greengrocer's Stair`}, {Id: 257, Name: `Where Black Waters Ran`}, {Id: 258, Name: `Arms Against Invaders`}, {Id: 259, Name: `Catspaw Blackmarket`, HasChest: true}, }, 29: { {Id: 124, Name: `The Warrior's Rest`, HasChest: true}, {Id: 126, Name: `The Soldier's Bedding`}, {Id: 127, Name: `A Storm of Arrows`}, {Id: 128, Name: `Urge the Boy On`}, {Id: 129, Name: `A Taste of the Spoils`}, {Id: 130, Name: `Wiping Blood from Blades`}, {Id: 105, Name: `Students of Death`}, }, 28: { {Id: 106, Name: `The Gabled Hall`}, {Id: 107, Name: `Where the Master Fell`}, {Id: 108, Name: `The Weeping Boy`}, {Id: 109, Name: `Swords for the Land`}, {Id: 110, Name: `In Wait of the Foe`}, {Id: 111, Name: `Where Weary Riders Rest`}, {Id: 112, Name: `The Boy's Training Room`}, {Id: 113, Name: `Train and Grow Strong`}, {Id: 114, Name: `The Squire's Gathering`}, {Id: 115, Name: `The Invaders are Found`}, {Id: 116, Name: `The Dream-Weavers`}, {Id: 117, Name: `The Cornered Savage`}, {Id: 118, Name: `Traces of Invasion Past`}, {Id: 119, Name: `From Squire to Knight`}, {Id: 120, Name: `Be for Battle Prepared`}, {Id: 121, Name: `Destruction and Rebirth`}, {Id: 122, Name: `From Boy to Hero`}, {Id: 123, Name: `A Welcome Invasion`}, }, 40: { {Id: 179, Name: `The Hunt Begins`}, {Id: 180, Name: `Which Way Home`}, {Id: 181, Name: `The Giving Trees`}, {Id: 182, Name: `The Wounded Boar`}, {Id: 183, Name: `Golden Egg Way`}, {Id: 184, Name: `The Birds and the Bees`}, {Id: 185, Name: `The Woodcutter's Run`}, {Id: 186, Name: `The Wolves' Choice`}, {Id: 187, Name: `Howl of the Wolf King`}, {Id: 188, Name: `Fluttering Hope`}, {Id: 189, Name: `Traces of the Beast`}, {Id: 190, Name: `The Yellow Wood`}, {Id: 191, Name: `They Also Feed`}, {Id: 192, Name: `Where Soft Rains Fell`}, {Id: 193, Name: `The Spirit Trees`}, {Id: 194, Name: `The Silent Hedges`}, {Id: 195, Name: `Lamenting to the Moon`}, {Id: 196, Name: `The Hollow Hills`}, {Id: 197, Name: `Running with the Wolves`}, {Id: 198, Name: `You Are the Prey`}, {Id: 199, Name: `The Secret Path`}, {Id: 200, Name: `The Faerie Circle`}, {Id: 201, Name: `Return to the Land`, HasBoss: true}, {Id: 202, Name: `Forest River`, HasChest: true}, {Id: 203, Name: `Hewn from Nature`, HasChest: true, HasBoss: true}, {Id: 204, Name: `The Wood Gate`}, }, 41: { {Id: 348, Name: `Steady the Boar-Spears`}, {Id: 349, Name: `The Boar's Revenge`}, {Id: 350, Name: `Nature's Womb`, HasChest: true}, }, 32: { {Id: 147, Name: `Rue Vermillion`}, {Id: 148, Name: `The Rene Coastroad`}, {Id: 149, Name: `Rue Mal Fallde`}, {Id: 150, Name: `Tircolas Flow`, HasBoss: true}, {Id: 151, Name: `Glacialdra Kirk Ruins`}, {Id: 152, Name: `Rue Bouquet`}, {Id: 153, Name: `Villeport Way`}, {Id: 154, Name: `Rue Sant D'alsa`}, {Id: 155, Name: `Valdiman Gates`}, {Id: 156, Name: `Rue Faltes`}, {Id: 157, Name: `Forcas Rise`}, {Id: 158, Name: `Rue Aliano`}, {Id: 159, Name: `Rue Volnac`}, {Id: 160, Name: `Rue Morgue`}, {Id: 162, Name: `Rue Lejour`}, {Id: 163, Name: `Kesch Bridge`}, {Id: 164, Name: `Rue Crimnade`}, {Id: 165, Name: `Rue Fisserano`}, {Id: 166, Name: `Shasras Hill Park`}, }, 34: { {Id: 173, Name: `Dinas Walk`}, }, 35: { {Id: 174, Name: `Zebel's Walk`}, }, 37: { {Id: 176, Name: `The House Khazabas`, HasChest: true}, }, 36: { {Id: 175, Name: `Gharmes Walk`, HasChest: true}, }, 38: { {Id: 177, Name: `The House Gilgitte`, HasChest: true}, }, 39: { {Id: 171, Name: `Plateia Lumitar`}, }, }
Rooms lists all randomizable Rooms sorted by zone ID, which pertains to the 3 digit number in the zone file name ZONE<ID>.ZND. Factories are excluded from randomization. Based on https://datacrystal.romhacking.net/wiki/Vagrant_Story:rooms_list. This is a package level variable and should not be mutated.
Functions ¶
func ZoneFileName ¶
ZoneFileName returns the name of the zone file for the given zone ID.
Types ¶
type Room ¶
type Room struct { // The room's MPD file's ID. Id int // The room's name. Name string // HasChest indicates if the room contains a chest. // Chest locations are taken from // https://gamefaqs.gamespot.com/ps/914326-vagrant-story/faqs/40255/chests. HasChest bool // HasBoss is true if a boss encounter occurs in this room. // For now, boss encounters are always defined as by // https://gamefaqs.gamespot.com/ps/914326-vagrant-story/faqs/39091. HasBoss bool }
A Room contains the room's MPD file's ID, its (original) name, and flags indicating the following:
- if it contains a chest,
- if a boss encounter occurs there.
The ID pertains to the 3 digit number in the map file name MAP<ID>.MPD. Most room information is taken from https://vagrantstory.fandom.com/wiki/Locations_in_Vagrant_Story.
func (Room) MapFileName ¶
MapFileName returns the name of the map file for the given map ID. The ID is not checked here, as it is assumed to be valid w.r.t. the Room receiver.