SGE

18 April 2014

I found out that a bug in version 0.9.0 of the Pygame SGE caused some projection methods (namely those for rectangles and ellipses) to crash the game. In light of this, I've released bugfix version 0.9.1. It also fixes a bug in the way thick outlines were handled, which caused the filled area to be too big and the half of the outline on the bottom and right to be missing.

16 April 2014

I have another release of the SGE available on the download page! This one has quite a few changes and introduces some compatibility breakage. These are the notable changes:

  • Better collision detection: Previously, all there was for your own collision detection was the StellarClass.collides method. This was kind of limited; it only told you whether or not one object was colliding with another object or group of objects. The new StellarClass.collision method instead returns a list of all indicated objects that are being collided with. In addition, several other functions have been added for collision detection; these are all in the new sge.collision module.
  • Better origin management: Previously, the SGE copied Game Maker: when an object was rotated or scaled, it was done about the origin, and (in theory) the bounding box was rotated and scaled with it. This was difficult to develop and maintain, and isn't always what you want, so now, the origin stays at the same spot unless you tell the SGE to correct it for rotation and scaling. Bounding boxes now remain static regardless of both of these; if you want the bounding box to be bigger when you scale an object up, you have to do it yourself. This prevents those glitches where turning around causes you to suddenly be inside of a wall.
  • "Update position" event: This new event allows you to override the SGE's handling of movement (xvelocity and yvelocity), which allows you to take advantage of the other speed variables at the same time.
  • Easier delta timing management: The step events now have a "delta_mult" argument, allowing you to adjust whatever you do in these events based on the built-in delta timing system.

21 March 2014

Not two weeks after the last release, I have another big release of the SGE. Version 0.8.0 of the SGE includes some useful now features, a few very important bugfixes, and major speed enhancements. Here are the highlights:

  • Add and delete sprite frames: In the past, every sprite was stuck with however many frames it had when it was created. You can now dynamically add and remove frames from any sprite as you wish.
  • Delete resources: New "destroy" methods for resources let you clean up resources you have no need for.
  • Load sprites from tilesets: The new sge.Sprite.from_tileset class method lets you create a sprite from a tileset (or sprite sheet).
  • Move rooms around: When you create a room, you can now specify where it should be created with the new room_number argument of __init__. If you want to move rooms around later on, you can use the new sge.Room.move method.
  • Window projections: In addition to projecting images, shapes, and text onto the room, you can now project all of these directly onto the screen. This is useful, for example, for HUD elements that you don't want to be visible to everyone, or for adding borders between views.
  • Efficient room projections: Previously, room projections were discouraged in the Pygame SGE because they were inefficient. This has been fixed; room projections are no longer particularly inefficient.
  • Efficient collision detection: The Pygame SGE now divides collision detection into several sections within the room, making collision detection much more efficient.
  • Bug fixes: A few very important bugs were found and fixed in the Pygame SGE. Notable among these bugs were projected sprites being destroyed, multiple views not working properly with scaling, and broken rotated precise collision detection. All of these and some others have been fixed.

Happy hacking!

10 March 2014

I'm starting to get superstitious. Any time I post somewhere that I think this will be the last beta, I find a bunch of bugs or add huge features. A little bit of both has happened, so version 0.7.0 of the SGE is here.

This release has these notable new features and changes:

  • Joystick handling improvements: It's now possible to look up joysticks by name, and a previously missing feature to figure out how many trackballs are on a joystick has been added.
  • Class-based object lookup: You can now register classes with the SGE to enable you to look them up by class with the new sge.Room.objects_by_class dictionary. (You were able to do this manually before, of course, but this makes that a bit easier.)
  • "Begin step" and "end step" events: The original step event is now defined to happen between automatic updates (such as movement from speed variables) and collision detection. The new "begin step" occurs before automatic updates, while the new "end step" occurs after collision detection. This might make certain tasks easier.
  • Image "speed" variables: I found that this way of defining animation rate is convenient for certain cases, so I added it in. The new Sprite.speed and StellarClass.image_speed attributes set the animation rate as a factor of the room's frame rate, just like Game Maker's image_speed.
  • Changed xprevious and yprevious: This is subtle, but significant: the xprevious and yprevious attributes of StellarClass now refer to the position of the object at the end of the previous frame, rather than the position of the object before the last change. While less advanced, I concluded that this behavior is more useful.

In addition, quite a few bugs in the Pygame SGE were found and squashed:

  • Axis checking taking trackballs into account (outdated behavior)
  • Joystick checks returning None if non-existant components were checked
  • Objects list not being reset when it was supposed to be
  • Directional collision detection being faulty
  • Mouse being invisible while a modal dialog box was shown
  • Collision detection of multiple objects (e.g. of the same class) not working
  • Custom mouse sprites sometimes appearing behind other objects
  • Mouse not working with multiple views
  • Custom mouse sprites not working when the game was paused

I'm planning on adding what I think will be a huge performance enhancement for the next release of the Pygame SGE. Stay tuned!

5 February 2014

Version 0.6.0 of the SGE has been released! This is a fairly small release with mostly just a few bug fixes, but it introduces a couple new features:

  • Support for sprite fonts has been added; load a sprite font with sge.Font.from_sprite.
  • Support for blending modes has been added to drawing and projection methods. As a demonstration of this feature, a simple lighting example has been added.

That's the good news. Here's the bad news: I'm abandoning the universal level editors and official IDE. The reason why is pretty complicated, but basically, I don't enjoy the effort at all, and it isn't really necessary; in the landscape of game development, developers usually write their own level editors, or otherwise figure out on their own how they're going to make levels for a game.

The incomplete effort to develop a universal level editor and special IDE can still be found in the repository, under the "tools" directory. If someone wants to continue the work, feel free to do so.

3 January 2014

It's a new year, and I think I should announce my intentions, what's going on, etc.

Firstly, I am no longer using the old GitHub repository. I am no longer sending commits to it, and I will no longer attempt to merge any changes to it with the Savannah Git repository. This is a pretty insignificant announcement, but I just want that to be clear.

The SELE (universal SGE level editor) is now definitely being done in wxPython. The old attempt at doing it with the SGE itself was clearly a failure, and it would be an unnecessarily large amount of work to make a good, beginner-friendly interface for the SGE with the SGE. wxPython, on the other hand, has a good set of widgits I can use.

I am considering making a minimalist universal level editor that simply displays what a person playing the game sees and is navigated with keyboard shortcuts; this would be easily doable with the SGE. Such a minimal interface might even be preferred over a more beginner-friendly interface by advanced users.

A new release of the SGE will be coming soon. The release most notably adds sprite fonts and blending modes, as well as some minor bugfixes for the Pygame SGE.

I've started developing a game with the SGE. At first I figured that I would wait until I finished the universal level editor, but I've decided that I want the game to have its own level editor and special event system anyway, so I don't need to wait for the universal level editor to make this game. I don't want to announce what the game is yet (though some people already have a pretty good idea), but I want to mention this because it might slow me down on development of the SGE IDE, and I don't want anyone to think that the SGE project is dying.

Happy hacking!

4 December 2013

Slooooow is the development of the SELE (Stellarly-Encompassing Level Editor). It's still in progress, so don't worry.

But because it's been so slow, I'd like to appeal to readers: If you have any experience in Python, know any GUI toolkit library, and would like to help me out, please do contact me. I could get this done a lot faster with help than if I continue doing it alone.

6 November 2013

Version 0.5.0 of the SGE specification and the Pygame SGE has been released. The notable changes are:

  • Added events that are triggered when the mouse or keyboard gains or loses focus.
  • Arguments in many classes' constructor methods that were "id"/"id_" have been changed to "ID".
  • Modal dialog boxes look better.
  • The mouse no longer gets put into the top-left corner of the window when a room starts.
  • Sprites now rotate about the origin rather than the center.

In other news, about that level editor: I've started re-doing it from scratch with wxPython instead of the SGE. The reason for this is I have found the SGE to be much too lacking in features to easily make a GUI with it (which makes sense; the SGE isn't designed for that). wxPython should be much better for the job, though it currently has the drawback of not working with Python 3.

7 October 2013

Since it's been a month since the last update and there haven't been commits to the repo in the last couple of weeks, I just want to make a quick update telling what's going on, since I don't want people assuming that the project is dead. I am working on the SGE; I just haven't committed what I'm doing to the repo yet. What I'm doing right now is writing a small module for the level editor and (in the future) other tools to use to read and write Stellar JSON files. This will make it a lot easier to have multiple programs that read and write the format.

4 September 2013

Emilio, who started Stellar, has told me that he is unable to work on Stellar at this time. This is unfortunate. I don't know if Emilio will come back to Stellar in the future, but I figured that this would happen, so I am prepared even if he doesn't.

My current task, of course, is finishing the room editor. I will continue with this. Once the room editor is finished, it will be released either alongside the SGE or in a separate tools download. This will be powerful enough to develop games; the only thing that will be left to add is the GUI for beginners to use, which I will work on either while or after I develop a couple of games with the SGE.

On another note, I've updated this website, as you can probably tell.

12 August 2013

Version 0.4.0 of SGE has been released. It can be found in the Download page. See the WHATSNEW text file now included with the download for a full list of changes. A short summary of the most notable changes:

  • Added methods for saving screenshots.
  • Added simple modal dialog boxes.
  • Reworked how speaker balance is controlled for sounds and music.
  • Collision detection is now much more efficient (the new method is twice as fast as the old method).
  • Better documentation provided in HTML rather than plaintext (generated with Sphinx).

I wanted to have the room editor done for this release, which is why it took so long, but I decided to just make the release, since there have been so many changes and fixes and it will be a while before the room editor is done.

I might have said this before and turned out to be wrong, but I don't think there will be many more huge changes before version 1.0 of SGE. Version 1.0 won't be released until the room editor is done, and what I would like is to have it along with another small tool distributed with version 1.0 of SGE; this would be an alternative to the full GUI Emilio is developing.

30 June 2013

Donation button added. I developed and continue to develop SGE because I want to use it, not for money, but if you want to support SGE's development, feel free to do so. This was added because someone wanted to give me money to support SGE's development.

I've also added a mention in the About page about the name. I didn't intend this originally, but I've decided a while ago (and already indicated in the docs in the Git repo) that "SGE" should be pronounced, not spelled out. The pronunciation is just like the English word "sage".