Cythera Bugfixes



  • Fetch bug nailed to the wall

    So, I'm starting my unofficial bugfix patch. Thanks to the people who participated in gathering that list of bugs. Lots to do. Current version for those of you with mag.py or redelv at your disposal to apply unsigned patches: Unofficial Bugfix Patch

    Note that Magpie will not apply the patch above. If you need assistance patching your Cythera Data with a third-party patcher, send me an email or look for me on #cythera.

    Current bug being fixed:
    Bug 8: Edible strange device on dividing food (pending replication); Food Dividing Oddities (mushroom steaks &c.)

    Fixing queue:
    Runic magic.

    Fixed so Far:
    1. Fetch,
    2. Fishing,
    3. Aethon not responding to "Ask About..."
    4. Aethon not picking locks
    5. Darius and Sardis trying to sit in the same chair in the Green Goat
    6. Paris' name not being remembered
    7. Diomede name not being remembered.

    Log of Fixed Bugs:

    Quote

    Bug 1:
    Using the spell "Fetch" on an item will only make the item disappear,
    it will not appear in the player's inventory. (BWM)

    As a further elaboration on this bug report, many sorts of objects that should not really be fetchable can be targeted, e.g. cities and doors.

    Fix: I've corrected both problems in the patch. It now gives an appropriate message when trying to fetch something inappropriate like a wall torch or a town. If you find anything that you aren't able to pick up normally that is nonetheless fetchable, please let me know. Also, fetching things is never considered stealing, which might be considered a bug.

    As of patch version 0.2, the situation of fetching an item too heavy for your inventory is handled correctly, and the PutInside method of an object is called when it is fetched into the inventory, so e.g. lamps are extinguished when fetched.
    [Source code of this fix](http://www.ferazelhosting.net/wiki/1A28 Patched "External link")

    Resources affected: 1A28 (Fetch Spell)

    Quote

    Bug 2:
    There is no deep water in the game, making it impossible to fish. (BWM)

    The fishing pole UseAt method now properly detects deep water (defined
    as non-shore water on the overworld map in the original code; I do not
    know why it you can't fish in towns given that there are many cases of
    NPCs fishing in town, but that does seem to be the intended behavior so
    I haven't changed it.) Note that fishing is not always successful.

    Spoiler

    The chances of success vary from 0% to 88% depending on time of day and location.
    Fishing also passes time quite nicely.

    Resources affected: 1091 (Fishing Pole)

    [Source code of this fix](http://www.ferazelhosting.net/wiki/1091 Patched "External link")

    Quote

    Bug 3:
    Aethon does not respond to his "Asked About..." action.

    Now he does. The code for it was simply absent. Many items have an "informed response" coded for him, though, so this doesn't seem to be intentional (and having "Ask About..." but not having it do anything would be a bug in any case.)

    Resources affected: 1861 (Aethon)

    Spoiler

    Try asking him about lockpicks or oboloi, for example -- these response were written by gandreas, not me, but were hitherto inaccessible.

    Quote

    Bug 4:
    Aethon does not pick locks when you tell him to. He says "Work the Lock!"
    but he... doesn't actually do anything to the lock.

    It appears that AddTask is supposed to be able to add a task consisting of the character using one item on another, but it doesn't work, at least as applied in this case. Perhaps it will be possible to fix it someday after AddTask is better understood. In the mean time, RPGUtil.PickLock is called directly by the skill 1AD5 when its .UseOn method is invoked (note that the player can't use Lock Picking directly, they have to use a lock pick in their inventory, so this only affects how NPCs pick locks.) To keep the lock from being unlocked instantaneously, we have a brief cutscene where Aethon walks over to the lock and says "Work the Lock!".

    Resources affected: 1AD5 (Lock Picking), 1861 (Aethon)

    Quote

    Bug 5:
    Darius and Sardis try to occupy the same chair at the Green Goat
    (ignoring the three empty chairs at that table), from 5pm through 9pm.
    (BWM)

    Darius now occupies the north chair at the table instead. This was a simple change of coordinates in his schedule entry.

    Resources affected: F00B (Schedules Data)

    Quote

    Bug 6:
    Paris is always labelled as "man" instead of his name, even after learning
    it. (BWM)

    Fix:
    Added the code to set the character bit on learning his name; it seems
    to have inadvertantly been left out.
    Resources affected: 1857 (Paris)

    Quote

    Bug 7:
    Diomede is always labelled as "woman" instead of her name, even after
    learning it. (BWM)

    Fix:
    Added the code to set the character bit on learning her name; it seems
    to have inadvertently been left out.
    Resources affected: 182E (Diomede)

    Not fixing at this time:

    Quote

    If you attempt to fill a pitcher with wine, it will say "the pitcher is now filled with wine" but the pitcher will still be empty.

    Reason: Difficulty reproducing the bug completely (it didn't fill with wine like it presumably ought to, but neither did it give an incorrect message.)

    This post has been edited by BryceSchroeder : 09 March 2016 - 06:21 PM



  • Also, I need testers. Obviously you need to have the (sadly no longer trivial) ability to run Cythera, and ideally the ability to apply unsigned patches using mag.py (or ReDelv.)

    Please let me know if you are interested on #cythera.



  • @bryceschroeder_bot, on 01 March 2016 - 04:09 AM, said in Cythera Bugfixes:

    I do not know why it you can't fish in towns given that there are many cases of NPCs fishing in town, but that does seem to be the intended behavior so I haven't changed it.

    Maybe it's something to do with rights to the land/fish? The people who live there have rights and you don't. In the Pacific Northwest, a First Nations family or tribe typically 'owns' a fishing location, especially for the salmon run up the rivers.



  • @ikaterei_bot, on 03 March 2016 - 07:13 PM, said in Cythera Bugfixes:

    Maybe it's something to do with rights to the land/fish? The people who live there have rights and you don't. In the Pacific Northwest, a First Nations family or tribe typically 'owns' a fishing location, especially for the salmon run up the rivers.

    That would make sense, except that the message given is to the effect that there don't seem to be any fish around -- unless maybe the problem is overfishing near towns...



  • No bug fixed today, but I did figure out how iterators work in the delver scripting system.

    In the end, there was only one thing to do with this new capability.

    Posted Image

    Turn everything into goats. Even my trusty shovel.

    This post has been edited by BryceSchroeder : 04 March 2016 - 01:26 AM



  • Nice work, this is really cool. Fishing is fun, but not being able to obliterate cities at will might take some getting used to. :p

    I'll stop by #cythera if I can find some time.

    Quote

    Clicking the bottom right corner of a party member's status window makes it go completely blank

    I have no idea if it's reproducible in Basilisk, but the pixel in question is just above the Abilities tab:

    Posted Image –> Posted Image

    This post has been edited by Buzzzzy : 06 March 2016 - 12:42 PM



  • @buzzzzy_bot, on 06 March 2016 - 12:41 PM, said in Cythera Bugfixes:

    Nice work, this is really cool. Fishing is fun, but not being able to obliterate cities at will might take some getting used to. :p/>

    I'll stop by #cythera if I can find some time.

    I have no idea if it's reproducible in Basilisk, but the pixel in question is just above the Abilities tab:

    Posted Image –> Posted Image

    Ah, okay, I was able to reproduce that now. Thanks!

    Progress -- ReDelv has a script editor now. This comprises both and assembler and a disassembler for the Delver virtual machine that executes scripts.

    Posted Image

    The python package name is redelvlib.



  • ReDelv now has a schedule editor, and some other improvements, on the github version. (It now uses the invisible prop / egg symbols gandreas helpfully left in the final version of the data file.)

    Posted Image

    Posted Image



  • Wow wow wow, imagine all you could do with that! ^_ __^ And these bug fixes are amazing, I've been having a lot of fun beta-testing them. Ah, Cythera <3

    Also, nice to see you, Buzzy!

    @bryceschroeder_bot, on 01 March 2016 - 04:09 AM, said in Cythera Bugfixes:

    Fixing queue:
    Runic magic.
    Edible strange device on dividing food (pending replication); Food Dividing Oddities (mushroom steaks &c.)

    I've found it way easier to get those items when I start the game as the Rogue archtype. If it's helpful, here is Seldane's instructions for getting the edible strange device (it worked for me every time). For the mushroom steak, I always seem to get it the first time I divide food after training in lockpicking, but I'm not sure whether I need to be a rogue for that to work. I've also gotten the mushroom steak using one of Slayer's save-files, which I don't think was a rogue? Sorry, I still don't understand what makes the mushroom steak appear : __\

    Quote

    Difficulty reproducing the bug completely (it didn't fill with wine like it presumably ought to, but neither did it give an incorrect message.)

    When I use a pitcher on an urn of wine, it just says "the pitcher is empty," but if I use an urn of wine on a pitcher, it will say "the pitcher is now filled with wine" (but it the pitcher will still be empty).


  • Global Moderator

    Excellent work, Bryce :) . As I mentioned on #cythera, I'll be happy to help out when I can.



  • Quick update: I haven't been doing much bug-fixing the last few days because I'm trying to get redelv to be able to disassemble/assemble 100% of the script code. There are as it stands a dozen-odd scripts that still cause the disassembler to crash. These all seem to be scripts that include certain kinds of subroutines. The scripting system allows for having nested subroutines, something I did not know at the time that I started writing the disassembler, and which it hence handles rather poorly because it wasn't really designed to accommodate that sort of thing. It's actually formally impossible to deal with subroutines like this in the fully general case, because knowing where the subroutine ends reduces to the famously non-solvable halting problem.

    I've also been going through systematically and figuring out all the system calls. Many details of the functions of parameters to calls remain unknown, but I have at this point a complete or nearly-complete list of the calls themselves. (It is possible that some of the gaps in the list are populated by system calls that only occur in the scripts that crash the disassembler, but it is also possible that these gaps simply represent system calls not used in the final version of the Cythera scenario.)

    It's a bit of a slog at this point. There are only a couple of outstanding big mysteries left (and it's unclear how important they actually are), but tons and tons of grunt work is left - there's quite a lot of figuring out which bit flags and constants do what... I also got halfway through figuring out the music system last year, and then quit. It appears to be one of those half-documented sort-of-proprietary... things... Apple liked to make ever so much in the 90s. It should be possible to translate it into MIDI, though.

    Another big piece of work remaining is documentation. I've been fairly good about putting stuff constants and binary formats on the wiki or in the header files on github as they're discovered, but other things - basically, how stuff works, how these little pieces are used together to make a game - is harder to put into understandable archival form. I'm not sure how much effort to put into that, given the lack of serious interest in this project by other programmers (at least so far). Ah well, that's what I get for not doing all this ten years ago when upwards of a dozen people would have cared instead of, like, three...

    This post has been edited by BryceSchroeder : 21 March 2016 - 09:23 PM



  • Okay, got that done - redelv's assembly language system (disassembler and assembler) can now cope with all the scripting code in Cythera, with six exceptions. Two of them are just plain weird things that may in fact be broken (One appears to have an array cut off part-way through, the other of which has a bunch of references to strings in other resources... but in fact the strings are in itself.) The other four contain complex instances of nested subroutines. One of these is the Strange Device object class, and the other are the character classes for Tros, Palaestra and Pheres, whose lecturing dialog is implemented in an... interesting sort of way. Redelv can assemble all these things, it's just a matter of manually correcting the output of the disassembler, so it doesn't actually prevent you from editing any of those characters/items.

    Running some regression tests now, but so far things are looking good.



  • I feel bad that I hardly understood anything you said ): I'm the one benefitting from all your hard work, and I'm doing nothing to help. I love Cythera-related grunt work too! But I can't make heads or tails of this programming stuff :x



  • You absolutely have done stuff to help. I used your meticulously gathered NPC schedules to find and understand the data for that. Other people have helped me too - I used Selax's list of zoneports when I was figuring out how that worked. (And previously, when I figured out how the world model was stored.) I go to The Wizard's Cythera Guides site frequently to reference stuff. I used Sfiera's Cythera CLUT when I reverse engineered the compressed graphics format.

    I'm just disappointed that given how rich in programmers our small community is, how I seem to be the only one writing any code to advance this, or doing much analytical work. (Habnabit has helped some, particularly early on, in the not-to-be-under-appreciated role of "other programmer to bounce ideas around with") It's slightly discouraging that after well over a year, I have had zero pull requests on github, just saying, and only a handful of wiki edits by people other than me.

    I'll keep working on this anyway, though, because I actually do enjoy working on it, so I'm not really depressed about it or anything. Also, I suppose I haven't exactly been clear that I wanted or would appreciate help, I guess, so, I'll just put it out here that I would - I've no desire to monopolize the work on the technical documentation project, anyone who wants to help is more than welcome.

    This post has been edited by BryceSchroeder : 25 March 2016 - 12:20 AM



  • Working on figuring out how the AI works. This is obviously a wonderful excuse to find out what happens if I put twenty undead and six liches right out from of the castle in Cademia.

    Posted Image

    Unfortunately, it did not turn into a battle royale. Berossus declined to participate in the battle taking place in his castle, even when a lich hit him with a lightning bolt meant for the jester. Neither did his guards. You would think that "horrid undead monster shooting the judge with lightning" would fall into the category of behavior that a guard should prevent. I guess the guards were too busy watching me in case I accidentally attacked a chicken.

    I'm surprised guards aren't Good-aligned. Only the hero(ine), fools and kings seem to be. (Magpie isn't in my party, that jester is a generic fool to give the liches something other than me to attack.)

    This post has been edited by BryceSchroeder : 27 March 2016 - 11:47 PM



  • Huh, this reminds me of a chronicle...



  • Oh man. That story.

    Quote

    "Is the problem solved?" Chevodocus asked.

    Chevodocus. I do at least like how the author went to the trouble of making up a vaguely (if only vaguely) "Cytherian"-sounding name instead of pinching a name from the Odyssey.



  • I just love bellerophen's stories so much : _D A couple of years ago, I wrote four more chapters to complete it, but mine can't be compared with the brilliance of the original ^ __^ (Nor could it be compared with the epic 32-chapter Grapper's Return!)



  • Obligatory log update -- no particular progress is likely today, I need to build a thermostatic ventilation control for my solar greenhouse, which is in danger of working a bit too well on sunny days...

    @breadworldmercy453_bot, on 28 March 2016 - 02:39 PM, said in Cythera Bugfixes:

    I just love bellerophen's stories so much : _D A couple of years ago, I wrote four more chapters to complete it, but mine can't be compared with the brilliance of the original ^ __^ (Nor could it be compared with the epic 32-chapter Grapper's Return!)

    Got a link?



  • This post should have links to all the hijacked chapters of old abandoned chronicle series ^_ __^ (Links to the original chapters would be in the first post of that thread)

    Good luck with the thermostatic ventilation control! @_@