tag:blogger.com,1999:blog-88966992024-03-14T18:19:14.617+01:00Ember development blogI blog about Ember development. Ember is a 3d client for the Worldforge virtual worlds system.Erik Hjortsberghttp://www.blogger.com/profile/14688983256284244677noreply@blogger.comBlogger84125tag:blogger.com,1999:blog-8896699.post-21037800732640346682014-06-15T09:44:00.002+02:002014-06-15T09:44:39.196+02:00Pathfinding in EmberI've recently done some work on adding proper pathfinding to Worldforge. For this I've chosen the Recast/Detour <a href="https://github.com/memononen/recastnavigation">library</a>. While this approach, using voxel rendering to create navmeshes from arbitrary geometry, is both complex and resource expensive, I'm convinced it's absolutely required to allow us to properly support the dynamic and changing worlds in Worldforge.<br />
<br />
I've done the initial implementation in Ember, mainly because it's easier to visually debug. But the main benefit will come from integrating this work into Cyphesis, so that it can control AI movement.<br />
This is an area sorely in need of improvement. See, currently there's no path finding or obstacle avoidance at all for the AI characters. The result of this is that NPC characters always move in a straight line towards their target, causing them to inevitable become stuck on other entities. No good. No good.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='640' height='360' src='https://www.youtube.com/embed/lA4pVQ2uZ6s?feature=player_embedded' frameborder='0'></iframe></div>
With proper path finding and obstacle avoidance we can instead implement more advanced AI behaviour.Anonymoushttp://www.blogger.com/profile/11920598912576234443noreply@blogger.com0tag:blogger.com,1999:blog-8896699.post-6773008678314943242014-04-09T11:49:00.001+02:002014-04-09T11:49:51.519+02:00Navigation previewHere's a short preview of the work I've been doing the last couple of days. I'm using Recast/Detour to implement proper navigation in Worldforge, first in Ember and then in Cyphesis.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQTez7gKU-JfZYbfJ25PORfHljjTR9jMu-Fwz8JnEgjv2sQu_O1MV5VxsUBazjw6QBpqmBX_gFEwgv6bq17qGfpSOUlFN9URW9_wq-e6BSH9W-XiCCbBPlEShEPq0UzxobKN02LQ/s1600/screenshot_20140403_165358.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQTez7gKU-JfZYbfJ25PORfHljjTR9jMu-Fwz8JnEgjv2sQu_O1MV5VxsUBazjw6QBpqmBX_gFEwgv6bq17qGfpSOUlFN9URW9_wq-e6BSH9W-XiCCbBPlEShEPq0UzxobKN02LQ/s1600/screenshot_20140403_165358.jpg" height="480" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheAyNIvNkvNACefwdxQA-XIQag_WquviKXHYAfejI-Idje8hbAmZe7DOzBeUnIEADbLK5Q46b5HHAKro5x1l8el-SFrcMJ5PNOj_YuHfpCFFp7DCZ3tJc2aR0eHWiwK0DyhzusDA/s1600/screenshot_20140403_165432.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheAyNIvNkvNACefwdxQA-XIQag_WquviKXHYAfejI-Idje8hbAmZe7DOzBeUnIEADbLK5Q46b5HHAKro5x1l8el-SFrcMJ5PNOj_YuHfpCFFp7DCZ3tJc2aR0eHWiwK0DyhzusDA/s1600/screenshot_20140403_165432.jpg" height="480" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBvYdOsH_9YxP18Hp3KDBkVjY4sILdYqAQHvrRXZU1wJIsiS6XCywTX6CuAHjy5iYhPW8DTG-EVSXUlRqQ12MHjleCc-WVmpv5tSgJuGdH7hvIBysxSP0YqGWzQm1pZHFtaUUrdQ/s1600/screenshot_20140403_165452.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBvYdOsH_9YxP18Hp3KDBkVjY4sILdYqAQHvrRXZU1wJIsiS6XCywTX6CuAHjy5iYhPW8DTG-EVSXUlRqQ12MHjleCc-WVmpv5tSgJuGdH7hvIBysxSP0YqGWzQm1pZHFtaUUrdQ/s1600/screenshot_20140403_165452.jpg" height="480" width="640" /></a></div>
<br />Anonymoushttp://www.blogger.com/profile/11920598912576234443noreply@blogger.com0tag:blogger.com,1999:blog-8896699.post-85013854687947343232014-04-07T13:16:00.000+02:002014-04-07T13:16:20.142+02:00Ember 0.7.2 binaries for Linux and Windows availableWe now have binaries for Linux and Windows available for Ember 0.7.2.<br />
<br />
They can be downloaded from here:<br />
<a href="http://downloads.sourceforge.net/worldforge/ember-0.7.2.1-x86_64">Linux (64 bit)</a><br />
<a href="http://downloads.sourceforge.net/worldforge/ember-0.7.2.1-x86_32">Linux (32 bit)</a><br />
<a href="http://downloads.sourceforge.net/worldforge/Ember-0.7.2.1.exe">Windows</a>Anonymoushttp://www.blogger.com/profile/11920598912576234443noreply@blogger.com0tag:blogger.com,1999:blog-8896699.post-91349131755917286422014-02-24T23:58:00.001+01:002014-02-25T00:01:51.155+01:00Worldforge taking part in Google Summer of Code 2014<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCSZiNA88bNM0eMYzIzct7zB8NjyNaQdnUMY68IV0-1TIr6v_K6UyLq6pKbwuhARycf-uSdL8cj5QpghDog5_h5KCkLRXEc4hy-IrnEu7x7oEIKmX2mdhh_J3uPby0BHAUAVn0yg/s1600/920x156xbanner-gsoc2014_small.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCSZiNA88bNM0eMYzIzct7zB8NjyNaQdnUMY68IV0-1TIr6v_K6UyLq6pKbwuhARycf-uSdL8cj5QpghDog5_h5KCkLRXEc4hy-IrnEu7x7oEIKmX2mdhh_J3uPby0BHAUAVn0yg/s1600/920x156xbanner-gsoc2014_small.png" /></a></div>
Once again Worldforge has had the good fortune to be selected as a mentoring organization for<a href="http://www.google-melange.com/gsoc/homepage/google/gsoc2014"> Google Summer of Code 2014</a>!<br />
<br />
This is an awesome opportunity for students to both get more involved
in the project as well as get a sweet gig for the summer. If you’re a
student reading this, waste no time getting over to the <a href="http://www.google-melange.com/gsoc/homepage/google/gsoc2014">GSoC site</a> and read up on how all of this works. Then swing by the <a href="http://wiki.worldforge.org/wiki/Summer_of_Code">Worldforge wiki</a> to read up on how this all works specific to Worldforge. Don’t hesitate to contact us through our various <a href="http://wiki.worldforge.org/wiki/Main_Page#Communication_Channels">channels</a>.<br />
<br />
As previously we’re also acting as an umbrella organization for our friends in the <a href="http://www.ryzomcore.org/">Ryzom</a> and <a href="http://www.cegui.org.uk/">CEGUI</a> projects.<br />
<br />
<br />
Here is a video showing off student work from previous year, to perhaps serve as an inspiration.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="https://ytimg.googleusercontent.com/vi/vrHFKHCg_ks/0.jpg" height="266" width="320"><param name="movie" value="https://youtube.googleapis.com/v/vrHFKHCg_ks&source=uds" /><param name="bgcolor" value="#FFFFFF" /><param name="allowFullScreen" value="true" /><embed width="320" height="266" src="https://youtube.googleapis.com/v/vrHFKHCg_ks&source=uds" type="application/x-shockwave-flash" allowfullscreen="true"></embed></object></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />Anonymoushttp://www.blogger.com/profile/11920598912576234443noreply@blogger.com0tag:blogger.com,1999:blog-8896699.post-64875347134101762472014-02-17T19:45:00.000+01:002014-02-21T20:56:39.439+01:00Ember 0.7.2 released<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjD6oYlhNxIHnpw3TVWFFtVMf2tMyismqOwyhyphenhyphengWdgj8EpWaSwzD5U2LTyVpdLZ65Y3vuODHKEfuyMm7KnuTOSWOHl09AwQ_ay5SpJaco3c-HTc2i-8q2I11n8pSQo7L1HLTWp3hw/s1600/screenshot_20140217_140333.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjD6oYlhNxIHnpw3TVWFFtVMf2tMyismqOwyhyphenhyphengWdgj8EpWaSwzD5U2LTyVpdLZ65Y3vuODHKEfuyMm7KnuTOSWOHl09AwQ_ay5SpJaco3c-HTc2i-8q2I11n8pSQo7L1HLTWp3hw/s1600/screenshot_20140217_140333.jpg" height="240" width="320" /></a></div>
The Worldforge 3d client Ember version 0.7.2 has been released and is now available from the WorldForge <a data-mce-href="https://sourceforge.net/projects/worldforge/files/" href="https://sourceforge.net/projects/worldforge/files/">download site</a>.<br />
Ember
is a client for the WorldForge project. It allows you to both play in
and edit virtual worlds.This release includes a totally revamped terrain
engine as well as various improvements to both game play<br />
and authoring.<br />
<ul>
<li>Revamped and improved terrain engine.</li>
<li>High level detail terrain materials.</li>
<li>Improvements to authoring.</li>
<li>Various bug fixes.</li>
</ul>
This version can be downloaded from the sourceforge download site, at the following locations:<br />
<ul>
<li><a data-mce-href="http://downloads.sourceforge.net/worldforge/ember-0.7.2.tar.bz2" href="http://downloads.sourceforge.net/worldforge/ember-0.7.2.tar.bz2">ember-0.7.2.tar.bz2</a></li>
<li><a data-mce-href="http://downloads.sourceforge.net/worldforge/ember-media-0.7.2.tar.bz2" href="http://downloads.sourceforge.net/worldforge/ember-media-0.7.2.tar.bz2">ember-media-0.7.2.tar.bz2</a></li>
</ul>
At this time we do not provide precompiled packages.<br />
Note
that if you compile from source, you will need to install the content
of ember-media-0.7.2.tar.bz2 to PREFIX/share/ember/media or use the
“make releasemediarsync” make target.<br />
More information can be found at the <a data-mce-href="http://wiki.worldforge.org/wiki/Ember" href="http://wiki.worldforge.org/wiki/Ember">Ember</a> site.<br />
All bug reports should be posted at the <a data-mce-href="https://launchpad.net/ember" href="https://launchpad.net/ember">Launchpad.</a>Anonymoushttp://www.blogger.com/profile/11920598912576234443noreply@blogger.com0tag:blogger.com,1999:blog-8896699.post-86825385710499988692014-02-17T13:41:00.002+01:002014-02-17T13:41:32.080+01:00Eris 1.3.23 released<a data-mce-href="http://worldforge.org/dev/eng/libraries/eris" href="http://worldforge.org/dev/eng/libraries/eris">Eris</a> version 1.3.23 has been released and is now available from the WorldForge <a data-mce-href="https://sourceforge.net/projects/worldforge/files/Eris%201.4%20%28client%20lib%29/" href="https://sourceforge.net/projects/worldforge/files/Eris%201.4%20%28client%20lib%29/">download site</a>.
Eris is the WorldForge client-side session layer. This release is a
minor release which primarily fixes some bugs and adds support for the
new entity reference Atlas format, which is vital for proper import and
export support.<br />
<ul>
<li>Support for the new entity reference Atlas format.</li>
<li>Various bug fixes.</li>
</ul>
Source code can be downloaded from the following locations:<br />
<ul>
<li><a data-mce-href="http://sourceforge.net/projects/worldforge/files/Eris%201.4%20%28client%20lib%29/1.3.23/eris-1.3.23.tar.bz2/download" href="http://sourceforge.net/projects/worldforge/files/Eris%201.4%20%28client%20lib%29/1.3.23/eris-1.3.23.tar.bz2/download">Source Code .bz2</a></li>
<li><a data-mce-href="http://sourceforge.net/projects/worldforge/files/Eris%201.4%20%28client%20lib%29/1.3.23/eris-1.3.23.tar.gz/download" href="http://sourceforge.net/projects/worldforge/files/Eris%201.4%20%28client%20lib%29/1.3.23/eris-1.3.23.tar.gz/download">Source Code .gz</a></li>
</ul>
Anonymoushttp://www.blogger.com/profile/11920598912576234443noreply@blogger.com0tag:blogger.com,1999:blog-8896699.post-48545716850536780802013-11-10T22:47:00.000+01:002013-11-10T22:47:04.180+01:00Binary packages for Ember 0.7.1 available<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWvwKUr7DGfDAz7A74oXkVaV9C_GRzcz5ZBW8nfGpfILvvZCpW9wIirsMmZ9CbVPcsXFGXY2BOCbnSHQ-zKUFVSXIkArT-ivTaG-HqHFzCtE9Y4Mka0AzMjTk5X0KneagJI2PPxw/s1600/screenshot_20131110_224407.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="480" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWvwKUr7DGfDAz7A74oXkVaV9C_GRzcz5ZBW8nfGpfILvvZCpW9wIirsMmZ9CbVPcsXFGXY2BOCbnSHQ-zKUFVSXIkArT-ivTaG-HqHFzCtE9Y4Mka0AzMjTk5X0KneagJI2PPxw/s640/screenshot_20131110_224407.jpg" width="640" /></a></div>
<div>
<br /></div>
Just a quick update that we're now providing binary packages of Ember 0.7.1.<div>
We're currently providing these for <a href="http://sourceforge.net/projects/worldforge/files/Ember%20%28OGRE%20client%29/0.7.1/ember-0.7.1-x86_64/download">64-bit Linux</a>, <a href="http://sourceforge.net/projects/worldforge/files/Ember%20%28OGRE%20client%29/0.7.1/ember-0.7.1-x86_32/download">32-bit Linux</a> and <a href="http://sourceforge.net/projects/worldforge/files/Ember%20%28OGRE%20client%29/0.7.1/Ember-0.7.1.exe/download">Windows</a>.</div>
<div>
<br /></div>
<div>
To run the Linux packages you must first make sure that the file <a href="http://ma65p.wordpress.com/2008/08/04/how-to-make-a-file-executable-in-ubuntu/#graphical">is executable</a>.</div>
Anonymoushttp://www.blogger.com/profile/11920598912576234443noreply@blogger.com0tag:blogger.com,1999:blog-8896699.post-77827612882374980282013-10-26T14:58:00.000+02:002013-10-26T14:58:26.694+02:00Ember 0.7.1 released<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwUMBY30WyMMCei4YL5GASy2COOtr0UnLk8pHi9-gy2WzcLevPRQyxdoqcNhCeiAT8OuHxbYNB_57moJqRrCM_IrXKaVmkbN0qa4onPXlFQtIQIsHaqJvBtJ7ANFfa7nA0Fbv6XQ/s1600/screenshot_20131026_134526.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwUMBY30WyMMCei4YL5GASy2COOtr0UnLk8pHi9-gy2WzcLevPRQyxdoqcNhCeiAT8OuHxbYNB_57moJqRrCM_IrXKaVmkbN0qa4onPXlFQtIQIsHaqJvBtJ7ANFfa7nA0Fbv6XQ/s640/screenshot_20131026_134526.jpg" width="640" /></a></div>
<div style="background-color: white; border: 0px; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; margin-bottom: 24px; padding: 0px; vertical-align: baseline;">
The Worldforge 3d client Ember version 0.7.1 has been released and is now available from the WorldForge <a href="https://sourceforge.net/projects/worldforge/files/" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; color: #743399; margin: 0px; padding: 0px; vertical-align: baseline;">download site</a>.</div>
<div style="background-color: white; border: 0px; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; margin-bottom: 24px; padding: 0px; vertical-align: baseline;">
Ember is a client for the WorldForge project. It allows you to both play in and edit virtual worlds.<br />
This release focus on improving the editing capabilities, allowing for much easier world creation.</div>
<ul style="background-color: white; border: 0px; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; list-style: square; margin: 0px 0px 24px 1.5em; padding: 0px; vertical-align: baseline;">
<li style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">Export and import of entities and worlds.</li>
<li style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">Much improved entity editor.</li>
<li style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">Ability to edit and debug entity minds.</li>
<li style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">Detect local servers and connect as admin directly.</li>
<li style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;">Many bug fixes, improvements and optimizations.</li>
</ul>
<div style="background-color: white; border: 0px; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; margin-bottom: 24px; padding: 0px; vertical-align: baseline;">
This version can be downloaded from the sourceforge download site, at the following locations:</div>
<ul style="background-color: white; border: 0px; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; list-style: square; margin: 0px 0px 24px 1.5em; padding: 0px; vertical-align: baseline;">
<li style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;"><a href="http://downloads.sourceforge.net/worldforge/ember-0.7.1.tar.bz2" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; color: #743399; margin: 0px; padding: 0px; vertical-align: baseline;">ember-0.7.1.tar.bz2</a></li>
<li style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;"><a href="http://downloads.sourceforge.net/worldforge/ember-media-0.7.1.tar.bz2" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; color: #743399; margin: 0px; padding: 0px; vertical-align: baseline;">ember-media-0.7.1.tar.bz2</a></li>
</ul>
<div style="background-color: white; border: 0px; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; margin-bottom: 24px; padding: 0px; vertical-align: baseline;">
At this time we do not provide precompiled packages.</div>
<div style="background-color: white; border: 0px; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; margin-bottom: 24px; padding: 0px; vertical-align: baseline;">
Note that if you compile from source, you will need to install the content of ember-media-0.7.1.tar.bz2 to PREFIX/share/ember/media or use the “make releasemediarsync” make target.</div>
<div style="background-color: white; border: 0px; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; margin-bottom: 24px; padding: 0px; vertical-align: baseline;">
More information can be found at the <a href="http://wiki.worldforge.org/wiki/Ember" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; color: #743399; margin: 0px; padding: 0px; vertical-align: baseline;">Ember</a> site.</div>
<div style="background-color: white; border: 0px; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; margin-bottom: 24px; padding: 0px; vertical-align: baseline;">
All bug reports should be posted at the <a href="https://launchpad.net/ember" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; color: #743399; margin: 0px; padding: 0px; vertical-align: baseline;">Launchpad.</a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMszx9NUMzeOT8MGSNdd5hlRST-92eycl0D3RVFFjwnZjgOXESBnG4NEiH7ZH148HKpx2mQwV6xZ0moQeZxUqFbrmiKRB_S2U9-8TT50dZSjwIVFjdO4jn1W5mBHNbBWt1eVxcig/s1600/screenshot_20131026_134620.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="112" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMszx9NUMzeOT8MGSNdd5hlRST-92eycl0D3RVFFjwnZjgOXESBnG4NEiH7ZH148HKpx2mQwV6xZ0moQeZxUqFbrmiKRB_S2U9-8TT50dZSjwIVFjdO4jn1W5mBHNbBWt1eVxcig/s200/screenshot_20131026_134620.jpg" width="200" /></a></div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjTC2Wlnd6uC6XKEl40YkZZp7-QFmQn0fCvOp9ngX00L_NpklxRaKasF8wSZuVR1vXhe5i4bYk2y0insR5c3ceCDmVbzTqU637mYCt4R8BFbWh9nDfzaWcrUblz5ATvt0YVmwosA/s1600/screenshot_20131026_134739.jpg" imageanchor="1" style="float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="112" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjTC2Wlnd6uC6XKEl40YkZZp7-QFmQn0fCvOp9ngX00L_NpklxRaKasF8wSZuVR1vXhe5i4bYk2y0insR5c3ceCDmVbzTqU637mYCt4R8BFbWh9nDfzaWcrUblz5ATvt0YVmwosA/s200/screenshot_20131026_134739.jpg" width="200" /></a>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhP_tuzQqto1x6xtJW5M40LIfFjz1ULwF1K-ewNcRPk-M4oZVd8kWSCwlsdfEc1GJ9F5bAu_KcE0xjzwa6CjZ9fDfPcwO4RBu3OdU9wd5bU06JiU7OMHT9f7Vs0d0M5uvnMTYsAqQ/s1600/screenshot_20131026_134748.jpg" imageanchor="1" style="float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="112" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhP_tuzQqto1x6xtJW5M40LIfFjz1ULwF1K-ewNcRPk-M4oZVd8kWSCwlsdfEc1GJ9F5bAu_KcE0xjzwa6CjZ9fDfPcwO4RBu3OdU9wd5bU06JiU7OMHT9f7Vs0d0M5uvnMTYsAqQ/s200/screenshot_20131026_134748.jpg" width="200" /></a>
<br />
<div style="background-color: white; border: 0px; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; margin-bottom: 24px; padding: 0px; vertical-align: baseline;">
</div>
Anonymoushttp://www.blogger.com/profile/11920598912576234443noreply@blogger.com0tag:blogger.com,1999:blog-8896699.post-34150124595949078892013-10-26T14:19:00.001+02:002013-10-26T14:28:52.823+02:00Cyphesis 0.6.2 release<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7tfOVuoB-Yj4PzzF-gCmUjgAfvzDXGkDiiL3-qlbBPFY3u8eRqfrrRtKNy0DJHVGR-01njIK4rScPO02p9IhyphenhyphenhrPItD9WbzZRAlzU0ZXSxxwgdYOHYSa7xdeKpPclJE5rNPEA9g/s1600/screenshot_20131026_134825.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7tfOVuoB-Yj4PzzF-gCmUjgAfvzDXGkDiiL3-qlbBPFY3u8eRqfrrRtKNy0DJHVGR-01njIK4rScPO02p9IhyphenhyphenhrPItD9WbzZRAlzU0ZXSxxwgdYOHYSa7xdeKpPclJE5rNPEA9g/s640/screenshot_20131026_134825.jpg" width="640" /></a></div>
<div style="background-color: white; border: 0px; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; margin-bottom: 24px; padding: 0px; vertical-align: baseline;">
<a href="http://worldforge.org/dev/eng/servers/cyphesis" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; color: #743399; margin: 0px; padding: 0px; vertical-align: baseline;">Cyphesis</a> version 0.6.2 has been released and is now available from the WorldForge <a href="https://sourceforge.net/projects/worldforge/files/" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; color: #743399; margin: 0px; padding: 0px; vertical-align: baseline;">download site</a>.</div>
<div style="background-color: white; border: 0px; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; margin-bottom: 24px; padding: 0px; vertical-align: baseline;">
Cyphesis is a small to medium scale server for WorldForge games, with builtin AI. This version includes the demo game <a href="http://worldforge.org/games/mason" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; color: #743399; margin: 0px; padding: 0px; vertical-align: baseline;">Mason</a> which is currently in development. This release is intended for server administrators wishing to run a Mason server and World developers developing new worlds or game systems.<img alt="" src="http://worldforgedev.org/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;" title="More..." /> It is primarily a bugfix release which fixes a serious crash issue.</div>
<div style="background-color: white; border: 0px; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; margin-bottom: 24px; padding: 0px; vertical-align: baseline;">
Major changes in this version:</div>
<span style="color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px;"><ul>
<li>Fix for a possible crash related to wielded entities and destruction.</li>
<li>Addition of a new “spawner” property</li>
</ul>
</span><ul style="background-color: white; border: 0px; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; list-style: square; margin: 0px 0px 24px 1.5em; padding: 0px; vertical-align: baseline;">
</ul>
<div style="background-color: white; border: 0px; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; margin-bottom: 24px; padding: 0px; vertical-align: baseline;">
Source code can be downloaded from here:</div>
<div style="background-color: white; border: 0px; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; margin-bottom: 24px; padding: 0px; vertical-align: baseline;">
<a href="http://downloads.sourceforge.net/worldforge/cyphesis-0.6.2.tar.bz2" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; color: #743399; margin: 0px; padding: 0px; vertical-align: baseline;">Source Code tar.bz2</a></div>
Anonymoushttp://www.blogger.com/profile/11920598912576234443noreply@blogger.com0tag:blogger.com,1999:blog-8896699.post-74062955053772910822013-10-25T13:57:00.001+02:002013-10-25T13:57:43.190+02:00Eris 1.3.22 Release<div style="background-color: white; border: 0px; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; margin-bottom: 24px; padding: 0px; vertical-align: baseline;">
<a href="http://worldforge.org/dev/eng/libraries/eris" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; color: #743399; margin: 0px; padding: 0px; vertical-align: baseline;">Eris</a> version 1.3.22 has been released and is now available from the WorldForge <a href="https://sourceforge.net/projects/worldforge/files/Eris%201.4%20%28client%20lib%29/" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; color: #743399; margin: 0px; padding: 0px; vertical-align: baseline;">download site</a>. Eris is the WorldForge client-side session layer, used by many existing clients. This is a development release, as the API may change prior to the final release of Eris 1.4.0. However, any changes should be minor and easy to incorporate into clients; testing is recommended and appreciated. <img alt="" src="http://worldforgedev.org/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" style="background-color: transparent; background-position: initial initial; background-repeat: initial initial; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;" title="More..." />Changes:</div>
<span style="color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px;"><ul>
<li>Ability to connect to a local socket has been added.</li>
<li>Support for connecting using a “sys” account.</li>
<li>Handling of the avatar being deleted.</li>
</ul>
</span><ul style="background-color: white; border: 0px; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; list-style: square; margin: 0px 0px 24px 1.5em; padding: 0px; vertical-align: baseline;">
</ul>
<div style="background-color: white; border: 0px; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; margin-bottom: 24px; padding: 0px; vertical-align: baseline;">
Source code can be downloaded from the following locations:</div>
<ul style="border: 0px; color: #743399; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; margin: 0px; padding: 0px; vertical-align: baseline;">
<li><a href="http://sourceforge.net/projects/worldforge/files/Eris%201.4%20%28client%20lib%29/1.3.22/eris-1.3.22.tar.bz2/download" style="border: 0px; color: #743399; margin: 0px; padding: 0px; vertical-align: baseline;">Source Code .bz2</a></li>
<li><a href="http://sourceforge.net/projects/worldforge/files/Eris%201.4%20%28client%20lib%29/1.3.22/eris-1.3.22.tar.bz2/download" style="border: 0px; color: #743399; margin: 0px; padding: 0px; vertical-align: baseline;">Source Code .gz</a></li>
</ul>
<ul style="background-color: white; border: 0px; color: #333333; font-family: Georgia, 'Bitstream Charter', serif; font-size: 16px; line-height: 24px; list-style: square; margin: 0px 0px 24px 1.5em; padding: 0px; vertical-align: baseline;">
</ul>
Anonymoushttp://www.blogger.com/profile/11920598912576234443noreply@blogger.com0tag:blogger.com,1999:blog-8896699.post-6565151840355303282013-09-29T11:15:00.000+02:002013-09-29T11:15:00.370+02:00Google Summer of Code 2013 report: Samuel KoglerThe Google Summer of Code 2013 is now complete. <a href="https://github.com/skogler">Samuel Kogler</a> worked during the summer on improving the terrain rendering component in Ember.<br />
We've previously used a component called the PagedLandscapeSceneManager2 for our terrain rendering. This component however is both unmaintained and has some design deficiencies which makes it ultimately unsuitable for what we want to achieve with the worlds in Worldforge. Samuel's task over the summer has been to bring the newer and more flexible Ogre Terrain Component into Ember.<br />
Apart from the work he's been doing on Ember he's also submitted many changes to Ogre, both to core Ogre functionality and to the aforementioned Terrain Component.<br />
We're very pleased with the work he's done, as well as having to work alongside with him. It's been an absolute joy to see his progress.<br />
Below is his own presentation of the work he's done.<br />
As he's based his work on the not yet released Ogre 1.9 branch we haven't yet merged his code into Ember master; as soon as Ogre 1.9 is released we'll commence that work. Until then his code can be seen over at his <a href="https://github.com/skogler/ember">Github fork</a>.<br />
<div class="separator" style="clear: both; text-align: center;">
<object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://img.youtube.com/vi/vrHFKHCg_ks/0.jpg"><param name="movie" value="http://youtube.googleapis.com/v/vrHFKHCg_ks&source=uds" /><param name="bgcolor" value="#FFFFFF" /><param name="allowFullScreen" value="true" /><embed width="320" height="266" src="http://youtube.googleapis.com/v/vrHFKHCg_ks&source=uds" type="application/x-shockwave-flash" allowfullscreen="true"></embed></object></div>
<br />Anonymoushttp://www.blogger.com/profile/11920598912576234443noreply@blogger.com0tag:blogger.com,1999:blog-8896699.post-16317754962177625202013-09-26T21:09:00.000+02:002013-09-26T21:09:50.314+02:00Cyphesis 0.6.1 released<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivfi-V5fsUHd7ufteULTN_LZm2qzKAA3wFFPWoZ8Yh4p9ZAL2RfNMBqGZbb4cD7qNJgZo1IQdghDzLR3Z6bVkXkjF5NYJFGRufV40IKbfyJtKSjHUJHBXLS0trNXjf_QQLiPFOdA/s1600/screenshot_20130922_203411.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivfi-V5fsUHd7ufteULTN_LZm2qzKAA3wFFPWoZ8Yh4p9ZAL2RfNMBqGZbb4cD7qNJgZo1IQdghDzLR3Z6bVkXkjF5NYJFGRufV40IKbfyJtKSjHUJHBXLS0trNXjf_QQLiPFOdA/s400/screenshot_20130922_203411.jpg" width="400" /></a></div>
<br />
<br />
I just recently released Cyphesis 0.6.1. The official <a href="http://worldforgedev.org/archives/547">announcement</a> is over at the Worldforge site.<br />
<br />
This is the first release after I took over from Alistair as maintainer. The focus, as well as with the upcoming Ember release, is fully on implementing features to make it easier for world authors.<br />
<br />
This follows the <a href="http://mail.worldforge.org/pipermail/general/2013-April/007614.html">strategy</a> I laid out when taking over maintenance duties in April. In order for Worldforge to attract new developers and world builders we must make it much, much easier to actually create worlds. A crucial part of this is making sure that any changes done on the server actually are persisted between server restarts. Previously this wasn't true, as no "minds" were persisted. That meant that all of the behaviour and knowledge of any creature or character was wiped out when the server shut down.<br />
That of course made it quite hard to iteratively construct an interesting world. Not so anymore!<br />
<br />
But not only that; it's now also much easier to both alter and inspect minds. This was also a source of frustration previously, as there was no good way as a world author to interact with the minds. While a crude mechanism for inserting new goals was available, this didn't really cut it. Especially when goals malfunctioned or behaved in non-intuitive ways. Trying to figure out why the woodcutter wouldn't cut down the tree one meter in front of him was nigh impossible.<br />
All of this is now improved as it's now possible to add, delete, alter and inspect goals. The latter feature is a god send when constructing behaviour or implementing new goals, since it's now easy to see exactly what a certain NPC is thinking.<br />
<br />
However, in order to fully use these editing feature you must run the latest version of Ember. There will be a 0.7.1 release shortly; we're currently working out some final issues. In the meantime, if you want to try these new features out you should run Ember from the Git master branch, preferably through the <a href="http://wiki.worldforge.org/wiki/Hammer_Script">Hammer script</a>.Anonymoushttp://www.blogger.com/profile/11920598912576234443noreply@blogger.com2tag:blogger.com,1999:blog-8896699.post-46716103657553485182013-04-01T20:56:00.000+02:002013-04-01T20:56:27.716+02:00Exporting and importing in EmberThe last couple of weeks I've been working on improved authoring capabilities in Ember and Cyphesis. One of the most important features is the ability to both export and import entities from and into servers.<br />
<br />
This allows a world author to save a snapshot of the world to local disk, and later on restoring the world as it was in the snapshot. There are multiple usage scenarios, but one that immediately springs to my mind is the improved ability to perform iterative world editing. By being able to reset the world back to a known working state it's much easier to try out new configurations and behaviour.<br />
<br />
All work is currently being done on separate branches of both Ember and Cyphesis. The following video shows the status of this feature some weeks ago; it has progressed even more since.<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/uMuY3N7M71g?feature=player_embedded' frameborder='0'></iframe></div>
<br />Anonymoushttp://www.blogger.com/profile/11920598912576234443noreply@blogger.com0tag:blogger.com,1999:blog-8896699.post-50742884217799429222012-03-19T22:50:00.000+01:002012-03-19T22:50:34.058+01:00Worldforge in Google Summer of Code 2012<div class="separator" style="clear: both; text-align: center;"><a href="http://code.google.com/images/GSoC2012_300x200.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" src="https://code.google.com/images/GSoC2012_300x200.png" /></a></div>We've been allowed to take part in Google Summer of Code for another year. This is as always exciting and humbling. The Summer of Code is such a wonderful program which always keeps us amazed. So many different things are awesome, from the basic ideas and soul of the program, to the people at Google making it happen, to the mentors around the world, to the students working all through summer.<br />
<br />
There's an announcement up on the main Worldforge site with more <a href="http://worldforgedev.org/archives/480">information</a>. Right now we're in the period where students are encouraged to interact with the community and work on their ideas.<br />
<br />
If working on a totally free virtual world system during the summer sounds interesting, don't hesitate: run over to the Worldforge wiki, read up on the program and don't be shy about applying.Erik Hjortsberghttp://www.blogger.com/profile/14688983256284244677noreply@blogger.com0tag:blogger.com,1999:blog-8896699.post-28915565075685587092011-06-08T23:12:00.000+02:002011-06-08T23:12:33.577+02:00Properly shaded foliageEmber has a system for generating grass and other kind of foliage. It looks pretty good in most cases, but the shading of the grass has always been off. This is even more apparent when the time of day changes, as the grass doesn't change colour when the world does. In addition, the grass didn't receive any shadows, making it look strange when running in a higher graphics settings.<br />
<br />
All this has changed now however, as I've altered the grass to be both properly lit and to receive shadows correctly. The effect can be seen below.<br />
<div class="separator" style="clear: both; text-align: center;"><span id="goog_2085299474"></span><span id="goog_2085299475"></span></div><div class="separator" style="clear: both; text-align: center;"><a href="https://picasaweb.google.com/103153762253160933129/SomeOfUsCannotBeWrong#5615956860273427490"><img border="0" src="http://3.bp.blogspot.com/-HSUtu5h4myg/Te_jAoKEBCI/AAAAAAAAAp4/T-1z5X955h0/s128/screenshot_20110707_221352.jpg" /></a></div><br />
<div class="separator" style="clear: both; text-align: center;"></div>Erik Hjortsberghttp://www.blogger.com/profile/14688983256284244677noreply@blogger.com0tag:blogger.com,1999:blog-8896699.post-80475763315240147692011-05-24T21:07:00.003+02:002011-05-24T21:35:01.555+02:00Ember 0.6.1 out of the doorI finally managed to get <a href="http://worldforgedev.org/archives/422">Ember 0.6.1</a> out of the door.<br />It seems to be common procedure for me to never be able to get the releases out in accordance to my plans, but this time it took even longer than would seem "normal".<br />The two main reasons for this were Windows and 32-bit architecture, both legacy systems (hurr hurr hurr).<br />I've always striven to make Ember cross platform. This can be seen in the components used and the way its internals are laid out. The main problem is that I'm not too fond of touching Windows unless I absolutely have to, and therefore the Windows releases have lagged behind the Linux ones. Fortunately for us a contributor in the Worldforge community, James Lovejoy, has been working on streamlining the process of building Ember for Windows, and with his help we were set on releasing a working Windows binary along with the 0.6.1 release.<br />It turned out however that some of the low level networking stuff we were doing in the Eris library didn't play to well with Windows. Ok, cue a rewrite in Eris by Alistair, some testing of that, and we got it fixed after a while.<br />The other issue was more subtle. I've added some mechanisms for making sure that Ember is running on a fixed fps rate (60 by default). This relies on getting and comparing millisecond timestamps from the OS. Problem here was that I was using the C++ "long" type, which on 64 bit machines (such as the one I'm developing on) is 64 bits, but on 32 bit machines is 32 bit. And 32 bits are too few, since the timestamps will then wrap around after something like a month's time. Not good. And this was of course something I didn't discover until I basically had already made the release and was testing our 32-bit precompiled binary out (we're now using <a href="http://portablelinuxapps.org/">AppImage</a> since Autopackage is defunct).<br /><br />Just some snags on the way, but enough to delay the release a little bit too long.<br /><br />Currently we've just started up the coding part of Google Summer of Code. This year I'll be mentoring two students: <a href="http://wiki.worldforge.org/wiki/GSOC2011_-_Ember_UI_improvements">Martin</a> and <a href="http://wiki.worldforge.org/wiki/GSOC2011-Integrate_ember_into_the_web_browser">Peter</a>. They're already at work improving Ember, with some exciting weeks ahead of us all.<br /><br />Oh, and here's a small movie showing how the Model Editor can be used.<br /><br /><iframe src="http://www.youtube.com/embed/O9k12fFbzys" allowfullscreen="" width="560" frameborder="0" height="349"></iframe>Erik Hjortsberghttp://www.blogger.com/profile/14688983256284244677noreply@blogger.com0tag:blogger.com,1999:blog-8896699.post-88458442814552938992011-03-20T11:10:00.005+01:002011-03-20T11:26:35.989+01:00Worldforge in Google Summer of Code 2011Worldforge has been accepted into <a href="http://www.google-melange.com/">Google Summer of Code 2011</a>!<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.google-melange.com/"><img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer;" src="http://code.google.com/images/GSoC2011_300x200.png" alt="" border="0" /></a><br /></div>We've had a remarkable experience with the program from before and are very excited about this opportunity. If you're a student which are interested in working on a cool Worldforge project during the summer, don't hesitate to visit our <a href="http://wiki.worldforge.org/wiki/Summer_of_Code">GSoC page</a>. The sooner you start getting involved in the project the better, so don't be shy about making yourself heard on the <a href="http://mail.worldforge.org/lists/listinfo/">mailing lists</a> or <a href="http://www.worldforge.org/doc/irc">irc</a>.Erik Hjortsberghttp://www.blogger.com/profile/14688983256284244677noreply@blogger.com0tag:blogger.com,1999:blog-8896699.post-3000102126597664642010-06-19T14:44:00.006+02:002010-06-23T20:15:00.418+02:00Simplify tolua++ with autotools<div>In Ember we use Lua for our scripting needs. The bindings to the C++ parts of the client are provided by the <a href="http://www.codenix.com/%7Etolua/">tolua++ library</a>. Tolua++ works by generating C++ source code from .pkg files, which are simplified .h files. This works out extremely well; the developer only needs to copy the .h file to a similarly named .pkg file and remove those methods and fields that shouldn't be exported. The command line tool "tolua++" is then run to produce the C++ source.</div><div><br /></div><div>Previously in Ember we handled all of this by keeping the generated C++ source checked into the source, and requiring that each developer had to run the tolua++ command to regenerate these sources each time a lua binding was added or changed. This however had a couple of downsides, chief amongst them that the code generated differs a bit depending on the version of tolua++ used. It also resulted in some often very large Git commits of generated code, which tended to pollute the Git history.</div><div>A much better solution would be to instead automate the generation of the binding source, and bake it into the normal build system. Fortunately the Autotools already provides all the facilities for making this happen.</div><div><br /></div><div>An example of how this is handled in Ember though a Makefile.am can be found <a href="http://git.worldforge.org/?p=ember.git;a=blob;f=src/services/bindings/lua/Makefile.am;hb=HEAD">here</a>:<br /><pre><br />SUFFIXES: .cxx .pkg .lo .la .cpp .o .obj<br /><br />.pkg.cxx:<br /> cd $(srcdir) && TOLUAXX=${TOLUAXX} $(abs_top_srcdir)/scripts/update_lua_bindings.sh `basename $@ .cxx` `basename $@ .cxx`.pkg $(abs_builddir)/`basename $@` $<<br /><br />INCLUDES = -I$(top_srcdir)/src -I$(srcdir) -I$(top_builddir)/src -DPREFIX=\"@prefix@\"<br /><br />noinst_LIBRARIES = liblua_EmberServices.a<br />liblua_EmberServices_a_SOURCES = EmberServices.cxx<br /><br />CLEANFILES = EmberServices.cxx<br />TOLUA_PKGS = ConfigService.pkg EmberServices.pkg IInputAdapter.pkg Input.pkg InputService.pkg LoggingService.pkg MetaserverService.pkg ScriptingService.pkg ServerService.pkg<br />EXTRA_DIST = $(TOLUA_PKGS)<br />EmberServices.cxx: $(TOLUA_PKGS)<br /></pre><br />The files references in TOLUA_PKG are the .pkg files which define the bindings. These will be fed through the update_lua_bindings.sh script to generate the file EmberServices.cxx, which is then compiled and added to the liblua_EmberService.a archive. Note that we need to add EmberServices.css to the CLEANFILES variable to make sure that it's deleted when we're cleaning up. Since it's generated through the tolua++ tool Automake can't keep track of it itself.</div><div>The <a href="http://git.worldforge.org/?p=ember.git;a=blob;f=scripts/update_lua_bindings.sh;hb=HEAD">update_lua_bindings.sh</a> script looks like this:<br /><pre><br /> #! /bin/sh<br /> #tolua++ will for some reason translate "const std::string" into "const,std::string", so we need to remove these incorrect commas from the final code<br /> #some versions will also for some unexplainable reason not correctly remove the tolua specific directive tolua_outside, so we need to clean that out also<br /> #We'll also replace the inclusion of "tolua++.h" with our own version which has better support for building on win32.<br /> echo "Updating lua bindings."<br /><br /> #If the TOLUAXX environment variable isn't set default to using the command "tolua++".<br /> if [ x${TOLUAXX} = x ]; then<br /> TOLUAXX=tolua++<br /> fi<br /> ${TOLUAXX} -n $1 $2 > $3<br /> grep -q '** tolua internal error' $3 && cat $3 && exit 1<br /> sed -i -e 's/const,/const /g' -e 's/tolua_outside//g' -e 's/tolua++\.h/components\/lua\/tolua++\.h/' $3<br /></pre><br />This script basically runs the tolua++ command, as defined in the TOLUAXX environment variable (with "tolua++" as fallback) and then applies some replacement to fix some issues we've been having with the generated code.</div><div>The TOLUAXX environment variable is set at configuration time. The default is "tolua++", but we'll provide the option to use an alternative command. Our <a href="http://git.worldforge.org/?p=ember.git;a=blob;f=acinclude.m4;hb=HEAD">acinclude.m4</a> file has this snippet (which is called from <a href="http://git.worldforge.org/?p=ember.git;a=blob;f=configure.ac;hb=HEAD">configure.ac</a>):</div><pre><br />AC_DEFUN([AM_CHECK_TOLUAXX],<br />[<br /> AC_ARG_WITH(tolua++,AS_HELP_STRING([--with-tolua++=CMD],[Tolua++ command (default=tolua++)]),<br /> toluaxx_command="$withval", toluaxx_command="tolua++")<br /><br /> AC_CHECK_TOOL(TOLUAXX, $toluaxx_command)<br /><br /> if test "x$TOLUAXX" = "x"; then<br /> AC_MSG_ERROR([Could not find a working tolua++ command (tried '$toluaxx_command'). Use the --with-tolua++ switch to set the proper command to use.])<br /> fi<br />])<br /></pre><br />This setup will allow the script bindings to be generated at compile time, but only the first time compilation occurs, or if any of the .pkg files have changed. More examples of how this is used can be found in the <a href="http://git.worldforge.org/?p=ember.git;a=summary">Ember sources</a>.Erik Hjortsberghttp://www.blogger.com/profile/14688983256284244677noreply@blogger.com0tag:blogger.com,1999:blog-8896699.post-27017651628759079862010-06-15T14:05:00.003+02:002010-06-19T13:52:20.233+02:00Using automake to generate ChangeLog from gitWhen deploying a GPL application it's required that you provide a change log containing information on all the changes to the code base. This file is normally named ChangeLog.<br />In the olden days, before today's fancy revision control systems, people often had to edit the ChangeLog files themselves for each and every change to the code. This is what we did in the Worldforge project when we used CVS for our source code needs.<br /><br />However, for the modern developer used to distributed revision control systems such as Git this seems archaic. Why provide a separate list of all changes when the Git repository already contains a complete log? Instead of keeping the ChangeLog file updated with each commit, wouldn't it make more sense to generate it from the repository history when a new release is made?<br /><br />When a new release needs to be created in a project using the autotools the "make dist" make target is invoked (or in reality the "make distcheck" target). This will package the source and produce tar archive of it all. The Makefile target "dist-hook" is provided to allow for us to hook into this process. So what we want to do is to provide some shell scripting which generates a ChangeLog file from the git history. It will look something like this:<br /><blockquote>cd ${top_srcdir} && git log --stat --name-only --date=short --abbrev-commit > ${distdir}/ChangeLog</blockquote>This will generate a log of all the changes, in a condensed format not unlike the ones <a href="http://www.gnu.org/prep/standards/html_node/Change-Logs.html">suggested</a> by GNU.<br /><br />We could be done here, but there are some things that could need improvement. For one thing, this will only work when the "make dist" target is invoked in the original git directory. Some distributions might want to take the dist release, add some distro specific patches, and then make a new dist from that. It would therefore be better to add some logic which can recognize whether there already exists a generated ChangeLog, and if so won't try to generate a new one from the git log. This will need some more logic so we'll be splitting this functionality out to a separate script and call that from the dist-hook target. We'll also add a ChangeLog with exactly one line:<blockquote>This file is autogenerated from the Git history when a the "dist" make target is invoked. If you find this file in an official release something has gone wrong and you should contact [maintainer_email]. It needs to be exactly one line long in order for the ChangeLog generating script to work.</blockquote>Our script will check the length of the ChangeLog file. If it's exactly one line, we know we should generate it from the git log, else we know it's already been generated and we shouldn't do anything. Our script (generate-ChangeLog.sh) will look something like this:<blockquote>#! /bin/sh<div>top_srcdir=$1</div><div>distdir=$2</div><div>if [ `cat ${distdir}/ChangeLog | wc -l` = "0" ]; then</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>chmod u+w ${distdir}/ChangeLog &&<span class="Apple-style-span" style="white-space: pre;"> </span>cd ${top_srcdir} && git log --stat --name-only --date=short --abbrev-commit > ${distdir}/ChangeLog</div><div>fi</div></blockquote>The dist-hook will now look like this:<br /><blockquote>dist-hook:<br /><span class="Apple-tab-span" style="white-space:pre"> </span>sh $(top_srcdir)/generate-ChangeLog.sh $(top_srcdir) $(distdir)<br /></blockquote>Now we're pretty set. With Worldforge there's however still an issue with the older CVS ChangeLog. When the source was migrated from CVS to Git the log messages from CVS were directly imported into Git. These however were in a quite verbose format with the date and authors included. Since this data also is available as meta data in the Git repo, the result will be that these log entries will have a lot of redundant data, making the ChangeLog both very large and confusing. To prevent this, we'll store a copy of the old ChangeLog with the CVS entries with the source (as ChangeLog-CVS) and combine this with the Git log history. After looking at the Git history we can see that at the commit with id "f12012e7616c191a8926432faf866c8e43854062" marks where the transition from CVS to Git happened. We'll also replace the ChangeLog-CVS with a notice about it's previous use (as it's not needed anymore, but must be present in the dist) Our script will then look like this:<div><blockquote>#! /bin/sh<div>top_srcdir=$1</div><div>distdir=$2</div><div>if [ `cat ${distdir}/ChangeLog | wc -l` = "0" ]; then</div><div><span class="Apple-tab-span" style="white-space: pre; "> </span>chmod u+w ${distdir}/ChangeLog && cd ${top_srcdir} && git log f12012e7616c191a8926432faf866c8e43854062..HEAD --stat --name-only --date=short --abbrev-commit > ${distdir}/ChangeLog && cat ${top_srcdir}/ChangeLog-CVS >> ${distdir}/ChangeLog</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>chmod u+w ${distdir}/ChangeLog-CVS && echo "This file was needed for generating the proper ChangeLog as an aggregate of the code held in git and older code in CVS. It's now empty, but needs to be included in the source distribution to not upset automake." > ${distdir}/ChangeLog-CVS</div><div><br /></div><div>fi</div></blockquote></div>And now we're done. We have an automated system which will generate the ChangeLog from a combination of both the old CVS provided ChangeLog and the Git log history. It will also make sure that if the "make dist" target is run again on an already generated dist the ChangeLog will be left as it is. Just remember to also include all relevant files in the EXTRA_DIST target of the Makefile.am.<div>Up to date versions of how this is used in Ember can be found in the <a href="http://git.worldforge.org/?p=ember.git;a=tree">Ember repository</a>.</div>Erik Hjortsberghttp://www.blogger.com/profile/14688983256284244677noreply@blogger.com0tag:blogger.com,1999:blog-8896699.post-7602650743557347832010-05-20T11:00:00.000+02:002010-05-20T11:06:46.451+02:00Freedom of SpeechToday I'll be posting about something other than FOSS game development, something far more important (yes, such a thing exists!). Today's topic is Freedom of Speech and how we never must take that for granted.<br /><br />I live in Sweden where the last couple of years there has been a couple of incidents where islamic fascists have tried through violence and threats of violence to impose their world view on other people. Central to that world view is an active aggression against the principle of Freedom of Speech which underpins our whole democratic and parliamentary system. The most prominent examples are the threats and active murder attempts on the <a href="http://bibelen.blogspot.com/">Danish cartoonists</a> who drew pictures of Muhammed, or the threats made against South Park. In Sweden the artist <a href="http://www.vilks.net/">Lars Vilks</a> has been both physically assaulted and subjected to arson as a result of his <a href="http://www.google.se/images?q=lars+vilks+rondellhund">drawing</a> of Muhammed in 2007.<br /><br />It's easy to take the Freedom of Speech for granted and to think that those people that want to bring it down only operate in chaotic countries such as Pakistan or Somalia. That is unfortunately not the case, as shown in this video of Lars Vilks presenting a lecture on the topic of "Art and Freedom of Speech". Vilks suffered some bruises and a broken pair of glasses. The day after someone tried to kill him by setting his home on fire.<br /><object height="385" width="640"><param name="movie" value="http://www.youtube.com/v/s2IHnWY-i6Y&hl=sv_SE&fs=1&"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><embed src="http://www.youtube.com/v/s2IHnWY-i6Y&hl=sv_SE&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="385" width="640"></embed></object><br /><br />Do not be tempted to draw the conclusion from this video that Sweden, or any other European country is under any threat of "being overrun by Islam" or similar. That is absolutely not the case; it is in fact the opposite. When faced with a stable society and a high standard of living most people tend to distance themselves from religion and totalitarian ideologies, even if it might take a generation or two.<br />But it does show that Freedom of Speech is something we <a href="http://reason.com/archives/2010/05/14/the-poet-versus-the-prophet">never</a> can take for granted, and not something we can barter with. It is the firmament on which our whole society is built on, and we cannot let fascist or totalitarian ideologies or groups make us infringe on it one iota. As long as people feel threatened by violence for expressing their opinions there is no real Freedom of Speech. For every Lars Vilks who has the guts to criticize Islam and as a consequence gets assaulted and beaten, there are thousands of other people who hold their tongue. Some of them in Western countries such as Sweden, but most of them in countries where Freedom of Speech already is curtailed, such as Iran or Pakistan.<br /><br />Therefore I'm today celebrating the annual <a href="http://www.comicsalliance.com/2010/04/27/everybody-draw-mohammed-day/">Draw Muhammed Day</a> by presenting my own drawing of Muhammed, the founder of Islam. By providing my own drawing of Muhammed I'm showing my support and solidarity with the artists currently under death threats. Note that the drawing is pretty tame (and badly drawn); I know this blog is syndicated so I'm putting a little restraint on myself. To more properly show my complete and total outrage of having islamic fascists trying to impose their warped totalitarian world view on me it would be more proper to show Muhammed being raped by a pack of dogs. But I'll wait with that picture for another day (not that the Internet is lacking in such depictions).<br /><br /><div style="text-align: center;"><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFsLE5xZU0I97r_dDmi6CEgdQowb3Z2tvTdjbd6Doeo7wktQf_TBWTxSdbX1rQPyvugNvsRCiakJOglVUuzZ6AaY3aRpJIHbvbKxp-InQovTViwrIiU4jezXfijkswQK0qV5mOJQ/s1600/Muhammed.png"><img style="float: none; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 369px; height: 389px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFsLE5xZU0I97r_dDmi6CEgdQowb3Z2tvTdjbd6Doeo7wktQf_TBWTxSdbX1rQPyvugNvsRCiakJOglVUuzZ6AaY3aRpJIHbvbKxp-InQovTViwrIiU4jezXfijkswQK0qV5mOJQ/s400/Muhammed.png" alt="" id="BLOGGER_PHOTO_ID_5473274106180538018" border="0" /></a><br />Muhammed, shown here during one of his schizophrenic episodes trying to come up with another verse for the Qur'an.<br /></div>Erik Hjortsberghttp://www.blogger.com/profile/14688983256284244677noreply@blogger.com0tag:blogger.com,1999:blog-8896699.post-75993312582831381512010-05-14T11:26:00.002+02:002010-05-14T14:19:09.042+02:00Ember 0.5.8 releasedI've just released Ember 0.5.8. The official release announcement can be found on the <a href="http://worldforgedev.org/archives/228">main Worldforge site</a>.<br /><br />The main new feature is the multi threading framework which I've written about before on this blog. It's a pretty Big Thing, as it we're so utterly dependent on having dynamic data.<br />Another thing which went into this release, but which won't be apparent for any user, is a large restructuring of the media repository. It's mainly <a href="http://hourglass3d.com/">Jayr's</a> work, but I've also helped out. Basically it amounts to defining common naming and structuring standards for the media repository so that it becomes easier to both contribute and use the assets therein. I've updated some of the <a href="http://wiki.worldforge.org/wiki/Media_Guidelines">media guidelines </a>to reflect this.<br />And for the first time in a couple of years we now provide win32 binaries. Getting Ember to build on win32 (through msys) was a real chore, but the plan is to keep the code base compatible enough so that each subsequent release of Ember will have win32 binaries.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://picasaweb.google.com/erik.hjortsberg/SomeOfUsCannotBeWrong#5470814588384985762"><img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 128px; height: 96px;" src="http://lh4.ggpht.com/_MJCqZcs5wkM/S-w84ey2QqI/AAAAAAAAAhs/keuXhUOllKM/s128/screenshot_20100513_193319.jpg" alt="" border="0" /></a><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://picasaweb.google.com/erik.hjortsberg/SomeOfUsCannotBeWrong#5470814031543777298"><img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 128px; height: 96px;" src="http://lh4.ggpht.com/_MJCqZcs5wkM/S-w8YEZjuBI/AAAAAAAAAhk/01pVAX5S-Ss/s128/screenshot_20100513_193108.jpg" alt="" border="0" /></a><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://picasaweb.google.com/erik.hjortsberg/SomeOfUsCannotBeWrong#5470814028524280162"><img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 128px; height: 96px;" src="http://lh5.ggpht.com/_MJCqZcs5wkM/S-w8X5Jp2WI/AAAAAAAAAhY/rLqAp1LVysk/s128/screenshot_20100513_192900.jpg" alt="" border="0" /></a><br /><br />There's been some other developments in the FOSS game world too.<br /><a href="http://dev.ryzom.com/">Ryzom</a> recently released all of their source code under the GPL and all of their media under the CC-BY-SA license. This is a huge boost for FOSS gaming, as there's now a boatload of new media assets available. A quick comparison of the Ryzom media contra the <a href="http://wombat.worldforge.org">Worldforge media</a>:<br />* Ryzom has a much more assets.<br />* Ryzom textures are smaller (between 256 and 512 pixels whereas most of Worldforge's are 1024 - 2048 pixels).<br />* Ryzom textures are only available as png whereas Worldforge provides source assets for all textures (usually .psd).<br />* Ryzom only provides diffuse textures whereas Worldforge usually provides specular and normal/heightmap versions too.<br />* Ryzom assets are made in a particular art style, whereas Worldforge has opted for a natural style. This is however just for the Mason world. I would love to see a world using Ember and Cyphesis with the Ryzom assets.<br /><br />Some have noted that the source meshes in Ryzom only are available in .max format. That's no big deal though as they can be converted to .blend (a process which is always underway). As long as the source is available it's always possible to convert it; it's harder when the only available asset is an exported format. (Worldforge provides .blend files for most of the meshes, though we have some .max versions too.)<br /><br />Another big thing is the <a href="http://www.wolfire.com/humble">Indie Humble Bundle</a>, which is a collection of six excellent indie games, available for a user set price. It's truly an excellent deal, especially since part of the money paid is donated to charities. And not only that, since they so far received more than 1 million USD they've now opened up the source code for four of the games as FOSS. It's really a remarkable thing.Erik Hjortsberghttp://www.blogger.com/profile/14688983256284244677noreply@blogger.com0tag:blogger.com,1999:blog-8896699.post-3656265702613293972010-04-01T10:14:00.002+02:002010-04-01T10:17:38.915+02:00New animals from JayrThis is a short post about some of the new media recently added by our extremely talented artist Jayr to the Worldforge media repository.<br />Jayr keeps his own blog (unfortunately missing rss) over at <a href="http://www.hourglass3d.com/index.php?id=15">Hourglass3d</a> where he posted about some of the new animals he added to Worldforge.<br />Head over there and <a href="http://www.hourglass3d.com/index.php?id=47">take a look</a>.<br /><img src="http://www.hourglass3d.com/assets/images/3dBlog/4_2010/wf_animals.jpg" />Erik Hjortsberghttp://www.blogger.com/profile/14688983256284244677noreply@blogger.com2tag:blogger.com,1999:blog-8896699.post-12719941030428509382010-03-30T11:24:00.003+02:002010-03-30T12:09:38.695+02:00GSoC student applications are now openGoogle has now opened the <a href="http://socghop.appspot.com/gsoc/student/apply/google/gsoc2010">student applications</a> for Google Summer of Code 2010.<br />This year, in order to help you figure out if you have the skills needed to work on Ember, and in order to help us to filter out non-serious applications, we ask students who are applying for ember to find and fix two errors in this special <a href="http://git.worldforge.org/?p=ember_gsoc_2010.git;a=summary">code drop</a>. Also see <a href="http://wiki.worldforge.org/wiki/Summer_of_Code#Ember_Prerequisites">the Ember prerequisites</a> on this.<br />We encourage students to apply as soon as possible, so that there's time for us to give feedback and work out the details. The sooner the better.<br />If you have any questions please use the <a href="http://mail.worldforge.org/lists/listinfo/general">general mailing list</a>.Erik Hjortsberghttp://www.blogger.com/profile/14688983256284244677noreply@blogger.com0tag:blogger.com,1999:blog-8896699.post-67471275619729469632010-03-22T15:02:00.002+01:002010-03-22T15:38:28.925+01:00Worldforge in Google Summer of Code 2010Worldforge has for the third year in a row been accepted into the Google Summer of Code 2010 <a href="http://socghop.appspot.com/">program</a>. This means that students now have an opportunity where they can spend the summer writing code for free and open virtual worlds rather than flipping burgers and mowing lawns.<br />Student's applications will open on March 29, but if you are interested in applying the sooner you contact us the better.<br />We prefer that students use the <a href="http://mail.worldforge.org/lists/listinfo/general">general mailing list</a> for discussing project ideas, or send mail to the mentors directly.<br />More information about the program, and a list of project suggestions can be found at the Worldforge <a href="http://wiki.worldforge.org/wiki/Summer_of_Code">GSoC page</a>. Note that the suggestions are just that; suggestions. Any interested student is encouraged to also build on the suggestions, or propose their own project.Erik Hjortsberghttp://www.blogger.com/profile/14688983256284244677noreply@blogger.com0tag:blogger.com,1999:blog-8896699.post-12543989642820622912010-03-10T12:30:00.002+01:002010-03-10T12:57:18.568+01:00New world<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://picasaweb.google.com/erik.hjortsberg/SomeOfUsCannotBeWrong#5445550555843986706"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 128px; height: 96px;" src="http://lh6.ggpht.com/_MJCqZcs5wkM/S5J7YPeDBRI/AAAAAAAAAfc/ysyF1Iay0dc/s128/screenshot_20100304_225956.jpg" alt="" border="0" /></a>For quite some time we've had our default world Mason. While Worldforge is a project aimed to provide basic tech for any kind of virtual world, we still need to have a showcase world in which we can try out different things. The default world has had some issues however.<br /><ul><li>It's not using much of the new media provided by Jayr, and the media used is often outdated.</li><li>It's confusing for newcomers. There's not clear direction of what new players should do in the world.</li><li>The steep mountains surrounding the area are hard to manage in a client, as the steep cliffs makes level-of-detail optimized rendering hard.</li><li>It's a quite small world.</li></ul><br />All of this is changing as I've been working on a new default world. There are a couple of improvements to both the server and client which allows for this.<br /><ul><li>Persistence on the server. As cyphesis is a work in progress, it's possible that bugs are uncovered when developing the world which will cause a crash. Having the whole world disappear when the server crashes is quite unproductive. With constant database persistence there's no risk of that.</li><li>The ability to take a snapshot of the world on the server. This snapshot is saved as an xml file, which can then be added to a versioning system. This way it's possible to try things out, and revert to older versions if needed.</li><li>Freezing the world on the server. When designing the world it's important that it doesn't change. That means that trees shouldn't grow, animals shouldn't move, living things shouldn't starve. Through a new feature which allows the server to be frozen any world author can first design the world, and once that's done unfreeze it.</li><li>Advanced entity editing on the client. It's important that it's easy to edit all aspects on the fly on the client. The advanced entity widgets available in Ember allows for this. Aspects such as terrain areas or terrain modifications are easily editable through a point and click interface.</li><li>Easy entity creation. Just as important as editing entities is making sure it's simple and quick to create new ones. The Entity Recipe system in Ember allows for entities to be created with point and click, with a powerful scripting environment in the backend.</li></ul>The new world is therefore created in a series of steps. The first step involves working with a frozen world, where all entities are placed, and all terrain is sculptured. Once the world is complete it needs its npcs and creatures to be given behaviour and goals. This should be done using the existing python scripting in cyphesis. Once that's done the world should be available as both an xml file defining all entities and an accompanying python script file which defined behaviour.<br /><br />When creating the new world there are a couple of goals I've had in mind.<br /><ul><li>Use as much of the new media as possible, while clearing out any out of date media (i.e. media which simply doesn't look so good any more).</li><li>Provide a large enough world that it will take some time to traverse it.</li><li>Make the terrain friendly to any clients. That means avoiding too steep cliffs as that brings havok to any LOD mechanism.</li><li>Provide a clear path for any new player. There should never be any confusion of what the player is supposed to do once he or she has entered into the world.</li><li>Provide new game play. Apart from our current pig herding and fishing game play we have many ideas of additional tasks. These tasks also require a larger terrain, and new media.</li></ul>So far things have gone very smoothly. Working with a much larger world is also good for Ember since it really pushes the engine in terms of memory usage and performance. Our current world is simply too small to really take advantage of the many dynamic paging features in Ember.<br /><br />Below are a couple of screenshots of the work in progress. Some of them show the new starting area, which is on a peninsula with a clear path to the main area. Together with a couple of helpful signs and a greeting npc it should be much more clearer for any newcomer where they should go.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://picasaweb.google.com/erik.hjortsberg/SomeOfUsCannotBeWrong#5445550628064340386"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 128px; height: 96px;" src="http://lh6.ggpht.com/_MJCqZcs5wkM/S5J7ccguKaI/AAAAAAAAAgA/53AQ6aDI1Gg/s128/screenshot_20100303_145202.jpg" alt="" border="0" /></a><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://picasaweb.google.com/erik.hjortsberg/SomeOfUsCannotBeWrong#5445550610786604322"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 128px; height: 96px;" src="http://lh4.ggpht.com/_MJCqZcs5wkM/S5J7bcJY1SI/AAAAAAAAAf4/YFbknXYQhqU/s128/screenshot_20100304_230337.jpg" alt="" border="0" /></a><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://picasaweb.google.com/erik.hjortsberg/SomeOfUsCannotBeWrong#5445550577755459762"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 128px; height: 96px;" src="http://lh6.ggpht.com/_MJCqZcs5wkM/S5J7ZhGJkLI/AAAAAAAAAfo/HK15W5Hwm2Y/s128/screenshot_20100304_230125.jpg" alt="" border="0" /></a><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://picasaweb.google.com/erik.hjortsberg/SomeOfUsCannotBeWrong#5445550569828303474"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 128px; height: 96px;" src="http://lh5.ggpht.com/_MJCqZcs5wkM/S5J7ZDkKwnI/AAAAAAAAAfk/Eobn373ZEeE/s128/screenshot_20100304_230054.jpg" alt="" border="0" /></a><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://picasaweb.google.com/erik.hjortsberg/SomeOfUsCannotBeWrong#5445550562475237650"><img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 128px; height: 96px;" src="http://lh4.ggpht.com/_MJCqZcs5wkM/S5J7YoLD4RI/AAAAAAAAAfg/yc4bE7ONhQY/s128/screenshot_20100304_230014.jpg" alt="" border="0" /></a>Erik Hjortsberghttp://www.blogger.com/profile/14688983256284244677noreply@blogger.com0