<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-23404633</id><updated>2011-07-31T13:11:30.617+03:00</updated><title type='text'>Opioid Game Dev</title><subtitle type='html'>Random musings from hobbyist game developers.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>48</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-23404633.post-2335457794892845067</id><published>2008-07-14T12:24:00.002+03:00</published><updated>2008-07-14T12:26:50.863+03:00</updated><title type='text'>Opioid2D Pages Down</title><content type='html'>The Opioid2D web page is currently unreachable for some reason. I'm waiting to hear back from my server provider, but meanwhile, the pages are temporarily mirrored &lt;a href="http://aurinko.mui.fi/~shang/opioid2d/"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-2335457794892845067?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/2335457794892845067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=2335457794892845067' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/2335457794892845067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/2335457794892845067'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2008/07/opioid2d-pages-down.html' title='Opioid2D Pages Down'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-1937614491578562738</id><published>2008-06-08T15:33:00.002+03:00</published><updated>2008-06-08T15:40:41.045+03:00</updated><title type='text'>June Status Update</title><content type='html'>Apologies for the long hiatus. I've just recently finished a really hectic project at work, and I'm now slowly getting back to Opioid2D. The first order of business is to finish the Box2D integration which I already got decently far. While I was "away", Box2D released the official 2.0.0 and 2.0.1 versions, so it was actually pretty convenient to delay the integration this far. There's also lots of very promising stuff coming, based on Box2D's HEAD revision (like automatic polygon decomposition), which will be very useful in O2D.&lt;br /&gt;&lt;br /&gt;My summer vacation begins in the middle of July, and that's when I'll try to complete some bigger new features. On August, I'm moving about 150km closer to my job, so that'll cut down my commuting times significantly (translating into more free time to use on personal projects).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-1937614491578562738?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/1937614491578562738/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=1937614491578562738' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/1937614491578562738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/1937614491578562738'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2008/06/june-status-update.html' title='June Status Update'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-5959805418505892774</id><published>2008-04-17T19:44:00.003+03:00</published><updated>2008-04-17T20:10:48.584+03:00</updated><title type='text'>Future Musings</title><content type='html'>I've apparently lived in a cave for the last few months (or in actuality, at the work place) and was almost completely oblivious to the existence of &lt;a href="http://www.pyglet.org/"&gt;pyglet&lt;/a&gt;, before it was pointed out to me in IRC today. Sure, I had heard about pyglet before and had a vague idea about what it was, but I had no idea it was already this advanced and sophisticated. Alex Holkner and the other pyglet contributors have really done a terrific job.&lt;br /&gt;&lt;br /&gt;Opioid2D development has been really slow lately. It's mostly because of my work projects, but also partly because it has started to become difficult to add new functionality to the Opioid2D core. As I've developed the framework, it has unintentionally been emphasizing very specific kind of sprite based games (which were what I was mainly using pygext for when I started porting it to C++) to the point where the code base has become rather monolithic against certain kind of fundamental changes. I ran into this when implementing the box2d integration and while I would've gotten around the problems for that particular feature, there are same kind of problems when implementing support for isometric games or even plain 2D tile maps.&lt;br /&gt;&lt;br /&gt;The main issue is that there is too much stuff that's coded in C++, that could just as well be pure Python and the C++ components have too much hard-coded dependencies to each other. It pains me to admit this, but pygext (my previous framework) was actually a lot more flexible and malleable, all while providing a nearly identical main API. On the other hand, the performance is way better, still over 10x for a large number of sprites, even with the latest improvements to psyco and the CPython interpreter.&lt;br /&gt;&lt;br /&gt;At this point, I see it as a very attractive option to abandon most of the C++ core of Opioid2D, and migrate the API to use pyglet. Pyglet does lot of the low level stuff like windowing, timers, events etc. a lot better and cleaner than the Opioid2D code. I would also break up the Opioid2D framework into smaller, reusable components that could be cherry-picked into pyglet projects, instead of conforming your whole program to the "Opioid2D way" of doing things. The sprite engine would be cleaned up and written as a C extension (with box2d doing collision detection and physics) that would be an independent component that could be used by any pyglet project. Lastly, there would be a backwards compatibility layer called "Opioid2D" that would use these new, small components and transparently provide the same API as the current incarnation.&lt;br /&gt;&lt;br /&gt;I haven't decided anything yet, but the above idea is one thoughtworthy possibility for the future of Opioid2D.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-5959805418505892774?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/5959805418505892774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=5959805418505892774' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/5959805418505892774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/5959805418505892774'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2008/04/future-musings.html' title='Future Musings'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-3896131038101444534</id><published>2008-04-05T13:24:00.002+03:00</published><updated>2008-04-05T13:27:15.923+03:00</updated><title type='text'>Bitograph 0.8 Release</title><content type='html'>I finished all the essential functionality, so I'm releasing the Bitograph library for others to try out. You can download the library from &lt;a href="http://opioid-interactive.com/~shang/projects/bitograph/download/"&gt;here&lt;/a&gt; and read the user guide online &lt;a href="http://opioid-interactive.com/~shang/projects/bitograph/manual/"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-3896131038101444534?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/3896131038101444534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=3896131038101444534' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/3896131038101444534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/3896131038101444534'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2008/04/bitograph-08-release.html' title='Bitograph 0.8 Release'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-3184349757224830129</id><published>2008-03-31T02:20:00.002+03:00</published><updated>2008-03-31T02:34:30.885+03:00</updated><title type='text'>Bitograph</title><content type='html'>I had to put the box2d integration on hold for a while, because of more urgent projects. However, this weekend I had a sudden inspiration to improve and expand the bitmap font support a bit. The current bitmap-font feature in Opioid2D (and pygext) is pretty primitive and doesn't let you fine tune things like kerning or have smart support for accented characters. The new one is the Ultimate Bitmap Font Engine(tm), with every possible fine tuning parameter you can think of, in order to have professional looking typography.&lt;br /&gt;&lt;br /&gt;Creating a new bitmap font begins with a template file. This is automatically generated by Bitograph (the new library) according to the template parameters defined in the &lt;a href="http://opioid-interactive.com/~shang/misc/example2-def.txt"&gt;font project file&lt;/a&gt;. The generated template with the linked project file looks like this:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://opioid-interactive.com/~shang/misc/example2-template.png"&gt;&lt;img src="http://opioid-interactive.com/~shang/misc/example2-template_thumb.png"/&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You can then load up the template file to your favorite graphics software and decorate the font as you see fit. The library also contains some stock effects (like Outline and DropShadow in the above example) that can be used by us non-artist programmers.&lt;br /&gt;&lt;br /&gt;The linked project file might seem a bit daunting with the sheer amount of metadata, but choosing proper values is done very iteratively. You begin with nothing but the basic values (like line_height etc.) and then just add small adjustments according to how the font looks. This is made easier by the included Font Viewer:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://opioid-interactive.com/~shang/misc/bitograph.png"&gt;&lt;img src="http://opioid-interactive.com/~shang/misc/bitograph_thumb.png"/&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You can tweak the kerning etc. values in the property file, and instantly see the changes in the Font Viewer (no restart needed).&lt;br /&gt;&lt;br /&gt;The rendering code supports automatic text wrapping and will eventually support various text alignment and justification options. You can also compile long strings into bytecode-objects for the rendering engine, which makes line-wrapping and rendering a lot faster.&lt;br /&gt;&lt;br /&gt;Expect to see the first release version of Bitograph soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-3184349757224830129?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/3184349757224830129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=3184349757224830129' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/3184349757224830129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/3184349757224830129'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2008/03/bitograph.html' title='Bitograph'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-3254206086726310540</id><published>2008-02-20T22:16:00.002+02:00</published><updated>2008-02-20T22:27:24.325+02:00</updated><title type='text'>This is Why I Like Bazaar</title><content type='html'>&lt;a href="http://opioid-interactive.com/opioid2d/img/opi2dbazaar.png"&gt;&lt;img src="http://opioid-interactive.com/opioid2d/img/opi2dbazaar_thumb.png" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Bazaar has been a great productivity booster for me lately. It enables me to work on several concurrent major refactoring tasks, and painlessly merge between them. You can imagine what it would be like to do several merges daily with SVN or (*shudder*) CVS.&lt;br /&gt;&lt;br /&gt;The biggest new thing I'm currently working on is the &lt;a href="http://www.box2d.org"&gt;Box2D&lt;/a&gt; integration. I'd estimate I'm about 40% done now, and the biggest obstacle has been (once again) having enough time to code, but I hope to have the main functionality + a simple demo working next weekend or next week.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-3254206086726310540?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/3254206086726310540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=3254206086726310540' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/3254206086726310540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/3254206086726310540'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2008/02/this-is-why-i-like-bazaar.html' title='This is Why I Like Bazaar'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-8383447612396985035</id><published>2008-02-16T13:37:00.002+02:00</published><updated>2008-02-16T14:00:23.056+02:00</updated><title type='text'>The Bazaar Is Open</title><content type='html'>I tested &lt;a href="http://bazaar-vcs.org/"&gt;Bazaar&lt;/a&gt; for real development for a while, and it is really great. So, from now on all Opioid2D development will use Bazaar and the old Subversion repository is no longer maintained. The are two main branches in the public Bazaar repository&lt;br /&gt;&lt;br /&gt;&lt;code&gt;http://opioid-interactive.com/opioid2d/bzr/trunk&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;and&lt;br /&gt;&lt;br /&gt;&lt;code&gt;http://opioid-interactive.com/opioid2d/bzr/experimental&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The trunk will mainly get bug fixes for now, and all new features are developed and published in the  experimental branch. Once the features mature and undergo enough testing, they are merged into the trunk and a new alpha is released. I'm not going to rush the new releases until the new features are properly finished and the API stabilized, so I encourage you to get the experimental branch every once in a while if you need the latest and greatest features. Now that Opioid2D fully supports mingw, it should be pretty easy for anyone to compile their own extension. However, I can provide binary snapshots of the experimental branch if needed, so let me know if that is the case.&lt;br /&gt;&lt;br /&gt;In order to download the trunk, for example, all you need to do is&lt;br /&gt;&lt;br /&gt;&lt;code&gt;bzr get http://opioid-interactive.com/opioid2d/bzr/trunk opioid2d&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;However, if you are going to use several different branches, I recommend you do the following:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;bzr init-repo opioid2d&lt;br /&gt;cd opioid2d&lt;br /&gt;bzr get http://opioid-interactive.com/opioid2d/bzr/trunk&lt;br /&gt;bzr get http://opioid-interactive.com/opioid2d/bzr/experimental&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Creating your own local repository lets Bazaar share metadata between the different branches, so it's a bit more efficient.&lt;br /&gt;&lt;br /&gt;Now if you want to make your own changes or fixes to the Opioid2D source, you should create your own branch. E.g.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;cd opioid2d&lt;br /&gt;bzr branch trunk my-bug-fix&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;The &lt;code&gt;my-bug-fix&lt;/code&gt; is the name of the branch, which should be as informative as possible. I usually name bug fix branches beginning with fix-, so e.g. &lt;code&gt;fix-sprite-edge-bug&lt;/code&gt;. At this point, you have your own complete copy of the source tree in the &lt;code&gt;my-bug-fix&lt;/code&gt; folder, and you can freely make any changes you need. After you are done (and periodically while you are working), you run &lt;code&gt;bzr commit&lt;/code&gt; to record your change history into your local branch. Finally, you run&lt;br /&gt;&lt;br /&gt;&lt;code&gt;bzr send -o my-bug-fix.patch&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Which creates a patch file you can send to me to be included in the main trunk. Alternatively, you can publish your branch e.g. via HTTP and just send me the URL.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-8383447612396985035?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/8383447612396985035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=8383447612396985035' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/8383447612396985035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/8383447612396985035'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2008/02/bazaar-is-open.html' title='The Bazaar Is Open'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-5382392156374721252</id><published>2008-02-06T12:36:00.000+02:00</published><updated>2008-02-06T12:39:53.050+02:00</updated><title type='text'>Opioid2D Version Control</title><content type='html'>I've been reading a lot about distributed version control systems lately, and have come to the conclusion that the development of Opioid2D would benefit from lot of the features available in them. I code on several PCs and e.g. my laptop is often cut off from the net when I travel. Distributed version control like &lt;a href="http://bazaar-vcs.org/"&gt;Bazaar&lt;/a&gt; would make it easy to retain version history while offline and then merge the revisions to the online repository when regaining net connectivity. I'm also going to be doing some major refactoring of the C++ internals, and I think the distributed model of "branch per feature/bugfix" would make things a lot easier.&lt;br /&gt;&lt;br /&gt;The one thing that worries me is that Subversion is something that is familiar to almost all developers, so it is easy for anyone interested in O2D to grab the SVN trunk. Distributed version control systems, however, don't seem to be as widely used or even known. I looked at several different solutions, and Bazaar is currently my top choice because it seemed to have the lowest barrier to entry with decent documentation and support for Linux, Windows and MacOSX. Mercurial was a close contender, especially since TortoiseHg seems more mature than TortoiseBzr at this point, but after giving them both a try, I slightly prefer using Bazaar (and its quick-start guide was a lot more comprehensive).&lt;br /&gt;&lt;br /&gt;Another good thing about Bazaar compared to SVN is that I could publish the repository via a standard web hosting service and thus put it on the same server that contains the Opioid2D web pages. I'm currently renting a virtual server to run svnd in, and it hasn't been very reliable (nor cheap enough to justify the mediocre up-times).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-5382392156374721252?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/5382392156374721252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=5382392156374721252' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/5382392156374721252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/5382392156374721252'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2008/02/opioid2d-version-control.html' title='Opioid2D Version Control'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-6365819085048767452</id><published>2008-01-23T20:15:00.000+02:00</published><updated>2008-01-23T20:33:28.373+02:00</updated><title type='text'>January Update</title><content type='html'>&lt;p&gt;Unfortunately I don't have much to tell regarding Opioid2D, even though it's been several months again. There have been small patches and adjustments since the last release, but most of my coding time has been spent on the game project I'm doing at work. The game is nearing its release deadline and the crunch is on, so I really haven't had that much energy for personal projects.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;There are a couple of Opioi2D related things I've been thinking about, but haven't yet started implementing. The biggest is the rethinking of the node hierarchy system and sprite drawing order. The current design just isn't flexible enough in all use cases, and also isn't as efficient as it could be. Another important thing is the drawing system (lines, triangles, rects etc.) and how to tie that neatly into the action system and rest of Opioid2D. I also happened to come upon a really promising looking 2D physics library called &lt;a href="http://www.box2d.org/"&gt;Box2D&lt;/a&gt;, which would be a perfect fit for Opioi2D. I've browsed through the API, and I don't think it would be all that difficult to integrate it, giving Opioid2D true physics support.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;When thinking about how to integrate drawing primitive shapes with the action system, I've built a prototype for a more generalized action API. This is something that will be released both as a part of Opioid2D and as a standalone action library that can be used with any Python program (pygame games etc.). The API currently looks like this:&lt;/p&gt;&lt;br /&gt;&lt;pre&gt;@action&lt;br /&gt;def example():&lt;br /&gt;   size = interval(10, 15, time=0.5, mode=pingpong)&lt;br /&gt;   for x,y in interval(start=(50,0), end=(70,100), time=2):&lt;br /&gt;       draw.color = (255,0,0)&lt;br /&gt;       draw.circle(x, y, size.value)&lt;br /&gt;       yield&lt;br /&gt;   for alpha in interval(255, 0, time=0.5):&lt;br /&gt;       draw.color = (255,0,0,alpha)&lt;br /&gt;       draw.circle(70, 100, size.value)&lt;br /&gt;       yield&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;How does that look? My goal was to design the API so that it would be somewhat clear what the code does, even for someone not familiar with the API beforehand. &lt;code&gt;interval&lt;/code&gt; objects give a value based on the current time and their initial parameters, so for example &lt;code&gt;interval(0, 10, time=10)&lt;/code&gt; will increase its value by 1 per second until it reaches 10. &lt;code&gt;yield&lt;/code&gt; is used to suspend the action until the next frame update.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-6365819085048767452?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/6365819085048767452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=6365819085048767452' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/6365819085048767452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/6365819085048767452'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2008/01/january-update.html' title='January Update'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-6659967503745553372</id><published>2007-10-14T13:51:00.000+03:00</published><updated>2007-10-14T15:16:20.125+03:00</updated><title type='text'>October Update</title><content type='html'>My laptop (which was my primary development PC) had a hardware failure last month, so it has taken some time to order parts for a new machine and setting up the development environment for Opioid2D. Since setting up the free MS tools for Python extension compiling is somewhat of a hassle, I decided to try open source tools this time around.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.opioid-interactive.com/opioid2d/?page=DownloadPage"&gt;Opioid2D alpha 6 patch 3&lt;/a&gt; released today has been modified so that it compiles correctly for Python 2.5 using MinGW32. Also, since the official release of Python 2.5 is now over a year old, I've decided to use that as my main platform from now on. If you need Python 2.4 support in Opioid2D, please let me know, as all future testing and releases will otherwise be for 2.5 only.&lt;br /&gt;&lt;br /&gt;Other than that, I haven't had much time to develop new features and such, as I'm currently commuting about three hours a day to my new job. However, this is only a temporary phase and later on I will telecommute most days from home and that should free up some more time to work on my personal projects.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-6659967503745553372?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/6659967503745553372/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=6659967503745553372' title='33 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/6659967503745553372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/6659967503745553372'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2007/10/october-update.html' title='October Update'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>33</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-8595032009027749781</id><published>2007-08-26T13:38:00.000+03:00</published><updated>2007-08-26T13:44:02.017+03:00</updated><title type='text'>A short status report</title><content type='html'>Just in case you are wondering where all the Opi2D updates are, I'm currently in the middle of changing jobs, which has occupied my attention a bit. Expect more updates after I've settled down in the new place.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-8595032009027749781?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/8595032009027749781/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=8595032009027749781' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/8595032009027749781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/8595032009027749781'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2007/08/short-status-report.html' title='A short status report'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-2726597174562736513</id><published>2007-08-11T22:10:00.000+03:00</published><updated>2007-08-11T22:13:12.875+03:00</updated><title type='text'>Opioid2D alpha 6 patch 2</title><content type='html'>Since alpha 7 still needs a lot of work, I'm releasing another crash-bug-fix for alpha 6. Get it from the &lt;a href="http://opioid-interactive.com/opioid2d/?page=DownloadPage"&gt;usual place&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-2726597174562736513?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/2726597174562736513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=2726597174562736513' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/2726597174562736513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/2726597174562736513'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2007/08/opioid2d-alpha-6-patch-2.html' title='Opioid2D alpha 6 patch 2'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-7416117891145561270</id><published>2007-07-25T14:42:00.000+03:00</published><updated>2007-07-25T15:00:16.127+03:00</updated><title type='text'>About the Name</title><content type='html'>I've had a couple of inquiries about the "opioid" in the framework name, so I just wanted to make it clear that it is not meant to be a pro-drugs statement or anything like that. It's a bit of an unfortunate choice from a marketing perspective, but the link to gaming in this case is that &lt;a href="http://en.wikipedia.org/wiki/Endorphin"&gt;endorphin&lt;/a&gt; is a natural opioid (and Endorphin2D would've been a clumsy name for a framework).&lt;br /&gt;&lt;br /&gt;(EDIT: actually, the wikipedia link doesn't currently explain the connection all that well, since it doesn't mention the supposed connection between endorphins and feelings of pleasure and euphoria.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-7416117891145561270?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/7416117891145561270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=7416117891145561270' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/7416117891145561270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/7416117891145561270'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2007/07/about-name.html' title='About the Name'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-3949462958111115995</id><published>2007-07-23T03:00:00.000+03:00</published><updated>2007-07-23T03:02:25.029+03:00</updated><title type='text'>Opioid2D alpha 6 patch 1</title><content type='html'>There were a couple of bugs in the alpha 6 release (thanks to everyone who reported them!), so I've released a new patched version. You can get it from the usual &lt;a href="http://opioid-interactive.com/opioid2d/?page=DownloadPage"&gt;download page&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-3949462958111115995?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/3949462958111115995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=3949462958111115995' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/3949462958111115995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/3949462958111115995'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2007/07/opioid2d-alpha-6-patch-1.html' title='Opioid2D alpha 6 patch 1'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-6825413063939587808</id><published>2007-07-16T14:41:00.000+03:00</published><updated>2007-07-16T14:46:05.187+03:00</updated><title type='text'>Opioid2D alpha 6 release</title><content type='html'>I've released the 6th alpha of Opioid2D. It's available from the Opioid2D &lt;a href="http://opioid-interactive.com/opioid2d/?page=DownloadPage"&gt;download page&lt;/a&gt; and the list of changes can be viewed &lt;a href="http://opioid-interactive.com/opioid2d/?page=ChangeLog"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Unfortunately I didn't have enough time for the snippets library yet, so that has to wait for alpha 7.&lt;br /&gt;&lt;br /&gt;I'm rather happy with Opioid2D feature-wise so far, so the next couple of weeks will be spent on cleaning up and optimizing the internals before another feature push.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-6825413063939587808?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/6825413063939587808/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=6825413063939587808' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/6825413063939587808'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/6825413063939587808'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2007/07/opioid2d-alpha-6-release.html' title='Opioid2D alpha 6 release'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-2201870077233207824</id><published>2007-07-04T22:20:00.001+03:00</published><updated>2007-07-04T22:24:07.885+03:00</updated><title type='text'>SVN and TRAC back online</title><content type='html'>The server move is finally finished and everything seems to work fine so far, so the TRAC can once again be found at http://trac.opioid-interactive.com/opi2d and SVN checkouts are available from svn://svn.opioid-interative.com/shang/opi2d/trunk&lt;br /&gt;&lt;br /&gt;I've finished committing all code changes made during the downtime to SVN, and I'll go through the wiki and update it accordingly in the following few days. After I get everything cleaned up, O2D alpha 6 will be right around the corner.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-2201870077233207824?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/2201870077233207824/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=2201870077233207824' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/2201870077233207824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/2201870077233207824'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2007/07/svn-and-trac-back-online.html' title='SVN and TRAC back online'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-2560957449071682122</id><published>2007-07-01T19:58:00.001+03:00</published><updated>2007-07-01T20:03:47.044+03:00</updated><title type='text'>Opioid2D Code Snippets Library</title><content type='html'>Another thing I'm starting from alpha 6 onwards, is to compile a collection of useful example snippets, that show the idiomatic way to do certain things in Opioid2D. They will be smaller than actual example games, but a bit larger and better written than the short test scripts in the distribution so far: things like HealthMeter, ParallaxScrolling, ObjectPicking etc. The idea is that you can study those snippets and paste them into your own code when learning O2D. They should give a better starting point until I can finalize all documentation.&lt;br /&gt;&lt;br /&gt;So, if you have any suggestions for useful snippets you'd like to see, please list them in comments for this entry.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-2560957449071682122?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/2560957449071682122/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=2560957449071682122' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/2560957449071682122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/2560957449071682122'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2007/07/opioid2d-code-snippets-library.html' title='Opioid2D Code Snippets Library'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-8239687623340899318</id><published>2007-07-01T19:46:00.000+03:00</published><updated>2007-07-01T19:53:52.521+03:00</updated><title type='text'>Upcoming API Changes</title><content type='html'>I've started cleaning up the APIs a bit, revising stuff that doesn't feel quite right in actual use. The biggest change is in method naming conventions. For some reason, it originally felt like a good idea to capitalize class methods and methods on singleton objects differently (using CapWords), but this hasn't really felt Pythonic when using the framework, so I'm going to change everything to lowercase_words now that I still can. The old naming convention will still work in alpha 6, but it prints out a deprecation warning as a reminder.&lt;br /&gt;&lt;br /&gt;Other changes that I'm currently evaluating include moving sprite rect attributes to the sprite object itself, so that you use e.g. sprite.left instead of sprite.rect.left and so on. The particle emitter API is another part that feels somehow off, so expect at least small changes there.&lt;br /&gt;&lt;br /&gt;I'm trying to get all backward incompatible changes out of the way by alpha 7, so that APIs in alpha 8 and onwards should stay stable and compatible.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-8239687623340899318?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/8239687623340899318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=8239687623340899318' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/8239687623340899318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/8239687623340899318'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2007/07/upcoming-api-changes.html' title='Upcoming API Changes'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-4857073819873466153</id><published>2007-06-20T23:27:00.001+03:00</published><updated>2007-06-20T23:30:21.317+03:00</updated><title type='text'>Subversion Maintenance</title><content type='html'>The server that hosts all my subversion repositories and TRAC pages is currently down for maintenance. The physical server that hosts my virtual server broke down (which is probably the cause for my TRAC troubles earlier), and my server is currently being moved to another physical machine.&lt;br /&gt;&lt;br /&gt;Hopefully everything will be back up in a couple of days.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-4857073819873466153?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/4857073819873466153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=4857073819873466153' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/4857073819873466153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/4857073819873466153'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2007/06/subversion-maintenance.html' title='Subversion Maintenance'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-2532382024197377597</id><published>2007-06-20T23:03:00.000+03:00</published><updated>2007-06-20T23:18:20.979+03:00</updated><title type='text'>Opioid2D Runtime Environment</title><content type='html'>Games made in Python are somewhat cumbersome to distribute. In order to facilitate distributing new versions of games to testers and friends, I've designed an utility similar to JRE, that allows one to run O2D games on Windows platforms without having Python installed. It's still a work in progress, but I've compiled a prototype you can download to see how the whole thing might work.&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://opioid-interactive.com/opioid2d/opioidre-alpha-6.exe"&gt;O2D RE prototype&lt;/a&gt; (4,345 KB)&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;a href="http://opioid-interactive.com/opioid2d/invaders.o2d"&gt;Example game&lt;/a&gt;(62.5KB)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;After you install the Runtime Environment, you can launch the example game by simply double clicking the &lt;code&gt;invaders.o2d&lt;/code&gt; file. As you can see, the game itself is a relatively small file, which is much more convenient than always having to distribute several megabytes worth of dependencies.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-2532382024197377597?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/2532382024197377597/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=2532382024197377597' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/2532382024197377597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/2532382024197377597'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2007/06/opioid2d-runtime-environment.html' title='Opioid2D Runtime Environment'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-9205924552861310802</id><published>2007-05-17T13:05:00.000+03:00</published><updated>2007-05-17T13:08:26.739+03:00</updated><title type='text'>New Opioid2D Pages</title><content type='html'>I've recovered what I could from the TRAC database, and put temporary pages for the project at &lt;a href="http://opioid-interactive.com/opioid2d/"&gt;http://opioid-interactive.com/opioid2d/&lt;/a&gt;. There isn't much besides the basic documentation so far, but I'll work on it more as soon as I have some free time again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-9205924552861310802?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/9205924552861310802/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=9205924552861310802' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/9205924552861310802'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/9205924552861310802'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2007/05/new-opioid2d-pages.html' title='New Opioid2D Pages'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-6414921603109952951</id><published>2007-04-14T15:31:00.000+03:00</published><updated>2007-04-14T15:39:46.905+03:00</updated><title type='text'>All Project TRACs Down</title><content type='html'>I started having trouble with my TRAC installation a couple of days ago, as the TRAC server seemed to hang and eventually get killed by the operating system. I tried to remedy this by upgrading my TRAC and Subversion packages, as they were rather old, but that ended up breaking everything and now the whole TRAC just segfaults for all page requests. After several hours of frustrating trial and error, I've narrowed the problem down to libsqlite3. I've tried different versions. I've tried compiling from source and  using stable .debs from apt-get. Nothing helps.&lt;br /&gt;&lt;br /&gt;I've pretty much exhausted all my Linux knowledge at this point, so the TRAC probably won't return any time soon. I'll need to figure out a good alternative way to provide the library documentation in the future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-6414921603109952951?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/6414921603109952951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=6414921603109952951' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/6414921603109952951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/6414921603109952951'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2007/04/all-project-tracs-down.html' title='All Project TRACs Down'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-5834122131872985283</id><published>2007-03-13T23:42:00.000+02:00</published><updated>2007-03-13T23:54:14.954+02:00</updated><title type='text'>Opioid2D alpha 5 released</title><content type='html'>I've made a couple of bigger API changes and added some very useful new features lately, so I'm making a new release now even though alpha 4 just came out. The list of changes in this version can be found in the &lt;a href="http://trac.opioid-interactive.com/opi2d/wiki/ChangeLog#Alpha5"&gt;ChangeLog&lt;/a&gt;. Downloads below:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://opioid-interactive.com/%7Eshang/projects/opioid2d/Opioid2D-alpha5.win32-py2.4.exe"&gt;&lt;span class="icon"&gt;&lt;/span&gt;Windows installer for Python 2.4&lt;/a&gt; (232KB)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://opioid-interactive.com/%7Eshang/projects/opioid2d/Opioid2D-alpha5.win32-py2.5.exe"&gt;&lt;span class="icon"&gt;&lt;/span&gt;Windows installer for Python 2.5&lt;/a&gt; (232KB)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://opioid-interactive.com/%7Eshang/projects/opioid2d/Opioid2D-alpha5.tar.gz"&gt;&lt;span class="icon"&gt;&lt;/span&gt;Source Tarball&lt;/a&gt; (852KB)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The &lt;a href="http://trac.opioid-interactive.com/opi2d/wiki/DocIndex"&gt;documentation&lt;/a&gt; is still a bit spotty and partly out of date, but I'm working on it next. I've also added a new example game to the source distribution which should demonstrate pretty well how to do all the basic stuff.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-5834122131872985283?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/5834122131872985283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=5834122131872985283' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/5834122131872985283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/5834122131872985283'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2007/03/opioid2d-alpha-5-released.html' title='Opioid2D alpha 5 released'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-6004119262920657486</id><published>2007-03-07T17:50:00.000+02:00</published><updated>2007-03-07T17:54:50.268+02:00</updated><title type='text'>Opioid2D alpha 4</title><content type='html'>The alpha 3 release was plagued by a couple of nasty bugs, so I'm releasing alpha 4 even though it doesn't have any major new features. There are a few backwards incompatible API changes, some performance boosts (especially for particles) and a lot of bug fixes. You can read the full list of changes in the &lt;a href="http://trac.opioid-interactive.com/opi2d/wiki/ChangeLog#Alpha4"&gt;ChangeLog&lt;/a&gt; and download the source and binary packages from below.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://opioid-interactive.com/%7Eshang/projects/opioid2d/Opioid2D-alpha4.win32-py2.4.exe"&gt;&lt;span class="icon"&gt;&lt;/span&gt;Windows installer for Python 2.4&lt;/a&gt; (203KB)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://opioid-interactive.com/%7Eshang/projects/opioid2d/Opioid2D-alpha4.win32-py2.5.exe"&gt;&lt;span class="icon"&gt;&lt;/span&gt;Windows installer for Python 2.5&lt;/a&gt; (203KB)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://opioid-interactive.com/%7Eshang/projects/opioid2d/Opioid2D-alpha4.tar.gz"&gt;&lt;span class="icon"&gt;&lt;/span&gt;Source Tarball&lt;/a&gt; (553KB)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-6004119262920657486?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/6004119262920657486/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=6004119262920657486' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/6004119262920657486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/6004119262920657486'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2007/03/opioid2d-alpha-4.html' title='Opioid2D alpha 4'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-844921483015672506</id><published>2007-02-18T14:06:00.000+02:00</published><updated>2007-02-18T14:14:02.266+02:00</updated><title type='text'>Opioid2D alpha 3</title><content type='html'>I've just uploaded the alpha 3 release of the &lt;a href="http://trac.opioid-interactive.com/opi2d/"&gt;Opioid2D framework&lt;/a&gt;. You can see the list of changes &lt;a href="http://trac.opioid-interactive.com/opi2d/wiki/ChangeLog#Alpha3"&gt;here&lt;/a&gt;. And download the release from the below links:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://opioid-interactive.com/%7Eshang/projects/opioid2d/Opioid2D-alpha3.win32-py2.4.exe"&gt;&lt;span class="icon"&gt;&lt;/span&gt;Windows installer for Python 2.4&lt;/a&gt; (187KB)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://opioid-interactive.com/%7Eshang/projects/opioid2d/Opioid2D-alpha3.win32-py2.5.exe"&gt;&lt;span class="icon"&gt;&lt;/span&gt;Windows installer for Python 2.5&lt;/a&gt; (187KB)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://opioid-interactive.com/%7Eshang/projects/opioid2d/Opioid2D-alpha3.tar.gz"&gt;&lt;span class="icon"&gt;&lt;/span&gt;Source Tarball&lt;/a&gt; (545KB)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;p&gt;The usual disclaimer about the framework's alpha status still applies. There are some big internal changes underway. I would especially appreciate feedback from Linux and MacOSX users, as I haven't been able to test the latest release under those platforms yet.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-844921483015672506?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/844921483015672506/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=844921483015672506' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/844921483015672506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/844921483015672506'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2007/02/opioid2d-alpha-3.html' title='Opioid2D alpha 3'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-788588522446239118</id><published>2007-02-14T12:16:00.000+02:00</published><updated>2007-02-14T12:27:25.772+02:00</updated><title type='text'>Opioid2D New URL</title><content type='html'>I'm currently in the process of creating all new pages for my projects and migrating to a new server and domain. The new home of the Opioid2D project TRAC will be at &lt;a href="http://trac.opioid-interactive.com/opi2d/"&gt;http://trac.opioid-interactive.com/opi2d/&lt;/a&gt;, and the Subversion repository can be found at &lt;code&gt;svn://svn.opioid-interactive.com/shang/opi2d/trunk&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;A new release is also much overdue, so I'm trying to get the official alpha3 out within a week.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-788588522446239118?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/788588522446239118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=788588522446239118' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/788588522446239118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/788588522446239118'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2007/02/opioid2d-new-url.html' title='Opioid2D New URL'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-8599301665449536535</id><published>2007-02-02T14:49:00.000+02:00</published><updated>2007-02-02T15:20:09.839+02:00</updated><title type='text'>Alternatives to the Demo/Full Game Model</title><content type='html'>A common way to sell shareware games is to offer a demo version that is feature-limited and often time-limited as well. The most extreme cases let you play the game for 30 minutes before locking the demo and preventing further evaluation. As a consumer, these time limitations really bug me, and it often feels like I don't have enough time to make an informed decision about the longevity of the game. Now that I'm going to be selling games myself, I'll have to decide a strategy that is lenient enough that my consumer self would find it appealing, but at the same time aggressive enough to create sales. This leaves time-limitations right out. My personal distaste for them is too great to include those in my own games even if it'd guarantee more sales (and I'm not so certain that it would).&lt;br /&gt;&lt;br /&gt;What I'd really like to do is to offer a compelling and functional game for free. Something that doesn't have any obvious or crippling limitations and that can be enjoyed as a complete (albeit simple) game. So instead of a trial version and full version, I'd like to think of my games having a basic version and a premium version. I.e. the basic version would be a complete game in its own right, but by paying for the premium version, you would get an extended game experience (for example, more maps, more game modes, maybe a basic game that is single player only and a premium version that has multi-player support).&lt;br /&gt;&lt;br /&gt;I guess the risk from the business side of things would be that if the basic version is "too good", most people won't be willing to pay money for the premium, but I would like to believe that the opposite could be true. That if a gamer gets a really fun game for free, he would be more likely to spend a little cash to expand that experience.&lt;br /&gt;&lt;br /&gt;This is certainly not a new and radical idea (for example, if I remember correctly, the original Doom used a model like this). It just seems to me that lately many small independent developers opt for the heavily restricted demo versions that, at least for me, lessen the interest for that particular game instead of making me more likely to pay.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-8599301665449536535?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/8599301665449536535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=8599301665449536535' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/8599301665449536535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/8599301665449536535'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2007/02/alternatives-to-demofull-game-model.html' title='Alternatives to the Demo/Full Game Model'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-4090365944878373945</id><published>2007-01-16T11:19:00.000+02:00</published><updated>2007-01-16T11:23:52.059+02:00</updated><title type='text'>Oops</title><content type='html'>I didn't get any notification about the codereactor.net domain expiration, so all links pointing to pygext and Opioid2D stuff are currently broken. Until the situation gets resolved, you can use these temporary URLs:&lt;br /&gt;&lt;br /&gt;pygext: &lt;a href="http://212.94.75.178/projects/pygext/"&gt;&lt;code&gt;http://212.94.75.178/projects/pygext/&lt;/code&gt;&lt;/a&gt;&lt;br /&gt;Opioid2D: &lt;a href="http://212.94.75.178:8000/opi2d"&gt;&lt;code&gt;http://212.94.75.178:8000/opi2d&lt;/code&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-4090365944878373945?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/4090365944878373945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=4090365944878373945' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/4090365944878373945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/4090365944878373945'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2007/01/oops.html' title='Oops'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-116584918516404674</id><published>2006-12-11T16:37:00.000+02:00</published><updated>2006-12-11T16:59:49.583+02:00</updated><title type='text'>I'm Still Alive</title><content type='html'>A lot has been happening lately, although unfortunately not so much with the O2D framework. I've been adding small features and bug fixes as time allows, but there's still a bit of tweaking I want to do before releasing the latest alpha (and the latest source is always available directly from the SVN of course).&lt;br /&gt;&lt;br /&gt;The new big thing that has been taking my time is that I finally did something that I've been considering for a couple of years at least, and founded my own company. I'm still keeping my day job, but evenings will be dedicated to producing small shareware games. The company officially employs only me at the moment, but I'm getting help from a couple of freelancers to produce the first batch of games. I'll talk about the games a bit more after the projects are further along.&lt;br /&gt;&lt;br /&gt;So, what does this all mean for the framework? Naturally, I'm going to use O2D for my own games, so I'll keep developing it. However, the game projects take priority, so new features will be added to the framework as dictated by the games, and I won't make any guarantees about the release schedule (again, all the changes will be available on a public SVN repository even if there isn't an official release).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-116584918516404674?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/116584918516404674/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=116584918516404674' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/116584918516404674'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/116584918516404674'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2006/12/im-still-alive.html' title='I&apos;m Still Alive'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-115877535803134579</id><published>2006-09-20T20:43:00.000+03:00</published><updated>2006-09-20T21:02:38.110+03:00</updated><title type='text'>A little side project: O2DMini</title><content type='html'>I have been working with the Nokia 770 Linux tablet at my pay job, and it got me thinking about game development on the handhelds. Direct port of Opioid2D is out of the question, as mobile devices rarely have support for OpenGL, so I started (half jokingly at first) designing a light weight version of O2D that would drop features such as rotating and scaling and use software rendering.&lt;br /&gt;&lt;br /&gt;The plan is to write a pure C API and implementation (no C++ and STL bloating things up) that can be wrapped to Python using ctypes. However, since the Python interpreter is a bit too resource hungry for embedded devices, the main way to utilize O2DMini would be via a custom Python-like language that is translated to C.&lt;br /&gt;&lt;br /&gt;I.e. take this hypothetical piece of code:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;action = Delay(10) + MoveDelta((100,50)) + Delete&lt;br /&gt;sprite.do(action)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;It would be translated to something equivivalent of:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Action* action = malloc(sizeof(Action));&lt;br /&gt;Delay_Init(action, 10);&lt;br /&gt;Action* action2 = malloc(sizeof(Action));&lt;br /&gt;MoveDelta_Init(action2, 100, 50);&lt;br /&gt;action-&gt;next = action2;&lt;br /&gt;Action* action3 = malloc(sizeof(Action));&lt;br /&gt;Delete_Init(action3);&lt;br /&gt;action2-&gt;next = action3;&lt;br /&gt;DoAction(sprite, action);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The whole thing is still mostly at the brainstorming phase (with a few hundred lines of proof-of-concept C-code), but let me know if you think such a tool would be useful. In addition to embedded use, it could target low-end PCs that lack hardware accelerated OpenGL.&lt;br /&gt;&lt;br /&gt;The standard Opioid2D has the first priority at the moment, but once it matures, I can see myself dedicating a good amount of time to the mini-variant.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-115877535803134579?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/115877535803134579/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=115877535803134579' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/115877535803134579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/115877535803134579'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2006/09/little-side-project-o2dmini.html' title='A little side project: O2DMini'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-115837219355993480</id><published>2006-09-16T05:01:00.000+03:00</published><updated>2006-09-16T05:03:13.566+03:00</updated><title type='text'>Opioid2D alpha 2 released</title><content type='html'>The second alpha of Opioid2D has just been released. Downloads and detailed change log can be found from the O2D TRAC at &lt;a href="http://trac.codereactor.net/opi2d/"&gt;http://trac.codereactor.net/opi2d/&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-115837219355993480?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/115837219355993480/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=115837219355993480' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/115837219355993480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/115837219355993480'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2006/09/opioid2d-alpha-2-released.html' title='Opioid2D alpha 2 released'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-115808153393068007</id><published>2006-09-12T19:44:00.000+03:00</published><updated>2007-03-05T11:45:24.272+02:00</updated><title type='text'>Tweaking the particle engine</title><content type='html'>I've been wondering how to make good looking particle explosions for some time now. Seems that no matter what kind of image or parameters I used, the explosions always ended up looking like separate particles. Like this example image:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://svn.opioid-interactive.com/~shang/temp/normal_blend.jpg"/&gt;&lt;br /&gt;&lt;br /&gt;Today I finally figured that doing a double rendering pass on the particle layer using different glBlendFuncs, I can blend the particles together and achieve a much better result:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://svn.opioid-interactive.com/~shang/temp/additive_blend.jpg"/&gt;&lt;br /&gt;&lt;br /&gt;I'm also looking into recursive particle emitters (emit particles that emit particles that emit particles...).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-115808153393068007?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/115808153393068007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=115808153393068007' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/115808153393068007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/115808153393068007'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2006/09/tweaking-particle-engine.html' title='Tweaking the particle engine'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-115790874148342858</id><published>2006-09-10T19:49:00.000+03:00</published><updated>2006-09-10T20:20:18.730+03:00</updated><title type='text'>Opioid2D first alpha release</title><content type='html'>The development of Opioid2D has progressed to the point that I'm releasing the first public version. It's still very much an alpha, but I'm aiming for a bit more frequent release cycle from now on.&lt;br /&gt;&lt;br /&gt;More info and downloads from&lt;br /&gt;&lt;br /&gt;&lt;a href="http://trac.codereactor.net/opi2d"&gt;http://trac.codereactor.net/opi2d&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I was thinking about the license for a long time, but I finally settled on LGPL. I was going have a small licensing fee at first for commercial games once O2D reached the necessary maturity (mainly to cover development costs like domain and server rent), but I figured voluntary donations are the better way to go.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-115790874148342858?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/115790874148342858/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=115790874148342858' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/115790874148342858'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/115790874148342858'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2006/09/opioid2d-first-alpha-release.html' title='Opioid2D first alpha release'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-115191939003461735</id><published>2006-07-03T12:13:00.000+03:00</published><updated>2006-07-03T12:36:30.050+03:00</updated><title type='text'>Pre-Alpha Status Report</title><content type='html'>The pre-alpha of O2D has progressed nicely. I just started my vacation, and will try to get the public alpha out as soon as possible. It's now mostly a matter of getting basic documentation and basic examples together.&lt;br /&gt;&lt;br /&gt;Hilights from the pre-alpha:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Builds and runs on Windows, Linux and MacOSX&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The collision detection system is still under development. This is the most significant thing that's currently holding the public release back.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Action system is pretty much finished. There are still a bunch of actions waiting to be converted from pygext to O2D, but these will probably be added after the first alpha.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Camera system is implemented and there's built-in support for parallax scrolling etc. The only major feature missing is object picking.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Basic particle systems are implemented, but only "point emitter" is currently available. More emitters will be added in later alpha releases. Also, the particles emitters are currently implemented in Python, but they will be ultimately be translated to C++ (moving and rendering the particles is already C++).&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Lighting system is pretty much done. There are a couple of additional features that I have in mind, but they can wait until the beta releases.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-115191939003461735?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/115191939003461735/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=115191939003461735' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/115191939003461735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/115191939003461735'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2006/07/pre-alpha-status-report.html' title='Pre-Alpha Status Report'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-114986200676172307</id><published>2006-06-09T16:46:00.000+03:00</published><updated>2006-06-09T17:06:48.466+03:00</updated><title type='text'>Opioid2D Pre-Alpha Program</title><content type='html'>First, I must apologize that the release of the new Opioid2D framework has been postponed for so long. I haven't had much time or energy to work on my projects for the last two months, but things are getting better and my summer vacation is getting closer, so I'm trying to kick O2D development up a gear.&lt;br /&gt;&lt;br /&gt;In its current state, Opioid2D is not yet usable for real game development, and I've decided a long time ago, that I won't make a public release until you can run a fully functional example game using it. However, I've received many inquiries over the last couple of months, so I'm going to launch a semi-closed, pre-alpha program to get some feedback and let those who don't mind the unfinished state to get a first peek.&lt;br /&gt;&lt;br /&gt;So, if you are interested and understand that the framework still requires a lot of work, send me an email (shang@iki.fi) with the following info:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;What platform are you developing on&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;What platform are you developing for&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;What are you planning on using O2D for (commercial/non-commerical, games/utilities?)&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;How familiar are you with pygext&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;You need to have a working environment for building C++ extension for Python (see &lt;a href="http://www.vrplumber.com/programming/mstoolkit/"&gt;this page&lt;/a&gt; for info on how to setup a Windows environment using freely available tools).&lt;br /&gt;&lt;br /&gt;All participants will get access to the Opioid2D development wiki and the Subversion source repository.&lt;br /&gt;&lt;br /&gt;The first public release is currently planned for July 2006.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-114986200676172307?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/114986200676172307/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=114986200676172307' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/114986200676172307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/114986200676172307'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2006/06/opioid2d-pre-alpha-program.html' title='Opioid2D Pre-Alpha Program'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-114674158283516266</id><published>2006-05-04T14:08:00.000+03:00</published><updated>2006-05-04T14:19:42.850+03:00</updated><title type='text'>Another Slow Month</title><content type='html'>...well, slow for O2D development. I have been very busy at work (the paying kind), so progress has been rather slow after the last update. I'm currently working on the first example game, the particle system and the camera system.&lt;br /&gt;&lt;br /&gt;Pygext has an undocumented early prototype of the camera system, but for Opioid2D, it will be properly integrated from the get go. Instead of having screen coordinates, every Sprite will have "world coordinates" instead. The Camera object can be moved around, rotated and zoomed, as well as mounted into objects to e.g. create a game where the display automatically follows the player sprite. You can choose on a per layer basis, how the camera affects the layer to make static UI layers or layers that apply a lesser transformation (for parallax scrolling).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://shmup-dev.com/"&gt;SHMUP-DEV&lt;/a&gt; just launched a &lt;a href="http://www.shmup-dev.com/forum/index.php?topic=613.0"&gt;new competition&lt;/a&gt;, and I'd really like to participate, but I'm not sure how I'm going to find time for it. May will be even busier than April work-wise.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-114674158283516266?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/114674158283516266/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=114674158283516266' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/114674158283516266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/114674158283516266'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2006/05/another-slow-month.html' title='Another Slow Month'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-114488402273836749</id><published>2006-04-13T02:08:00.000+03:00</published><updated>2007-03-05T11:46:46.142+02:00</updated><title type='text'>I'm so easily distracted (new benchmarks)</title><content type='html'>I was supposed to finish the collision and action systems tonight... And what do I do? I just &lt;span style="font-style: italic;"&gt;had to&lt;/span&gt; implement a feature that wasn't even in my original list of features for the framework: dynamic lighting. So, now you'll be able to create light sources, and they can move and smoothly alter their color/brightness (via Actions of course).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://svn.opioid-interactive.com/~shang/temp/dynlight.jpg"&gt;&lt;img src="http://svn.opioid-interactive.com/~shang/temp/dynlight_thumb.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here are some benchmarks with moving Sprites (using simple newtonian physics) and dynamic light sources.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sprites:      1000     3000     10000&lt;br /&gt;------------------------------------&lt;br /&gt;10 lights    85fps    85fps    ~35fps &lt;br /&gt;30 lights    85fps    ~59fps   ~18fps&lt;br /&gt;100 lights   ~64fps   ~21fps   ~6fps&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;As you can see, there's still some room for optimization, but implementing different levels of lighting detail should help a bit in situations typical to games. Currently, each light source affects every corner of every sprite, so that's four calculations for every sprite for every light source. Small sprites don't really need this, so they can be optimized by calculating a single light value for the center of the sprite and using it for the whole image.&lt;br /&gt;&lt;br /&gt;On the other hand, having 100+ dynamic light sources might not be the most typical scenario...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-114488402273836749?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/114488402273836749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=114488402273836749' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/114488402273836749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/114488402273836749'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2006/04/im-so-easily-distracted-new-benchmarks.html' title='I&apos;m so easily distracted (new benchmarks)'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-114396781495848252</id><published>2006-04-02T11:45:00.000+03:00</published><updated>2006-04-02T11:50:14.966+03:00</updated><title type='text'>PyWeek Finished</title><content type='html'>I finally got a good night's sleep last night, but I'm still exhausted. The whole Saturday was nothing but coding and play testing. There is still a lot of room for improvement and we didn't have time to add sounds and music this time, but I'm overally quite happy with what we came up with in a week, considering we only had time to work on the entry during evenings.&lt;br /&gt;&lt;br /&gt;If you want to try our game (titled "Steam Run"), you can download the Windows installer &lt;a href="http://people.cc.jyu.fi/%7Eshang/misc/steamrun-final-setup.exe"&gt;here&lt;/a&gt;, or the Python source code &lt;a href="http://people.cc.jyu.fi/%7Eshang/misc/steamrun-final-src.zip"&gt;here&lt;/a&gt; (requires Python 2.4, Pygame and PyOpenGL).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-114396781495848252?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/114396781495848252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=114396781495848252' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/114396781495848252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/114396781495848252'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2006/04/pyweek-finished.html' title='PyWeek Finished'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-114366672100066794</id><published>2006-03-30T00:07:00.000+03:00</published><updated>2007-03-05T11:46:24.923+02:00</updated><title type='text'>It runs on steam!</title><content type='html'>We've been quite busy with &lt;a href="http://www.pyweek.org/2/"&gt;PyWeek&lt;/a&gt;. This time, the voted theme is "It runs on steam!", so we are doing a side scroller with a steam powered flying machine. The goal is to navigate the rickety air craft from one side of the level to the other, while avoiding a multitude of obstacles and enemies. It's past the halfway point of the competition already, and there' still much to be done. Hopefully I'll have enough free time to code everything in.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://svn.opioid-interactive.com/%7Eshang/temp/steamer_shot01.jpg"&gt;&lt;img src="http://svn.opioid-interactive.com/%7Eshang/temp/steamer_shot01_thumb.jpg" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-114366672100066794?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/114366672100066794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=114366672100066794' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/114366672100066794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/114366672100066794'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2006/03/it-runs-on-steam.html' title='It runs on steam!'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-114337395180593608</id><published>2006-03-26T14:46:00.000+03:00</published><updated>2006-03-26T14:52:31.806+03:00</updated><title type='text'>Week of Unproductiveness</title><content type='html'>I've had a nasty flu for the last week or so, and unfortunately I haven't gotten much done. &lt;a href="http://www.pyweek.org/2/"&gt;PyWeek&lt;/a&gt; started last night with the theme "It run on steam!", so that'll occupy all of my time next week. Hopefully my fever goes down enough that I'll be able to concentrate on the competition.&lt;br /&gt;&lt;br /&gt;I'm sorry for the lack of updates, I'll make a proper post after I have some more energy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-114337395180593608?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/114337395180593608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=114337395180593608' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/114337395180593608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/114337395180593608'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2006/03/week-of-unproductiveness.html' title='Week of Unproductiveness'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-114241708124851305</id><published>2006-03-15T12:01:00.000+02:00</published><updated>2006-03-15T12:04:41.260+02:00</updated><title type='text'>Opioid2D Status Update</title><content type='html'>I've been quiet for a few days, so here's a brief feature checklist on how Opioid2D is coming together.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Rendering engine&lt;/span&gt;: 100% done. &lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Scene engine&lt;/span&gt;: 85% done. Still missing state transitions and a couple of callbacks, but otherwise all the important functionality from pygext has been translated.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Sprite engine&lt;/span&gt;: 90% done. Nothing fancy here, so it has been straightforward to re-implement. Added very basic physics on top of the pygext API (velocity, acceleration, friction).&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Action system&lt;/span&gt;: 60% done. The base classes need some more tuning, and then I'll get to work on implementing all the different actions from pygext.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Event handling&lt;/span&gt;: 90% done. Needs support for multiple states.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Keyboard handling&lt;/span&gt;: 95% done. Needs testing and might require some small tweaks.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Mouse handling&lt;/span&gt;: 10% done. Barely started with this, but should be a quick job.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Collision detection&lt;/span&gt;: Not started yet, but I'm going to start implementing this tonight. The plan is to start with simple radius-based collision detection (as in pygext) and then expand it to (convex-) polygonal collision nodes and add optional multi-sampling for fast moving entities.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Particle engine&lt;/span&gt;: Not started yet, but should be very straightforward to translate from pygext's implementation.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Large sprite support&lt;/span&gt;: Not started yet. Sprites are currently constrained to a maximum size of 512x512 by the rendering engine.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Camera system and scrolling&lt;/span&gt;: Not started yet.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;GUI framework&lt;/span&gt;: Not started yet.&lt;/li&gt;&lt;/ul&gt;I'd like to get the first release out within two weeks, but I'm afraid &lt;a href="http://www.pyweek.org/2/"&gt;PyWeek&lt;/a&gt; will interfere with the schedule somewhat. So, a more realistic release date for the first public beta of Opioid2D might be in the middle of April.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-114241708124851305?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/114241708124851305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=114241708124851305' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/114241708124851305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/114241708124851305'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2006/03/opioid2d-status-update.html' title='Opioid2D Status Update'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-114203044510670203</id><published>2006-03-11T00:37:00.000+02:00</published><updated>2006-03-11T01:10:01.180+02:00</updated><title type='text'>First Benchmarks!</title><content type='html'>While these are very rough and preliminary benchmarks, I'm very happy with the results so far. I'll the pain I've suffered with C++ seems to have paid off. ;) This is a simple sprite benchmark that has static sprites with no logic or movement. It's purpose is to test the raw output of the rendering pipeline. 85fps is the limit, as the renderer is synced to vertical refresh.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;sprites          1000     5000    10000   15000&lt;br /&gt;-----------------------------------------------&lt;br /&gt;pygext           ~35fps   ~7fps   ~3fps   ~2fps&lt;br /&gt;pygext + psyco   ~60fps   ~13fps  ~6fps   ~4fps&lt;br /&gt;Opioid2D         85fps    85fps   ~70fps  ~45fps&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;EDIT: To be fair, the difference isn't all C++ vs. Python related. Opioid2D uses smarter algorithms in the rendering engine, which help a lot too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-114203044510670203?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/114203044510670203/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=114203044510670203' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/114203044510670203'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/114203044510670203'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2006/03/first-benchmarks.html' title='First Benchmarks!'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-114185658851326744</id><published>2006-03-09T00:12:00.000+02:00</published><updated>2006-03-09T00:24:24.890+02:00</updated><title type='text'>Object Identity Crisis</title><content type='html'>Opioid2D has progressed pretty nicely, and I now have working C++ code for displaying an O2D-sprite on screen via a Python API. While writing the sprite test, I came upon a very unfortunate "feature" of SWIG that I wasn't aware of before. As this was the first time I've really used SWIG, I wasn't really sure how the class wrapping mechanism works. It turns out that SWIG creates a "shadow" object in Python, which has a pointer to the live C++ object and the problem is that, as far as I know, SWIG doesn't do any tracking between the two, so once the C++ object is passed to the framework machinery, it pretty much becomes detached from its Python twin.&lt;br /&gt;&lt;br /&gt;I have a cunning theory on how to solve this pretty transparently, but this will slow down development somewhat until I can design and implement a working solution. I guess I could go read on the Python extension API and write my own wrappers in C, but that seems a bit daunting at this point, compared to the relative ease that SWIG has provided. We'll see...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-114185658851326744?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/114185658851326744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=114185658851326744' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/114185658851326744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/114185658851326744'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2006/03/object-identity-crisis.html' title='Object Identity Crisis'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-114173546775225245</id><published>2006-03-07T14:05:00.000+02:00</published><updated>2006-03-07T14:49:29.226+02:00</updated><title type='text'>Goals of the Pygext Rewrite</title><content type='html'>The rewrite of &lt;a href="http://codereactor.net/projects/pygext/"&gt;pygext&lt;/a&gt; will change enough things, that I thought renaming might be appropriate to lessen confusion (especially since the original Python-pygext will stay around and updated for a good while still). The new working title for the framework is Opioid2D (or the Opioid2D Game Engine), abbreviated O2D.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Speed&lt;/span&gt;. As I wrote in my last post, performance is one of the most essential things in a game framework. The general guideline in O2D is that all the code that gets called at every screen update should be on the C++ side. Using C++ also allows the rendering pipeline to contain more logic without adding overhead, so O2D will have better texture packing, and sprites will be rendered in batches using OpenGL arrays.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Maintainability&lt;/span&gt;. On the other hand, everything that is NOT speed critical should be written in Python instead of C++, for easier debugging, fixing and extending. The O2D implementation will have three tiers: The core written in C++, a SWIG wrapper exposing the core API to Python and a very-high-level Python API that calls the wrapper.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Minimalistic High Level API&lt;/span&gt;. The &lt;a href="http://codereactor.net/projects/pygext/apidoc/index.html"&gt;pygext API&lt;/a&gt; was huge and cluttered with things you rarely need. The O2D high level API will concentrate on the bare essentials, which leads to the next point.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Better Documentation&lt;/span&gt;. When I started developing pygext, it was supposed to be for my own use only. While it's slowly starting to have an adequate level of documents, the messy and large API makes writing documentation a pain. The O2D API is being documented constantly as I write it, and being much leaner, having good documentation coverage takes a lot less work.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Smaller Footprint&lt;/span&gt;. O2D aims to have all calls to SDL and OpenGL inside the C++ core, so I can drop all dependencies to Pygame, PyOpenGL and Numeric. This is done mainly to reduce the size of standalone executable distributions of games made with O2D.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-114173546775225245?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/114173546775225245/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=114173546775225245' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/114173546775225245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/114173546775225245'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2006/03/goals-of-pygext-rewrite.html' title='Goals of the Pygext Rewrite'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-114172591371521698</id><published>2006-03-07T11:53:00.000+02:00</published><updated>2006-03-07T12:57:48.926+02:00</updated><title type='text'>On Performance</title><content type='html'>Having spent a lot of time with &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt; in the last couple of years, I've often come across the claim that while Python is not nearly as fast as C, it is, more often than not, &lt;span style="font-style: italic;"&gt;fast enough&lt;/span&gt;.  I agree that this is generally true, and I was gladly surprised on how far I could go with &lt;a href="http://codereactor.net/projects/pygext/"&gt;pygext&lt;/a&gt; using pure (&lt;a href="http://psyco.sf.net/"&gt;psyco&lt;/a&gt;-accelerated) Python for everything (of course, pygame and pyopengl called SDL and OpenGL in the background).&lt;br /&gt;&lt;br /&gt;Games are a pretty different kind of beast when it comes to optimization, and a somewhat generic game framework even more so. They can never really be "fast enough". There are two main goals that improving the framework performance attains: 1) You can put more stuff on the screen. More enemies, more particles, more background layers &lt;span style="font-style: italic;"&gt;OR&lt;/span&gt; 2) Your game will have lesser system requirements, allowing you to reach a wider audience.&lt;br /&gt;&lt;br /&gt;That is the line of thought that convinced me to try and rewrite the core of pygext using C++ instead of Python. I'm only a few days in, but things are progressing pretty nicely so far. I'll post some benchmarks as soon as all basic funtionality has been re-implemented.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-114172591371521698?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/114172591371521698/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=114172591371521698' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/114172591371521698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/114172591371521698'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2006/03/on-performance.html' title='On Performance'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-114158980296223686</id><published>2006-03-05T22:05:00.000+02:00</published><updated>2006-03-05T22:16:42.973+02:00</updated><title type='text'>Of Python and C++</title><content type='html'>I did some experimenting today with both &lt;a href="http://www.boost.org/libs/python/doc/index.html"&gt;Boost.Python&lt;/a&gt; and &lt;a href="http://www.swig.org/"&gt;SWIG&lt;/a&gt;, and SWIG will be the wrapper of choice, at least for now. Boost might be better for some things, but the whole installation and configuration step was a huge hassle and ultimately I didn't get it to work properly on my setup. SWIG on the other was usable right away, and after a brief read through the basic documentation, I had a working version of my C++ extension.&lt;br /&gt;&lt;br /&gt;Python has proved to be an excellent prototyping tool for the C++ extension. I'm currently developing the extension in tandem with a pure Python version so that, whenever I'm about to implement a new class, I add it to the pure Python version first and test it. This way I can verify all architectural and algorithmical ideas before writing them in C++. I'm also writing the prototype in "C++ style" so that each dynamically created object has .new() and .delete() methods (and my tests track memory allocation issues), and I use 'this' instead of 'self' etc. This makes writing the C++ code based on the Python prototype very straightforward and fast. So, even though I'm pretty much writing all the code twice, I think I'm still making faster progress compared to trying to write the whole thing directly in C++.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-114158980296223686?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/114158980296223686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=114158980296223686' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/114158980296223686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/114158980296223686'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2006/03/of-python-and-c.html' title='Of Python and C++'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-114150353362492598</id><published>2006-03-04T22:08:00.000+02:00</published><updated>2006-03-04T22:18:53.643+02:00</updated><title type='text'>Boost.Python vs. SWIG</title><content type='html'>I found &lt;a href="http://seal.web.cern.ch/seal/snapshot/work-packages/scripting/evaluation-report.html"&gt;this&lt;/a&gt; comparison between Boost and SWIG an interesting read. Although, it is a couple of years old, so I don't how relevant it is with new versions of but Boost and SWIG. Pretty much all the links I found from Google were pretty old, so I guess I'll just have to try both of them myself. The general consensus seems to be that Boost has more features and is often more convenient, but when problems come up, they are much more difficult to debug compared to SWIG.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-114150353362492598?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/114150353362492598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=114150353362492598' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/114150353362492598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/114150353362492598'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2006/03/boostpython-vs-swig.html' title='Boost.Python vs. SWIG'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-23404633.post-114147133495084205</id><published>2006-03-04T13:06:00.000+02:00</published><updated>2006-03-04T13:23:44.716+02:00</updated><title type='text'>A Short Introduction</title><content type='html'>Opioid was the moniker chosen for our team in the first &lt;a href="http://www.mechanicalcat.net/tech/PyWeek/1"&gt;PyWeek competition&lt;/a&gt; and since then we've continued using the name and gathered a couple of additional friends to the bunch. We currently have a couple of open source game projects under way, which we hope will provide us with enough team working experience and proper tools so that we can start looking at some more "serious" game development (probably portal games at first).&lt;br /&gt;&lt;br /&gt;On the tools side, our current focus in on &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt;, using &lt;a href="http://www.pygame.org/"&gt;pygame&lt;/a&gt;, &lt;a href="http://pyopengl.sourceforge.net/"&gt;pyopengl&lt;/a&gt; and &lt;a href="http://codereactor.net/projects/pygext/"&gt;pygext&lt;/a&gt;. Prototyping is on the way to add C++ to the mix too.&lt;br /&gt;&lt;br /&gt;As for the current events, three Opioid members (including me) are currently taking part in the &lt;a href="http://www.shmup-dev.com/"&gt;shmup dev&lt;/a&gt; horizontal scroller competition, and later this month, the full team will take part in &lt;a href="http://www.pyweek.org/2/"&gt;PyWeek #2&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I'll add some info about our current open source game projects in future posts. Stay tuned!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/23404633-114147133495084205?l=opioid-games.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://opioid-games.blogspot.com/feeds/114147133495084205/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=23404633&amp;postID=114147133495084205' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/114147133495084205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/23404633/posts/default/114147133495084205'/><link rel='alternate' type='text/html' href='http://opioid-games.blogspot.com/2006/03/short-introduction.html' title='A Short Introduction'/><author><name>shang</name><uri>http://www.blogger.com/profile/10301305007776555493</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='18' height='32' src='http://photos1.blogger.com/blogger/4316/2398/1600/bloguser.jpg'/></author><thr:total>0</thr:total></entry></feed>
