{ "info": { "author": "Duncan McGreggor", "author_email": "oubiwann@adytum.us", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Programming Language :: Python" ], "description": "~~~~~~\nIsomyr\n~~~~~~\n\n.. contents::\n :depth: 1\n\n\n::\n\n <>\n <> I S O M Y R\n <>\n\n A Python Isometric Game Engine\n\n\n============\nIntroduction\n============\n\ni-so-myr: (n) Any of one or more scenes with the same measurements in\nforeground and background, that have different properties and can exist in any\nof several game worlds for a measurable period of time.\n\nIsomyr is an isometric game engine based on Pygame, and written in Python. A\nfork of the Isotope game engine, it provides the framework for constructing an\nisometric graphics game with actors who can pick up and drop objects, jump onto\nplaforms, and move about in projected 3d isometric environments.\n\n\n========\nFeatures\n========\n\n* Actors: used for player and monster game objects. Capable of facing, gravity,\n collision response, jumping, automation and inventory.\n\n* Multiframe animation and images.\n\n* Simple physics simulation of velocity, collision and touch detection.\n\n* All objects can be customised and extended using Python.\n\n\n============\nDependencies\n============\n\nIsomyr currently has the following dependencies:\n\n* pygame - http://www.pygame.org/download.shtml\n\n* NumPy - http://www.scipy.org/Download\n\n\n============\nInstallation\n============\n\nDevelopment\n-----------\n\nIf you want to develop for txSpore or use the latest code we're working on, you\ncan install from the sources. You'll need bzr installed, and then just do the\nfollowing::\n\n $ bzr branch lp:isomyr\n $ cd isomyr\n $ sudo python setup.py install\n\n\nEasy Install\n------------\n\nYou can use the setuptools easy_install script to get txSpore on your system::\n\n $ sudo easy_install Isomyr\n\n\nManual Download\n---------------\n\nYou can manually download the source tarball from the Python Package Index by\nvisiting the following URL:\n\n http://pypi.python.org/pypi/Isomyr/\n\nYou'll need to untar and gunzip the source, cd into the source directory, and\nthen you can do the usual::\n\n $ sudo python setup.py install\n\n\nChecking the Source\n-------------------\n\nOnce installed, you can test the source code by executing this from the\ntop-level source directory::\n\n $ ./admin/testDocs.py\n $ ./admin/testRunner.py\n\nThat will run the test suite and report on the success and failure of any unit\ntests.\n\n\n=====\nUsage\n=====\n\n\nExamples\n--------\n\nIn the top-level source directory for Isomyr, there is an examples directory.\nThis contains the following:\n\n* The original example from Isotope, ported to work with Isomyr. This is a\n two-room world where a player can pick up two objects and jump on a bed.\n\n* A new open ground example with 14 \"rooms\" that represent an outside\n environment. This example simply shows moving between many connected and\n unwalled scenes.\n\nExamining each of the Python files in the example directories is the best way\nto get a sense of how to use Isomyr to create a game.\n\nThe examples may be run from the top-level source directory, for example::\n\n $ python examples/TwoRooms/tworooms.py\n\nYou may navigate the player with the arrow keys, for jump, and \nfor use.\n\n\n==========\nKnown Bugs\n==========\n\n* When increasing the player velocity, their jumping height also increases.\n When it's high enough, the player can jump out of the scene. This may require\n that ceilings be placed on rooms... but the jumping physics should be\n examined as well.\n\n\n====\nTODO\n====\n\nMisc\n----\n\n* Add a wrapper for managing sprites (related postion vectors, sizing, etc.;\n see code in isometric.py.\n\n* Add support for ConfigParser engine/game configuration.\n\n* Add a sandbox example for drawing just a wall.\n\n* Add logging for all actions (for easy debugging in the console).\n\n* Provide a configuration mechanism whereby game developers can define a\n titlebar image.\n\n* Locate all XXX comments, fix them, and remove them.\n\n* Rename all some_thing methods and variables to someThing.\n\n\nNew Examples\n------------\n\n* Examinable object.\n\n* Explodable objects\n\n* Procedurally-generated background images/grids/etc.\n\n* A \"room\" with multiple terrain types, walking over them demostrates the\n fractional player velocities as determined by the terrain.\n\n* A time demo where time passes differently in different rooms (doors would be\n teleports to other worlds with different calendars).\n\nDocs\n----\n\n* Update USAGE with into about tutorial (and move the tutorial section out of\n the README).\n\n* Update USAGE with interactive prompt example.\n\n* Update USAGE with info about unit tests.\n\n* Update the docs with information about the perspective ratio used by Isomyr.\n\n* Add unit tests.\n\n* Move FAQ out of README and into docs.\n\n\nDirectedAnimatedSkin\n--------------------\n\n* Split out getImage into separate methods.\n\n* Give a method name for every direction.\n\n\nWorld Building\n--------------\n\n* For the new Thing objects, make sure that if an object with children is added\n to a world, that all the children get their world attribute set properly.\n\n* Add support for parsing an ASCII map to generate a room.\n\n\nPlayer Tweaks\n-------------\n\n* When a player picks up an item, that should re-parent the item (new parent =\n player).\n\n* When a player drops an itme, that should re-parent the item (new parent =\n scene).\n\n* Changes to scenes, players, etc., should cause a refresh to happen in the\n scene. The engine shouldn't have to check for individual object changes.\n\n - add an object history-tracking mechanism\n\n* Player sensation occurs in the engine right now... this is not a good\n abstraction. Player examination should be an interaction between player and\n object, within the context of the world (or more practically, within the\n context of a given scene).\n\n\nEngine Improvements\n-------------------\n\n* Engine.start refers to pygame.time.get_ticks -- let's put a wrapper for this\n in our own gametime instance.\n\n* World-relative time belongs in worlds, but gametime belongs in the engine --\n move it back there.\n\n* Add a panel for textual data from the world (reading descriptions, talking to\n NPCs, naration, etc.)\n\n - need to examine the regular view and the info panel, with the idea in mind\n that a game GUI is developing here... need to consider how to make this\n extensible and usable as future feature will impact the layout\n\n - probably need to pull view out of engine module and put it somewhere\n else, maybe:\n\n - create a new gui subpackage with view.py, title.py, inventory.py,\n textarea.py modules?\n\n - or just a gui/layout.py module for now?\n\n* Provide default skinning for objects that don't have skins. Maybe just lots\n of grey with grids on them (spaced to whatever the base unit is for objects).\n\n* Define the mathematical relationship between the following:\n\n - player character size and scene boundaries\n\n - background size/placement and scene boundaries\n\n* Allow the perspective ratio to be configurable. (prototype in the sandbox)\n\n* Write a floor/grid-generating utility function. (prototype in the sandbox)\n\n - Allow grid elements to be controlled run-time (e.g., changing tile colors\n dynamically).\n\n\nMultiple Skin Supprt\n--------------------\n\n* Add support for objects to have differnt skins that would be switched based\n upon environmental factors (e.g., broken windows, limping players, sitting\n players).\n\n\nPhysics\n-------\n\n* Module organization:\n\n - universe needs to become a subpackage\n\n - universe/world.py, universe/weather.py, universe/universe.py,\n universe/time.py, universe/sky.py (moon, meteors, comets, stars)\n\n* Time\n\n - add local in-game time tracking on world instance\n\n - create configurable calendar object\n\n - each world should be instantiated with a calendar, with the option to pass\n an instance\n\n - worlds need to define degree of axial tilt, length of day, length of year\n\n - scenes need to indicate location on globe so that daylight hours can be\n determined; they also need to indicate starting season (time of year)\n and starting time of day\n\n* Weather\n\n - type of atmosphere\n\n - distance of the sun from the planet\n\n - worlds need to define an average global temperature\n\n - based on this, highs and lows need to be calculated for various latitudes\n\n - similarly for the seasons, with axial tilt taken into consideration\n\n - weather conditions should be predefined based on latititude, season, global\n temperature, axial tilt, etc., (as well as allowable transitions from one\n type of weather to another)\n\n* Planetary bodies\n\n - type of sun, color of light\n\n - configurable moon count\n\n - mass/visibility of moons\n\n - light level given off by each moon\n\n - regularity of visible meteor activity\n\n* Movement on world surface\n\n - worlds need to define mass so that gravity, rate of fall, weights of\n objects, etc., can be calculated\n\n - objects also need to indicate their masses\n\n - visually, movement could take place in outdoor and indoor scenes, but could\n also take place at a top-down map-level, allowing for an interactive and\n visual means of traversing great distances\n\n* Add support for fractional velocities.\n\n - it seems that this won't be possible with the current isometric transform,\n as it uses bit-shifting.\n\n* Add gravity multiplier for rate of fall (this goes on world instances).\n\n - this affects velocity of fall as well as traversal speeds across the\n surface\n\n - this affects weight of objects.\n\n* Add terrain traversal modifiers (that augment player velocity)... e.g.,\n pavement, sand, mud, water.\n\n* Allow players to pull objects.\n\n* Pushing and pulling objects should affect player velocity (depending upon the\n weight of the object and the surface over which they are being pushed or\n pulled). This is going to require fractional velocity values.\n\n\nComplex Interactions\n--------------------\n\n* The idea of having weather simulation sparked another idea: events registered\n for various world or scene changes. For instance, a farmer NPC could\n subscribe to weather. Weather transitions could call\n notify(WeatherChange(last, current), and if the transition is defined as\n harmful to crops (mist->rain is cool, drought->downpour is bad, anything to\n hail is bad, etc.) then the farmer NPCs could emote dramatically, rush about,\n leave taverns in a hurry, etc.\n\n\nNetworking Support\n------------------\n\n* Support multiple servers for load-balancing purposes.\n\n* Use RabbitMQ for message exchange.\n\n* Use txAMQP for client code.\n\n\n=======\nChanges\n=======\n\n\nIsotope 1.0 to Isomyr 0.1\n-------------------------\n\n* Refactored in-game object classes for improved abstraction.\n\n* Added abstraction for universe and world object and refactored relationship\n between world and scenes.\n\n* Added an event/handler system (based on the Zope 3 event system) for\n abstracting interactions between objects and their environment.\n\n* Replaced slow vector math with Numpy vector math.\n\n* Refactored GUI code into its own module.\n\n\nIsotope 0.9 to 1.0\n------------------\n\n* Cleaned up code according to Twisted coding standard (augmented PEP-8\n compliance); removed unused and redundant code.\n\n* Refactored skinning code to improve the game-creation workflow.\n\n* Added abstraction for world object and refactored game component\n relationships (e.g., player to environment).\n\n* Improved object velocity implementation.\n\n* Started adding unit tests.\n\n* Added an \"open ground\" example game.\n\n\nIsotope prior to 1.0\n---------------------\n\n* Unknown.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://launchpad.net/isomyr", "keywords": null, "license": "BSD, GPL", "maintainer": null, "maintainer_email": null, "name": "Isomyr", "package_url": "https://pypi.org/project/Isomyr/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/Isomyr/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://launchpad.net/isomyr" }, "release_url": "https://pypi.org/project/Isomyr/0.1/", "requires_dist": null, "requires_python": null, "summary": "A Python Isometric Game Engine.", "version": "0.1" }, "last_serial": 784555, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "a495eefae0a1b8532c83c9616f506934", "sha256": "24fccc9c57470e3a49bbc6040ad1a340b8ac94fe6f983500778bada39a965542" }, "downloads": -1, "filename": "Isomyr-0.1.tar.gz", "has_sig": false, "md5_digest": "a495eefae0a1b8532c83c9616f506934", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2950918, "upload_time": "2009-10-16T01:06:31", "url": "https://files.pythonhosted.org/packages/b1/92/58cc9a355dac976e0df9f789b802c2674fa2a98ed709ff93eb8e8ecefcba/Isomyr-0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a495eefae0a1b8532c83c9616f506934", "sha256": "24fccc9c57470e3a49bbc6040ad1a340b8ac94fe6f983500778bada39a965542" }, "downloads": -1, "filename": "Isomyr-0.1.tar.gz", "has_sig": false, "md5_digest": "a495eefae0a1b8532c83c9616f506934", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2950918, "upload_time": "2009-10-16T01:06:31", "url": "https://files.pythonhosted.org/packages/b1/92/58cc9a355dac976e0df9f789b802c2674fa2a98ed709ff93eb8e8ecefcba/Isomyr-0.1.tar.gz" } ] }