Turnabout Substitution, one of the coolest fan cases to be made in PyWright, was exhibiting problems with the timer system in 0.986, so I put out a quick update. The lower framerate was causing the timer values to be floats, and wrightscript does not yet handle floats well. I set the framerate to be a constant in 0.9861, this is the only difference between 0.986 and 0.9861.

For 0.987 the variable framerate will be back, and I will come up with a better solution to handle the possible float values. Unless necessary, I don’t want wrightscript to really deal in floats. They can make some things simple, but also can be messy, especially when dealing with pixel values. It shouldn’t be hard to solve, but I want to make sure I solve it in a consistent way in every part of the code.

Not much has been going on on my end in the past few months, but a lot has been happening in the phoenix wright community! So much that I for one feel a bit disconnected.

First, the post at invisionfree kind of died out, after a pretty good effort from some people to get some PyWright related improvements started. Some of the fruits of that labor were included in 0.986, but a lot of things in the community made the thread a low priority for people. Including me :) RIP, maybe we can start another effort in the future.

GK2 :( The fact that Edgeworth’s second game is not being ported to english was very disheartening. Even though the first AAI was not my favorite of the series, and even though casemakers like PyWright allow us to break free of whatever tidbits of the potential story Capcom are able to give us, it still was a bit damaging. A lot of people lost heart I think. I know I did.

Then, the court-records forums came back. This would normally be a good thing, but we have been at the other forums for so long that it is hard to adjust. The old threads haven’t been posted to in 6 months, and while there is a lot going on, it’s all a bit chaotic.

Besides all of that, there are still quite a few people using the PyWright engine. 0.986 still has a few bugs I think, but nothing major. It’s cool to see all of the work being done, but it is a little overwhelming. I want to take a closer look at each game and watch their progress, but I can’t really do that anymore. Be sure to watch the threads at court-records to see all the great games being made! There are even some good ones being made in other engines as well :)

I am still tinkering with the engine and going to put out 0.987 in time. I’m still not sure how close we are to 1.0 or if we will ever get there, but as long as I still have things I want to do, they will get done. It’s just a matter of when!

I do have some nice surprises that I hope to be able to show soon.

Thanks to everyone for your emails and support!

Sorry for the long wait after 0.981 guys. I decided to skip some numbers since it has been so long. Then after the release, I didn’t want to announce it here until it had been tested for a little longer.

Even with a couple weeks of beta testing, no less than 5 major errors were reported after 0.985 was released. As disappointing as it was to not catch these before shipping, the number of changes and time between 0.981, the last released version, and 0.985 made this almost inevitable. Not wanting to make the mistake I made after 0.981, of trying to fix the bugs that version introduced while also finalizing some features, I spent another week making sure to fix the major issues which were uncovered. I’m now very proud of this version, but I am going to try to keep future releases smaller in scope to prevent them from being so difficult to manage.

Version 0.986 brings with it a couple tools to help customize your game, or make them feel more like a professional Ace Attorney experience. There are evidence adding animations, the standard court record button by default (and much easier to replace), and some options for the main button from the various games. These are the first entries from a number of community run projects for moving PyWright towards 1.0 from a content perspective.

You can see the continued status of some of these projects here, and if you have the time and the desire, you might want to help out there. Thanks to everyone who has contributed!

Under the hood, a lot has been done to make things generally work better, and prepare for future versions. I say this a lot, but this is really what I spend most of my time on! One example of this is to make the engine work better on lower framerates. Currently, everything is based on a constant display of 60 frames per second. Most computers can run this just fine, but some, shall we say, more mobile computers, are a bit slower. For instance, android phones. Look for that soon.

In the meantime, update to 0.986, and see what new possibilities have opened up. Don’t forget to check out the latest example scripts as well. From the examples menu, you can find various scripts I wrote to test the engine. The newest ones are: bigbutton_changes, showing how to customize Pywright’s lower screen; showevidence, demonstrating the evidence animation options; and rectangles, showing a feature that is to come.

That’s right. You! I have been running this project as primarily a one-man shop up till now. I have had some contributions to various aspects of the project: art contributions here and there, some code to add a small feature, or just simple feedback from users on broken aspects of the engine. It has been valuable for me to have that input from the outside, reminding me that I am not merely tinkering with crazy code for my own enjoyment. Without it, I doubt PyWright would have made it this far.

But I’ve never solicited help, or organized tasks for third parties (i.e. not me) to complete. Thanks to the Pezman, who began hounding me first via email, and then over skype and google chat, with a strong wish to aid me, this is changing. Besides working on a tutorial game in the background, and focusing my development efforts on unpolished areas of the engine that I have had a blind eye to, he is also going to organize the community efforts. He started a thread on the backup court-record forum with a clear delineation of tasks, and there has already been quite the response. I am excited to see how these efforts will change the PyWright landscape in the future, improving things which I just haven’t had time for, and maybe freeing me up to look into things I haven’t been able to.

If you are interested, head on over to court-records to see if you fit anywhere. We are looking for people to improve core content, such as sprites, music, and sound effects, to make fangames a little easier to dig into without game authors having to look all over for the initial building blocks. We need clever wrightscript authors to build macros to implement new game features, make current animations more closely match the DS versions, and eliminate redundant coding styles for common behaviors. And eventually, when I have some clear coding tasks more organized, we will be happy to have python programmers contribute additions to the core engine. If you have any of these skills, or even if you don’t, check the thread to see where you might fit!

Finally, just because I am soliciting user contribution, doesn’t mean I am resting on my laurels. The next update will soon be ready. With some important bug fixes, improvements to animation code, and interface changes, it’s something to look forward to! Also, it will be the first viewing of some of the debug tools I have been working on, to easier understand what is going wrong when mistakes are made in wrightscript.

Where I’ve been

So I took November off to create an “important work of literary fiction”, as part of the National Novel Writing Month initiative. Ok, so it was a trash sci-fi novel. As if the world needs another one of them, right? It was a blast, and I did manage to meet my word count. Now that I am starting to recover from the insanity of trying to write 50,000 words of creative goodness in such a short amount of time, I am going to be getting back into PyWright stuff!

The engine itself

I continue to assert that the engine is “mostly done(tm)”. There are some definite shortcomings which I want to close before I stamp a big old 1.0 on it. The last release, 0.980, broke a lot of games because it started using an international Phoenix Wright font file, instead of the screenshot character set directly from the game. This was to enable users to choose their own font files, as well as support multiple languages. Well, the font file had different spaces encoded in it than the image file did, so it stretched out the text, and ruined carefully aligned work such as Turnabout Substitution. This is the biggest bug in 0.980. Other bugs include: valid resolutions not appearing on the list, and some dissapearing arrow problems. I need to squash these things down before I add anything new.

Some new things I am thinking about are better expressions, reconfigurable controls, better (faster) 3d, and some more builtin stuff to help aai type games be easier to make.

AAO Convert

I’ll be including an early version of the aao converter soon. It is still missing a lot of things, I’m sure, but working on it alone and trying to track down all the issues will take an infinite amount of time I think. Each time I work on it I make a large step of progress, but it’s a hard project to keep momentum with. Still, it’s really close now. The slowest part of the conversion process is downloading all of the audio and graphics, but fortunately it only has to do this step for new art and music.

Hopefully there will be some new stuff ready when/if the court-records.net forums ever come back online!

It continues to amaze me how complex these systems (Phoenix Wright emulators) can be. Each one is trying very hard to reverse engineer the original games and make something that can replicate the experience in a pleasing way. There are also concerns about how well people can actually use the systems to realize their vision for a fan case, as well as how far off the beaten track you are able to go in terms of new features that weren’t in the original games. Though every developer who has embarked on a journey to create a Phoenix Wright engine has had the exact same template to work from, the amount of ways to approach the problem are many.

As I write a converter from Ace Attorney Online to PyWright, I am surprised at how often an assumption I made was wrong. Just today I realized that the code I was outputting for cross examinations was missing a lot of things. The cursory job I had done with them before seemed to work for my first test, and I left it alone for a while. But it turns out my simple test was the only accurate cross exam converted. A lot of the code it outputs needed to be reversed – it was putting the failure message right after the statements, causing it to show the failure every time. Also, the labels for certain situations were in the wrong places, and the counciler messages were tricky to get just right as well.

In the process, I even found one area of AAO I can improve on. The “RetourCI” command in AAO appears after a failure message, such as presenting the wrong evidence, or pressing a statement without text defined. (I think in AAO you HAVE to have text defined in order to press, no?) Anyway, the argument passed to RetourCI seems to always be the first line of a cross examination. I could be wrong, but this means that in all AAO games, if you present the wrong evidence, it will restart the cross exam from the begining, instead of continuing the next statement. Correct me if I’m wrong, but I couldn’t find any controls to make RetourCI go to the next statement. But when I convert, I can easily translate “RetourCI” into “resume” which is the PyWright command for exactly that behavior. It might be something unas could add in the future :)

Anyway, my point is, even though the general idea behind a Phoenix Wright engine is very simple; when you start getting into details it’s astounding how much hidden complexity there is, and how many different ways there are to approach those problems. I discovered this when I first wrote PyWright, but I am discovering it even more, as I explore someone else’s ideas and approaches.

I think writing another zelda engine would have been easier :)

Anyway, I think I am approaching the home stretch with the AAO converter. Barring any real showstoppers, it should be ready in a week (along with PyWright 0.977, knock on wood). Also, it is tuned for aao v5, but when unas upgrades he often updates all of the games automatically. A good way to ensure your game will be able to be converted, even when he switches to v6, is to make a backup. You can do this by opening your game in play mode, in aao, and then saving the web page html. In firefox, you can do this by file->save page as->web page, complete. Make a folder for it to keep it tidy.

Here’s what I’m working on:

In anticipation of 0.977 which is coming soon, I thought I should probably post a 0.976 annoucement for archives sake. I really have let this website slide, and no one comments on the forums any more. It happens. I’ll try to keep in touch more often!

So here it is: 0.976 is available for dowload, and has been for a while now. It is only a bugfix release, so not too exciting, but if you are still using 0.975 you really should upgrade. Some nasty bugs in that version…

0.977 will be out before the month is over. There are some nifty new special effects available, some tools to aid in finding errors in your game, and I changed how the resolution works so that it is a bit more flexible and standard. Also, this release should be fully unicode compatible, so all of you non-english PyWright users can make cases in your native language!

This is the release that was meant to be only a short bit behind 0.974, which I’ll admit was released in a very halfway done and somewhat broken state. The whole issue with automatic saves, but not actually showing users a list of saves to load from, caused so much confusion it’s actually pretty funny. I learn something every single time. So I was sitting here, finishing up 0.975, trying to remember if there was anything I was missing.

Then I decided, I don’t care. I’m sure there is something missing, but I won’t be sure until one of you lucky individuals finds it. So here’s your chance to make PyWright better! Download 0.975 today, kick it and poke it until it breaks, then let me know about it! If there is anything either A) serious or B) easy, I’ll probably work it in to another release pretty quick.

The update is in the usual places, download service, or downloads page; and all of the binaries for platforms have been updated as well. The Pezman complained at how infrequently I update the binaries, and he was totally right. I plan on updating the binaries every time. It’s a pain, but oh well.

Full changelog in the update, here’s a quick rundown:

  • List of saves to load
  • More save control for game devs and users
  • “Sticky” cross examination arrows
  • Object priorities revamped to allow timers while interfaces are open
  • The ability to include file extensions or leave them off almost everywhere rather than having some commands need them and some commands need them to be left off
  • More support for spaces in games

And here’s my plan of features for the version after next (the next one being reserved for bug fixes)

  • Tools included with pywright to aid casemakers
  • Add hotkey to gui Buttons
  • Buttons that repeat if you hold them down
  • User controls config
  • More control over file layout (being able to use fg on files in art/bg for instance)

Most likely some of that will be pushed into the next next next version, but who knows. Let me know what you guys think.

After a couple of months slipped by I finally finished the last few touches I was wanting to include. It has a mix of semi new features and tweaks to old stuff. Check it out! The update is available in the engine, or at this link: http://pywright.dawnsoft.org/updates3/engine/0.974.zip

(The full binaries are not yet updated, so if you don’t have PyWright yet, you’ll have to grab 0.973 first)

The changelog has a detailed list of the fixes, but here are the most important:

  • Preliminary gamepad support
  • Easier window scaling
  • Autosaves, multiple save files
  • Expressions to aid coding and eventually help in the AAO converter
  • Some protection against easy to make coding mistakes
  • More fixes to the downloader

For the future I am thinking of adding more flexible input support and maybe tackling the settings dialog again. That’s the kind of stuff a 1.0 release needs. Other than that, I’ve been working on various tools like the gif2sheet program, something to help find overhanging words on speech bubbles, and the aao converter of course. I’m trying to figure out the best way to bundle this stuff so that others can use them. I have some ideas but haven’t really tackled it as of yet.

My goal is to finish 1.0 this summer. Here’s hoping I make it :)