1. We have added a Gift Upgrades feature that allows you to gift an account upgrade to another member, just in time for the holiday season. You can see the gift option when going to the Account Upgrades screen, or on any user profile screen.
    Dismiss Notice

Civ3 Show-And-Tell

Discussion in 'Civ3 - Creation & Customization' started by Puppeteer, Apr 15, 2013.

  1. Ozymandias

    Ozymandias I saw the Great Library burn.

    Joined:
    Nov 5, 2001
    Messages:
    9,252
    Gender:
    Male
    Location:
    The lone and level sands
    ... Wait ... Apolyton is back?? :wow:
    Ditto! :clap:
     
  2. Quintillus

    Quintillus Archiving Civ3 Content Supporter

    Joined:
    Mar 17, 2007
    Messages:
    6,315
    Location:
    Columbus
    Well... I don't know if "back" is quite the right word, but it's still around, and they've upgraded from vBulletin 2 to vBulletin 5 (I think with a stop at 4 somewhere along the line). But in terms of actual discussion, particularly on Civ-related topics, it definitely hasn't been very active over the past decade. There are still some good vintage resources there, though, so I'm thankful that the site remains available.

    Edit: It's entirely possible that it was down for awhile and I missed that. If so, it is indeed back!
     
  3. Ozymandias

    Ozymandias I saw the Great Library burn.

    Joined:
    Nov 5, 2001
    Messages:
    9,252
    Gender:
    Male
    Location:
    The lone and level sands
    My dear fellow! As "Archivist" (which seems a lifetime ago) I regularly scoured the internet, Googling "Civ 3" every few months, long after we was fab :rockon:

    - :Dz (And I've not done that in longer than I can remember)
     
  4. Puppeteer

    Puppeteer Emperor

    Joined:
    Oct 4, 2003
    Messages:
    1,171
    Location:
    DFW, Texas USA
    Hi! Sure, you count as a SAV parser, then.

    Skipping is pretty much required unless and until we know EVERY data structure properly, and...well, just no.

    I got distracted by TV sports over the weekend, but I made some progress on CIA3. The biggest (to me) thing so far is that I have it watching the saves and autosaves folders (currently hard-coded for my PC) and successfully debouncing the file events so I have one trigger per save/autosave.

    Since it's the same codebase and I see no reason to separate them, I'll keep this as the dev thread and open up a new thread when I release a usable executable.

    I do like the GraphQL subscription concept, but in looking into at and looking at my needs, it's going to be a lot simpler (both server-side and client-side) to just send a signal to the browser to refresh its XHR data. It could still be cool to implement subscriptions, but the effort isn't worth it for the task at hand. Maybe. Or maybe I could make a subscription endpoint just for when to refresh...will have to see what the client side difference will be.

    The tricky part left is to refactor websockets and a reload trigger into the server. After that I should have a usable per-turn auto-refresher that shows the map with chopped tiles shaded with red circles (like CAII). That's my first usable target, just because I already know and have the data and display logic done for it.

    I did some research into UI. Having a command-line program and having the user point a browser at localhost:8080 probably isn't the best user experience. But a browser-based UI is what I want for many reasons. Electron seems a bit overkill. I'll probably try having a GTK or similar simple GUI with a button to launch a browser, or I'll try a framework or two that use either an already-installed Chrome or the default web engine (Edge on Windows, WebKit/GTK/Cocoa on Mac) which would launch into a browser window.

    On the other hand, maybe I can do more with a GTK or QT GUI. Only the map 'needs' a browser. Much of the other data will be in list or tabular form.

    Other minor changes to the code include the aforementioned red ellipse shading of tiles instead of a "C" for chopped tiles, spoiler masking (fog of war) for map data, and a hexDump output option for GraphQL queries.

    I like declaritive stuff. And I hear you about burning out trying to decode the details.

    Thanks! The current map's intent is completely different from the original C3SAT intent. From page 1 I wanted to be able to have people see the game situation without having to load the save in a game. But with CIA3 it is meant to run alongside the game, so just enough info to apply back to the game is what's needed.

    But now that I think of it, it should be fairly trivial to adapt the old map renderers the current GraphQL server since they all use the same data; I just need to make them understand the new schema. I think that was my intent for after I did the Go rewrite, but I either burned or fizzled out at some point.

    I think Firefox is faster than Chrome on the current version, but when I first noticed a drastic difference I realized I had dev tools open in Chrome but not FF, and it runs much faster with the dev tools closed. I still think FF has an edge in speed.

    Currently only those two browsers work because other browsers don't yet support customElements.define() , but I could either use a generic polyfill or probably code a very simple fallback renderer that would work on more browsers.

    Ok, that's settled, then!

    Oh, by the way: I went on a little hunt for any source code to CRQpMapStat or CAII. There isn't any, but there is another utility named MapStat by chiefpaco in Java with source code (GPL), although it was never updated for Conquests. At first it looked like it only counted tile types, but it also does a little player (LEAD) and CITY parsing. So that might tell me something I don't know. I know the CITY tiles in particular were unfathomable to me previously because they don't reliably repeat the same structure. (Well, not a structure I currently understand.)
     

    Attached Files:

    Last edited: Jan 16, 2020
    Quintillus likes this.
  5. Civinator

    Civinator Blue Lion Supporter

    Joined:
    May 5, 2005
    Messages:
    6,074
    Gender:
    Male
  6. Civinator

    Civinator Blue Lion Supporter

    Joined:
    May 5, 2005
    Messages:
    6,074
    Gender:
    Male
    Doubled post by CFC.
     
  7. Puppeteer

    Puppeteer Emperor

    Joined:
    Oct 4, 2003
    Messages:
    1,171
    Location:
    DFW, Texas USA
    Thanks. I saw that and looked through it again. The linked version (2.11.0 from 2005) is the same version I have. Not terribly long ago I could get both/either CAII or CRpMapStat working on Win10, but here in 2020 I'm having no luck at all. (Or maybe my memory is wrong and that was long enough ago that it was Win8 where I made everything work.)

    I'm playing C3Complete normal epic games. CAII won't do anything right, and MapStat won't auto-load files, although it will load a save manually.
     
  8. Puppeteer

    Puppeteer Emperor

    Joined:
    Oct 4, 2003
    Messages:
    1,171
    Location:
    DFW, Texas USA
    I am *so* close to having an auto-updating per-turn map. Implementing the update-while-running code, hooking it up to the file watcher, adding websockets, having the websocket endpoint trigger, and having the browser reload the data on the trigger all went off with very few hitches.

    But...for reasons I have yet to understand, the browser frequently doesn't get the message to refresh. I am printing output in the program in the same place I trigger the websocket message, so I know it's sending, but for some reason the browser doesn't always get it. When it does, it refreshes as it's supposed to.

    Upon further reading, websockets are a fairly low-level protocol, so it probably needs more than a simple message push. So I'll look instead into "http long polling" and the idea of using a GraphQL subscription endpoint just for refresh triggers.
     
  9. Puppeteer

    Puppeteer Emperor

    Joined:
    Oct 4, 2003
    Messages:
    1,171
    Location:
    DFW, Texas USA
    Well, I got the http long polling successfully implemented and made a few other minor code refactors/improvements. And apparently I broke something. It now updates the browser automatically, but it won't paint the map after the first time, and it eventually takes up all the memory. So close.

    Notes to self for next programming session:
    • Try the old executable to see if it also has problems (probably not)
    • Experiment to see if the first sav always works and that second and later savs are always broken
    After fixing this, the next steps will be working towards being able to release a testable version with some form of UI and ability to detect or enter the sav file paths to watch.
     
  10. Puppeteer

    Puppeteer Emperor

    Joined:
    Oct 4, 2003
    Messages:
    1,171
    Location:
    DFW, Texas USA
    Found the problem! I wasn't zeroing out an array when changing files, so it just kept adding to the array, and the info being accessed was therefore pointing to the wrong place and causing issues.

    It's ready for others to test! Civ Intelligence Agency III alpha 1b (11.9 MB Windows 64-bit executable)

    What does it do?
    • Opens in a console window
    • Looks in the registry for the Civ3 Conquests (or Complete) install location
    • Finds the "Latest Save" value from conquests.ini and loads it
    • Watches <civ3 location>\Saves and <civ3 location>\Saves\Auto for new SAV files
    • Loads any new SAV (including autosaves)
    • Opens a local web server at 127.0.0.1:8080 (currently hard-coded address and port)
    • When the browser is open, it will auto-refresh the map between turns (when a new SAV file is written)
    For now you need to open a browser window and browse to http://127.0.0.1:8080/isocss.html . As long as cia3.exe is running the browser will update every turn to show the current map.

    Why? The only real practical use for this today is to track which tiles have ever had forest chops (red shaded tiles), but lots of functionality can be added in the future as well as a less clunky interface.

    Known limitations (many or all of which can be removed in the future):
    • Only works in Windows 64-bit OS
    • Only works for Conquests/Complete
    • Assumes no-spoiler info for player 1
    • Can only find saves and autosaves in the registry-defined location
    • Can only show the "Latest Save" from the .ini and then the latest save created in Saves or Saves\Auto folders
    • Will exit with almost any error or unexpected condition encountered. It will write errors to the screen, but if it's launched by double-clicking the error may disappear with the console window
    Safety: Does not write or save anything. It just watches two folders and reads the .ini and the latest SAV file.

    Screenshots:
    • Console window while cia3 is running
    • Browser w/known map (including red-shaded tile where forest chopped)
    • Error shown above map if the update polling is disconnected
    Edit: Oh, it works with Edge now. But not IE. Chrome and Firefox of course work. I think Safari will but haven't tested it.

    Edit 2: Oops, it doesn't work! I need to do something to include the html files into the binary. Fixing...

    Edit 3: FIXED! Link is now to cia3-alpha1b.exe
     

    Attached Files:

    Last edited: Jan 19, 2020
    Quintillus likes this.
  11. Puppeteer

    Puppeteer Emperor

    Joined:
    Oct 4, 2003
    Messages:
    1,171
    Location:
    DFW, Texas USA
    Ok, here's CIA3 alpha 2 (12.3 MB win64 exe). If you have Chrome installed, it launches straight into the map window.

    Otherwise it behaves like alpha 1b. It just shows the updated map with forest-chop squares marked each turn (or sav file generation like saving a game).
     

    Attached Files:

    WildWeazel likes this.
  12. Puppeteer

    Puppeteer Emperor

    Joined:
    Oct 4, 2003
    Messages:
    1,171
    Location:
    DFW, Texas USA
    After looking through my various backup locations for Civ3 save files, I'm pretty sure the last time I was playing regularly enough to have MapStat and/or CivAssist II working was when I was on Win 8.1. So I don't think I've ever had them work on Win10 after all.

    So I guess it's a good thing I'm making progress towards recreating their functionality. The UI/UX of what I have so far is rough, but the logic bits are there and working well.
     
  13. Puppeteer

    Puppeteer Emperor

    Joined:
    Oct 4, 2003
    Messages:
    1,171
    Location:
    DFW, Texas USA
    I actually played a Civ3 game from beginning to the early middle ages so far. Something I apparently haven't done for several years. Standard sized Monarch epic game, and although I'm not a forestry gamer I kept CIA3 running the entire time and checked on it occasionally to be sure it kept up, and it did.

    It also behaved well, keeping usually between 10MB and 12MB of memory used. (Not including the Chrome browser.)

    Screenshots are of the task manager memory usage after having been running for probably 24 hours—including the marathon play stint I did yesterday—and the state of my empire's core. I didn't realize I had chopped so much wood. I only recently got Engineering and haven't planted any forests myself.

    For features to work on next, for my own use I'd like to extract the game difficulty setting (probably easy, and I think I know where it is) and opponent tracking such as trades available, war/peace status, and whether they're willing to speak yet. The second part is likely to be more difficult, and to do it right I think I'll have to be able to read the BIQ (default or custom) for tech prerequisites as you can't trade a tech where one party doesn't have the prerequisites.

    For the UI/UX of CIA3, I'm torn. For my own purposes, a command-line server I can point a browser at is good enough, but that's not a thing the general civ-playing public will think is normal. Electron would be the easy way out, but that would be a 100MB+ download, most of which is the embedded Chrome browser, and every target system already has a capable-enough browser. In a few more months, the golang webview project should be updated to be able to use Edge in Windows, and after that I should be able to use webview and have it just work without extra downloads or requirements in modern OSes. But for now it doesn't work for CIA3 on Windows because it uses the MSHTML backed by IE11 instead of Edge.

    Side-track: On the other hand, there may be polyfills for IE. I had shied away from those before, but it just occurred to me that if it will make webview a viable main UI, then it might be worth it.

    Anyway, alpha 2 of CIA3 is using lorca which requires Chrome 70+ already be installed. That works well but isn't quite as universal as I'd like, and I have yet to see what it does if Chrome isn't installed or find out if there are Chrome installs it fails to detect.

    The direction I don't really want to go is a GTK+ non-web-interface, aka a regular desktop app. It's just not a skillset I have or really want. (I don't want to target the native UI of any particular OS, either.)

    But I have thought of a hybrid interface where CIA3 would launch into a GTK+ desktop window which would handle and display errors, allow for various file browsing tasks, and launch the browser window where/when needed. And since most of the intended CIA3 data would be tables and lists (and not map-based), maybe two different GTK+ UI templates could be used over and over again.

    I had kind of a mini burnout getting the alpha releases done, so I haven't made any progress the past couple of days. But the polyfill for webview idea I might try out, and pulling the difficulty out of the save is low-hanging fruit and something I want, so maybe I'll toy around with those today. I'm in the middle of a game, but I tend to get tired of Civ3 games in the middle ages to early industrial ages, anyway. I enjoy the early game more. I played Monarch in this game and am way ahead of the world in tech and as good as have my continent conquered, so I may be nearly done with it.
     

    Attached Files:

  14. Puppeteer

    Puppeteer Emperor

    Joined:
    Oct 4, 2003
    Messages:
    1,171
    Location:
    DFW, Texas USA
    Well, yesterday I just played some more games through to the point I got bored or tired of micromanaging. Twice I had expansionist civs that got a free city or settler very early, and in both games China attacked it very early. In the second game I had a very high food start so I actually had four total cities when China attacked, and they walked all the way around my furthest-out one to get to the city from the hut-popped settler. Pretty sure that's a coincidence, but odd that it happened more or less back-to-back.

    But this is the wrong category for that. This morning I did find the difficulty setting. It's not quite where my interpretation of Antal1987's dumps said it was, but it was close, and this is the GQL query:

    Code:
    {
      difficulty: int32s(section: "GAME", nth: 2, offset: 20, count: 1)
    }
    
    The "difficulty:" part of that query is an alias which will come in handy. Instead of coding all the queries in friendly queries I can use aliases that self-document what I'm fetching and not have to change the parsing code. It also allows me to get multiple "int32s()" results in one query.

    Anyway, 0 is Chieftan, 1 is Warlord, etc., etc.. In the default game, anyway. I suspect (but am not sure) that the difficulty names are stored in the BIQ, so to do it properly I think I'd have to reference the embedded BIQ if present or read the default BIQ which in theory could be replaced by a user who wants their default epic game rules modified. For now I'll just assume the default game but try to allow for being able to do it "properly" in the future.

    ---

    As far as UI, I briefly checked into polyfills, but IE11 has the additional problem of not supporting the newer versions of Javascript, so I'd have to polyfill *and* transpile. Naw, I'll wait a few months for the new webview to be completed. I briefly tried the new version of webview, but it didn't work.

    ... or did I? I just realized while typing this that ... well, something something Go modules, and I may not have been using the version of webview I thought I was. Now I'll need to go try again. Explanation in the spoiler.

    Spoiler :
    One of the things I recently learned about by stubbing my toe on it was Go modules. It used to be that to use a different version of a repo, I could just change that version locally, for example by checking out a different branch in git. But Go modules explicitly specify version dependencies, and it will go get the version specified in the go.mod requires section regardless of what's on my local system.

    I ran into this with my own repo when I implemented modules wrong at first, and my dev code was trying to link to my release code which didn't have new items defined. While typing this I realized that must've happened with webview, too. I checked out the new branch locally, but since I had to module-enable my own repo it must have grabbed the default master repo because I didn't specify a version to use.


    ---

    Uh, what else? I'm having an itch for batch operations. For example, run through all the sav files in a folder and query each one. That would be great for helping to decode sav files.

    I think my next step is to refactor the polling and query code to be more generic, so each UI page can define a query and how to interpret the data, and the same JS code works for each page.

    Also, I need a hexdump page. I have the hexDump query defined, but it doesn't line up well when viewed in the JSON reply.

    ---

    This past week or two is the first time I've really used the GraphQL code I made a year or two ago. It really makes it easier to poke around at the sav file data!

    ---

    Oh, and even though I've punted on trying to "natively" read the file into data structures, I find myself analyzing the bigger structure of the data. My current belief is that there is a container object/class, and a BIQ child and a game-data child, and that's the whole structure. The BIQ may or may not be present in the sav depending on if it's default or custom.

    What this means for my purposes is that I'm pretty sure all the counts for sections (city counts, colony counts, leader counts, etc.) are going to be in what I call the 2nd GAME section. Antal1987's data dumps seem to agree.

    My biggest problem in parsing the sav before was unexpected things popping up like CLNY (colonies). And also the CITY entries were not shaped consistently. But I think the total city count must be in the 2nd GAME section, and so the internal structure for each CITY is likely early in that section.

    Those thoughts combined with the GraphQL query abilities and some of these batch ideas I have give me hope to figure out a few things I couldn't before.

    ---

    Edit: I'm really starting to think I need to explicitly separate BIQ from per-game data in the queries. Yeah...maybe have three root queries:

    • Query entire file
    • Query BIQ
    • Query game
    And the default BIQ can be parsed if a custom one isn't. This idea formed while being concerned about e.g. finding the first TILE of the game map and having to first detect if a BIQ with a custom map is present. But if I give the option of querying the BIQ vs the game then I only have to solve the problem once and not in the query language.
     
    Last edited: Jan 23, 2020
  15. Puppeteer

    Puppeteer Emperor

    Joined:
    Oct 4, 2003
    Messages:
    1,171
    Location:
    DFW, Texas USA
    Brief (?) update:

    I tried the new webview for Edge again, and it was true I didn't really try it properly before. But it's not working for me, *and* it requires two dll files.

    I'm now opening CIA3 to a main index page instead of the map. There's a link to the map, and the current filename and difficulty level is displayed. This will become the "main menu" of sorts with links to all the various functions that might require their own page.

    I seem to be past my burnout, but I'm getting distracted by all sorts of shiny things and may wind up refactoring my JS code a bunch (more).

    While refactoring JS, I stumbled into a possibly-acceptable-to-me workaround for MSHTML (IE11) webview: when refactoring my JS into modules, IE11 doesn't support modules, but there is a "nomodule" fallback. So I could keep my regular code for updated browsers and have a transpiled-with-polyfills version for other (IE11/MSHTML) browsers. If I get this done I'll probably have two versions of CIA3 at a time: one that needs Chrome, and one that doesn't. At least until the new zserge/webview-x branch is mature.

    Complete side-track idea that I don't expect to pursue: I'm wondering if I could hook into the game code to generate random maps in batch fashion, then auto-analyze the player starting positions for various criteria. The idea occurred to me while thinking about DLL files, but at a quick glance in the game files it looks like all the DLLs may be 3rd-party which means the generation would be in the main .exe, and I don't think I could hook into that. (Possible exception if I git gud at Antal1987's work, but then I think that would require a hacked .exe file which isn't in the spirit of the CIA3 idea.)

    Also, re: difficulty names: these may be in one of the text files (scripts.txt) and not the BIQ. Although the standard names seem to be default and not actually redefined in the default US English scripts.txt file(s). But I imagine a custom scenario might have its own scripts.txt referenced from the embedded BIQ. I'm not ready to go far down that path yet, so I'll probably be using default BIQ / US English names for stuff for now.

    And that makes me think of another gql query I need to make: find and list all strings in the file along with their offsets.
     
  16. tjs282

    tjs282 Disillusionist

    Joined:
    May 19, 2009
    Messages:
    2,544
    Gender:
    Male
    Location:
    ...just here for the job/ handouts/ woman
    Difficulty level details (names, cost-factors, starting units, etc.) are editable, via (IIRC) either the Scenario Properties or General Settings tab. So presumably they are stored in the .biq.

    e.g.
    @Vuldacon's EFZI uses film-ratings ('Universal' to 'Restricted'?)
    @KingArthur's SuperCiv Scenario uses superhero-names ('Robin' to 'Superman')
    @Lord Malbeth's Perdition or Salvation uses Kabbalistic sephirot ('Malchut' to 'Keter')
     
  17. Puppeteer

    Puppeteer Emperor

    Joined:
    Oct 4, 2003
    Messages:
    1,171
    Location:
    DFW, Texas USA
    Here is CIA3 alpha 3 (12.1MB win64 .exe). It requires that Chrome is present like alpha 2.

    Most of the changes are just refactoring the JavaScript GUI code, but there is some additional info like difficulty, map size, world size, world seed, other map settings, and the full save file path. The UI is evolved a bit and has a main page now (screenshot attached).

    What does it do?
    • Looks in the registry for the Civ3 Conquests (or Complete) install location
    • Finds the "Latest Save" value from conquests.ini and loads it
    • Watches <civ3 location>\Saves and <civ3 location>\Saves\Auto for new SAV files
    • Opens in a special Chrome window
    • Loads any new SAV (including autosaves) automatically and refreshes its info
    Most of the data currently shown does not change from turn to turn, but the map with the forest chop map tiles highlighted is currently the most useful feature.

    Error handling should be somewhat improved. I haven't really run into many (any?) errors, but if they happen they should show up in red on the page. Unless there's a problem with reading the registry, conquests.ini, or finding the save folders. I think it will just silently not launch if those happen.

    Another behind-the-scenes change is that it opens an ephemeral port instead of 8080. This means it won't conflict with any existing things listening on 8080, but it makes it less convenient if you want to access the server manually. The current port is shown on the develop page.

    I'm mostly done with the JavaScript refactoring. It was a bunch of work, but it makes creating or rearranging the html pages much, much easier. I may mess with it more to add controls to the hex dump tool on the develop page.

    I may also make a new GraphQL query to find all strings in the file to help me locate the info tjs282 mentioned. Or I might work on file vs BIQ vs game queries, or I might try decoding some useful per-turn info.

    Or I might just play Civ3.

    Thanks for the info and references! Good stuff to know. It might not be as hard as I thought to read this info from the BIQ, but I haven't gotten that far yet.
     

    Attached Files:

    Last edited: Jan 25, 2020
  18. tjs282

    tjs282 Disillusionist

    Joined:
    May 19, 2009
    Messages:
    2,544
    Gender:
    Male
    Location:
    ...just here for the job/ handouts/ woman
    Just FTR, I looked in the 'Edit Civilization 3 Rules' box of the Firaxis Editor, and I did not recall correctly: there is actually a tab specifically labelled 'Difficulty Levels'. Does not change the qualitative value of my original statement, though: the difficulty-level names are stored in the .biq (and hence the .sav).

    Would it then be possible to identify the specific bytes, by making one small change in this tab, and then comparing the resulting edited .biq with the original?
     
  19. Puppeteer

    Puppeteer Emperor

    Joined:
    Oct 4, 2003
    Messages:
    1,171
    Location:
    DFW, Texas USA
    I made the strings finder, and I reread the whole thread.

    Spoiler :
    Code:
        "allStrings": [
          "CIV3",
          ";zov",
          "BIC ",
          "Scenarios\\No Unique Units\\",
          "Scenarios\\No Unique Units.biq",
          "BICQVER#",
          "All Civs have access to the same core units.",
          "No Unique Units",
          "BLDGS",
          "Palace",
          "BLDG_Palace",
          "Barracks",
          "BLDG_Barracks",
          "Granary",
          "BLDG_Granary",
    [...]
          "DIFF",
          "Chieftain",
          "Warlord",
          "Regent",
          "Monarch",
          "Emperor",
          "Demigod",
          "Deity",
          "ERAS",
          "Ancient Times",
    


    I hadn't actually looked at whole strings in ages; I've been stopping at four capital characters. But upon looking at a SAV with a custom BIQ, there is only one e.g. BLDG or ESPN section, but each has a bunch of text fields including things like "BLDG_Palace" of which I was only seeing a bunch of "BLDG" with my section-scanning code.

    And I found the difficulty name along with a bunch of other names. And I realize that I think I have the tools to read all this in well enough. Not all at once, but I can skip to e.g. DIFF, and many of those sections are pretty simple to read in as they're generic lists/arrays with a count after DIFF and then a length for each element. ("Sid" is missing from the spoiler-hidden result because I was searching for a minimum string length of 4.)

    I'm now feeling pretty confident about being able to get a lot of what I want done!

    I'm thinking of adding some local storage option. Originally I was thinking of a .ini file for storing settings like which folders to watch, but then I was reading about my MongoDB idea earlier in the thread. Of course for a local game assistant I wouldn't use a whole standalone DB server, but something like SQLite or LevelDB or other embedded storage engine.

    In fact, I really like LevelDB and have used it before. And it has compression built-in, so if I wanted to do something like store the fog-of-war status each turn, that should compress well and be handled by the storage engine automatically.

    I could even stuff each SAV file in there if I and the end user wanted.

    But I'm at a bit of a dangerous point mentally. I have too many ideas I'm eager to pursue, and that's the path to burnout. I'd like to focus on making it useful. And that probably means adding in a gql query type to read in section lists (or list sections, whatever) and then focusing on finding per-turn info that I want.

    LevelDB and resurrecting map generation is fun, but it's not immediately useful.
     
  20. Puppeteer

    Puppeteer Emperor

    Joined:
    Oct 4, 2003
    Messages:
    1,171
    Location:
    DFW, Texas USA
    Hi! I cross-posted with you. I did find the difficulty names in the BIQ, and they should be trivial enough to grab. I think.
     

Share This Page