[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Long-lived Guile scripts in a mono-threaded game engine
From: |
Sylvain Beucler |
Subject: |
Long-lived Guile scripts in a mono-threaded game engine |
Date: |
Mon, 26 May 2008 23:19:00 +0200 |
User-agent: |
Mutt/1.5.17+20080114 (2008-01-14) |
i,
I'm contemplating adding Guile support in GNU FreeDink, which is a
game engine for Dink Smallwood, a 2D scripted game.
Currently there's a "manually coded" scripting engine which is pretty
limited and buggy, though it works decently enough and was already
used for large extensions.
I'd like to add Guile as an alternative :)
Currently I'm facing several issues, the main one is how to manage
long-lived scripts:
The engine runs in a single thread, and the game loop essentially:
- passes over all sprites in a screen, and runs the scripts attached
to those sprites
- detect collisions and run associated scripted hooks
- perform other non-scripted transformations such as sprite
progressive moves, update the status bar, etc.
- the game screen is then refreshed with the new game state
- repeat
Scripts last more than a single game loop. They are not basic scripts
that describe what happens in a single engine step; instead they
describe what happens in the story.
For example, a game introduction will create sprites on the screen,
move them around, make them say lines that the user can read (or pass
using [space]), etc.
That script can also change the current screen (which kills all other
scripts in the current script).
Multiple scripts can run in a single screen, but they run the one
after the other, not in parallel. The order/priority is known.
Scripting is essentially frozen during the screen refresh. This avoids
putting mutexes everywhere.
How could I do something similar with Guile? I didn't find a way to
make a guile script pause (and return to the caller).
I guess one possibility is to run all scripts as independent threads,
and make them lock on a global mutex. However, as emphasized in this
article
http://harkal.sylphis3d.com/2005/08/10/multithreaded-game-scripting-with-stackless-python/
I would appreciate non-preemtiveness, for simplicity.
I think what I'm looking for is similar to Lua's coroutines
(a.k.a. fake threads - one coroutine at a time)
http://lua-users.org/wiki/CoroutinesTutorial
It's also important that running scripts can be terminated by the game
engine if need be.
How would you do this with Guile? :)
Thanks,
--
Sylvain
- Long-lived Guile scripts in a mono-threaded game engine,
Sylvain Beucler <=
- Re: Long-lived Guile scripts in a mono-threaded game engine, Ludovic Courtès, 2008/05/27
- Re: Long-lived Guile scripts in a mono-threaded game engine, Sylvain Beucler, 2008/05/27
- Re: Long-lived Guile scripts in a mono-threaded game engine, Ludovic Courtès, 2008/05/27
- Re: Long-lived Guile scripts in a mono-threaded game engine, Sylvain Beucler, 2008/05/27
- Re: Long-lived Guile scripts in a mono-threaded game engine, Ludovic Courtès, 2008/05/27
- Re: Long-lived Guile scripts in a mono-threaded game engine, Sylvain Beucler, 2008/05/27
- Re: Long-lived Guile scripts in a mono-threaded game engine, Clinton Ebadi, 2008/05/27
- Re: Long-lived Guile scripts in a mono-threaded game engine, Clinton Ebadi, 2008/05/27
- Re: Long-lived Guile scripts in a mono-threaded game engine, Neil Jerram, 2008/05/27
- Re: Long-lived Guile scripts in a mono-threaded game engine, Paul Emsley, 2008/05/27