Slashdot Mirror


Game Scripting With Python

P. Staurou writes "There is very interesting article about game scripting with Python over at Sylphis3d.com. It talks about how game engines should be structured as operating systems with actors being the processes. The proposed design is based on a special version of Python called Stackless and already successfully implemented in their own Sylphis3D game engine."

51 of 186 comments (clear)

  1. Console Games? by CDMA_Demo · · Score: 3, Insightful


    I don't see what is so new about this "news". Console games are designed with the idea in mind that the hardware does not have a full featured OS. We have to do almost everything, from memory management to thread syncronication, and guess what are the "processes" we are working on....? Is this a news story because noone has actually put this concept into words?

    1. Re:Console Games? by UserGoogol · · Score: 5, Funny

      Sylphius uses Python. Python is Open Source, as is Linux. Linux was programmed by Linus Torvalds. Linus Torvalds was in Revolution OS which was narrated by Susan Egan, who was in Death and Texas with Charles Durning, who was in the made-for-TV version of Mister Roberts with Kevin Bacon .

      --
      "Never attribute to malice that which can be adequately explained by stupidity." -- Hanlon's Razor
  2. Syphilis in 3D? by groovemaneuver · · Score: 5, Funny

    Ewww!!!! Oh I misread... Whoops...

    1. Re: Syphilis in 3D? by Black+Parrot · · Score: 2, Funny


      > Ewww!!!! Oh I misread... Whoops...

      You can tell they're not marketing to us dyslexic types.

      --
      Sheesh, evil *and* a jerk. -- Jade
    2. Re: Syphilis in 3D? by RazorRaiser · · Score: 2, Funny

      poser! if you were lysdexic you'd have spelled it as such

    3. Re:Syphilis in 3D? by jeblucas · · Score: 2, Funny
      How very sophomoric. At my game engine company, lowbrow humor like this is neither tolerated, nor condoned with tacit laughter. Shame.

      Jeb
      President
      Gon-o-Ria Inc.

      --
      blarg.
  3. Re:Lisp instead of Python by hungrygrue · · Score: 4, Insightful
    P.S. I really enjoy thinking of Python users eating shit on their compiles withe parser trying to determine what mystical combination of spaces and tabs results in an indentation.
    Ignoring the obvious fact that Python is not a compiled language anyway, why would you be mixing tabs and spaces? Maybe you need to find a better text editor if you aren't able to expand tabs. http://www.vim.org/
  4. Civilization 4... by Fortress · · Score: 5, Interesting

    ..supposedly will use Python scripts for most of the AI behaviour. It's supposedly the most easily and thoroughly modifiable game ever. I can't wait to see what the community produces. In fact, I'd say that the developers will incorporate user-generated content in the official patch system.

    1. Re:Civilization 4... by drxray · · Score: 4, Informative

      See the Unreal Tournament Community Bonus Pack, and the SuperStorm fan-made patch for Earth 2160. Both hosted on official download sites. The UT2003 community pack was actually included on the UT2004 DVD.

      These are just the two examples I've played today...

      --
      Slashdot - Mutual Assured Discussion
    2. Re:Civilization 4... by grazzy · · Score: 2, Funny

      I think we need a new slashdot-tagline.

      "In RIAA/MPAA/IP America... "
      "... The industry owns YUO!"
      "... The mon(k)ey TALKS!"
      "... Freedom as owns YUO"!

  5. Python is nice but consider LUA for game scripting by Anonymous Coward · · Score: 5, Insightful

    The game company I work for does cross platform console games for XBox, PS2 and GameCube. We use LUA as a scripting language. LUA is a small clean language with simple but powerful syntax. The run time memory footprint is pretty small (~100 kB) which is great when your writing your game for a console with less than 32MB available.

    If you are thinking about scripting languages for your games consider LUA. http://www.lua.org/

  6. EVE Online by Dr_Barnowl · · Score: 5, Informative

    ... is already using stackless Python, so it's a proven, successful multiplayer online game platform. EVE has upwards of 10,000 players most of the time.

  7. This is not a new idea by SnprBoB86 · · Score: 4, Informative

    This article presents the idea relatively well, but this is NOT A NEW IDEA.

    I'm not sure if Epic invented it, but I can certainly tell you that microthreading, latent functions (such as the sleep in the door example, or a playanimation method that takes game time to complete), and this general idea has been around since at least the original Unreal Engine in UnrealScript (which is now a rather mature scripting language).

    --
    http://brandonbloom.name
    1. Re:This is not a new idea by Osty · · Score: 2, Informative

      I'm not sure if Epic invented it, but I can certainly tell you that microthreading, latent functions (such as the sleep in the door example, or a playanimation method that takes game time to complete), and this general idea has been around since at least the original Unreal Engine in UnrealScript (which is now a rather mature scripting language).

      Go back even further than that. The idea of building a game engine that acts as a virtual machine for scripts defining a game is a very old idea. For example, way back in 1987, LucasArts developed SCUMM (Script Creation Utility for Maniac Mansion), which is little more than an engine that runs scripts the define a game. All of LucasArts' adventure games from Maniac Mansion to The Curse of Monkey Island used SCUMM. After that, they built a new engine (GrimE, Grim Edit) that was used in Grim Fandango and Escape from Monkey Island and followed the same ideas they first built in SCUMM. This time they used Lua, which is a popular scripting language used by many other commercial game engines (such as Bioware's Infinity Engine used for the Baldur's Gate games, the Icewind Dale games, and Planescape: Torment).

      Unreal's UnrealScript is a very powerful language within the scope of the Unreal engine, but it's certainly not the first implementation of the "game engine as an abstract operating system for scripts" idea. The technology of the scripting language may change, but the core idea is very old (and very good). There's nothing inherently special about using Python as the scripting language for a game, but it's neat that Python is now capable of doing so.

  8. Lua, Books by Noksagt · · Score: 4, Informative

    It didn't make the front page, but the recent article on extending games with Lua is also worth a read. My personal preference is still for Python (I love all of the libraries that it has), but Lua is good if you need some small scripting engine.

    In that article, I was asked about this book, which covers Lua, Python, and Ruby for games. Despite having all of the "right languages," the book is awful. For people wanting to extend games with python, I suggest Game Programming with Python. This book is a wonderful overview.

  9. Not new by Anonymous Coward · · Score: 2, Informative

    EA/Dice currently use Python scripts in the latest Battlefield 2 game. You will actually find quite a few games that currently use python already. I dont know why it should be news when game developers already do so and have for a while now.

    1. Re:Not new by HBI · · Score: 2, Informative

      TOEE from 2003 uses Python scripting.

      It was a buggy mess that was only meaningfully amended by a couple years of volunteer work by people outside of Atari/Troika, but the Python scripting was probably a plus in terms of determining the nature of bugs and fixing them.

      My beef with the article isn't that it is outdated. It's that the grammar is so horrible. It's not unreadable but it's like reading a bad book report.

      --
      HBI's Law: Frequency of calling others Nazis is directly correlated with the likelihood of the accuser being Communist.
  10. Python? For 100s of game entities? Try Mono... by nicholasfrancis · · Score: 4, Informative

    As for the language, we used Python in Unity http://www.otee.dk/ for the initial preproduction of GooBall. It was soooo slow. After that we switched to Mono. CPU usage in the scripting logic went for >40% to app. 5%... If you like the Python syntax, you can always include boo http://boo.codehaus.org/ which mimics Python very closely, but uses type inference to get type safety automatically. On another note: the article states that Unreal does not use microthreads. That is not correct.

  11. Another one of those weird reads. by Jerk+City+Troll · · Score: 2, Funny

    Did anyone else read that as "Syphilus3D"?

  12. Open Games by Doc+Ruby · · Score: 3, Insightful

    Python, JavaScript, Java, Perl, VB, whatever. The big jump is making runtimes object oriented, with published APIs. We're now living in a programming culture where the old barriers, like "infraproject silos" that used to prohibit code in the same app from interoperating, have given way to classes with public and private access status. We've come a long way from "file scope" limits to "externs", while retaining the organization and manageability that scopes and explicit access specs offer. Now we can reuse code that we wrote for another project, or that another person wrote, without even looking at the code - just the APIs.

    But only for programmers. We're still struggling with IPC facilities for programmers, and runtime IPC is rudimentary. Some programs don't even have pipeable STDIO. But if every app's GUI (or CLI, or other UI) always had an equivalent API, we could much more easily program them. We programmers should establish this pattern ourselves, ensuring every menu item, dialog box and UI buffer has a public API that can easily be wrapped in Python, C/++, Perl, Java or other calling wrappers. And bundle scripts with our distros that "kiddies" can easily hack into new versions.

    We can leverage our "Open" culture from our programmer ghettoes to the user community at large. And since we're even more often users than programmers, we're immediately serving ourselves, too.

    --

    --
    make install -not war

  13. Naughty Dog Used Scheme for this by putko · · Score: 2, Interesting

    Naughty Dog (JAK) used scheme for this. The guy in charge is from MIT, so he's a lisp/scheme hacker.

    They had Franz lisp make it for them -- this I found out at gamasutra.com

    I think the only big deal about this is that they use Python, as opposed to some other language.

    --
    http://www.thebricktestament.com/the_law/when_to_s tone_your_children/dt21_18a.html
  14. Re:Python is nice but consider LUA for game script by Coryoth · · Score: 4, Informative

    The point of using Stackless Python (as opposed to ordinary Python) is that it provides a particularly good system for handling multiple threads and communcation for threads via tasklets and channels. If your game engine works by creating actors as threads then using a scripting language that has a simple to use, efficient, and platform independent threading model is likely of great importance, and Stackless Python offers that.

    If you're generally interested in better threading models, and being able to think and reason about threads and their interactions more easily then you really ought to check out CSP. Multithreading is actually easy if you do it right - it's just that most languages don't.

    Jedidiah.

  15. Not limited to Python. by indy · · Score: 5, Interesting

    TFA is talking about the use of coroutines to avoid programming state machines. Coroutines are really very useful, as they allow code as simple as the following:

    void Airplane::flyLooping() {
        levelOut();
        centerStick();
        pullElevator();
        while(!flyingUpsideDown())
            yield();
        while(flyingUpsideDown())
            yield();
        centerStick();
        levelOut();
    }
    The code, which is supposed to make an airplane actor fly a looping maneuvre, is much simpler than the corresponding state machine code, which would consist of four states. I used this sort of programming in my hobby flightsim project Thunder&Lightning using this C++ implementation of coroutines. There is also Io, an embeddable language with a very small footprint which is easy to learn and nice to program with and which supports coroutines as well (actors in Io's terminology).
  16. There's a REASON they're using Stackless by cduffy · · Score: 3, Informative

    Stackless is a completely different implementation from CPython, and has extremely different performance characteristics.

    Consequently, your experiences with CPython simply don't apply here -- Stackless is largely focused around doing this kind of thing (microthreads and such) extremely well.

  17. Python whitespace indentation by baxissimo · · Score: 3, Insightful

    I was willing to believe that Python's whitespace indentation was a good thing. I wanted to believe. But unfortunately I just find it to be a pain. I like Python, but the using whitespace to indicate block structure is annoying. Why? Because auto-indenters don't work. When I'm writing the code the first time that doesn't really cause problems, but when I go start messing with existing code and rearranging things, refactoring loops and such, then I just want to hit my magic Ctrl-Alt-\ key sequence and have the editor reformat things for me. But if whitespace is the only indicator of block structure then it doesn't work properly.

    Maybe it's just a problem with Emacs' python mode, but I don't really see a good way for it to automatically know what indentation level this chunk of code I just dropped in is supposed to go.

    1. Re:Python whitespace indentation by FrostedChaos · · Score: 2, Insightful

      I think you are confused.

      Auto-indenters are just tool for re-arranging indentation based on brace structure.
      If there is no brace structure, then there is no need for auto-indenters.

      The fact that the same information is being represented in two ways-- as the brace structure, and as the indentation-- is the problem that auto-indenters are designed to solve. This problem does not exist in python.

      --
      "Any connection between your reality and mine is purely coincidental." -Slashdot
    2. Re:Python whitespace indentation by d2ksla · · Score: 2, Informative

      I use Emacs for editing both C and Python. With Python, it is just a matter of marking the block you'd like to indent/dedent (CTRL-space at the beginning of the block, and ALT-w at the end), and then use "CTRL >" or "CTRL <" to indent/dedent the whole block. This saves a few keypresses compared to C, where the extra braces have to be inserted/removed.

    3. Re:Python whitespace indentation by John+Whitley · · Score: 2, Informative

      FWIW, it's also trivial to do the same thing under Eclipse using PyDev. Mark a block of text, then hit tab or shift-tab to indent/unindent. If you're an Emacs user, turn on Eclipse's built-in Emacs keybinding set and it's home away from home...

  18. Oooh! by keesh · · Score: 2, Interesting

    So now as well as having to buy faster graphics cards, we'll have to buy faster CPUs to cope with Python's "Oh shit, you seriously want me to call a function? Woah. Hang on a minute..." feature? I'm all for open source, but Python's fucked up hash tables implementation is a perfect example of how more eyes won't get around to fixing things if they're not looking in the right places...

  19. Python to C++ Automatically by Anonymous Coward · · Score: 4, Interesting

    As part of Google's Summer of Code, someone with much code-fu has released the initial version of a Python-to-C++ converter.

    Check it out:

    http://shed-skin.blogspot.com/

    http://sourceforge.net/projects/shedskin/

    1. Re:Python to C++ Automatically by Chandon+Seldon · · Score: 2, Funny

      Amazing. They've invented the compiler.

      --
      -- The act of censorship is always worse than whatever is being censored. Always.
  20. Python game programming competition by AMK · · Score: 2, Informative

    Another game-related Python activity is the PyWeek competition, where entrants have one week to write a game. Unfortunately you've just missed this year's competition; it's held in August, and the winners were just announced.

  21. Erm... by pixel_bc · · Score: 3, Funny

    I'm not even going to read this thread - I'm sure someone made a similar joke, but I wouldn't use any technology that sounds like you could download it from a cheap hooker.

  22. Python Already in Use for Commercial Games by Anonymous Coward · · Score: 2, Informative

    There are many, many games using python for scripting. Battlefield 2 being the most recent I've noticed.

    Search your game folders for .py files, you may be surprised.

    1. Re:Python Already in Use for Commercial Games by rg3 · · Score: 2, Informative

      The oldest one I remember was Severance: Blade of Darkness. It ran perfectly in a P3 500. Released in 2001. It also featured some really revolutionary graphics and other technologies. For example, real-time lights like in Doom3 except that not so-well done and with more restrictions; and also a physics engine. Sorry for being a little off-topic here, but that game impressed me when it was released.

      http://www.codemasters.com/severance/eng/

  23. Re:Lisp instead of Python by FrostedChaos · · Score: 3, Insightful

    You can say, ``well, you're supposed to have code standards to handle that,'' and you'll be completely right. I agree with that, but that doesn't escape the technical problems associated with it. The Python parser needs to be able to handle it.

    At the place where I work, tabs are always 8 spaces. There's a reason for that-- it's because we need to look at each other's code!
    As far as newlines are concerned, I believe python accepts any of the popular 3 styles of newline. So that is never an issue.

    I'm pretty tired of listening to people bitch about python's indentation rules. They are an elegant solution to the problem of specifying program control flow.

    In contrast, bash has been sensitive to whitespace for decades, and yet you never hear anyone calling for us to move to a better shell. Why? Because bash is "the standard" and it's OLD. It seems like there's a lot of dinosaurs out there who just don't want to evolve.

    --
    "Any connection between your reality and mine is purely coincidental." -Slashdot
  24. Ogre 3D engine and Python by gsherman · · Score: 5, Interesting

    Last weekend I pulled in the latest Python (2.4.1) for Winblows, the Ogre 3D engine binary , and PyOgre (http://www.ogre3d.org/index.php?option=com_remosi tory&Itemid=57&func=selectcat&cat=1).

    This combo rocks fairly hard.

    Run a 27 line Python script, and boom, you're looking at a working 3d engine. It's fast, too, probably because the heavy lifting is being done in the Ogre runtime binaries.

    For developing and prototyping, there's no time wasted (re)compiling changes; tweak some Python and away you go. And there's no reason the code or scene objects can't be tweaked while the engine is running, perhaps by means of a some sort of IPC, whether it's via a telnet/socket-type connection, or an XML-RPC daemon process, or whatever. Some people have even worked up demo on-screen overlays akin to the Quake console.

    I'm looking forward to the day I can interact with a 3D environment and manipulate 3D objects with the same immediacy I'm accustomed to manipulating data in the Python interactive prompt. Heck, I'd even learn Smalltalk if they plugged Ogre directly into something like Squeak. But for now, Python + Ogre (PyOgre) seems to show a lot of promise.

  25. Re:Either I forgot to do something, or Python is.. by Anonymous Coward · · Score: 2, Insightful

    Anybody shipping a serious app should probably include an private copy of the Python engine along with the subset of Python libraries required to run the app.

  26. Don't forget that Battlefield 2 uses Python by fjb4 · · Score: 2, Informative

    Battlefield 2 uses Python too (look around in the game's directories, you'll find lots of *.py files). In fact, I'd guess that it's the most widely played game right now that uses Python.
    What's interesting to me is that they were able to utilize Python and still develop a state-of-the-art, performant 3-D FPS. (People with slightly older computers might argue about "performant", but it does actually run very well even with the Pythion compiler/interperter baked in.)

  27. Re:Python is nice but consider LUA for game script by Radius9 · · Score: 4, Interesting

    Having worked on game consoles for years, and having worked on several games using both Python and LUA, I strongly disagree with your statement. I find both languages terrible for console development.

    Although Lua didn't use much memory, I found it allocated and freed lots of memory. Lots and lots of it. This had the nasty side effect of fragmenting memory to all hell. This can be fixed by giving it its own stack, but its still an issue, especially if the LUA calls out to something that needs to allocate memory. It can get very nasty, very quickly. In addition, I found the language syntax to be fairly poor, I mean it was designed with configuration files in mind, and so it works great for configuration files, but it syntactically didn't fit with most of the AI we wanted to do. We just ended up calling C most of the time anyhow. On top of that, the use of LUA meant we didn't have a decent debugger (if any), which meant tracking down crashes and bugs was an adventure in tedium, using lots of printfs.

    Python was a language better suited to Game AI, but once again, memory fragmentation was a big big issue. In addition, it was fairly slow and tended to access lots of memory, which killed the cache on most of the consoles nicely.

    Overall, with all the performance considerations aside, I found the choice of Python and LUA to be poor mainly because they didn't solve the problem that they meant to address. One of the big things that everyone wants is non-programmers being able to edit game behavior. Both Python and LUA may seem easy to those of us who code, but it is incredibly difficult for most game designers, as most of them can not code at all. Generally, in the course of development, there isn't time or motivation for people to learn how to do many new things, and so the programmers end up doing most of the scripting. Once the programmers are doing the scripting anyhow, you may as well do it in C or C++, as you'll have better development tools. The other big argument I hear is that you can update AI in realtime, which sounds great, but in practice, is much more difficult to do than it sounds. If you are going to add scripting for this feature, then make sure if you can't implement the feature, then remove the scripting. You'll save yourself a ton of trouble. Anyhow, I'm sure lots of people will post examples of projects that succesfully used these scripting languages, and I'm sure there are some, but it certainly hasn't for any of the console based projects I've worked. Which isn't to say there aren't scripting style solutions that do work, I've seen them work and am a big proponent of them, but I haven't seen any that worked with a general-purpose scripting language. Remember, there is a price to be paid for it being general purpose, and if you have a specific purpose in mind, that price can be very high.

  28. Re:Lisp instead of Python by shobadobs · · Score: 2, Informative

    I don't like that code either; I'd write

    (define (gnc:leap-year? year)
        (cond ((= (remainder year 400) 0) #t)
            ((= (remainder year 100) 0) #f)
            (else (= (remainder year 4) 0))))

    As the other poster pointed out, Python can be written moronically too.

  29. Re:Python is nice but consider LUA for game script by chromatic · · Score: 2, Informative

    You know, tools such as StackGuard, ProPolice, Valgrind, Splint...

  30. Virtualization and Game as OS by DannyKumamoto · · Score: 3, Informative

    With Cell (which I've worked on for 3.5 years until last month), its Power core supports virtualization feature (or "hypervisor" mode as IBM likes to call it) as documented in Power Architecture V2.02.

    This allows companies (I won't be surprised see if all 3 game consoles will support this) to allow game programmers to create RTOS (real-time operating system) like programs so that they have very refined control over program behavior (even OS like control) while the hypervisor SW (like Xen) will prevent any critical resources of games from clobbering each other (just as hypervisor supported OS will not hurt other OS running under hypervisor). Virtualization will give more control to the game programmer (more power and more responsibility) while the game console maker would retain minimal but critical control over the resources (mainly IO and memory). Pretty exciting world ahead for game developers in my opinion....

    --
    Danny Kumamoto
  31. Re:Either I forgot to do something, or Python is.. by planetoid · · Score: 2, Interesting

    Hmm, I figured it out, I think; there is a PYTHONPATH environment variable I should have set to /usr/lib/python2.4.

    However, some Python-using software still doesn't load module "os" (and presumably any of the other default modules), even after setting this env var; so I ran Python and did "import sys", then "sys.paths". Python itself was still, for some reason ignoring my PYTHONPATH variable, but there was a series of nonexistant subdirectories in my home directory it was looking for. Making one of those a symbolic link to /usr/lib/python2.4 has fixed this.

    Now if I can remember the name of that music tracker I wanted to try a week ago...

    --
    Slashdot requires you to wait longer between hitting 'reply' and submitting a comment.
  32. just a nitpick to counter... by nobodyman · · Score: 2, Informative
    Never messed with Lua but if thats all a coroutine does then your comparison is absolutely correct. However, after reading the article it kind of sounds like the threading model of Stackless Python shares more with a Lua coroutine than with threading as how we think about it in the OS world. From the article:
    The only solution is non-preemptive multithreading. This necessity also solves many synchronization problems. A non-preemptive environment rarely needs locks and can be deterministic.
    Which sounds to me like thread2 doesn't start until thread1 completes execution of a routine (or explicitly calls sleep() ).

    Not a knock against Stackless Python, though. In fact, I agree with the author that preemptive threading in the context of scripting a game probably causes more problems than it solves. In a game, you can be more trusting of its processes/threads(aka scripts) than a general pupose OS would be. On the other hand, with games like UT where you can have have multiple "mutators" running simultaneously that were created by the modding community and not an inhouse designer, maybe preemptive threading would be a good idea.

    1. Re:just a nitpick to counter... by GileadGreene · · Score: 2, Informative
      Well, Stackless itself implements "tasklets" (lightweight threads) using a round-robin scheduler (which does not schedule tasks that are blocked on channel communications) - see here for more. This approach was apparently heavily influenced by things like CSP and occam.

      I have to admit that I'm not clear on what the original article means when they talk about using non-preemptive multithreading (do they mean somehow overriding the Stackless tasklet scheduler?). They seem to be worried about the need for locks on shared-state variables. However, the correct approach to building a Stackless-based system would probably be to follow the CSP paradigm of avoiding shared-state completely - such systems are lock-free and can be completely deterministic. But perhaps I am completely misinterpreting what they are trying to get at.

  33. Buddy. by headkase · · Score: 2, Funny

    rofl.

    --
    Shh.
  34. Re:Python is nice but consider LUA for game script by deaddrunk · · Score: 4, Funny

    Dubya has a BASIC? I'd hate to see the syntax for that.

    --
    Does a Christian soccer team even need a goalkeeper?
  35. Eve Online and BF2 by VC · · Score: 2, Informative

    Eve online (crowd control software) is the main user of stackless python. Most of the patches are either contributed by them or requested for them. BF2 also uses python for most of its non engine work. (not sure about the AI though.)
    Rock on python.

  36. Re:Python is nice but consider LUA for game script by m50d · · Score: 2, Insightful
    Once the programmers are doing the scripting anyhow, you may as well do it in C or C++, as you'll have better development tools.

    Python's popular enough to have a lot of good tools (IDEs, debuggers etc.) and, IME, a lot easier to write code for than C++. You can do things in a lot less programmer-time and a lot less LOC, and it's more readable for maintainability. I would recommend using python for anything not performance-critical, not just AI scripting. And for those designers who do have the time and motivation, it's a lot lot easier to learn than C/C++.

    --
    I am trolling
  37. Re:Either I forgot to do something, or Python is.. by m50d · · Score: 2, Interesting
    Either I forgot to do something on my system, or Python is, in my experience, unreliable at best.

    You did something wrong. Python works perfectly on my system.

    Most Linux programs that utilize Python that I've downloaded, didn't work; there's usually a missing, necessary Python module the program needs which either requires downloading from an obscure site or doesn't seem to exist at all from Google searches,

    Most C/C++ programs have a missing library which requires the same steps. Your package manager ought to handle it.

    or even with names that seem they ought already be included (like a module named "os" from a Python-using music tracker program I tried to run).

    If you're missing the os module your python install is majorly broken.

    --
    I am trolling