Python newbie

John Ratcliff jratcliff at worldnet.att.net
Sat Dec 25 20:41:32 EST 1999


I have just joined the list and I wanted to introduce myself.  I am a
professional game developer, currently working for Verant Interactive.  I
have been a software developer for over 20 years.  My first major published
computer game was '688 Attack Sub' for Electronic Arts way back in 1985.
Since then I have developed a number of real-time 3d computer games, all
with multiplayer support.  Other games I have worked on include SSN21
Seawolf, Scarab, and Cyberstrike 2.  I also acted as a technology provider
for hundreds of games by developing a suite of sound and music drivers,
MIDPAK and DIGPAK, as well as network drivers and a video codec.

I am currently working on an, as yet unannounced, product for Verant
Interactive.  When I can discuss the project itself I will try to explain
some of the technical issues involved in more detail, but suffice it to say
that it is massively multiplayer real-time 3d product targeted for multiple
systems.  I develop in straight ANSI C++ and I am obsessive compulsive about
making sure my code compiles with any ANSI complient C++ compiler.  Any OS
specific calls are always tightly bound to a generic wrapper interface that
can be specifically targeted to whatever the system turns out to be.  I
typically create applications where all of the OS specific calls reduce to
only a few dozen methods and no more.

My current development team is 4 artists and 3 programmers, though I will be
bringing on 3 more developers and 4 more artists very soon.  If you are an
expert game programmer feel free to send me a copy of your resume. <g>

The reason I have joined the Python list is because I am searching for a
reasonable programming langauge that compiles down to a virtual machine byte
code.

My goal is that I will have a core engine on the client and on the server
side.  The basic game logic should all be written in some kind of general
purpose scripting langauge which can be modified to invoke any of my native
methods as if they were extensions to the language itself.  My reasons for
this are primarily as follows:

(1) This architectural design absolutely *requires* a clear and distint
seperation between game logic and the core game engine itself.  Because of
this absolute seperation of 'church and state' you can be 100% assured that
the *same game engine* can run MULTIPLE games!   This is incredibly valuable
to say the least!

(2) Virtual machines operate in a protected area of your own code space.
You can have non-programmers, artists, level designers, and game designers,
make modifications to game content and game logic without any risk of
crashing the game itself.

(3) Game content is not static.  In a multiplayer environment this is
absolutely critical.  If you buy a single player game and it provides a
certain amount of content for your money, that's just fine.  But, in a
pay-for-play multliplayer game, players demand and expect a constant flow of
new content.  Moreover, game balance must constantly be monitored and
changed as a game world evolves in an online environment shaped by hundreds
of thousands of people.

Having all of the game logic represented as compiled byte code means you can
easily download and patch the gaming system, even as it's running, on
demand.   While it is true that ultimately you could simply download new
pieces of game logic as compiled code, as either DLL's or simply patches to
an executable, this doesn't work very well when your product targets
multiple processors and operating systems.

(4) By selecting a custom langauge and virtual machine which you embed into
your application, you can target the very specific needs of your engine.
You can modify the language itself and slice into the language wherever you
know there are performance bottlenecks throughout your pipeline.

You can customize the language to make it fit the specifics of your
environment and introduce simpler syntax for non-programmers to use.

You can offload from your own development schedule by placing what would
normally have been a large coding burden on your team onto game designers
and level designers who, to be quite honest, would have more fun doing it
themselves anyway.  They can modify and change economies, damage assesment,
physics, object placement, and general game rules themselves, while you can
focus on fast graphics, fast collision detection and the other high speed
and hard core requirements of a real time system.

These are the main reasons I am interested in using a bytecode virtual
machine for my game engine.  What I have described sounds, of course, a lot
like Java.  However, if you search the internet you will find that Java
virtual machines are not exactly 'open source.'  There is Kaffe, but it
doesn't seem targeted towards the Windows OS or VC development environment.
More to the point, it's probably overkill.  Java tries to be *the*
application programming environment rather than a supplement to a core
client application.  It seems very fat for the kind of thing I want to do.

So far Python seems to be the absolute best candidate for what I am trying
to implement.

I would be interested in hearing comments or suggestions from others as to
how well they feel Python is suited for this kind of an application.  If you
could share your experiences using Python in a similar fashion I would enjoy
hearing them.

I downloaded Python and have begun to take a look at it.  It seems, at
initial examination, to meet most of my needs.

A few quick questions.

Is it easy to build a version of the source that contains *only* the byte
code interpreter, and not the run time parser and compiler?  Much of the
Python stuff seems geared towards the interactive command line interface,
which is nice if that's what you need, but I want to use the standard model
of compile source to byte code, and then run only that byte code in my
virtual machine.

Is Python virtually linked?  How does it resolve links between various
python object modules?  At run time?

When you create a variable in Python how is it typed?  Is it a float, an
int, etc?  It appears to be dynamically typed, which is syntacticaly simple
for the novice I suppose, but I am anal enough that I do like strong typing.
More to the point, while I don't plan to put my ultra-high performance code
in Python, I can't afford for it to be outrageously slow either.  What are
the performance characteristics of the Python VM?

When I used the Python GUI interface there was no option on the menu to just
'compile' a piece of python source.  When I issued the command line option
to compile a piece of source i.e. "compile foo" where 'foo' represents a
Python source file on disk, it gives me an error message.

Well, that's enough rambling for now.  I hope that Python is well suited for
my application since it wouldl speed up my development time considerably.
If I do adopt Pythin I will do my best to be a strong contributor to the
community.

Much Thanks,

John W. Ratcliff











More information about the Python-list mailing list