Re: Contributing to ScummVM with an interpreter for Magnetic Scrolls?
Paul Gilbert <[email protected]> Wed, 1 May 2019 16:53:21 +1000
| Newsgroups | gmane.games.devel.scummvm |
|---|---|
| Message-ID | <CAEkg9ROX_coEGTxDvEDsJ_5LjHvFkkUDyr-GtQ55h+drz1wzVw@mail.gmail.com> |
--===============2806918948628041969== Content-Type: multipart/alternative; boundary="000000000000bc02370587cdfa31" --000000000000bc02370587cdfa31 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks for information Torbj=C3=B6rn. It doesn't sound like the missing scr= een elements are things I'd miss all that much. Though maybe some of it could eventually be reintroduced as an option. Whilst Glk doesn't currently have any "listbox" window types, I do have an already implemented listbox control for my stalled Legend engine that could probably be adapted. And a main menu implementation could be useful for Frotz v6 as well as the Magnetic engine. It will be nice if they do release the original versions alongside the remastered versions. Being away from home, I'm not sure how many Magnetic Scrolls games I have, if any.. comes from having too large a collection.. I'm sure Strangerke among others can empathize :), So if I don't have all of them; it would be nice to eventually have a legitimate source to get any missing ones. Paul. On Wed, May 1, 2019 at 4:00 PM Torbj=C3=B6rn Andersson <eriktorbjorn@telia.= com> wrote: > From what I remember, the main feature not supported by the Magnetic > interpreter is some of the "Magnetic Windows" interface (on-screen map, > compass rose, separate windows for inventory and room objects, horribly > cluttered windowing system, ... oh, sorry, that last thing isn't really > a feature, is it?) used by Wonderland and the Magnetic Scrolls Collection= . > > At least as long as the front end implements the necessary hooks for > displaying static and animated pictures, etc. I'm not sure if it loads > the original data files, or if they have to be specially prepared. (The > files on my Magnetic Scrolls Collection CD certainly don't look like > anything the emulator would recognize.) > > Also, it doesn't try to emulate the original look of the games with its > animated menus and pull-down graphics. Which is a bit of a shame or,, in > the case of the Magnetic Windows interface, a huge relief. > > When I asked [1] on the Strand Games forum (the company in the process > of remastering the Magnetic Scrolls games, after the source code was > recovered from a backup tape [2]) if they were planning on release the > original versions as well, just for nostalgia, I got a reply from Hugh > Steers referring me to Stefan Meier's "Magnetic Scrolls Memorial" for > data files for the emulator. > > Since "Strand Games was started by Hugh Steers - a founding member and > core developer of Magnetic Scrolls and Stefan Meier, curator of > if-legends.org" and they claim to have the support of "several members > of the original Magnetic Scrolls team" [3], I guess those files are > kiiind-of officially endorsed...? It's probably worth asking them again > later. > > [1] https://strandgames.com/community/discussion/65/the-original-versions > [2] > https://strandgames.com/blog/magnetic-scrolls-games-source-code-recovered > [3] https://strandgames.com/about > > Torbj=C3=B6rn Andesson > > On 01/05/2019 05.10, Paul Gilbert wrote: > > Hi Thomas, > > > > I'm not sure of the status of the Gargoyle Magnetic Scrolls sub-engine, > > and I don't currently have any Magnetic Scrolls games handy to test it > > on. But unless it's significantly lacking in support for the later game= s > > that your own work adds support for, it'll likely prove easier to work > > on converting it, I'm afraid. Since, after all, someone else has alread= y > > done the work of hooking it up to Glk as well. So it'll be easier to do > > minimal work (relatively speaking) to hook it up to the ScummVM version > > of the Glk layer. And then I can keep testing it as I properly objectif= y > > everything to make sure I don't break anything along the way. > > > > Though I'll be unlikely to be spending much time beyond basic polishing > > up of the sub-engine afterwards. So based on your experience with the > > games & engine involved, there might be opportunities afterwards for yo= u > > to contribute if you're interested, and to do pull requests to improve > > the functionality of the engine based on your work. > > > > Regards, > > > > Paul. > > > > > > On Wed, May 1, 2019 at 2:55 AM dettus <[email protected] > > <mailto:[email protected]>> wrote: > > > > Hello. > > > > > > I must admit that I have not heard about Gargoyle or GLK before. > > > > Judging from the github repository, the Gargoyle engine for Magneti= c > > Scrolls is using the original magnetic interpreter from Niclas > > Karlson. What he did was, as far as I know, reverse-engineer the C6= 4 > > ports of the Magnetic Scrolls games in a painstaking process to mak= e > > them run on DOS. What I did was starting from scratch and using his > > code as a reference. His code is probably more settled than mine. > > Plus, I'd hate to step on somebody's toes who has already invested > > copious amounts of time and energy into a project, so if you prefer > > to use his code: Please, please do so! > > > > What I can offer you is an engine using a more modern coding style. > > Even though it is C, I am sure that it can be integrated easily wit= h > > C++ projects. I have worked with projects that use both languages > > and I am experienced in designing APIs for that. > > > > > > Thus far, I have the following function pointers for callbacks: > > > > > > typedef int (*cbLineAOutputChar)(void* context,char c,unsigned char > > controlD2,unsigned char flag_headline); > > typedef int (*cbLineAOutputString)(void* context,char* > > string,unsigned char controlD2,unsigned char flag_headline); > > typedef int (*cbLineAInputString)(void* context,int* len,char* > string); > > typedef int (*cbLineADrawPicture)(void* context,tPicture* > > picture,int mode); > > typedef int (*cbLineASaveGame)(void* context,char* filename,void* > > ptr,int len); > > typedef int (*cbLineALoadGame)(void* context,char* filename,void* > > ptr,int len); > > > > As well as those API functions: > > > > // configuration functions > > int lineA_getsize(int* size); > > int lineA_init(void* hLineA,void* pSharedMem,int > > *sharedmemsize,void* pMag,int magsize,void* pGfx,int gfxsize); > > int lineA_getVersion(void* hLineA,int* version); > > int lineA_setCBoutputChar(void* hLineA,cbLineAOutputChar pCB,void > > *context); > > int lineA_setCBoutputString(void* hLineA,cbLineAOutputString > > pCB,void* context); > > int lineA_setCBinputString(void* hLineA,cbLineAInputString pCB,void= * > > context); > > int lineA_setCBDrawPicture(void* hLineA,cbLineADrawPicture pCB,void= * > > context); > > int lineA_setCBSaveGame(void* hLineA,cbLineASaveGame pCB,void* > context); > > int lineA_setCBLoadGame(void* hLineA,cbLineALoadGame pCB,void* > context); > > > > > > You typically initialize the engine with pointers to the game > > binaries, set the function pointers, and let it run. When it reache= s > > a point where an input is required, the engine generates a callback > > and pauses until the callback returns. > > > > > > Regarding pictues: They are also being rendered internally, and > > another callback is triggered. An upper layer must draw it in > > whatever way it deems appropriate. So, it does not really care wher= e > > it sits, or if it will even be displayed. The data format itself is > > very basic, almost .xpm. > > > > > > typedef struct _tPicture > > { > > unsigned int palette[16]; > > int height; > > int width; > > char pixels[65536]; > > } tPicture; > > > > > > I am sure I can design an extra function for animations, such as > this: > > > > typedef int (*cbLineADrawAnimation)(void* context,tPicture* > > frames[],int mode,int framenum,int delay); > > > > > > > > Please let me know if this is of interested to you. > > > > Thomas > > > > > > > > On 4/30/19 2:20 AM, Paul Gilbert wrote: > >> Hi guys, > >> > >> Thanks for the excellent summary of the current status, Filippos. > >> As he said, I'm currently in the middle of working my way through > >> converting all the Gargoyle engines to ScummVM, cleaning them up > >> and making them conform to our coding requirements, as well as > >> making them proper C++ classes. If you do decide to work on the > >> Gargoyle sub-engine, please let me know.. I'll hold off working on > >> it until after I've converted the remaining sub-engines. That'll > >> give you plenty of time.. the TADS & Hugo sub-engines are big > >> enough that that'll likely take me a while to finish converting :)= . > >> > >> If you have any questions about the Glk engine specifically, feel > >> free to drop me a line. There's also the technical forums at > >> intfiction.org <http://intfiction.org>. Though my schedule is a > >> bit packed for the next few weeks, so if you do email, I may take > >> a bit to get back to you. > >> > >> As far as music and animation goes, music at least should be easy, > >> so long as it's a standard format ScummVM understands. Currently > >> the engine supports raw sound, wav files, aiff, and mp3. As for > >> graphics, that's somewhat straightforward as well, as long as the > >> graphics can be segmented into completely separate windows than > >> the text, and it looks like the Magnetic Scroll games do.. when > >> you create windows in Glk, you can specify what portion of the > >> screen each will use (for text vs graphics). I've had a lot of > >> trouble with the Frotz sub-engine, but only because graphics and > >> text can intermingle in the same windows, which Glk doesn't allow. > >> > >> Regards, > >> > >> Paul Gilbert (aka DreamMaster). > >> > >> > >> > >> > >> > >> On Mon, Apr 29, 2019 at 7:18 PM Filippos Karapetis > >> <[email protected] <mailto:[email protected]>> wrote: > >> > >> Sorry, forgot to say that the glk engine in ScummVM can be > >> found here: > >> https://github.com/scummvm/scummvm/tree/master/engines/glk > >> > >> There are currently subengines for the alan2, frotz, glulxe, > >> magnetic, scott, and tads interpreters, in various stages of > >> development. dreammaster is mainly working on these. You can > >> also find information about the glk engine in our wiki: > >> https://wiki.scummvm.org/index.php?title=3DScummGlk > >> > >> Regards > >> Filippos Karapetis > >> > >> On Mon, Apr 29, 2019 at 12:14 PM Filippos Karapetis > >> <[email protected] <mailto:[email protected]>> wrote: > >> > >> Hello, and glad to hear about your interest in ScummVM, > >> and your work on the Magnetic Scrolls games! > >> > >> It's great that you are working on this. Bear in mind, > >> though, that there has been extensive work on the Magnetic > >> Scrolls games, which has been integrated into the Gargoyle > >> interpreter: > >> http://ccxvii.net/gargoyle/ > >> > >> Gargoyle is being integrated as a subengine into ScummVM, > >> in the glk engine. The glk engine is a port of the > >> Gargoyle engine into ScummVM. There's an extensive wiki > >> for Gargoyle, here: > >> http://ifwiki.org/index.php/Gargoyle > >> > >> So, my advice would be to make your engine part of the glk > >> engine, and base your work on the already working Magnetic > >> Scrolls interpreter from the Gargoyle engine. The > >> interpreter is open source, and can be found here: > >> https://github.com/garglk/garglk/tree/master/terps/magneti= c > >> > >> The list of supported Magnetic Scrolls games can be found > >> here: > >> > https://github.com/garglk/garglk/blob/master/terps/magnetic/Generic/games= .txt > >> > >> And there's an archive about interactive fiction games, > >> where a lot of resources about the Magnetic Scrolls games > >> can be found, here: > >> > http://www.ifarchive.org/indexes/if-archive/magnetic-scrolls/ > >> > >> Thanks for your interest in these games! It would be great > >> to see your work on them :) > >> > >> Regards > >> Filippos Karapetis > >> > >> > >> On Mon, Apr 29, 2019 at 10:08 AM dettus <[email protected] > >> <mailto:[email protected]>> wrote: > >> > >> Hello. > >> > >> > >> My name is Thomas, I am a big fan of ScummVM. > >> > >> Currently, I am in the process of writing an > >> interpreter for classic > >> text adventures from Magnetic Scrolls, such as "The > >> Pawn" or "The Guild > >> Of Thieves". > >> > >> Even though I am not saying that it SHOULD be > >> integrated into ScummVM, I > >> would like to think that it COULD. It is WAY to early > >> to really start > >> integrating it, but I like to be prepared. > >> > >> > >> > >> So, the reason why I am writing this mail is because I > >> would be > >> interested as on how I would have to design my code to > >> make it possible. > >> Currently, my interpreter needs a couple of hooks into > >> any form of GUI: > >> > >> - Initialization, where pointers to the original > >> binaries are being provided > >> > >> - Callbacks for textual input (strings) > >> - Callbacks for textual output (strings) > >> - Callbacks for textual output (characters) > >> - Callbacks for drawing a picture (XPM) > >> > >> My code is purely C, so callbacks I am using function > >> pointers. Said > >> functions are, at the moment, doing nothing more than > >> just a simple > >> printf() and fgets(). The games I can play so far are > >> "The Pawn", "The > >> Guild of Thieves" and "Jinxter". HOWEVER, later games, > >> such as > >> "Corruption", "Myth", "Fish!" and "Wonderland" added > >> features such as > >> animation and music. > >> > >> SO MY QUESTION is this: How would I best design the > >> callbacks for > >> animation and music in way so that it MIGHT be > >> integratable into ScummVM? > >> > >> > >> > >> Dettus > >> > >> > >> > >> P.S.: My interpreter is available at > >> http://www.dettus.net/dMagnetic. > >> > >> (Hopefully this link, and the fact that this is my > >> first email will not > >> make this spam. ;) ) > >> > >> > >> > >> > >> > >> _______________________________________________ > >> Scummvm-devel mailing list > >> [email protected] > >> <mailto:[email protected]> > >> https://lists.scummvm.org/listinfo/scummvm-devel > >> > >> > >> > >> -- > >> "Experience is the name every one gives to their mistakes" > >> - Oscar Wilde > >> > >> > >> > >> -- > >> "Experience is the name every one gives to their mistakes" - > >> Oscar Wilde > >> _______________________________________________ > >> Scummvm-devel mailing list > >> [email protected] > >> <mailto:[email protected]> > >> https://lists.scummvm.org/listinfo/scummvm-devel > >> > >> > >> _______________________________________________ > >> Scummvm-devel mailing list > >> [email protected] <mailto: > [email protected]> > >> https://lists.scummvm.org/listinfo/scummvm-devel > > _______________________________________________ > > Scummvm-devel mailing list > > [email protected] <mailto: > [email protected]> > > https://lists.scummvm.org/listinfo/scummvm-devel > > > > > > _______________________________________________ > > Scummvm-devel mailing list > > [email protected] > > https://lists.scummvm.org/listinfo/scummvm-devel > > > > --000000000000bc02370587cdfa31 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr">Thanks for information Torbj=C3=B6rn. It doesn't sound= like the missing screen elements are things I'd miss all that much. Th= ough maybe some of it could eventually be reintroduced as an option. Whilst= Glk doesn't currently have any "listbox" window types, I do = have an already implemented listbox control for my stalled Legend engine th= at could probably be adapted. And a main menu implementation could be usefu= l for Frotz v6 as well as the Magnetic engine.<div><br></div><div>It will b= e nice if they do release the original versions alongside the remastered ve= rsions. Being away from home, I'm not sure how many Magnetic Scrolls ga= mes I have, if any.. comes from having too large a collection.. I'm sur= e Strangerke among others can empathize :), So if I don't have all of t= hem; it would be nice to eventually have a legitimate source to get any mis= sing ones.</div><div><br></div><div>Paul.</div><div><br></div></div><br><di= v class=3D"gmail_quote"><div dir=3D"ltr" class=3D"gmail_attr">On Wed, May 1= , 2019 at 4:00 PM Torbj=C3=B6rn Andersson <<a href=3D"mailto:eriktorbjor= [email protected]">[email protected]</a>> wrote:<br></div><blockquote cla= ss=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid = rgb(204,204,204);padding-left:1ex">=C2=A0From what I remember, the main fea= ture not supported by the Magnetic <br> interpreter is some of the "Magnetic Windows" interface (on-scree= n map, <br> compass rose, separate windows for inventory and room objects, horribly <br= > cluttered windowing system, ... oh, sorry, that last thing isn't really= <br> a feature, is it?) used by Wonderland and the Magnetic Scrolls Collection.<= br> <br> At least as long as the front end implements the necessary hooks for <br> displaying static and animated pictures, etc. I'm not sure if it loads = <br> the original data files, or if they have to be specially prepared. (The <br= > files on my Magnetic Scrolls Collection CD certainly don't look like <b= r> anything the emulator would recognize.)<br> <br> Also, it doesn't try to emulate the original look of the games with its= <br> animated menus and pull-down graphics. Which is a bit of a shame or,, in <b= r> the case of the Magnetic Windows interface, a huge relief.<br> <br> When I asked [1] on the Strand Games forum (the company in the process <br> of remastering the Magnetic Scrolls games, after the source code was <br> recovered from a backup tape [2]) if they were planning on release the <br> original versions as well, just for nostalgia, I got a reply from Hugh <br> Steers referring me to Stefan Meier's "Magnetic Scrolls Memorial&q= uot; for <br> data files for the emulator.<br> <br> Since "Strand Games was started by Hugh Steers - a founding member and= <br> core developer of Magnetic Scrolls and Stefan Meier, curator of <br> <a href=3D"http://if-legends.org" rel=3D"noreferrer" target=3D"_blank">if-l= egends.org</a>" and they claim to have the support of "several me= mbers <br> of the original Magnetic Scrolls team" [3], I guess those files are <b= r> kiiind-of officially endorsed...? It's probably worth asking them again= <br> later.<br> <br> [1] <a href=3D"https://strandgames.com/community/discussion/65/the-original= -versions" rel=3D"noreferrer" target=3D"_blank">https://strandgames.com/com= munity/discussion/65/the-original-versions</a><br> [2] <br> <a href=3D"https://strandgames.com/blog/magnetic-scrolls-games-source-code-= recovered" rel=3D"noreferrer" target=3D"_blank">https://strandgames.com/blo= g/magnetic-scrolls-games-source-code-recovered</a><br> [3] <a href=3D"https://strandgames.com/about" rel=3D"noreferrer" target=3D"= _blank">https://strandgames.com/about</a><br> <br> Torbj=C3=B6rn Andesson<br> <br> On 01/05/2019 05.10, Paul Gilbert wrote:<br> > Hi Thomas,<br> > <br> > I'm not sure of the status of the Gargoyle Magnetic Scrolls sub-en= gine, <br> > and I don't currently have any Magnetic Scrolls games handy to tes= t it <br> > on. But unless it's significantly lacking in support for the later= games <br> > that your own work adds support for, it'll likely prove easier to = work <br> > on converting it, I'm afraid. Since, after all, someone else has a= lready <br> > done the work of hooking it up to Glk as well. So it'll be easier = to do <br> > minimal work (relatively speaking) to hook it up to the ScummVM versio= n <br> > of the Glk layer. And then I can keep testing it as I properly objecti= fy <br> > everything to make sure I don't break anything along the way.<br> > <br> > Though I'll be unlikely to be spending much time beyond basic poli= shing <br> > up of the sub-engine afterwards. So based on your experience with the = <br> > games & engine involved, there might be opportunities afterwards f= or you <br> > to contribute if you're interested, and to do pull requests to imp= rove <br> > the functionality of the engine based on your work.<br> > <br> > Regards,<br> > <br> > Paul.<br> > <br> > <br> > On Wed, May 1, 2019 at 2:55 AM dettus <<a href=3D"mailto:dettus@det= tus.net" target=3D"_blank">[email protected]</a> <br> > <mailto:<a href=3D"mailto:[email protected]" target=3D"_blank">dett= [email protected]</a>>> wrote:<br> > <br> >=C2=A0 =C2=A0 =C2=A0Hello.<br> > <br> > <br> >=C2=A0 =C2=A0 =C2=A0I must admit that I have not heard about Gargoyle o= r GLK before.<br> > <br> >=C2=A0 =C2=A0 =C2=A0Judging from the github repository, the Gargoyle en= gine for Magnetic<br> >=C2=A0 =C2=A0 =C2=A0Scrolls is using the original magnetic interpreter = from Niclas<br> >=C2=A0 =C2=A0 =C2=A0Karlson. What he did was, as far as I know, reverse= -engineer the C64<br> >=C2=A0 =C2=A0 =C2=A0ports of the Magnetic Scrolls games in a painstakin= g process to make<br> >=C2=A0 =C2=A0 =C2=A0them run on DOS. What I did was starting from scrat= ch and using his<br> >=C2=A0 =C2=A0 =C2=A0code as a reference. His code is probably more sett= led than mine.<br> >=C2=A0 =C2=A0 =C2=A0Plus, I'd hate to step on somebody's toes w= ho has already invested<br> >=C2=A0 =C2=A0 =C2=A0copious amounts of time and energy into a project, = so if you prefer<br> >=C2=A0 =C2=A0 =C2=A0to use his code: Please, please do so!<br> > <br> >=C2=A0 =C2=A0 =C2=A0What I can offer you is an engine using a more mode= rn coding style.<br> >=C2=A0 =C2=A0 =C2=A0Even though it is C, I am sure that it can be integ= rated easily with<br> >=C2=A0 =C2=A0 =C2=A0C++ projects. I have worked with projects that use = both languages<br> >=C2=A0 =C2=A0 =C2=A0and I am experienced in designing APIs for that.<br= > > <br> > <br> >=C2=A0 =C2=A0 =C2=A0Thus far, I have the following function pointers fo= r callbacks:<br> > <br> > <br> >=C2=A0 =C2=A0 =C2=A0typedef int (*cbLineAOutputChar)(void* context,char= c,unsigned char<br> >=C2=A0 =C2=A0 =C2=A0controlD2,unsigned char flag_headline);<br> >=C2=A0 =C2=A0 =C2=A0typedef int (*cbLineAOutputString)(void* context,ch= ar*<br> >=C2=A0 =C2=A0 =C2=A0string,unsigned char controlD2,unsigned char flag_h= eadline);<br> >=C2=A0 =C2=A0 =C2=A0typedef int (*cbLineAInputString)(void* context,int= * len,char* string);<br> >=C2=A0 =C2=A0 =C2=A0typedef int (*cbLineADrawPicture)(void* context,tPi= cture*<br> >=C2=A0 =C2=A0 =C2=A0picture,int mode);<br> >=C2=A0 =C2=A0 =C2=A0typedef int (*cbLineASaveGame)(void* context,char* = filename,void*<br> >=C2=A0 =C2=A0 =C2=A0ptr,int len);<br> >=C2=A0 =C2=A0 =C2=A0typedef int (*cbLineALoadGame)(void* context,char* = filename,void*<br> >=C2=A0 =C2=A0 =C2=A0ptr,int len);<br> > <br> >=C2=A0 =C2=A0 =C2=A0As well as those API functions:<br> > <br> >=C2=A0 =C2=A0 =C2=A0// configuration functions<br> >=C2=A0 =C2=A0 =C2=A0int lineA_getsize(int* size);<br> >=C2=A0 =C2=A0 =C2=A0int lineA_init(void* hLineA,void* pSharedMem,int<br= > >=C2=A0 =C2=A0 =C2=A0*sharedmemsize,void* pMag,int magsize,void* pGfx,in= t gfxsize);<br> >=C2=A0 =C2=A0 =C2=A0int lineA_getVersion(void* hLineA,int* version);<br= > >=C2=A0 =C2=A0 =C2=A0int lineA_setCBoutputChar(void* hLineA,cbLineAOutpu= tChar pCB,void<br> >=C2=A0 =C2=A0 =C2=A0*context);<br> >=C2=A0 =C2=A0 =C2=A0int lineA_setCBoutputString(void* hLineA,cbLineAOut= putString<br> >=C2=A0 =C2=A0 =C2=A0pCB,void* context);<br> >=C2=A0 =C2=A0 =C2=A0int lineA_setCBinputString(void* hLineA,cbLineAInpu= tString pCB,void*<br> >=C2=A0 =C2=A0 =C2=A0context);<br> >=C2=A0 =C2=A0 =C2=A0int lineA_setCBDrawPicture(void* hLineA,cbLineADraw= Picture pCB,void*<br> >=C2=A0 =C2=A0 =C2=A0context);<br> >=C2=A0 =C2=A0 =C2=A0int lineA_setCBSaveGame(void* hLineA,cbLineASaveGam= e pCB,void* context);<br> >=C2=A0 =C2=A0 =C2=A0int lineA_setCBLoadGame(void* hLineA,cbLineALoadGam= e pCB,void* context);<br> > <br> > <br> >=C2=A0 =C2=A0 =C2=A0You typically initialize the engine with pointers t= o the game<br> >=C2=A0 =C2=A0 =C2=A0binaries, set the function pointers, and let it run= . When it reaches<br> >=C2=A0 =C2=A0 =C2=A0a point where an input is required, the engine gene= rates a callback<br> >=C2=A0 =C2=A0 =C2=A0and pauses until the callback returns.<br> > <br> > <br> >=C2=A0 =C2=A0 =C2=A0Regarding pictues: They are also being rendered int= ernally, and<br> >=C2=A0 =C2=A0 =C2=A0another callback is triggered. An upper layer must = draw it in<br> >=C2=A0 =C2=A0 =C2=A0whatever way it deems appropriate. So, it does not = really care where<br> >=C2=A0 =C2=A0 =C2=A0it sits, or if it will even be displayed. The data = format itself is<br> >=C2=A0 =C2=A0 =C2=A0very basic, almost .xpm.<br> > <br> > <br> >=C2=A0 =C2=A0 =C2=A0typedef struct _tPicture<br> >=C2=A0 =C2=A0 =C2=A0{<br> >=C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 unsigne= d int palette[16];<br> >=C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 int hei= ght;<br> >=C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 int wid= th;<br> >=C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 char pi= xels[65536];<br> >=C2=A0 =C2=A0 =C2=A0} tPicture;<br> > <br> > <br> >=C2=A0 =C2=A0 =C2=A0I am sure I can design an extra function for animat= ions, such as this:<br> > <br> >=C2=A0 =C2=A0 =C2=A0typedef int (*cbLineADrawAnimation)(void* context,t= Picture*<br> >=C2=A0 =C2=A0 =C2=A0frames[],int mode,int framenum,int delay);<br> > <br> > <br> > <br> >=C2=A0 =C2=A0 =C2=A0Please let me know if this is of interested to you.= <br> > <br> >=C2=A0 =C2=A0 =C2=A0Thomas<br> > <br> > <br> > <br> >=C2=A0 =C2=A0 =C2=A0On 4/30/19 2:20 AM, Paul Gilbert wrote:<br> >>=C2=A0 =C2=A0 =C2=A0Hi guys,<br> >><br> >>=C2=A0 =C2=A0 =C2=A0Thanks for the excellent summary of the current= status, Filippos.<br> >>=C2=A0 =C2=A0 =C2=A0As he said, I'm currently in the middle of = working my way through<br> >>=C2=A0 =C2=A0 =C2=A0converting all the Gargoyle engines to ScummVM,= cleaning them up<br> >>=C2=A0 =C2=A0 =C2=A0and making them conform to our coding requireme= nts, as well as<br> >>=C2=A0 =C2=A0 =C2=A0making them proper C++ classes. If you do decid= e to work on the<br> >>=C2=A0 =C2=A0 =C2=A0Gargoyle sub-engine, please let me know.. I'= ;ll hold off working on<br> >>=C2=A0 =C2=A0 =C2=A0it until after I've converted the remaining= sub-engines. That'll<br> >>=C2=A0 =C2=A0 =C2=A0give you plenty of time.. the TADS & Hugo s= ub-engines are big<br> >>=C2=A0 =C2=A0 =C2=A0enough that that'll likely take me a while = to finish converting :).<br> >><br> >>=C2=A0 =C2=A0 =C2=A0If you have any questions about the Glk engine = specifically, feel<br> >>=C2=A0 =C2=A0 =C2=A0free to drop me a=C2=A0line.=C2=A0 There's = also the technical forums at<br> >>=C2=A0 =C2=A0 =C2=A0<a href=3D"http://intfiction.org" rel=3D"norefe= rrer" target=3D"_blank">intfiction.org</a> <<a href=3D"http://intfiction= .org" rel=3D"noreferrer" target=3D"_blank">http://intfiction.org</a>>. T= hough my schedule is a<br> >>=C2=A0 =C2=A0 =C2=A0bit packed for the=C2=A0next few weeks, so if y= ou do email, I may take<br> >>=C2=A0 =C2=A0 =C2=A0a bit to get back to you.<br> >><br> >>=C2=A0 =C2=A0 =C2=A0As far as music and animation goes, music at le= ast should be easy,<br> >>=C2=A0 =C2=A0 =C2=A0so long as it's a standard format ScummVM u= nderstands. Currently<br> >>=C2=A0 =C2=A0 =C2=A0the engine supports raw sound, wav files, aiff,= and mp3. As for<br> >>=C2=A0 =C2=A0 =C2=A0graphics, that's somewhat straightforward a= s well, as long as the<br> >>=C2=A0 =C2=A0 =C2=A0graphics can be segmented into completely separ= ate windows than<br> >>=C2=A0 =C2=A0 =C2=A0the text, and it looks like the Magnetic Scroll= games do.. when<br> >>=C2=A0 =C2=A0 =C2=A0you create windows in Glk, you can specify what= portion of the<br> >>=C2=A0 =C2=A0 =C2=A0screen each will use (for text vs graphics). I&= #39;ve had a lot of<br> >>=C2=A0 =C2=A0 =C2=A0trouble with the Frotz sub-engine, but only bec= ause graphics and<br> >>=C2=A0 =C2=A0 =C2=A0text can intermingle in the same windows, which= Glk doesn't allow.<br> >><br> >>=C2=A0 =C2=A0 =C2=A0Regards,<br> >><br> >>=C2=A0 =C2=A0 =C2=A0Paul Gilbert (aka DreamMaster).<br> >><br> >><br> >><br> >><br> >><br> >>=C2=A0 =C2=A0 =C2=A0On Mon, Apr 29, 2019 at 7:18 PM Filippos Karape= tis<br> >>=C2=A0 =C2=A0 =C2=A0<<a href=3D"mailto:[email protected]" target= =3D"_blank">[email protected]</a> <mailto:<a href=3D"mailto:bluegr@gmail.= com" target=3D"_blank">[email protected]</a>>> wrote:<br> >><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Sorry, forgot to say that the glk= engine in ScummVM can be<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0found here:<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<a href=3D"https://github.com/scu= mmvm/scummvm/tree/master/engines/glk" rel=3D"noreferrer" target=3D"_blank">= https://github.com/scummvm/scummvm/tree/master/engines/glk</a><br> >><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0There are currently subengines fo= r the alan2, frotz, glulxe,<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0magnetic, scott, and tads interpr= eters, in various stages of<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0development. dreammaster is mainl= y working on these. You can<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0also find information about the g= lk engine in our wiki:<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<a href=3D"https://wiki.scummvm.o= rg/index.php?title=3DScummGlk" rel=3D"noreferrer" target=3D"_blank">https:/= /wiki.scummvm.org/index.php?title=3DScummGlk</a><br> >><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Regards<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Filippos Karapetis<br> >><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0On Mon, Apr 29, 2019 at 12:14 PM = Filippos Karapetis<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<<a href=3D"mailto:bluegr@gmai= l.com" target=3D"_blank">[email protected]</a> <mailto:<a href=3D"mailto:= [email protected]" target=3D"_blank">[email protected]</a>>> wrote:<br> >><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Hello, and glad to = hear about your interest in ScummVM,<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0and your work on th= e Magnetic Scrolls games!<br> >><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0It's great that= you are working on this. Bear in mind,<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0though, that there = has been extensive work on the Magnetic<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Scrolls games, whic= h has been integrated into the Gargoyle<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0interpreter:<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<a href=3D"http://c= cxvii.net/gargoyle/" rel=3D"noreferrer" target=3D"_blank">http://ccxvii.net= /gargoyle/</a><br> >><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Gargoyle is being i= ntegrated as a subengine into ScummVM,<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0in the glk engine. = The glk engine is a port of the<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Gargoyle engine int= o ScummVM. There's an extensive wiki<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0for Gargoyle, here:= <br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<a href=3D"http://i= fwiki.org/index.php/Gargoyle" rel=3D"noreferrer" target=3D"_blank">http://i= fwiki.org/index.php/Gargoyle</a><br> >><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0So, my advice would= be to make your engine part of the glk<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0engine, and base yo= ur work on the already working Magnetic<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Scrolls interpreter= from the Gargoyle engine. The<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0interpreter is open= source, and can be found here:<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<a href=3D"https://= github.com/garglk/garglk/tree/master/terps/magnetic" rel=3D"noreferrer" tar= get=3D"_blank">https://github.com/garglk/garglk/tree/master/terps/magnetic<= /a><br> >><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0The list of support= ed Magnetic Scrolls games can be found<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0here:<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<a href=3D"https://= github.com/garglk/garglk/blob/master/terps/magnetic/Generic/games.txt" rel= =3D"noreferrer" target=3D"_blank">https://github.com/garglk/garglk/blob/mas= ter/terps/magnetic/Generic/games.txt</a><br> >><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0And there's an = archive about interactive fiction games,<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0where a lot of reso= urces about the Magnetic Scrolls games<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0can be found, here:= <br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<a href=3D"http://w= ww.ifarchive.org/indexes/if-archive/magnetic-scrolls/" rel=3D"noreferrer" t= arget=3D"_blank">http://www.ifarchive.org/indexes/if-archive/magnetic-scrol= ls/</a><br> >><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Thanks for your int= erest in these games! It would be great<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0to see your work on= them :)<br> >><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Regards<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Filippos Karapetis<= br> >><br> >><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0On Mon, Apr 29, 201= 9 at 10:08 AM dettus <<a href=3D"mailto:[email protected]" target=3D"_bl= ank">[email protected]</a><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<mailto:<a href= =3D"mailto:[email protected]" target=3D"_blank">[email protected]</a>>&g= t; wrote:<br> >><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Hello= .<br> >><br> >><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0My na= me is Thomas, I am a big fan of ScummVM.<br> >><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Curre= ntly, I am in the process of writing an<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0inter= preter for classic<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0text = adventures from Magnetic Scrolls, such as "The<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Pawn&= quot; or "The Guild<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Of Th= ieves".<br> >><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Even = though I am not saying that it SHOULD be<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0integ= rated into ScummVM, I<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0would= like to think that it COULD. It is WAY to early<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0to re= ally start<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0integ= rating it, but I like to be prepared.<br> >><br> >><br> >><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0So, t= he reason why I am writing this mail is because I<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0would= be<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0inter= ested as on how I would have to design my code to<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0make = it possible.<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Curre= ntly, my interpreter needs a couple of hooks into<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0any f= orm of GUI:<br> >><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0- Ini= tialization, where pointers to the original<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0binar= ies are being provided<br> >><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0- Cal= lbacks for textual input (strings)<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0- Cal= lbacks for textual output (strings)<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0- Cal= lbacks for textual output (characters)<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0- Cal= lbacks for drawing a picture (XPM)<br> >><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0My co= de is purely C, so callbacks I am using function<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0point= ers. Said<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0funct= ions are, at the moment, doing nothing more than<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0just = a simple<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0print= f() and fgets(). The games I can play so far are<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"= ;The Pawn", "The<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Guild= of Thieves" and "Jinxter". HOWEVER, later games,<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0such = as<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"= ;Corruption", "Myth", "Fish!" and "Wonderland= " added<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0featu= res such as<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0anima= tion and music.<br> >><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0SO MY= QUESTION is this: How would I best design the<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0callb= acks for<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0anima= tion and music in way so that it MIGHT be<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0integ= ratable into ScummVM?<br> >><br> >><br> >><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Dettu= s<br> >><br> >><br> >><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0P.S.:= My interpreter is available at<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<a hr= ef=3D"http://www.dettus.net/dMagnetic" rel=3D"noreferrer" target=3D"_blank"= >http://www.dettus.net/dMagnetic</a>.<br> >><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(Hope= fully this link, and the fact that this is my<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0first= email will not<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0make = this spam. ;) )<br> >><br> >><br> >><br> >><br> >><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0_____= __________________________________________<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Scumm= vm-devel mailing list<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<a hr= ef=3D"mailto:[email protected]" target=3D"_blank">Scummvm-dev= [email protected]</a><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<m= ailto:<a href=3D"mailto:[email protected]" target=3D"_blank">= [email protected]</a>><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<a hr= ef=3D"https://lists.scummvm.org/listinfo/scummvm-devel" rel=3D"noreferrer" = target=3D"_blank">https://lists.scummvm.org/listinfo/scummvm-devel</a><br> >><br> >><br> >><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0-- <br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"Experience is= the name every one gives to their mistakes"<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0- Oscar Wilde<br> >><br> >><br> >><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0-- <br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"Experience is the name ever= y one gives to their mistakes" -<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Oscar Wilde<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0_________________________________= ______________<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0Scummvm-devel mailing list<br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<a href=3D"mailto:Scummvm-devel@l= ists.scummvm.org" target=3D"_blank">[email protected]</a><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<mailto:<a href=3D"mailto:Scum= [email protected]" target=3D"_blank">[email protected].= org</a>><br> >>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0<a href=3D"https://lists.scummvm.= org/listinfo/scummvm-devel" rel=3D"noreferrer" target=3D"_blank">https://li= sts.scummvm.org/listinfo/scummvm-devel</a><br> >><br> >><br> >>=C2=A0 =C2=A0 =C2=A0_______________________________________________= <br> >>=C2=A0 =C2=A0 =C2=A0Scummvm-devel mailing list<br> >>=C2=A0 =C2=A0 =C2=A0<a href=3D"mailto:[email protected]= rg" target=3D"_blank">[email protected]</a>=C2=A0 <mailto:= <a href=3D"mailto:[email protected]" target=3D"_blank">Scummv= [email protected]</a>><br> >>=C2=A0 =C2=A0 =C2=A0<a href=3D"https://lists.scummvm.org/listinfo/s= cummvm-devel" rel=3D"noreferrer" target=3D"_blank">https://lists.scummvm.or= g/listinfo/scummvm-devel</a><br> >=C2=A0 =C2=A0 =C2=A0_______________________________________________<br> >=C2=A0 =C2=A0 =C2=A0Scummvm-devel mailing list<br> >=C2=A0 =C2=A0 =C2=A0<a href=3D"mailto:[email protected]" = target=3D"_blank">[email protected]</a> <mailto:<a href=3D= "mailto:[email protected]" target=3D"_blank">Scummvm-devel@li= sts.scummvm.org</a>><br> >=C2=A0 =C2=A0 =C2=A0<a href=3D"https://lists.scummvm.org/listinfo/scumm= vm-devel" rel=3D"noreferrer" target=3D"_blank">https://lists.scummvm.org/li= stinfo/scummvm-devel</a><br> > <br> > <br> > _______________________________________________<br> > Scummvm-devel mailing list<br> > <a href=3D"mailto:[email protected]" target=3D"_blank">S= [email protected]</a><br> > <a href=3D"https://lists.scummvm.org/listinfo/scummvm-devel" rel=3D"no= referrer" target=3D"_blank">https://lists.scummvm.org/listinfo/scummvm-deve= l</a><br> > <br> <br> </blockquote></div> --000000000000bc02370587cdfa31-- --===============2806918948628041969== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KU2N1bW12bS1k ZXZlbCBtYWlsaW5nIGxpc3QKU2N1bW12bS1kZXZlbEBsaXN0cy5zY3VtbXZtLm9yZwpodHRwczov L2xpc3RzLnNjdW1tdm0ub3JnL2xpc3RpbmZvL3NjdW1tdm0tZGV2ZWwK --===============2806918948628041969==--