Scripting C++ Game AI object using Python Generators

Discussion in 'Python' started by The_Incubator, Jan 4, 2004.

  1. As the subject suggests, I am interested in using Python as a scripting
    language for a game that is primarily implemented in C++, and I am also
    interested in using generators in those scripts...

    Initially I was justing looking at using Python for some event
    scripting. So basically an event would trigger an object to run the
    appropriate Python script, which would be run in it's entirety and
    return control to the C++ code.

    After looking at the Python docs and a few articles I've found, I'm
    really excited by the idea of using Python generators as micro-threads
    for game AI. I've been playing around writing play Python applications
    with classes that use generators as update methods, and it's cool as
    hell. I've also managed to write a C++ program with an embedded Python
    interpreter than runs a script, and I've used the Boost Python library
    to expose some C++ functions to Python.

    Where I would like to go from there is to be able to associate a Python
    script with a C++ object, so that on every frame update I could run the
    Python script (which would have functionality implemented as a
    generator) until it yields, then move on to updating the next object,
    and on the next frame, have the generator continue from where it left off.

    I haven't really attempted this yet, because I'm not quite sure where to
    start. I'm not sure how to have a Python script persistently attached to
    a C++ object so that execution can be returned to C++ from a yield and
    continue where it left off on the following update cycle. I am beginning
    to suspect, based on the docs and articles I've read, that to get this
    sort of functionality I should be looking at exporting all my C++
    objects to Python, and then using Python as the glue to write the main
    loop of the application, calling out to the C++ objects as required. Is
    this assumption correct, or can I get the functionality I want while
    still keeping this a C++ application? Should I be looking at writing the
    AI modules as Python objects and attaching these to my C++ objects at
    runtime?

    Initially I was just looking for something to use for simple scripting,
    and we were planning to do a custom scripting language, but I know just
    enough about language design and implementation to be very weary of
    having to maintain our own language when there are proven embeddable
    languages out there than are more powerful (and if I wanted to stick
    with simple I'd use Lua, which was just a breeze to embed). But the more
    I look at Python, the more ambitious I'm getting about how much we could
    potentially do by using Python at least as a scripting language and
    possible as glue... however, I'm not necessarily sure we need all this
    functionality (generators included), but that doesn't mean I don't want
    it, and I do like the idea of having more power and flexibility than is
    strictly necessary, so that we will have the power to do things we
    didn't necessarily plan for or expect. We are using Gamebryo as our
    rendering library, so that is a major constraint. That is very much a
    C++ library, so this is very much a C++ application. I am also a bit
    concerned about scaring other developers on my team... We need a
    scripting language, and everyone can deal with that as long as we
    pretend that the scripting language is a separate thing for designers,
    but I'm afraid if I start suggesting the programmers write our main
    application in Python and export the C++ code, I'm in danger of becoming
    a heretic ;) I'm not even sure if that's practical, given our C++
    middleware and performance concerns, but that's why I'm posting here, to
    get some assistance from the experts.

    Thanks in advance for any advice
    Nick
    The_Incubator, Jan 4, 2004
    #1
    1. Advertising

  2. The_Incubator

    Harald Massa Guest

    Nick,

    I am not able to understand your request fully (problem on my side, I'm not
    into Game Programming) ...

    but many of your keywords I heard last time in a talk by Chris Tismer,
    speaking about http://www.stackless.com/ stacklass Python at Europython in
    Charleroi.

    Maybe you should look there and maybe send your request directly to him? I
    saw him demonstrating a large game application with microthreads and
    generators and whatsoever (I just remember the words :)) )

    Harald
    Harald Massa, Jan 4, 2004
    #2
    1. Advertising

  3. Yeah, Stackless sounds interesting, and it was used in Eve-Online. At
    this point I'm under the impression that a lot of the specific
    advantages of stackless have to do with distributed applications, where
    you can have lots and lots of remotely instantiated Python objects
    running as separate microthreads, managed by software on your servers,
    with minimal task-switching overhead. My projects is not online
    multiplayer, so I'm not sure if Stackless would have advantages for my
    project above and beyond the generators already in Python, but maybe
    someone else can shed some light on that?

    It may be worthwhile for me to get in touch with them regarding my
    project though. Thanks for the suggestion.

    Nick

    Harald Massa wrote:
    > Nick,
    >
    > I am not able to understand your request fully (problem on my side, I'm not
    > into Game Programming) ...
    >
    > but many of your keywords I heard last time in a talk by Chris Tismer,
    > speaking about http://www.stackless.com/ stacklass Python at Europython in
    > Charleroi.
    >
    > Maybe you should look there and maybe send your request directly to him? I
    > saw him demonstrating a large game application with microthreads and
    > generators and whatsoever (I just remember the words :)) )
    >
    > Harald
    The_Incubator, Jan 4, 2004
    #3
  4. |Thus Spake The_Incubator On the now historical date of Sun, 04 Jan 2004
    03:32:11 -0800|
    > Where I would like to go from there is to be able to associate a Python
    > script with a C++ object, so that on every frame update I could run the
    > Python script (which would have functionality implemented as a generator)
    > until it yields, then move on to updating the next object, and on the next
    > frame, have the generator continue from where it left off.

    I have not dabbled with boost, but I like pyrex, and it allows you to
    write c++ classes that can run python code.
    http://www.cosc.canterbury.ac.nz/~greg/python/Pyrex/

    You should at least dig in and skim over the c/python api. You'll learn a
    lot about what pyrex does. I suggest "The Python Bible"
    http://www.amazon.com/exec/obidos/tg/detail/-/0764548077/104-2573336-8032758?v=glance
    Of all the documents I've scanned so far, it was the one that I understood
    best. YMMV. It has a kind of cookbook method: "Here's how you do this,
    Here's how you deal with that kind of data, etc"

    Sam Walters

    --
    Never forget the halloween documents.
    http://www.opensource.org/halloween/
    """ Where will Microsoft try to drag you today?
    Do you really want to go there?"""
    Samuel Walters, Jan 5, 2004
    #4
  5. The_Incubator

    Linus Elman Guest

    Thumbnailing webpages

    Harald!

    I saw a message you wrote here last spring but being unable to reply to that
    one I do that here instead.

    You were interested in a component that creates thumbnails from webpages.
    Check out http://www.uniworkstech.com/com.htm , this one does just that. Any
    page, any thumb size and emulates any screen resolution (even weird ones
    like 1024x10000).

    Good luck!

    /Linus
    Linus Elman, Jan 6, 2004
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. BlackHawke
    Replies:
    12
    Views:
    1,549
    Andrew Thompson
    Jan 26, 2004
  2. O'Neal Computer Programmer

    python scripting game The Temple Of Elemental Evil update

    O'Neal Computer Programmer, Jul 7, 2003, in forum: Python
    Replies:
    1
    Views:
    409
    Bengt Richter
    Jul 7, 2003
  3. Ron Stephens
    Replies:
    23
    Views:
    2,788
    Ron Stephens
    Apr 12, 2004
  4. DaveInSidney
    Replies:
    0
    Views:
    399
    DaveInSidney
    May 9, 2005
  5. judith
    Replies:
    0
    Views:
    1,626
    judith
    Nov 1, 2006
Loading...

Share This Page