{"id":44,"date":"2009-07-14T18:49:09","date_gmt":"2009-07-14T18:49:09","guid":{"rendered":"https:\/\/blogs.scummvm.org\/nolange\/?p=44"},"modified":"2022-05-22T18:50:36","modified_gmt":"2022-05-22T18:50:36","slug":"report-and-timeline","status":"publish","type":"post","link":"https:\/\/blogs.scummvm.org\/nolange\/2009\/07\/14\/report-and-timeline\/","title":{"rendered":"Report and Timeline"},"content":{"rendered":"<ul>\n<li><em>~23 May &#8211; 1 June<br \/>\n<\/em><strong>The History<\/strong><br \/>\nI chosen to start at the hierarchical top of the Format then work my way down. ie. Song -&gt; Tracksteps -&gt; Patterns -&gt; Macros. I used ScummVM classes right from the start which saved some time vs my initially planned approach to make a small selfcontained project at the start, there where some troubles with the linux buildsystem but nothing major.<br \/>\nAs I progressed I realized that the TFMX Format is way more complex than I initially though, creating songs for it is more like programming than composing (maybe one reason why only a handful musicians used it). I felt like I`m falling behind my schedule more and more. I did however reverse parts of the executeable and used this to verify some of he weirder stuff in tfmxplay, some things turned out to be different in MI<\/li>\n<li><em>1 June &#8211; 4 June<\/em>:<br \/>\nI now can follow the &#8220;path&#8221; of the modules. Follow is a bit of a big word, 4-5 patterns just outputted their current command and parameters &#8211; and interleaved with each other. Impatience and some disappointment showed up. I now worked feverishly to get evenough macros implemented to be able to hook it all up audio-output.<br \/>\nThe first versions had ugly, distorted noise but you still could figure out the parts of songs.<\/li>\n<li><em>4 June &#8211; 6 June<\/em><br \/>\nNow I had a full player, only I needed to detect the bugs that kept it from outputting something recognisable. This proved to be difficult and took me 2 days just to find some rather laughable bugs (storing 16bit in a byte?). For the next task (maxtrax) I plan to start at the lowest level, so I can verify new code soon and not code for 2 weeks and then have to hunt around endlessly. It might need some more code for beeing able to instantly test new additions, but I think steady progress is more important than beeing halted for indeterminate time searching bugs.<\/li>\n<li><em>6 June &#8211; 12 June<\/em><br \/>\nThings were clearing up again and after finding the few showstopping bugs I quickly could pad out the player, find playback issues and verify nonworking code with the MI-Executeable. Guess I made up the time lost this week. I also managed to put hook the player into ScummVM so the game would work with Sound.<\/li>\n<li><em>14 &#8211; 18 June<br \/>\n<\/em>I was busy with University so I wasnt around much. Nevertheless I good a good look at how sfx are handled. Turns out that TFMX has functions to queue both external macros or patterns (channel 7 is reserved for external patterns it seems), complete with priority levels and &#8220;lifetime&#8221; to determine when and if other effects\/music should be replaced. Luckily ScummVM is only using macros and priority 0, its however pretty messy keeping track of them (probably not at all).<br \/>\nI implemented a first version with sfx by using 2 Tfmx instances, 1 for music and 1 for effects, this allows hooking up both to the right mixer channels. Not sure if I might use only 1 instance in the end.<\/li>\n<li><em>18 &#8211; 20 June<br \/>\n<\/em>Actually played a bit of &#8220;Monkey Island&#8221;, found out that the mansion-scene was quite bad in the last implementation. Some effects depended on beeing stopped or muted by the next effect, and I had to implement that for this scene. The game should work well now.<\/li>\n<li><em>22 June &#8211; 1 July<br \/>\n<\/em>This week I was occupied primary with University. Still found some time for a few fixes.<\/li>\n<li><em>1 July\u00a0 &#8211; 11 July<\/em><br \/>\nMerged in changes from trunk before starting work on Maxtrax.<br \/>\nI initially thought about reversing the format the hard way (disassembler) as the sources linked in ScummVM Wiki are already adapted for a Player.. and have wuite some code decated to some pluginframeworks. I wanted to base my player on the original source. Reversing proved to be difficult as Kyrandia uses the Amiga`s libraries and I havent found a way to fed the definitions to the disassembler.<br \/>\nCompare this to TFMX which hits the Hardware directly, finding the related code was merely a matter of looking at the exception-vectors (eg. which code gets called on Audio-Interrupts) in an emulator. Of course it also helped that TFMX is structured rather nicely and placed right at the beginning of the executeable.<br \/>\nWithout fast progress I was trying to locate the origins of the assembler-sources and found out that the original, almost unmodified sources are available in UADE.<br \/>\nProgress was steady since, even though I dint worked very dutifully this week I had hit the milestone of beeing able to iterate through songs.<\/li>\n<li><em>12 July\u00a0 &#8211; 14 July<\/em><br \/>\nSome cleanups tiresome debuggin work later, the player now reproduces the intro-song. Need to test some more but it appears to be pretty truthfully aswell.<\/li>\n<li><em>14 July\u00a0 &#8211; 18 July<br \/>\n<\/em><strong>The Now<\/strong><br \/>\nWhat Im doing now is looking at how sound-effects are played (and which kinds of effects are used in Kyrandia) and figure out how to add them into the game. I plan to have support for that at the end of the week.<\/li>\n<li><em>19 July\u00a0 &#8211; 10 August<br \/>\n<\/em><strong>The Mystery<\/strong><br \/>\nThe following weeks are a bit of a mystery, I will have a look at the Desktoptracker-Format, but from what information is available I fear its not enough to base an implementation on it.<br \/>\nSo Im still uncertain on how to use this time, more on this and some possible options at another blog-entry<\/li>\n<li><em>10 August &#8211; 17 August<\/em><br \/>\nExpect 3-4 days to improve\u00a0TFMX\/maxtrax<br \/>\nRemainded is codecleanups, testing and preparations to merge the code back into ScummVM<\/li>\n<\/ul>\n<h2 align=\"center\">State<\/h2>\n<ul>\n<li>Monkey Island + TFMX<br \/>\nThe game should work fine with both effects and sounds, player implements everything the game uses. Differently to the original I however use 2 instances of the TFMX-Player for sound and effects which should be noticeable in the game even if its rare that both are used at the same time.<br \/>\nThere are some cleanups necessary, primary for making both instances share data, currently the music + samples get loaded twice in seperate blocks of memory.<\/li>\n<li>Legend of Kyrandia + Maxtrax<br \/>\nCommandline player can load and play songs (called scores in this format). Output appears to be thruthful, but more comparisons (only tested intro-music so far). Effects are totally missing currently. The original player implemented communication by using 2 OS-conform &#8220;servers&#8221; &#8211; the game sended commands to those servers and the commands got processed asynchronously. Need to figure out which commands where used and how to hook the player into the kyra-engine.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>~23 May &#8211; 1 June The History I chosen to start at the hierarchical top of the Format then work my way down. ie. Song -&gt; Tracksteps -&gt; Patterns -&gt; Macros. I used ScummVM classes right from the start which saved some time vs my initially planned approach to make a small selfcontained project at [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-44","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blogs.scummvm.org\/nolange\/wp-json\/wp\/v2\/posts\/44","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.scummvm.org\/nolange\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.scummvm.org\/nolange\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.scummvm.org\/nolange\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.scummvm.org\/nolange\/wp-json\/wp\/v2\/comments?post=44"}],"version-history":[{"count":2,"href":"https:\/\/blogs.scummvm.org\/nolange\/wp-json\/wp\/v2\/posts\/44\/revisions"}],"predecessor-version":[{"id":46,"href":"https:\/\/blogs.scummvm.org\/nolange\/wp-json\/wp\/v2\/posts\/44\/revisions\/46"}],"wp:attachment":[{"href":"https:\/\/blogs.scummvm.org\/nolange\/wp-json\/wp\/v2\/media?parent=44"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.scummvm.org\/nolange\/wp-json\/wp\/v2\/categories?post=44"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.scummvm.org\/nolange\/wp-json\/wp\/v2\/tags?post=44"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}