1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

Fable Randomizer?

Discussion in 'Fable Modding' started by VinDiesel, Feb 10, 2019.

Register or log in to browse without ads.

  1. VinDiesel

    VinDiesel Living Necromonger

    Posts:
    41
    Likes:
    47
    Trophies:
    40
    Hi there everyone! How are you today?

    I've been reliving legendary games of the past with a fresh breath of new life thanks to randomizers that people have been putting together over the years. My favorite favorite favorite one to play so far has been Zelda on SNES, the races of which you can find on YouTube and are fascinating. What I like about the idea is that it so dramatically changes a linear game into a non-linear game by shuffling the order in which everything must be done, and suddenly a game you've played thousands of times is no longer a predictable list of chores but basically a brand new game, you have to think it all through all over again.

    I keep thinking to myself this would be great for Fable. But I can't find it. :(

    I checked out quite a few sites even Spanish and French sites so I'm guessing no one made a Fable Randomizer yet. I think it'd be a great thing to have for a community, inviting challenges, speedruns, funny videos of random things happening and so on. I'm pretty good around data, so I can figure out how one might be made, but I'm no good at programming. If I can put together a base data file, lists of pointers and appropriate value ranges, I'll put a bounty on an app that'll do the randomizing.

    Right now I'm looking for a programmer and someone who can give me some quick insight on Fable modding particulars so I can get up to speed. Any help would be great! Gonna go read more of the forum now. Thank you.

    Editing post.

    I grabbed some tools and I continue to browse through the modder knowledge bases, and it's quickly becoming extremely apparent that there's a lot that can't be done.

    One problem is the reliance on hardcoded gameflow script. I'm not smart enough to do anything with that and I guess no one else is either because with only a couple exceptions no one has even touched it. Some of it is documented though, cool, but I'm just not the guy for that. So no random quest order, no random map progression.

    Another is the lack of developer tools to edit the finer details in maps. I can add a chest but I can't get npcs to walk around them. A lot of other things that would mostly be aesthetic but still cool to do like animations and effects won't be reasonably doable.


    So what can be randomized?

    I'm looking at this tool that creates patches, Fable Explorer. It's not perfect for what I want to do but it makes it The somewhat possible. I can manually produce a base patch that doesn't make any modifications, but has all the data that can be randomized. Someone smarter than me can make a tool that edits values in that patch based on a randomly generated number, or seed, and grab data from a table of acceptable values.

    In English that means npc appearance, health, armor, weapons, can be randomized. Arena rounds and enemies can be randomized. Shops, shopkeepers, item prices, item quantities, weapon damage, augment data, container contents and loot drops can be randomized. Lots of stuff can be randomized and it looks like this project will be both easy enough and reasonably doable, so going to keep working on it.

    More edits.

    Looking through posts by veteran modders I'm picking up heavy passionate views about a lot of things regarding balance, mechanics and piracy, including distribution of original game files. My base patch would be a collection of original game data, which would then be piracy. But if I make a base patch that is itself a mod, than have someone make a randomizer for that, we're back in business.

    It hasn't been a day and I'm already in over my head. :D

    Thinking more on it, the game isn't very heavy on the need for items like a Zelda title. You can get through the game with the weakest sword, weakest bow, weakest spell, fishing rod and shovel, and no other items. I can try to make the player require certain items, but right now my better bet is to just randomize other things.
     
    Last edited: Feb 11, 2019
  2. Dark Drakan

    Dark Drakan Administrator Staff Member Guildmaster Legendary Hero

    Posts:
    25,458
    Likes:
    2,209
    Trophies:
    365
    Interesting idea and not actually heard of these randomizers before but sound like they could mix things up with some games and give them new life. Fable was known but not being the easiest game to mod as the developers didnt create many tools to help with this unfortunately.
     
  3. VinDiesel

    VinDiesel Living Necromonger

    Posts:
    41
    Likes:
    47
    Trophies:
    40
    Oh yea dude these randomizers are good stuff and they've really picked up on popularity in these past years. The Ocarina of Time and Majora's Mask ones are great too, but Zelda's not the only series. Kaltenborn and Xaelm maintain a library of randomizers.

    The tools that are out there are good enough. If Lionhead released tools I bet map editing would be the only extra possibility, just because of the way the game was made. My suspicions keep getting reaffirmed by posts saying that stuff that really should have been externalized in script files was hardcoded. That's the biggest limitation of all and I can't imagine what was going on in the studio that made them think that was a good idea. Hindsight's 20/20, if they could do it over I bet they'd do it differently. 15 years later, I'll be happy with whatever anyone can do.

    I've seen a lot of unfinished overhaul mods aimed at Fable balance. This game could really use something like a structured, leveled, balanced, sensible character progression. A randomizer is pretty much the opposite of that, rearranging everything produces even greater balance problems on purpose because it can be entertaining. This idea is already in the right part of the effort/reward ratio. Enough stuff is possible to make it worthwhile. I'll keep looking through stuff for ideas and learning how to do things.
     
    Dark Drakan likes this.
  4. Register or log in to browse without ads.

  5. Dark Drakan

    Dark Drakan Administrator Staff Member Guildmaster Legendary Hero

    Posts:
    25,458
    Likes:
    2,209
    Trophies:
    365
    I thought they might have released some mod tools when Fable Anniversary launched or at least made it a little easier for modders to change some things that it just wasnt possible to do so in older releases. Have to jump through quite a few hoops just to get the user made modding tools working these days.
     
    VinDiesel likes this.
  6. VinDiesel

    VinDiesel Living Necromonger

    Posts:
    41
    Likes:
    47
    Trophies:
    40
    There are nearly a thousand things in the game that are considered an inventory item. Those have to be filtered through though because not each is actually an inventory item. Finalizing this list will be easy though, I can just spawn everything in a chest and see what ends up in the inventory. That will be the list of items that will make up the item pool. It will still need some refining for quest-specific things, and I'll have to put upper and lower limits on items that you can get more than 1 of like a cap on silver keys at 30 or more to make silver key chests easier to open.

    The hurdle after that is identifying each and every place where inventory items are given to the hero. Quest rewards, container drops, enemy drops, shop items, cutscenes, digging and fishing spots, pub game rewards, some are just laying around to pick up. In a patch that addresses balance, most of that will be adjusted to make the game fairer and more challenging. In a randomizer, each one of those item opportunities could be a silver key or the solus greatsword or an apple. That's what makes it interesting but tedious. I also want to randomize other things. A silver key chest might be a regular chest and vice versa. A 30 key chest might have an iron weapon. A regular chest might have platinum armor. The Bowerstone armor vendor might have diamonds galore, or just apples.

    I don't want to limit it to items. Item values, damage and armor ratings, npc health, player health, mana costs, spells in general, there's a whole lot that can be done which is cool but then it's like crap there's a whole lot to do. :(
     
  7. Dark Drakan

    Dark Drakan Administrator Staff Member Guildmaster Legendary Hero

    Posts:
    25,458
    Likes:
    2,209
    Trophies:
    365
    Seems like you have a good foundation and a solid plan to get things moving at least and I hope it all works out. Been some time since anyone attempted anything new with the series and it will be interesting to see where this leads.
     
  8. VinDiesel

    VinDiesel Living Necromonger

    Posts:
    41
    Likes:
    47
    Trophies:
    40
    Still going through an awful lot of data. The scope of the project is absolutely too daunting to look at all at once and so right now I'm focusing on items and item implementation. I won't be shuffling around item properties yet, but I do think an apple that might sell for thousands could and should be a possibility in the future. A Sword of Aeons that does no damage. A shopkeeper who might practically give away everything, from his one useless boot to his vast diamond collection.

    I've had to go through all the ways in which items are given to the hero and there's a few.

    The playable character's CCreatureDef gives items that the player starts with, notable clothing.
    The CExperienceDef deals in half of the character's titles, the "will user known as" part.
    CFishingDef deals in nonfixed fishing prizes.
    CQuestCardDef has quest rewards.
    CShopDef has stuff you can buy, and a lot of data regarding how the shopkeeper decides to price the stuff apart from the MSRP set in item-specific CStockItemDef.
    CTavernGameDef does pub game prizes, the dolls.
    OBJECT_FAMILY determines the random drops and odds of each drop from npcs on death.

    That's just the game.bin. In the script.bin you have the CScriptDef, an insanely massive definition that serves as the binary-side of hardcoded scripts. So the game calls a function, the game will say hey, it's time to give the player something that's defined in this library, it'll look it up and give that item. What sucks is that it's so huge and difficult to navigate and so easy to overlook stuff.

    Then there's the CCutsceneDefs which is much easier than the CScriptDef. Each one is an individual cutscene, and there's hundreds of them but only 50-70 have lines where something is given to the player.

    But I'm leaving out the level scripts. You have openable containers (chests), searchable containers (bookshelves), breakable containers (barrels), fishing spots, digging spots, and items just laying around.

    Even with the narrowed scope it's still difficult in determining what to randomize and how far it should go. I can keep all the containers with items the same, so if a bookshelf didn't have anything before it will still not have anything, or I can randomize and shuffle items among every searchable container which is probably better but more time-consuming. Same thing with quest rewards. Not all of them offer compelling prizes, but randomizing all of them will have entertaining results with a similar work load. It just keeps going.

    Once I get it all isolated, I'll make a manual randomization and try it out and see how it plays, then out something together for a programmer to work on.
     
    Dark Drakan likes this.
  9. Dark Drakan

    Dark Drakan Administrator Staff Member Guildmaster Legendary Hero

    Posts:
    25,458
    Likes:
    2,209
    Trophies:
    365
    Sounds like a hell of a task but at least you have a logical way of working through it and have narrowed it down by sections and functions.

    Looks like you are learning a lot in a short space of time too so I’m looking forward to seeing what you can unearth with more time and more digging.
     
    VinDiesel likes this.
  10. VinDiesel

    VinDiesel Living Necromonger

    Posts:
    41
    Likes:
    47
    Trophies:
    40
    The cool thing is that all this stuff is already figured out by other people. I just go see what they did and apply it to what I want to do. The bad thing is that these people aren't active anymore so all those inspirational discussions are one-sided.

    Baystone made an incredible tool with ChocolateBox. One of the biggest ways it's helped me so far is that it can dump all the binary entries in the game.bin and script.bin all at once. So with that and a search program that can search by hex strings (using xsearch because it's fast, free, portable and does exactly what I need but there's probably better stuff out there) I can very quickly look through the whole game for anything that calls an inventory item. So first I searched for everything that had a CInventoryItemDef, then searched for everything that calls those strings like OBJECT_SILVER_KEY or 4313 for the item id or D9100000 for the item id in hex and then I can see where and how everything is put into the game. Also found out that half of the stuff that has a CInventoryItemDef isn't actually an item, like a rusty bucket that doesn't go in the inventory or items that are just unused like a strawberry pie that can be added to the inventory but isn't called anywhere in the game. Another great thing about ChocolateBox is that it has better support for the cutscene files than the other tools.

    Another fantastic tool, more of a resource, was a spreadsheet by JohnDoe. It has every tng level script mapped out by region, map, type, lots of useful data that can be filtered and manipulated in a very useful way. But it's a hassle to actually get it because of how it's packed and hosted, I may reupload it in a friendlier way so that browsers and anti-viruses don't try to stop people from downloading it. I don't even want to link to it for that reason, but a search of the fabletlcmod forum for tng/gtg script spreadsheet will reveal the link. The file itself is not a virus but it isn't unreasonable to suspect it.

    Of course Hunter's FableExplorer and Keshire's updated def.xml which for some reason isn't paired with Silverback's ShadowNet version of FableExplore but really should be are also great tools. While not perfect, the def.xml was updated with labelled variables from Anniversary, so you have a better idea of what you're messing with. Many things I can't just look at in a hex editor or spreadsheet. I need to see it in FableExplorer, change something and maybe test it out in game. This is the best way I've been able to do that so far.

    What I'm doing right now is getting a count of how many of what is in the game, accounting for instances of things being persisting like you pick it up and it doesn't respawn or things that don't get restocked in stores. For things that do respawn and do get restocked I'll have to account for those differently. Once I can get a decent gauge on quantities, I can make a structured item pool. This will be what dictates the lower and upper limits on quantities. There will only ever be 1 of each unique item, 30 keys, but there could be somewhere from 200 apples to 5000. I also need to draft a logic in pseudo code, like no silver keys inside a 30 silver key chest, or graveyard gate key and Nostro's armor in Necropolis.

    I'm not unearthing anything, cooler guys already did all that. I do appreciate the nod though because I am working hard on making this happen quickly and hopefully will have a distributable package out by the end of Sunday. I also want to thank you for taking the time to read all this, I know it's a lot and I know people have lives (It's V-DAY! <3<3) so it means a lot to me. :D
     
    Dark Drakan likes this.
  11. Dark Drakan

    Dark Drakan Administrator Staff Member Guildmaster Legendary Hero

    Posts:
    25,458
    Likes:
    2,209
    Trophies:
    365
    Yeah im aware of the work by JohnDoe, Keshire, Oldboy, MarcoPolo and MoreRunes (for example) but as you said many of the old big names in the modding community arent active anymore. Though Keshire & Oldboy did used to frequent FableTLCMod still though havent checked it for a long time & MoreRunes did stop by here and there. Our friend Markie (Sephiroxas) did a good thread on all the hidden items in Fable TLC too.

    Its refreshing to see some genuine enthusiasm and excitement about this sort of project again and nice to hear about someone learning new skills while doing so too.

    Im used to one sided general gaming conversations to be honest as most games I seem to post about (on both of our main sites) its only me posting updates on them with no member input. :lol:

    Been trying to find some decent co-op survival games to play with friends (as I havent played any multiplayer for years with people I know) but seems these days no-one is interested in anything outside of Battle Royale games. Though Outward reminded me a little of Fables style.
     
    VinDiesel likes this.
  12. VinDiesel

    VinDiesel Living Necromonger

    Posts:
    41
    Likes:
    47
    Trophies:
    40
    Ran into an issue figuring out the CShopDefs. It's not a terrible thing, it did make me feel pretty stupid for not realizing why my numbers weren't adding up while batch converting all the hex to floating point values. I did eventually figure out the math to do the floating point conversion but I didn't know because I was using the wrong endian. With a day and a half wasted on that, I fear I won't make my Sunday deadline and that sucks because I start a new job on Monday so it's up in the air when I'll have time to get a manually randomized patch out.

    But there's no wasted work, I did learn from it and I can use what I learned to do this job faster and better next time. :)

    I'll check it out when it releases. I do really like the specific feel of Fable flaws and all.

    No one liked Kingdoms of Amalur but you know, it bears a lot of similarities with Fable. Writing is about on par, combat is familiar, both were in a state of controversial development hell for a while, both were hyped, both are set in fantasy worlds, and even if I am the only one who liked it I do enjoy KoA, but it doesn't quite capture that English quality.

    Playing with others is a logistical nightmare. Everyone's an adult now, working, paying bills, going out, making babies. I've been trying to play Smash for a few months now with my friends and it's just not happening. One day the stars will line up and we can have one of our old legendary game nights. :(
     
  13. Dark Drakan

    Dark Drakan Administrator Staff Member Guildmaster Legendary Hero

    Posts:
    25,458
    Likes:
    2,209
    Trophies:
    365
    Its all a learning curve and even things that make you feel stupid are a lesson learned for future reference. As you said there is no wasted work, I mean I had no idea what I was doing when we started these forums but learned a lot over the years by just trying things. I would use deadlines as more of a target than an end goal and just get there abouts when its a hobby and not something you are being paid for. Math has never been my strong point so I would likely have done similar.


    March 26th it releases and has a great sounding co-op too.

    Kingdoms of Amalur IP was acquired by THQ Nordic last year so there is hope for its future. They have mentioned a remaster too but need EA's approval for that and have also recently acquired Warhorse Studios (Kingdom Come: Deliverance) too.

    Yeah organising things as adults is a pain I mean im 33, full time job, married. and have 3 kids so I can fully appreciate how hard it is to find time to play anything never mind doing so at same time as someone else.
     
    VinDiesel likes this.
  14. VinDiesel

    VinDiesel Living Necromonger

    Posts:
    41
    Likes:
    47
    Trophies:
    40
    Excellent progress being made on this, but I keep running into the more profound questions that I wish I didn't have to answer by myself.

    I kinda want to implement Quality of Life elements just to get rid of some of the more annoying aspects of Fable, something that would be a great service to speed runners and casual gamers alike. But should that be part of a randomizer or a separate mod? Similarly there's balance. There are so many opportunities to adjust balance in an intentional and direct way and no game has needed it more, but as I said before, a randomizer isn't about balance.

    I've read through countless posts by veteran modders and Fable enthusiasts and I'd be lying if I said it wasn't taking a toll. There are so many good ideas and unfinished projects that I'd like to do my own takes on. In fact I took a few days off of the randomizer to do my own version of Keshire's Customizable NPC that allows for better functionality and more customization and combining it with a couple other ideas I've seen here and there. I have many ideas on what to do with this and I'm very excited, but now I'm wrestling with the idea of implementing it into the randomizer.

    For now I'm going to work on these things separately. If I can find a seamless way to integrate them I will.
     
  15. Dark Drakan

    Dark Drakan Administrator Staff Member Guildmaster Legendary Hero

    Posts:
    25,458
    Likes:
    2,209
    Trophies:
    365
    The main thing would be to get the original concept as close to that as you can before you start incorporating other features. Having too many ideas at once can make you veer away from your original concept and vision so work towards that end first and see everything else as a bonus feature.
     
    VinDiesel and DarkONI like this.
  16. VinDiesel

    VinDiesel Living Necromonger

    Posts:
    41
    Likes:
    47
    Trophies:
    40
    Truth.

    There's just so many good ideas out there that I feel haven't been fully realized yet. There's been some thought experiments on new maps for example. I feel I know a way to do it without any of the crazy hacks associated with the idea and I can't wait to try it.

    But yes. Need to keep my carts and horses in the right order, there will be time to work on these other things. :D
     
    Dark Drakan likes this.

Share This Page