ScummVM logo ScummVM website - Forums - BuildBot - Doxygen
Contact us - Buy Supported Games 
curved edge

PlanetPlanet

Welcome to the ScummVM planet - This aggregates the personal blogs of developers, teams members and active participants from all around the ScummVM community.
If you wish to subscribe to updates to the planet or individual blogs please use the links on the right hand side.
To add your blog to the planet contact DJWillis.

May 13, 2013

James Woodcock

Inherit the Earth Soundtrack Version 1.1 Released – FLAC Lossless

Inherit the Earth
Today I have released my Inherit the Earth Soundtrack (version 1.1). As usual, my soundtracks are intended for use with the ScummVM software so you can relive the wonders of classic point and click adventure games with my version of the music. Thanks to the original publishers for allowing a ‘fan made’ edition to be released.

This version includes a Flac Lossless option, improved audio mastering and slightly reduced reverb.

LINK: Inherit the Earth ‘Fan Made’ Soundtrack for ScummVM

by James Woodcock at May 13, 2013 11:36 AM

Beneath A Steel Sky Enhanced Soundtrack v1.2 Released – FLAC Lossless Audio

Beneath A Steel Sky
FLAC lossless audio has been a requested feature of my ScummVM Music Enhancement Project for many years and I am happy to announce that my Beneath A Steel Sky enhanced soundtrack now includes this as an option for download.

Version 1.2 includes FLAC lossless audio as well as the standard Ogg Vorbis option and features improved audio mastering with slightly reduced reverb.

You can download the update from my website:
LINK: Beneath A Steel Sky External Music Download

by James Woodcock at May 13, 2013 10:09 AM

May 12, 2013

James Woodcock

Simon the Sorcerer Enhanced Soundtrack Version 2.3 Released – Improved Mastering

Simon the Sorcerer
Following on from the recent release of version 2.2 of this soundtrack, version 2.3 includes much improved audio mastering so you hear far more of the detail within the tracks.

FLAC lossless audio has been a requested feature of my ScummVM Music Enhancement Project for many years and I am happy to announce that my Simon the Sorcerer enhanced soundtrack also includes this as an option for download.

Version 2.3 includes FLAC lossless audio as well as the standard Ogg Vorbis option.

You can download the update from my website:
LINK: Simon the Sorcerer External Music Download

by James Woodcock at May 12, 2013 02:54 PM

May 04, 2013

James Woodcock

My Discworld Enhanced Soundtrack Released v2.1 – FLAC Lossless Audio Included

Discworld
Today I am very happy to release version 2.1 of my enhanced soundtrack for you to use within the game, which will give everyone higher quality sounding music and not just those with powerful MIDI equipment.

Version 2.1 includes FLAC lossless audio as well as the standard Ogg Vorbis option and features improved audio mastering with slightly reduced reverb. I am still searching for the complete MIDI soundtrack at the correct slightly slower tempo, so if you have any assets that would help – please contact me.

A big thank you for the countless emails I have had about this particular release and of course to Terry Pratchett for allowing my enhancements to be released for your enjoyment.

To install, extract the music from the zip file and copy it to your Discworld folder on your hard drive. Make sure you have the latest version of ScummVM (minimum v1.0). For best quality (although not mandatory), start the ScummVM program and select Discworld. Now select [Edit Game], switch to Audio tab and set Sample Rate to 44kHz.

If you would like to consider donating, please click the button below:

To download the soundtrack, click one of the links below:

Previous versions…

Webmasters: Please do not link to the files directly, instead link to this page!

by James Woodcock at May 04, 2013 10:59 AM

April 21, 2013

ScummVM News Headlines

ScummVM 1.6.0 is Near

Greetings, fellow adventure gamers! We have finally come to the point when ScummVM 1.6.0 testing starts.

This release adds support for a number of new games that need to be tested:

  • 3 Skulls of the Toltecs
  • Eye of the Beholder
  • Eye of the Beholder II: The Legend of Darkmoon
  • Hopkins FBI
  • Tony Tough and the Night of Roasted Moths
  • The Journeyman Project: Pegasus Prime

In addition, if you have Macintosh version of Discworld, please give it a try as well.

A daily build should be used for testing these, and if something goes unexpectedly wrong, please report it to our bug tracker. The completed games need to be reported on our forums and we will update our release testing page. For a usable test report, we need you to provide the version, language, and platform of the game you're testing. And, of course, please stick to the testing guidelines.

This release also has another interesting aspect. Depending on how intensively games are tested, we will add support for one more game: Hopkins FBI. For support to happen, we need test results on several platforms using several variants of the game, which includes the BeOS, OS/2, Linux and Windows versions.

In conclusion, if you want Hopkins FBI in ScummVM 1.6.0, grab your originals and contribute to this new testing period! We are also in need of screenshots too! Please submit them to our patch tracker.

by sev, Strangerke (nospam@scummvm.org) at April 21, 2013 12:00 AM

April 20, 2013

ScummVM News Headlines

Touché: The Adventures of the Fifth Musketeer Music Enhanced Soundtrack Released

ScummVM Music Enhancement Project

James Woodcock has today released his enhanced music for classic point & click adventure game Touché: The Adventures of the Fifth Musketeer, as part of his 'ScummVM Music Enhancement Project'.

By adding the external digital music files provided for free by James and with our ScummVM software, users can enjoy the updated soundtrack within the actual title as it is played.

Using modern MIDI hardware, James edits the original MIDI information and records them as external digital music files. Developers of ScummVM then add code so the newly created files will work within the titles.

"ScummVM has always inspired my involvement and although I am not a programmer, I hope my ScummVM Music Enhancement Project adds a little extra enjoyment to users of this fine point and click adventure software." says James Woodcock, creator of the enhanced soundtrack.

James has previously released other enhanced soundtracks for titles including:

  • Beneath A Steel Sky
  • Discworld
  • Inherit the Earth
  • Simon the Sorcerer
  • The 7th Guest

To download the enhanced soundtrack, click there.

by Strangerke (nospam@scummvm.org) at April 20, 2013 12:00 AM

April 12, 2013

ScummVM News Headlines

Fancy an adventure in adventure gaming?

GSoC 2013 Banner

ScummVM has been accepted for the Google Summer of Code 2013!

We're hoping to find another group of students who want to help out the ScummVM project and get paid for 12 weeks of coding work over the summer.

Maybe you'd like to help us improve support for games, or enhance our user interface? Perhaps you'd like to revamp our OpenGL support and accelerate the rendering of some engines? Or do you have even bigger ideas, like starting support for yet more games?

If any of this seems like a good way to spend your summer, take a look at our ideas list, or drop into our IRC channel (#scummvm on irc.freenode.net) and have a chat with us!

Beware: the application period is from April 22 to May 3, so be sure to talk to us in time! We know from previous years that it's really helpful to apply early, and to get involved with the ScummVM community so we can help to revise your application.

by Strangerke (nospam@scummvm.org) at April 12, 2013 12:00 AM

April 02, 2013

Matthew Hoops (Clone2727)

I'm not dead! I feel happy!

It's been so long since the last post that Blogger completely changed their editing interface (OK, not really a joke since Google seems to change their GUI with everything at regular intervals to confuse the public at large).

A few things for this update:

1) The Journeyman Project: Pegasus Prime is now supported in daily builds of ScummVM. Rejoice! And stay tuned for more news!

2) ScummVM April Fools Jokes™ will return next year with a vengeance (blame DrMcCoy, probably).

3) If you're able to recall when posts happened more regularly than yearly, you might remember this post, which I followed up saying I uploaded modified ScummVM code to a branch. Then last year I wrote a small player for the videos so I didn't have to hack directly in ScummVM anymore -- and then added support for Outlaws (proper 1/4 sized raw frames), Mysteries of the Sith, and (partially) Rebel Assault SegaCD.

LordHoto's favorite level (Sega CD version)
Mysteries of the Sith, Level 1 Opening
Oh, and I apologize if your comment didn't show up over the past few months. I screwed up with the admin settings on the blog and it never forwarded me e-mails! Sorry!

by clone2727 (noreply@blogger.com) at April 02, 2013 04:22 AM

March 28, 2013

ScummVM News Headlines

Pegasus Takes Flight

It's the year 2318; you're part of an agency created to protect the integrity of the timeline after time travel has been invented. After it is detected that someone has changed the past, it's up to you to repair the time stream!

The ScummVM Team is proud to announce support for the Macintosh version of The Journeyman Project: Pegasus Prime. So go grab the latest daily build of ScummVM and play through the game to assist us in testing!

If you find any bugs while playing, please report them to our bug tracker following our bug submission guidelines. For information on how to extract the data off the disc, follow instructions listed on our wiki.

by clone2727 (nospam@scummvm.org) at March 28, 2013 12:00 AM

February 10, 2013

ResidualVM News Headlines

ResidualVM 0.1.1 - Lumbago Lemonade released

Is there an engine that can resist the love in these hands?

Some time has passed since doomsday, and we're still around to see the aftermath, the time since then has not been wasted however. Today we release ResidualVM 0.1.1 which is a service-release bringing you roughly 40 gameplay-fixes, varying from very minor fixes to quite visible bugs, 14 of these fixes were also in the original game as it was released back in 1998.

For a list of what has been fixed, see the NEWS-file.

So, head on over to our downloads-page and grab a fresh copy of ResidualVM 0.1.1 to enjoy the best possible Grim Fandango experience we can offer to date.

by somaen (nospam@residualvm.org) at February 10, 2013 12:00 AM

December 21, 2012

ResidualVM News Headlines

The edge is here: ResidualVM 0.1.0 - The Edge of the World released

The day is finally upon us, after 9 years, 4 months and 6 days, we are proud to announce the first stable release of ResidualVM, and what day would be better for this occasion, than the end of the world as we know it. (or so the Mayan Mechanical Gremlins told us).

This initial stable release of ResidualVM now opens the world of Grim Fandango to a modern audience, whether you are using Windows, Linux or OS X, you'll now be able to take your 4 year journey of the soul, and find out if that compass in the handle actually WILL come in handy.

We would like to note that, while we have tested ResidualVM quite thoroughly, there MIGHT be cases where you end up in a situation where the game is incompletable, some of these were actually also existent in the original game (while the game itself is designed to be dead-end-free, the bugs in it weren't, nor were our own). So, please follow the old adventure-game mantra of "save early, save often".

Over the past few years a lot has happened, even though the code base didn't reach a mature state until the past year. Lots of bugs have been fixed, even quite a few bugs left in the original game have been resolved. The team would like to thank all those that have been involved with getting ResidualVM to this point for their efforts.

Finally, we would like to thank:

  • The LUA developers, for creating a nice compact script interpreter.
  • Tim Schafer, for obvious reasons, and everybody else who helped make Grim Fandango a brilliant game; and the EMI team for giving it their best try.
  • Bret Mogilefsky, for managing to create a SPUTM-style 3D LUA engine, and avoiding the horrible hack it could have been.

So, jump on over to our downloads-page, and grab a copy of ResidualVM 0.1.0 (but don't forget to download the 1.1-patch for Grim Fandango while you're there).

by somaen (nospam@residualvm.org) at December 21, 2012 12:00 AM

December 03, 2012

Einar Johan Trøan Sømåen (Somaen) - GSoC

WME Testing: Chivalry is not dead

As I've been a bit busy the past few months, the Wintermute-engine port for ScummVM hasn't seen as much progress as I would have liked, but I still think it's time to get the ball rolling a bit again: 

One of the games I tested against this summer was Chivalry is not dead. So far I haven't had any issues with this game, BUT, this game is also very open-ended, and thus a bit hard to test thoroughly. 

Thus any help testing this game would be greatly appreciated. 

Just grab a copy of the game from the link above, and a nightly build of ScummVM, and test the game. Report any issues to the ScummVM Bug-Tracker, in the group "Wintermute". I would also love to hear in this thread if you played through the game without any issues at all. 

Note: Chivalry uses the Arial-font currently, which we haven't yet worked around (eventually a similar FreeFont will be used), so to get decent fonts in the game, you'll have to put arial.ttf in the game's folder (on macs you can find it in /Library/Fonts, on Windows it should be in C:\Windows\Fonts, linux-users can either download a replacement from FreeFonts/OpenFonts, or get some solution involving Microsoft Core Fonts.)

by somaen (noreply@blogger.com) at December 03, 2012 11:38 AM

November 26, 2012

Paul Gilbert (Dreammaster)

Hopkins FBI Linux completable

Another two weeks, and another milestone has been reached with the Hopkins FBI engine. The first play-through of the full Linux game has now been completed! All the blocking bugs have been resolved, and I've been able to finish the game.

That's not to say there aren't still some various graphical errors and things that still need to be tackled. Only just last night, for example, I fixed a particularly nasty series of graphical glitches with a lift scene that turned out to be a simple case of not clearing a flag when the animation manager class is created. So much grief trying to track down what looked like massive frame refresh issues or bugs in the animation player code. Thank goodness I was able to play the original inside gdb and easily set breakpoints to find out what values were set in the screen buffers, and when.

One of the biggest remaining graphical issues occurs near the end of the game. I'm not going to spoil anything, but you end up controlling multiple characters. There are currently issues with the icons for changing character not appearing all the time and, likewise, the chacters not always appearing on screen when your player character is in the same scene as them. I'm likely going to look into fixing them next.

After that it will be time to begin a more detailed play through to see if any noticeable differences can be seen between the original running in Linux against our game engine.. identifying and fixing any remaining minor issues as they occur. There may even be some further chance to fix issues in the original. For example, certain special scenes when you can access your inventory via the icon in the top left corner, the original doesn't let you use the 'I' key like you can in most other scenes in the game. That particular problem made me think there was something wrong with the ScummVM engine, before I realised you couldn't do it in the original, either. :)

Apart from that, we still need to start looking into supporting the PC version, since it's a lot more common than the Linux version. Hopefully we can get the sound decoder issues sorted out, and start testing that version in earnest as well.

Speaking of the PC version, I've mentioned previously that whilst I had the game, I'd never previously gotten around to playing it. And playing it now as the ScummVM engine was developed, how bizarre I found the game. What starts as what seems to be a straightforward cop-style investigation game rapidly becomes more and more bizarre. That was brought home when I was watching a play through of the PC version from Youtube, which I was using to check how the graphics are meant to look. It seems like the original PC version, in an underwater base you have to explore, they grafted on a clone of Wolfenstein 3D!

That's right. Whereas in the Linux version you are just shown a map and can select from various destinations, it looks like the PC version forces the player into a first person shooter and makes them battle their way from area to area. I've gotta say that whilst overall the game is fairly good, it's no longer just merely weird.. it's down-right freaky. :) Needless to say, there's every likelihood that we won't be implementing it. We'll likely just use the existing Linux version code, and provide a similiar map image as the Linux version.

And of course, there'll still be various cleanups to do. There's various memory leaks identified by Valgrind that we'll need to look into. And there's also general code cleanup, which both Strangerke and myself have made somewhat of a start on.

DreamMaster.

by Dreammaster (noreply@blogger.com) at November 26, 2012 09:45 AM

November 19, 2012

Arnaud Boutonné (Strangerke)

Rotting engines

As you may know if you read dreammaster's blog, I'm currently giving a hand to dreammaster on Hopkins FBI, which is a gore adventure game. Thanks to the cartoon-ish look of the cutscenes, it's not too shocking though (at least for us)...

As you may imagine, this is an excellent excuse to avoid working on the engines "rotting" on my repository... Here is a little point concerning those.

- Adventures of Robin Hood:
The engine is more or less complete for the DOS version of the game. The game is scripted. Almost everything is scripted, even: the intro, the menus... Everything! So rewriting the game was pretty easy, as the engine was particularly small. It's currently possible to watch the intro, walk around, interact with objects and characters... and die, of course! The dragon is pretty efficient for that... Yes, there's a dragon in Robin Hood :).

There are some glitches and minor bugs left, but the really blocking part is the sound and music of the game. Peres kindly broke the compression/obfuscation used so I have now MID files, but some commands are still problematic, and SylvainTV and I were not (yet) able to hook something working. After sound support, a huge refactoring would be required before we may consider discussing about a merge. As I hate sound maybe even more than Dreammaster does, it may takes forever though :/

The Amiga and Atari ST versions of the games, sadly much more common than the DOS version, are booters and are currently not targeted by the engine.

- Mortville Manor:
We received the sources of the French DOS version of this game months ago, after some discussions with Lankhor right owners and DotEmu. They were in Pascal and Assembly code. After some a lot of work on it with Dreammaster, the game is now completable with almost no glitch left. Several things are blocking a merge discussion though: No sound support and only DOS French version supported.

The sound support is a nightmare. The only sound available in the original is generated speech based on phoneme synthesis. At the time, they were clever enough to add subtitles, so it was possible to understand something... But it didn't age really well, and what was extremely impressive in 1987 is now absolutely terrible, to the point that the game sounds much better without sound support!

The language support is of course the second problem. I created a partial English translation based on Atari and Amiga texts, but the dialogs are missing: in those versions, the speeches are not dubbed, and are not using phoneme analysis, so we have to translate it ourselves. Criezy started a translation, but it's a long and hard work, particularly considering he doesn't have much time for that. (Any help would be appreciated at this point!). A German DOS version also exists, but is currently not supported, and I haven't yet looked at the Amiga and Atari versions. All the other platforms are ignored on purpose, as the engine is too different (Amstrad CPC, Sinclair QL, C64, Apple 2E, ...)


So... If you want to give a hand on those engines.... Drop me a line! Translation doesn't require technical skills, everybody can help!

by Strangerke (noreply@blogger.com) at November 19, 2012 09:02 AM

November 13, 2012

Paul Gilbert (Dreammaster)

Hopkins FBI is WAVing

Another two weeks have gone by, and we've seen further development in the Hopkins FBI engine. The first is that the entire sound system is now implemented. In fact, the bulk of it was implemented in only a single day. Despite my concerns to the contrary, the implementation of sound in the game was extremely simple.. everything is implemented as WAV files, even the music.

Which made it  very easy to code for, since I could use the existing ScummVM WAV audio stream class to implement the playback. Most of the complexity, in fact, came to setting up the necessary sound arrays and queing/status code that the game uses, rather than raw sound code itself . In fact, the game uses an interesting compression tactic for music playback.. it splits up a given music track into multiple different WAV files, and has an index of the order to play the set of fragments in, allowing it to repeat the same WAV file multiple times during the song playback.

So now sound is working, and you can hear all the music and in-game sounds just like in the original. :). The only minor downside is that it's revealed that the different versions of the demo and full game (Windows demo, and both Linux and PC full versions) use different sets of music files, at least for the initial introduction sequence and menu. So we're going to have to have different versions of the different start-up code.
 
This is what Strangerke is currently concentrating on. He's been able to obtain the Linux full game, and has just finished implementing all the remaining methods that it uses that the demo didn't have. He's now going to start working his way through the game to see if everything works. We'll likewise have to determine any changes for the Windows version in the near future as well.

As for me, I'll be doing some further playing around with the demo to identify any minor remaining issues and trying to fix them as I find them. And of course assisting Strangerke as necessary. Hopefully we'll soon have a completable full game with full sound support. ;)


DreamMaster.




by Dreammaster (noreply@blogger.com) at November 13, 2012 07:46 AM

October 30, 2012

Paul Gilbert (Dreammaster)

Hopkins FBI Linux Demo is now completable

Well, another milestone has been reached in the development of the Hopkins engine. The Linux demo, upon which I've been basing the engine implementation, is now officially completable! Yes, you can now guide the intrepid FBI agent through the start of his case, and deal with a bank robbery. I think it's a considerable happy achievement, given how recently I started work on it, and how little time I've had available to spend on it, given work commitments,

So what comes next?

Well, there are still some graphic glitches to sort out. For example, implementing proper savegame thumbnails, and the cursor drawing of actively selected inventory objects isn't clearing itself correctly when the cursor moves. I'll be concentrating next on identifying the cause of these problems and resolving them, which hopefully shouldn't take long.

There is also a need for refactoring. Now that the engine has stabilised into a usable state, I need to start reviewing code and giving proper names to all the structures that currently have names like 'field2' and 'field4'. Likewise, method parameter values and locals will also need better names. I also need to review the current separation of code I've done into various manager classes and move methods more appropriate to different managers into their appropriate manager.

Those two are the immediate short-term goals. Once they're done, there are still the two big ones remaining:

Firstly, supporting the actual full game. Whilst the game does have some basic scripting mechanisms, the bulk of the code seems to be in a massive method called 'Traduction', at least in the demo. This method consists essentially of a massive switch statement that handles all the game logic. It'll be interesting to see if this is done the same way in the full game as well. Strangerke is currently looking for someone with a copy of the Linux version of the game, that we can use as a basis of comparing against the demo version to get the changes. Hopefully, the core engine will remain pretty much identical, and we can just drop in a full game 'Traduction' method to properly support the full game.

And secondly, of course, there's the old hairy chestnut of sound support. I'm hopeful that the music, voice, and sound effects are in a standard format and that, similiar to what was done in Tony (and other) engines, I can use existing ScummVM functionality for sound playback. I really don't relish an extended period trying to re-implement sound drivers for Hopkins, like I had to do for tSage.

So, all in all, we should hopefully soon have Hopkins in a fit state as yet another game playable under ScummVM. :)




by Dreammaster (noreply@blogger.com) at October 30, 2012 03:48 AM

October 07, 2012

Paul Gilbert (Dreammaster)

Making progress in Hopkins

Well, the last few weeks have been very busy for me at work, and it looks like things will be getting even busier as we get towards the end of the year. Despite this, I've made rapid progress in converting over the disassembled source code. I've now reached a point where I've done an initial conversion/implementation of all the method relied on by the demo, with the exception of the sound routines, which I tend to leave to last, since large chunks can frequently be replaced by existing ScummVM playback code.

There is, however, a bunch of code left in the executable that isn't directly called. This is particularly noticeable due to the way I did the conversion - starting with the decompiled code, I converted the single main method, removing it from the decompiled source file,, then added it into the ScummVM project and created stubs for any sub-method that that method called. I then proceeded to gradually convert those stubbed methods, creating new stubs as necessary. That way, for each method I converted, I could ensure that the code correctly compiled before moving onto the next.

The result of this is that at the end of this process, I have a decompiled source file that still has a lot of code remaining in it, even ignoring all the sound methods that I haven't implemented. I haven't done any analysis of it yet, but I'm presuming that some of the code is related to the full game executable, and whatever compiler they used didn't actually remove it when the executable was required.

Since I've spent the last week cramming the conversion, I figure to leave the unused code alone for now, and return to working on running the code and fixing bugs in the result. I'll also start doing renaming of the data structures as I understand things better. I'm hoping that despite my haste in converting the methods over, I'll be be able to rapidly see some in-game results.

I'll try to make more frequent progress reports to make up for the previous absence of postings. :)

by Dreammaster (noreply@blogger.com) at October 07, 2012 07:54 AM

September 08, 2012

Einar Johan Trøan Sømåen (Somaen) - GSoC

Aftermath of GSoC

Ok, so GSoC is over, I passed and a few things has happened since then:

Some games had issues with interlaced PNGs and TGAs, this should be less of an issue, as I posted pull-requests for using libpng (instead of the internal variation that was in use before), as well as a TGA-loader, both of which have been accepted and merged now. (This means that Five Magical Amulets and Five Lethal Demons now atleast start).

The Wintermute-engine was opened as a pull-request, which after some adjustment and discussion, ended up getting merged into the master-branch for ScummVM. This means that the Wintermute-engine is available in the latest daily builds, although it is still marked as unstable, and no specific games are officially supported at this point. (BUT, from personal experience atleast Dirty Split and Chivalry is not Dead should be completable). The development of the engine will continue there instead of in my own fork.

Speaking of which, I am now joining the ScummVM-team as a developer, to continue working on the Wintermute-engine (and hopefully getting a few games release-worthy). The road ahead for Wintermute isn't short, as there are plenty of bugs left to squash, and plenty of performance left to improve upon, so I guess I'll have my hands full for a while longer.

So, if you want to try out the results of this summer's work, go ahead and grab a daily build if you are on Windows, or build your own if you are on OS X or Linux.

Oh, and while I won't be accepting bug-reports for specific games for a while yet, feel free to send me detection-entries for the multitude of games I haven't gotten around to adding yet.

Einar Johan

by somaen (noreply@blogger.com) at September 08, 2012 01:46 PM

August 07, 2012

Einar Johan Trøan Sømåen (Somaen) - GSoC

A slow week

This has been a rather slow week, my exams are starting up, and I only got in some time to start looking into the slowness that still persists with this engine.

The major source of slowness at the moment, stems from the fact that the SDL-backend in ScummVM seems to want to down-convert 32bpp to 16bpp, and since the engine is still doing full-screen updates, that means a full-screen down-conversion for every frame, which takes quite a bit of time. The problems from this can be avoided by using the OpenGL-backend, although that still has problems of it's own (like not supporting the PixelFormat I originally started out with (RGBA)), it does a decent job as a way of testing the other parts of the drawing pipeline without drowning them out in conversion.

Getting the down-conversion out of the way, revealed that the single blitting-function I'd been using was indeed rather heavy, and I'd split it out earlier to two separate functions, where one supported colour-masking, and the other didn't, making it easier to see in a profiler how much of the drawing actually used colour-masking (very little). I added in an additional function for handling opaque drawing, which helped quite a bit on the speed (skipping atleast 3 multiplications, 3 shifts and 6 additions per pixel).

For Dirty Split the numbers I get on my computer are roughly (Using the OpenGL-backend):
27 % Opaque-draws
20 % Scale
9 % Alpha-blitting

Where percentages are of the total CPU-load for the process (which now actually can be different from the CPU-load for the entire core it runs on, at max FPS). Now, there is obviously room for improvement here, in particular, the scaling, which as a result of the changes I did to implement dirty rects, ended up being done for every draw (basically, the non-dirty rect version would create renderTickets that were instantly drawn, and then discarded, and since the renderTickets were responsible for keeping the scaled copies, they were rescaled every frame). Thus I ended up partially adding renderTickets to the full-screen update system:

Upon a render call, the render-queue is checked for a matching render-ticket, if one exists, that ticket is used for drawing, otherwise, a new ticket is generated, drawn and added to the render-queue. Any unused ticket in the queue (a misnomer really, as it's really a list, but hey...) is deleted when the screen-buffer is flipped onto the screen.

This gives the benefit of not having to rescale every frame, now the results after doing that weren't exactly comparable, as I didn't exactly set forward a specific enough test (simply watching a bit of the intro movie, and then letting it settle for a while in the first frame), but, atleast the scaling is almost nowhere to be seen:
26.6% Opaque-draws
25.8 % Alpha-blits
2% Scale

This makes for quite an improvement, and should possibly make the games playable on a bit slower computers than what has been the case so far.

by somaen (noreply@blogger.com) at August 07, 2012 08:58 PM

August 06, 2012

Danil Ishkov (Jakimushka) - GSoC

Little summary

Now, after two months of work, it is time to show progress and describe the architecture of events recorder. This is a class diagramm, which can give some understanding of how does events recorder relates with other classes of scummvm.




Lets describe it particulary by means of subsistems, which it records. 
User Input: to record events from mouse and keyboard, eventRecorder implements DefaultEventMapper. During the initialisation, it registers itself as a mapper. So, every event occurring in system, is catched with EventRecorder's pollEvent function. This function checks state of the recorder and calls PlaybackFile's writeEvent() function to write this event in temporary memory buffer. If the buffer is full, playback file dumps it to file and takes screenshot, calculates checksumm and dumps it to the file too.
To playback events, recorder does everything in reverse order. It implements EventSource and reguster in EventDispatcher as the source of events. Every time when game engine calls pollEvent function, EventDispatcher calls pollEvent function of EventRecorder. This function checks if the EventRecorder in playback mode and calls getNextEvent function of PlaybackFile class. This function read event from events memory buffer, and if buffer is empty, it reads next events chunk from the file. Also it reads screenshot from the file and compare it with current screen image. If there are any differences, it shows warning message. 
System time:   To correct playback process we need to write and to play system time when a game engines queried for it. To do this, we inserted processMillis call to OSystem_SDL::getMillis function. This function in recording mode writes system time to the file and in playback mode reads time from the file and give it to  a game. The problem is that this meathod registers time queries not only from a game engine, but from GUI and TimerManager. It ruins playback, cause gui and timer manager not synchronised with engine logic. To solve this problem, two improvements to the code were made. The first one -  parameter which disallow to register this query was added to getMillis function. By default, this parameter sets to false. It sets to true in calls from GUI. The second one - call timers update routine from EventRecorder/ became possible.
Audio: As audio fragments are played in other thread and controlled only with SDL subsystem, there could be some problems with  audio flow synchronization and user events. For instance, in Kyrandia, when you click anywhere while somebody's talking, sound interrupts and mouse event doesn't pass to the game. In the same situation, durring playback, sound may be played a little bit faster. And mouse's event will be passed to the game and it's possible that the whole gameplay will chrash. To avoid this unpleasant situation, new class had been added: NullSdlMixerManager. It updates with EventsRecorder and "output" sound to nowhere. And we may always know that during playback sound ends the same time it ends during recording.
Random numbers: as an engine use pseudo random sequences, and we can prognose the whole sequence by initial value of random numbers generator, it's very easy to record and playback random events. It's necessary only to hold this initial value and restore it. Every time RandomSource is created, it calls getRandomSeed() function of EventRecorder. If the recorder not in recording or playback mode, this function works just as bypass.In playback mode it changes initial value to recorded one.

by jakimushka (noreply@blogger.com) at August 06, 2012 07:21 PM

Eric Culp (Singron) - GSoC

More Shader Support

The XmlShader specification allows for multiple fragment shaders, the output of one being piped into the input of the next. Unfortunately, the existing XML parser  has difficulty with dynamic xml structures (or I had no idea how to read a variable structure). So I wrote a new XML parser. It parses arbitrary XML structures and produces an easy-to-use tree.

Then I altered my existing OpenGL backend modifications to allow multi-pass rendering. This requires the framebuffer object extension, which is widely supported, but it may not be supported. I will have to add some compatibility options later.

In the meantime, almost all of the shaders in the bsnes repository work (https://gitorious.org/bsnes/xml-shaders). Some of them are quite interesting. They scale to arbitrary sizes, although some look better at certain resolutions (scale2x, 5xBr, etc.). Ctrl Alt 9 and 0 switch shaders.

Right now, I am in the middle of nowhere. I'll be back home next week, but until then I will have very limited connectivity. Feel free to send me an email or leave a comment, and I'll read and reply when I get a chance.

by Eric (noreply@blogger.com) at August 06, 2012 01:21 AM

July 30, 2012

Einar Johan Trøan Sømåen (Somaen) - GSoC

Autumn Cleaning

The past week has seen quite a few deletions from the codebase, I've removed the debugger, the registry and a lot of smaller pieces here and there in the code, all stuff that isn't really necessary in a ScummVM-version of the engine (like in-engine fullscreen-switching-handling).

I've also found time for quite a bit of cleanup, with the assistance of the nifty astyle tool I added braces to all if-, for- and while-statements, breaking single-line ifs that looked like this:
if (conditional) doStuff();

into:
if (conditional) {
    doStuff();
}

which made for quite a bit more readable and consistent code.

I've also removed Base as super-class for a few classes that didn't really need to reference BaseGame (formerly CBGame), thus easing the cross-file-dependencies that were making the compile-times horrible.


File Management


The package management in the file manager has been refactored into a subclass of Common::Archive, which at this point means that it's quite close to being able to be added to SearchMan, and then just using SearchMan directly, one of the blockers for that is the filename-handling for absolute paths (i.e. redirecting C:\Windows\fonts somewhere usefull, another is that quite a few classes use the "readWholeFile"-function (those that just got a bad case of "endianness"-itch, can relax, it's only used for text files)).

Save games
Where formerly save games were taking ages and ages to load/save, they now should take quite a bit shorter, the speed-issue here came from the fact that the "load-progress-indicator" was drawn for every instance of every class that was loaded/saved, this in turn made a full screen update (as everything does for the moment, for lack of fully working dirty rect-updates). This meant that for every millisecond of usefull load/save-work, the engine would be doing hundreds of milliseconds of work updating the screen just to possibly move a progress bar another pixel.

I changed this behaviour to only update the exact region of the screen where the indicator is, and only as far as the indicator has progressed (and, only when the progress bar has changed at all). This might result in minor differencies in how the progress bar looks (as it isn't redrawn on top of itself for every single instance any longer). But that's a cost I think most users will be willing to take when the end result is a decrease in save/load-time by a factor of 10.

Lazy loading of images
The engine used to take a few seconds to startup a game on my computer, the reason for that was simply that all the images in the entire game would be loaded. I looked into this, and the only reason most of these images were loaded, was simply that their width and height was needed to set the default size of _rect in BaseSubFrame. I changed _rect to private and made ALL access to it use getters and setters (even internally in the class). Then I added the field _wantsDefaultRect, that kept track of whether _rect should have the width/height-values or something else. When getRect is triggered, and _wantsDefaultRect is true, the image will be loaded, to get at those values.

Now, this might sound like a rather odd approach for a simple getter, but the end result is that the state of the class is preserved WITHOUT loading every single image on startup, thus reducing both the load time and the memory footprint by quite a bit. (For Dirty Split I halved the memory footprint of the first screen, and reduced the load-time to between a fifth and a tenth).

One side-effect of this that might prove this solution quirky, is that there is no guarantee that all frames of an animation reside in memory now, which might result in some animations being slow or late the first time they are played.

Singleton and separation
Instead of passing the File Manager around to everyone and everything, it's now moved to a singleton that is supposed to keep it, and other stuff that survive between loading savegames. Since BaseGame is already quite a bit on the heavy side (clocking in at over 4 KLOCs), I think it's appropriate to try to move as much functionality as possible OUT of that class and put it elsewhere.

Minor stuff

  • I had forgotten to add the space-bar as a "printable" key in the events-checks, which made typing anything but rather long words in i.e. save-game titles impossible. That is fixed now.
  • Sounds that were playing when saving now resume properly on load.
  • Screen-fading now works.
  • Save game thumbnails now scale properly (thanks to some scaling code I got from clone2727), where before they would repeat the first column in the last few rows, owing to some integer-division gone haywire.
  • The settings that were formerly in the settings.xml-file have now been moved to ConfMan, which is responsible for the ScummVM-settings-file (.scummvmrc/ScummVM Preferences/scummvm.ini), any game-specific settings will be stored there with the prefix priv_ (for instance the subtitles-flag in Dirty Split is stored as priv_Subtitles).


by somaen (noreply@blogger.com) at July 30, 2012 07:19 PM

July 29, 2012

Eric Culp (Singron) - GSoC

Status

I've added some support for multiple shaders using XmlShaderFormat. It looks for all *.shader files and tries to parse and compile them. However there isn't a good way to change shaders. So far, all changes have been in the base OpenGL backend. However, in order to expose the shaders through the graphics mode settings, changes may possibly be made to the SDL backend. Right now, it queries a static class function to figure our the supported graphics modes. However, OpenGL calls to compile the shaders cannot succeed before the OpenGL context is created. So either the class needs to be initialized before the SDL backend queries the graphics modes, or the static class function can guess about what shaders will eventually be compiled (For instance if "CoolFilter.shader" exists in the current directory, but is not a valid XmlShader or it does not contain valid GLSL programs, then it would still be reported as a valid graphics mode.).

My work on scaler plugins has slowed down. I want to get it incorporated into the main project, so the things I need to consider are


  • How will the plugins work with existing backends that used the old scalers?
  • How will they work with future backends?
    • Do more formats need to be supported? Can they be detected at runtime or compile time (Or probably both)?
  • How can they be integrated with the build system?
    • Options to disable formats (e.g. 32 bit formats which are not used)
    • Options to disable plugins. Currently the Edge2x/3x plugin shares the HQ scaler compile option (USE_HQ_SCALERS).



by Eric (noreply@blogger.com) at July 29, 2012 02:30 AM

July 27, 2012

Danil Ishkov (Jakimushka) - GSoC

What has been done on this week

Hi. This week I've add new features to events recorder. Now it can replay game without display it on screen:  it initialize memory buffer instead of initializing of SDL context. Next feature: user can switch recording mode to normal game play. I. e.while user is recording his gameplay he may interrupt it and continue playig in normal mode. You may see on this diagram how it works:

by jakimushka (noreply@blogger.com) at July 27, 2012 09:19 PM

July 22, 2012

Eric Culp (Singron) - GSoC

Shaders

I have added some very basic support for shaders into the OpenGL backend. Right now, it looks for a "vertex.glsl" and a "fragment.glsl" to load as vertex and fragment shaders respectively. Eventually I want to have some manifest file that stores the properties of shader programs, but I have not done that yet.

Right now, two uniforms are passed to the shaders. The first is the texture to use called "texture". The second is a vec2 containing the width and height of the texture in pixels called "textureDimensions". This is useful since texture coordinates are in the range [0..1] so it is difficult to tell where one pixel ends and another starts. I have attached a shader program that implements scale2x (Advmame2x) by finding the position within a pixel using these uniforms. It duplicates the functionality of the scaler in the SDL backend, but it looks kinda funky with scale factors != 2. It can probably be modified to use a combination of Advmame3x and Advmame2x depending on subpixel position.

What is great about this is that no development tools are required to change the shader programs. So users can create and load shaders without having to configure build environments and compile ScummVM. Hopefully this can lower the barrier to making some creative works.

Advmame2x shader: https://gist.github.com/3161079
ScummVM branch with enabled shaders: https://github.com/singron/scummvm/tree/opengl

by Eric (noreply@blogger.com) at July 22, 2012 09:28 PM

 

curved edge   curved edge