<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On 12 November 2016 at 01:36, Ralph Versteegen <span dir="ltr"><<a href="mailto:teeemcee@gmail.com" target="_blank">teeemcee@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div><div><div><div><div><div><div><div><div><div>James had suggested that it should check for both .rpg and .rpgdir, but it sounds as if he might have already forgotten :)<br><br></div>I'm not sure whether to:<br></div>- only accept the filename without extension<br></div>- accept with valid extension and check that extension first before trying others<br></div>- accept with a valid extension, but discard it and check in predefined order<br><br></div>I was planning to do the third one.<br><br></div>As for .zrpg, I guess that's one alternative. I had been thinking about doing lump-by-lump compression instead using zlib/gzip, indicating a compressed lump with a .gz extension. (All three default to exactly the same algorithm, DEFLATE, but .zip also
 supports a number of other algorithms in recent versions.) For example, there's no point compressing .ogg files.<br></div>Note that there's no compression benefit to zipping the whole .rpgdir folder, because .zip files compress each file individually. On the other hand if you .zip an .rpg file (in the existing lumped format), you can't efficiently seek to any of the lumps, you would be forced to unlump it to play it. We're very close to supporting playing .rpgs without needing to unlump them, which will be great for Android.<br><br></div><div></div><div></div>Advantages of .zip format:<br></div>- can use different compression methods for different file formats, including no compression for audio files<br></div></div></div></div></blockquote><div>Should have gone in the "Both" category, since both can do this.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div></div>- possible to use better compression algorithms supported by .zip, like LZMA, if we find a zip library that supports it; we won't care about these formats only being supported by a subset of .zip implementations.<br></div>- no need to check for multiple lump names with different extensions<br></div><div><div><div><br><div>Advantages of explicit per-lump compression:<br></div><div>- possible to just keep using .rpg extension while showing an appropriate "unsupported version" error message in old versions instead of "corrupt .rpg", by not compressing .GEN and ARCHNYM.LMP lumps<br></div><div>- zlib is a small, very popular and very stable library to read/write gzip/zlib streams<br></div><div>- we can switch to any better compression algorithm in future (e.g. LZMA, brotli) by changing an internal lump name, and with a single library for a specific purpose instead of a possibly bloated zip library supporting many algorithms<br><br></div><div>Both good or bad:<br>- deprecating the lumped-file format (at least for .rpg files) and switching to a standard one, vs. continuing to use our existing lump and unlump tools<br></div><div><br></div><div>I don't even know what the popular libraries for reading/writing .zips are. A little searching suggested Info-ZIP, libzip and 7zip. zlib was actually split off Info-ZIP. Info-ZIP supports DEFLATE and bzip2 only. libzip supports DEFLATE only.<br></div><div><div><br></div></div></div></div></div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On 11 November 2016 at 07:10, Michael Kidder <span dir="ltr"><<a href="mailto:mkidder@gmail.com" target="_blank">mkidder@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">yeah, i mostly bring it up because i was thinking about it and "best practice" would always to be to write  a check for both .rpg and .rpgdir - so might as well push it up into the engine so it's done automatically every time, and if the extention changes later for new games then it just keeps working.</div><div class="m_7829811673570733016HOEnZb"><div class="m_7829811673570733016h5"><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Nov 10, 2016 at 10:27 AM, James Paige <span dir="ltr"><<a href="mailto:Bob@hamsterrepublic.com" target="_blank">Bob@hamsterrepublic.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>That is true! We probably do want to have rungame take the filename without extension-- either that or make it check all alternative supported extensions if the requested one doesn't exist. ".zrpg" might indeed be a thing someday.<br><br>---<br></div>James<br><br></div><div class="m_7829811673570733016m_5817334102261834678HOEnZb"><div class="m_7829811673570733016m_5817334102261834678h5"><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Nov 10, 2016 at 7:10 AM, Michael Kidder <span dir="ltr"><<a href="mailto:mkidder@gmail.com" target="_blank">mkidder@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Also, this may be running a bit far ahead, but would it be a good idea to make some sort of futureproofing by only having scripters call the game's filename minus it's extension?<br><div><br></div><div>To use WH an example, just call it in via checking for "wander". The engine would internally look for the .rpg first and then the .rpgdir . This would futureproof for future extension changes or engine branches without having to add logic catches later. For example, if someone wanted to add .zip loading support, they could make the engine check .zip then .rpg then .rpgdir and every game would immediately be made compatible without backwards compat shims . This would also let people easily change between .rpgdir and .rpg without having to recompile scripts or litter scripts with an OR check for both. </div><div><br></div><div>It would be consistent with the OHR abstracting most gritty system details from the end user, as well, and has other benefits down the road that would leave the engine code cleaner and easier to maintain.</div></div><div class="m_7829811673570733016m_5817334102261834678m_1051087059562877160HOEnZb"><div class="m_7829811673570733016m_5817334102261834678m_1051087059562877160h5"><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Nov 6, 2016 at 9:08 PM, Ralph Versteegen <span dir="ltr"><<a href="mailto:teeemcee@gmail.com" target="_blank">teeemcee@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Ah, OK. Once dicts/hashmaps/tables are implemented you could put all your session variables in one table, and pass that back and forth, either by putting it in a global, or passing it as an argument to the other game's newgame/loadgame script. Your scheme is definitely more elegant than those two alternatives, but right now would require either modifying hspeak/file formats/the interpreter and matching up session variables by name (to make them look like globals), or alternatively accessing them only via get/set commands. In future you would probably be able to implement "load/save session variables" as scripts.<div><div class="m_7829811673570733016m_5817334102261834678m_1051087059562877160m_4077403352673698295h5"><br><div class="gmail_extra"><br><div class="gmail_quote">On 7 November 2016 at 03:53, Michael Kidder <span dir="ltr"><<a href="mailto:mkidder@gmail.com" target="_blank">mkidder@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I guess you could also call them meta variables, or cache variables..</div><div class="m_7829811673570733016m_5817334102261834678m_1051087059562877160m_4077403352673698295m_-8281269771881386315m_6392653157330865677HOEnZb"><div class="m_7829811673570733016m_5817334102261834678m_1051087059562877160m_4077403352673698295m_-8281269771881386315m_6392653157330865677h5"><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Nov 5, 2016 at 5:16 AM, Ralph Versteegen <span dir="ltr"><<a href="mailto:teeemcee@gmail.com" target="_blank">teeemcee@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>I didn't really understand what you meant by session variables. Sort of an 'overlay', that while active causes commands to read data from the save instead of the current game? That would be a possibly practical way to read data from a different rpg file (but can't deal with interdependencies between files, and you have to watch out for caches). Applying the same idea to saves sounds like what I suggested for loading only part of the data from a save, because that data needs to go into the relevant game state globals to be accessible, overwriting the previous state.<br><br></div>One thing to think about is that it would be nice not to require the game 'sending' the data to cooperate by encoding the data into globals or whatever. For example, if you later publish an expansion or sequel to an earlier game, you might want to be able to pull stuff out of the save files without having to have planned ahead. (Plus, hijinks like save file inspection tools (but if you want that, you can use ))<br></div><div class="m_7829811673570733016m_5817334102261834678m_1051087059562877160m_4077403352673698295m_-8281269771881386315m_6392653157330865677m_7638887773489261639HOEnZb"><div class="m_7829811673570733016m_5817334102261834678m_1051087059562877160m_4077403352673698295m_-8281269771881386315m_6392653157330865677m_7638887773489261639h5"><div class="gmail_extra"><br><div class="gmail_quote">On 5 November 2016 at 03:01, Michael Kidder <span dir="ltr"><<a href="mailto:mkidder@gmail.com" target="_blank">mkidder@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">That's why I like the idea of session variables or globals that you can customize what data they transport and read it, since chainloading games would definitely be an advanced feature in the first place, and what each game wants to 'transport' would also be custom in the first place, so it wouldn't be that far of a stretch to ask the scripter to make their data transport on their own<div><br></div><div>Also as a random idea, I could do a tech demo of this for April Fools.. do a parody of Sonic & Knuckles but with Bob or someone else in a bunch of other games if you "lock" them on to Wandering Hamster (&Knuckles)</div></div><div class="m_7829811673570733016m_5817334102261834678m_1051087059562877160m_4077403352673698295m_-8281269771881386315m_6392653157330865677m_7638887773489261639m_-6362625019493277426HOEnZb"><div class="m_7829811673570733016m_5817334102261834678m_1051087059562877160m_4077403352673698295m_-8281269771881386315m_6392653157330865677m_7638887773489261639m_-6362625019493277426h5"><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Nov 3, 2016 at 10:58 PM, Ralph Versteegen <span dir="ltr"><<a href="mailto:teeemcee@gmail.com" target="_blank">teeemcee@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div><div><div>Yes, you could and would only transfer a save file to another game based on the original .rpg with largely the same data, a sequel or extended version basically. I don't see many other cases in which you would want to transfer a save file. You can remove and replace some parts of the original .rpg, though.<br><br></div>Not long ago I fixed a crash that occurred when loading a save from a different game (which I did by accident, and didn't realise until afterwards) that put you on a non-existent map. It shows a visible error when that happens, but we could add a bitset to handle it silently. Then as long as you have a loadgame script to put the hero in a sensible starting location, you can just delete all the maps from the original game and replace them.<br></div><br></div>Don't forget that NPCs still aren't saved/loaded (actually, they are loaded, but not saved).<br><br></div><div>You also missed slice lookup codes, sprite and palette ids in the hero data, and gameover/loadgame script triggers.<br></div><div><br></div>So the things you should preserve are mainly tags, items, spells, hero walkabout/battle sprites and palettes, shops, sprites palettes and lookup codes for any saved slices, and heroes.<br><br>But you can easily replace (if you wanted to reduce the file size) maps, almost all graphics, enemies, formations, music and sound effects, and scripts. That seems quite practical to me.<br><br></div><div>Alternatively we could have a command to load a saved game, but not end the current game (so the script continues running), with a bitmask to select certain data:<br></div><div>-tags<br></div><div>-globals<br></div><div>-map data (currently just location; the normal settings for what gets loaded could just be respected)<br></div><div>-heroes<br></div><div>-maybe some bit to recompute certain hero data, e.g. stats or spell lists, from the current hero definitions<br></div><div>-inventory<br></div><div>-shop inventories<br></div><div>-slices<br></div><div>That should be very easy to implement. If you want to load heroes from another game there are quite a few dependencies on other data.<br></div><div>But as far as I can see, the only use of this command would be when you want to transfer a save from an earlier version of the game,<br></div><div>but want to wipe some of the data that's no longer compatible.<br></div><div class="gmail_extra"><br><div class="gmail_quote"><span>On 4 November 2016 at 07:18, James Paige <span dir="ltr"><<a href="mailto:Bob@hamsterrepublic.com" target="_blank">Bob@hamsterrepublic.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div><div><div><div><div><div><div><div><div>I think the biggest issue with loading from other games save slots is that saves have a lot of fixed id numbers, and those can't be expected to be the same for other games<br><br></div>I went through the RSAV documentation, and tried to make a list of all the id numbers<br><br></div>* current map state stores map id number, and stores NPC definition id numbers<br></div>* tag state is all id number based, so are onetime npcs<br></div>* saved hero party state saves both slot id numbers and hero definition id numbers<br></div>* spell lists are full of attack id numbers<br></div>* inventory state is full of item id numbers<br></div>* shops are also full of both shop slot id numbers and item id numbers<br></div>* saved slices might be full of sprite id numbers.<br><br></div>Unless the other game that you are importing a save from is an almost exact copy of all these things, I don't really see how loading a save is going to be useful.<br><br></div>a version of import globals that can read stuff from other games will be very useful for scripting fun... and commands for importing more specific data from other game's saves (or other save slots in the current game) are reasonable (and wouldn't be too terribly hard to do)<br></div></div></blockquote><div><br></div></span><div>Well aside from globals would other data would you want to load? There's a huge amount of possible data that could be loaded, translating to a huge amount of possible script commands.<br></div><div>I guess the main things you might want to transfer another game are tags, heroes and inventories. If your new game isn't save compatible then you can't<br></div><div>import any of those anyway, and we would be stuck creating individual commands to read hero level of party slot X of save Y of game Z...<br></div><div>Quite a lot of stuff (who is in the party, what items you have) would be covered by reading tag data.<br></div><div>One solution is to just (eventually) let people load an .rsav as a reload document directly, since loading from other saves is an advanced feature anyway.</div><div><div class="m_7829811673570733016m_5817334102261834678m_1051087059562877160m_4077403352673698295m_-8281269771881386315m_6392653157330865677m_7638887773489261639m_-6362625019493277426m_-2035141082305758187h5"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><br></div><div>I think we need to look more carefully at how this should work-- especially at exactly what game authors want to accomplish with a save-import feature.<br><br></div><div>Just importing and loading some other game's rsav file is going to be messy, and it isn't clear to me that it will be very useful.<br><br><br></div><div><div><div><div><div><div><br>---<br></div><div>James<br><br></div><div><div><div><div><div><div><div><br></div></div></div></div></div></div></div></div></div></div></div></div></div><div class="m_7829811673570733016m_5817334102261834678m_1051087059562877160m_4077403352673698295m_-8281269771881386315m_6392653157330865677m_7638887773489261639m_-6362625019493277426m_-2035141082305758187m_4238455958368122312HOEnZb"><div class="m_7829811673570733016m_5817334102261834678m_1051087059562877160m_4077403352673698295m_-8281269771881386315m_6392653157330865677m_7638887773489261639m_-6362625019493277426m_-2035141082305758187m_4238455958368122312h5"><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Nov 3, 2016 at 10:39 AM, Ralph Versteegen <span dir="ltr"><<a href="mailto:teeemcee@gmail.com" target="_blank">teeemcee@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div>Yes, we need a way to share saves. A fancy way would be commands to load/save a save from/to some other game,<br>which would allow the sort of one-time conversion you suggest,<br>but a simpler solution is just a setting to specify the name of the saves folder. (That sounds a lot like<br>the packagegame for the game (used when distributing)). However I guess that would be bad<br></div><div>if you went back to the original game and tried to load a save from the sequel/expansion; ideally you'd want saves<br></div><div>to be marked as incompatible or something. Maybe this isn't a simple solution afterall.<br></div><div><br>There are also some config files associated with each game (hidden away in the OHR's settings folder), and maybe those should be shared too. There's<br></div></div>almost nothing stored in those settings currently, AFAIR just in-app purchases and whether to fullscreen.<br></div><div class="m_7829811673570733016m_5817334102261834678m_1051087059562877160m_4077403352673698295m_-8281269771881386315m_6392653157330865677m_7638887773489261639m_-6362625019493277426m_-2035141082305758187m_4238455958368122312m_-1679273341393611681HOEnZb"><div class="m_7829811673570733016m_5817334102261834678m_1051087059562877160m_4077403352673698295m_-8281269771881386315m_6392653157330865677m_7638887773489261639m_-6362625019493277426m_-2035141082305758187m_4238455958368122312m_-1679273341393611681h5"><div class="gmail_extra"><br><div class="gmail_quote">On 4 November 2016 at 01:53, Michael Kidder <span dir="ltr"><<a href="mailto:mkidder@gmail.com" target="_blank">mkidder@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">This actually makes "DLC" / expansions more feasible now since if you wanted to do it before, you have to tell people "oh yeah, just go in, copy the file... rename it to gameexpansion.r .. okay, enable extensions, and then go to.."<div><br></div><div>Now you could just run a check to see if the user has installed the .rpg file and modify an in game menu or NPC's dialog or whatever seamlessly, that'd be pretty cool.<br></div><div><br></div><div>Only thing i can think of is power users may want the ability to bring the save from the original game to the called game. It would be up to the developer to make sure both games stay compatible save wise. If this causes too many issues, then making "session variables" that GAME preserves only for the duration of being loaded would likely be enough for people to bring data over from one game to another. Something to think about, anyway.</div></div><div class="m_7829811673570733016m_5817334102261834678m_1051087059562877160m_4077403352673698295m_-8281269771881386315m_6392653157330865677m_7638887773489261639m_-6362625019493277426m_-2035141082305758187m_4238455958368122312m_-1679273341393611681m_-3811762993455665472HOEnZb"><div class="m_7829811673570733016m_5817334102261834678m_1051087059562877160m_4077403352673698295m_-8281269771881386315m_6392653157330865677m_7638887773489261639m_-6362625019493277426m_-2035141082305758187m_4238455958368122312m_-1679273341393611681m_-3811762993455665472h5"><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Nov 1, 2016 at 7:00 PM, Ralph Versteegen <span dir="ltr"><<a href="mailto:teeemcee@gmail.com" target="_blank">teeemcee@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>Yes, I was planning to add a command like "check game exists" to work around this problem.<br><br></div>Checking for both .rpg and .rpgdir is a good idea too.<br></div><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="m_7829811673570733016m_5817334102261834678m_1051087059562877160m_4077403352673698295m_-8281269771881386315m_6392653157330865677m_7638887773489261639m_-6362625019493277426m_-2035141082305758187m_4238455958368122312m_-1679273341393611681m_-3811762993455665472m_-561669626657302888h5">On 2 November 2016 at 04:26, James Paige <span dir="ltr"><<a href="mailto:Bob@hamsterrepublic.com" target="_blank">Bob@hamsterrepublic.com</a>></span> wrote:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="m_7829811673570733016m_5817334102261834678m_1051087059562877160m_4077403352673698295m_-8281269771881386315m_6392653157330865677m_7638887773489261639m_-6362625019493277426m_-2035141082305758187m_4238455958368122312m_-1679273341393611681m_-3811762993455665472m_-561669626657302888h5"><div dir="ltr"><div><div><div><div><div><div><div><div><div><div><div>I was looking at the run game implementation.<br><br></div>I saw this comment in the source:<br><br>PRIVATE SUB run_game ()<br> ' Not being able to load the game should always show an error (use serrError for everything)<br><br></div>I would definitely like to have the option of running a game with the error silenced.<br><br></div>For example, At the end of Quest.rpg I might have code that runs Quest2.rpg even though the sequel does not even exist yet.<br><br></div>One way to get this effect would be an argument to run game to make it silent. (I don't really like this one.)<br><br></div>Alternatively another command "run game if exists" that just does the same thing without the error<br><br></div>Finally, maybe an "is other game available($0="othergame")" check that returns a boolean.<br><br></div>Next, I was wondering if you do:<br><br></div>run game($0="gamename.rpg")<br><br></div>and gamename.rpg does not exist, should it automatically check for "gamename.rpgdir" and nice-versa</div><br>---<br></div>James<br></div>
<br></div></div>______________________________<wbr>_________________<br>
Ohrrpgce mailing list<br>
<a href="mailto:ohrrpgce@lists.motherhamster.org" target="_blank">ohrrpgce@lists.motherhamster.o<wbr>rg</a><br>
<a href="http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org" rel="noreferrer" target="_blank">http://lists.motherhamster.org<wbr>/listinfo.cgi/ohrrpgce-motherh<wbr>amster.org</a><br>
<br></blockquote></div><br></div>
<br>______________________________<wbr>_________________<br>
Ohrrpgce mailing list<br>
<a href="mailto:ohrrpgce@lists.motherhamster.org" target="_blank">ohrrpgce@lists.motherhamster.o<wbr>rg</a><br>
<a href="http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org" rel="noreferrer" target="_blank">http://lists.motherhamster.org<wbr>/listinfo.cgi/ohrrpgce-motherh<wbr>amster.org</a><br>
<br></blockquote></div><br></div>
</div></div><br>______________________________<wbr>_________________<br>
Ohrrpgce mailing list<br>
<a href="mailto:ohrrpgce@lists.motherhamster.org" target="_blank">ohrrpgce@lists.motherhamster.o<wbr>rg</a><br>
<a href="http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org" rel="noreferrer" target="_blank">http://lists.motherhamster.org<wbr>/listinfo.cgi/ohrrpgce-motherh<wbr>amster.org</a><br>
<br></blockquote></div><br></div>
</div></div><br>______________________________<wbr>_________________<br>
Ohrrpgce mailing list<br>
<a href="mailto:ohrrpgce@lists.motherhamster.org" target="_blank">ohrrpgce@lists.motherhamster.o<wbr>rg</a><br>
<a href="http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org" rel="noreferrer" target="_blank">http://lists.motherhamster.org<wbr>/listinfo.cgi/ohrrpgce-motherh<wbr>amster.org</a><br>
<br></blockquote></div><br></div>
</div></div><br>______________________________<wbr>_________________<br>
Ohrrpgce mailing list<br>
<a href="mailto:ohrrpgce@lists.motherhamster.org" target="_blank">ohrrpgce@lists.motherhamster.o<wbr>rg</a><br>
<a href="http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org" rel="noreferrer" target="_blank">http://lists.motherhamster.org<wbr>/listinfo.cgi/ohrrpgce-motherh<wbr>amster.org</a><br>
<br></blockquote></div></div></div><br></div></div>
<br>______________________________<wbr>_________________<br>
Ohrrpgce mailing list<br>
<a href="mailto:ohrrpgce@lists.motherhamster.org" target="_blank">ohrrpgce@lists.motherhamster.o<wbr>rg</a><br>
<a href="http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org" rel="noreferrer" target="_blank">http://lists.motherhamster.org<wbr>/listinfo.cgi/ohrrpgce-motherh<wbr>amster.org</a><br>
<br></blockquote></div><br></div>
</div></div><br>______________________________<wbr>_________________<br>
Ohrrpgce mailing list<br>
<a href="mailto:ohrrpgce@lists.motherhamster.org" target="_blank">ohrrpgce@lists.motherhamster.o<wbr>rg</a><br>
<a href="http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org" rel="noreferrer" target="_blank">http://lists.motherhamster.org<wbr>/listinfo.cgi/ohrrpgce-motherh<wbr>amster.org</a><br>
<br></blockquote></div><br></div>
</div></div><br>______________________________<wbr>_________________<br>
Ohrrpgce mailing list<br>
<a href="mailto:ohrrpgce@lists.motherhamster.org" target="_blank">ohrrpgce@lists.motherhamster.o<wbr>rg</a><br>
<a href="http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org" rel="noreferrer" target="_blank">http://lists.motherhamster.org<wbr>/listinfo.cgi/ohrrpgce-motherh<wbr>amster.org</a><br>
<br></blockquote></div><br></div>
</div></div><br>______________________________<wbr>_________________<br>
Ohrrpgce mailing list<br>
<a href="mailto:ohrrpgce@lists.motherhamster.org" target="_blank">ohrrpgce@lists.motherhamster.o<wbr>rg</a><br>
<a href="http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org" rel="noreferrer" target="_blank">http://lists.motherhamster.org<wbr>/listinfo.cgi/ohrrpgce-motherh<wbr>amster.org</a><br>
<br></blockquote></div><br></div></div></div></div>
<br>______________________________<wbr>_________________<br>
Ohrrpgce mailing list<br>
<a href="mailto:ohrrpgce@lists.motherhamster.org" target="_blank">ohrrpgce@lists.motherhamster.o<wbr>rg</a><br>
<a href="http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org" rel="noreferrer" target="_blank">http://lists.motherhamster.org<wbr>/listinfo.cgi/ohrrpgce-motherh<wbr>amster.org</a><br>
<br></blockquote></div><br></div>
</div></div><br>______________________________<wbr>_________________<br>
Ohrrpgce mailing list<br>
<a href="mailto:ohrrpgce@lists.motherhamster.org" target="_blank">ohrrpgce@lists.motherhamster.o<wbr>rg</a><br>
<a href="http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org" rel="noreferrer" target="_blank">http://lists.motherhamster.org<wbr>/listinfo.cgi/ohrrpgce-motherh<wbr>amster.org</a><br>
<br></blockquote></div><br></div>
</div></div><br>______________________________<wbr>_________________<br>
Ohrrpgce mailing list<br>
<a href="mailto:ohrrpgce@lists.motherhamster.org" target="_blank">ohrrpgce@lists.motherhamster.o<wbr>rg</a><br>
<a href="http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org" rel="noreferrer" target="_blank">http://lists.motherhamster.org<wbr>/listinfo.cgi/ohrrpgce-motherh<wbr>amster.org</a><br>
<br></blockquote></div><br></div>
</div></div><br>______________________________<wbr>_________________<br>
Ohrrpgce mailing list<br>
<a href="mailto:ohrrpgce@lists.motherhamster.org" target="_blank">ohrrpgce@lists.motherhamster.o<wbr>rg</a><br>
<a href="http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org" rel="noreferrer" target="_blank">http://lists.motherhamster.org<wbr>/listinfo.cgi/ohrrpgce-motherh<wbr>amster.org</a><br>
<br></blockquote></div><br></div>
</div></div></blockquote></div><br></div></div>