Skip to main content

Ransack

Ransack - a Python based roguelike


Dan Allen
(deadmaker7)

Ransack - a Python based roguelike

In beta stage at the moment. Our hero can explore the levels, collect items, fight monsters, and interact with the townspeople.

Coming soon: Ransack for Android. I've gotten it to run on an Android emulator using Pygame Subset for Android, there's still a mountain of issues to work out, but I'll keep all updates posted here.

Move with arrow keys. Monsters are found in the dungeon. Approach a monster and press Enter to commence battle, the monsters can also initiate battle

Enter is the "action" button, which activates sundry items on the map, including conversing with people in the village or castle.

'c' brings up spell menu and

'i' brings up item inventory.

'a'/'w' brings up armor/weapon menu. Select a weapon/armor from here and it will be automatically equipped. If it is currently equipped, it will not be listed in the weapon or armor menu.

'm' brings up mini-map which displays current level.

's' shows character stats.

't' takes a screenshot.

The game begins in the 'village'. Currently the village has an item shop, magic shop, tavern, blacksmith, and armory. You can save your game but only at the Inn/Tavern which is the three story building.

The plot is currently very simple - visit the King in the castle, then venture into the dungeon and try to defeat the Skeleton King in his fortress.

On venturing into the dungeon, new levels are automatically generated. Each dungeon has a key which unlocks the door to the next stairs down. Try to find the 'secret' dungeon rooms (hint: look at the minimap) Stairs lead hero to the next or previous level. If next level has not been visited yet, it will be generated automatically. The game culminates in a fortress section with a boss. The fortress begins at level 10.

A basic level editor is included. Click the pencil for draw mode and the hand for select mode. In select mode, select a region and move it around the screen. In draw mode, Use 't' to select tiles or select with mouse, move with arrow keys and space bar or point and click to place tiles, and 'd' to toggle draw mode. If you place the door to a shop it will ask you for the level and then draw the entire shop at that location. 's' saves a map and 'l' loads. 'f' flood fills the map with currently selected tile beginning at the location of the cursor. 'g' generates a random map with specified number of rooms. Enter 0 rooms for a maze instead. Click the red square to place non-player characters. The types currently implemented are 'guard', 'female' and 'skeleton' You will then be prompted for a message. 'x' will delete the NPC currently in the cursor. . There are cut/copy paste buttons but I haven't implemented them yet. Note that setting rooms too high may cause the generator to hang if the map is not big enough.

I have created all the artwork for the game, at this point it's quite rudimentary but it will be expanded as the project continues.

Uses sprite sheet code from www.scriptefun.com/transcript-2-using-sprite-sheets-and-drawing-the-background

The level editor uses EzText courtest of pywiz32 - http://www.pygame.org/project-EzText-920-.html The random map generator algorithm is based on the description written here (the actual code is my own):

http://breinygames.blogspot.com/2011/07/random-map-generation.html

The randome maze generator algorithm is taken from the following source:

http://en.wikipedia.org/wiki/Maze_generation_algorithm

The fonts used ingame are: Spinal Tap (http://www.rockbandfonts.com/), Devinne Swash, by Dieter Steffmann. http://www.fontspace.com/dieter-steffmann/devinne-swash Chancery Gothic and Courier.

As a side note, this project is turning into more of an RPG with roguelike features. Rogue purists may sneer :-P but I look forward to seeing what happens with this thing and I hope you do too.

Links

Home Page
http://www.pygame.org/

Releases

Ransack 0.1 — 6 Jul, 2012

Ransack 0.75 — 8 Aug, 2012

Ransack 0.5 — 17 Jul, 2012

Ransack 1.0 — 29 Sep, 2012

Pygame.org account Comments

  • Caleb R. Weir 2012-07-14 23:24:46

    >>>
    (1, 1)

    Traceback (most recent call last):
      File "C:\Users\Hu-mon\Downloads\deadmaker7-ransack-python-19b3543\deadmaker7-ransack-python-19b3543\ransack.py", line 341, in <module>
        main()
      File "C:\Users\Hu-mon\Downloads\deadmaker7-ransack-python-19b3543\deadmaker7-ransack-python-19b3543\ransack.py", line 338, in main
        newGame.mainLoop(mapList)
      File "C:\Users\Hu-mon\Downloads\deadmaker7-ransack-python-19b3543\deadmaker7-ransack-python-19b3543\ransack.py", line 289, in mainLoop
        self.event_handler(event)
      File "C:\Users\Hu-mon\Downloads\deadmaker7-ransack-python-19b3543\deadmaker7-ransack-python-19b3543\ransack.py", line 106, in event_handler
        self.move(pygame.key.name(event.key))
      File "C:\Users\Hu-mon\Downloads\deadmaker7-ransack-python-19b3543\deadmaker7-ransack-python-19b3543\ransack.py", line 245, in move
        self.nextLevel()
      File "C:\Users\Hu-mon\Downloads\deadmaker7-ransack-python-19b3543\deadmaker7-ransack-python-19b3543\ransack.py", line 67, in nextLevel
        self.myMap = self.myDungeon[self.levelDepth]
    IndexError: list index out of range

    I got this message when going from level 2 to 3 I think?  Also, if you go to the stairs behind you immediately after starting the game gets stuck there too.

    Dan Allen 2012-07-15 07:42:17

      Yes, that actually was just because I didn't have a level 3 in place.
    I've just uploaded the latest version which randomly generates each new
    level. I believe the other bug you mentioned has been addressed as well.
    Thanks for taking the time to try out my project :)

  • MARACONT 2012-08-15 07:55:20

    looks great! As it turns out this is the exact format i was planning for my game! i want static dungeons though. i havent tried it but i really like the artwork. how many lines of code?

    Dan Allen 2012-08-15 23:52:19

    Thanks! The core of the game is ~1500 lines, the level editor is another
    ~700. The artwork is turning out to be a lot of fun. Feel free to look
    over the code for ideas and let me know if you have any suggestions.

  • Angello Maggio 2012-10-10 21:15:40

    Hello! I've tried your game and had no problem running it, however I do have some feedback for you if you are interested in hearing my opinion. So first of all wanna say I like your idea and it seems like a great game, I like the old school pixel art graphics and it's a nice project to do by yourself. I like the camera view point work there too. The movement seems a little bit odd, I think the first step he takes is a little delayed but after he starts walking the speed seems like the perfect walking speed. Also I personally found it a tiny bit annoying to deal with the 'There's nothing here' text every time you press Enter, like after getting off a battle where I had been pressing Enter to attack there were like 5 little windows with this text, and that's also a problem in my opinion, they shouldn't stack. Make it so it only shows the window when you're in front of collision-able objects, so this window isn't able to pop out when you're just walking in a place with no objects. Also I don't know if this is my problem or if you haven't implemented it yet but on the fight scene I could only see the menu, no background image of any sort, and only a little bar that changed colors between green and red and became fully green once I had beaten the enemy. Otherwise if you had images I like the battle system, it's cool. Another thing I noticed is that every time you pick of items from a chest it doesn't say the item name, it says "ghost."
    So far I love the game and I'm sure that many of these things I've mentioned already came to your attention, and I'm sure you'll be improving this game and it'll be awesome!
    Also it might be because you haven't implemented the level yet, but when I went to dungeon 5 or so I got this error message
    File "/home/anxello/dsallen7-ransack-python-01ab3df/MAP/mazegen.py", line 130, in generateMap
    self.map.NPCs.append( ( tile, choice(enemyScr.enemiesByLevel[self.map.level] ) ) )
    AttributeError: 'module' object has no attribute 'enemiesByLevel'

    But I'm sure that's because you haven't done level 5 yet, right? I'll be checking into your code once I'm back from class!

    Dan Allen 2012-10-13 01:42:56

    Oh and more images/artwork are coming soon. Just as soon as my scanner is working again. :)

    Dan Allen 2012-10-13 00:29:46

    Thanks, Angello. I've made note of these issues and will be addressing them soon. Level 5 is randomly generated, but it looks like I forgot to upload or update a necessary file. I appreciate your feedback.

    Angello Maggio 2012-10-13 18:26:56

    great! I'll be keeping an eye on the updates, keep it up!

  • Moheb Rofail 2012-10-19 22:45:59

    This game can't work on my computer, in the shell , written:
    Traceback (most recent call last):
    File "D:\Python\Games\dsallen7-ransack-python-01ab3df\game.py", line 11, in <module>
    from MAP import map, mapgen, mazegen
    File "D:\Python\Games\dsallen7-ransack-python-01ab3df\MAP\mazegen.py", line 1, in <module>
    import numpy as np
    ImportError: No module named numpy
    >>>

    Dan Allen 2012-10-20 12:15:16

    Thanks for noting this. I actually know exactly why this is happening, I just haven't had any time to work on this project lately. There will definitely be some updates soon.

    Moheb Rofail 2012-10-20 17:25:17

    I've solved this problem , just by downloading the numpy.exe
    but, the problem is the game difficulty. i have to spend more time to understand it, notice: this isn't good for games, you have to show us with little information how we can play it and what is (are) the purpose(s)
    I guess it's written above, I'll read it, but notice that: it's really yo much to read hhh
    I'm talking about the user point of view :)
    thanks a lot

    Moheb Rofail 2012-10-20 17:35:09

    I don't know the farm-ville too much, but Is your game look like it ??

  • Neccarus 2013-01-01 21:53:41

    Got this error when I clicked on my weapon.

    Traceback (most recent call last):

    File "C:\Users\Erik\Desktop\Ransack\ransack-python-master\ransack.py", line 159, in <module>

    main()

    File "C:\Users\Erik\Desktop\Ransack\ransack-python-master\ransack.py", line 128, in main

    if newGame.mainLoop():

    File "C:\Users\Erik\Desktop\Ransack\ransack-python-master\game.py", line 423, in mainLoop

    self.mouseHandler(event)

    File "C:\Users\Erik\Desktop\Ransack\ransack-python-master\game.py", line 211, in mouseHandler

    self.myHud.mouseHandler(event, mx-(const.gameBoardOffset+self.gameBoard.get_width()), my-const.gameBoardOffset)

    File "C:\Users\Erik\Desktop\Ransack\ransack-python-master\DISPLAY\hud.py", line 247, in mouseHandler

    self.addPopup(self.game.myHero.getWeaponEquipped().getStats(), (59, 209) )

    File "C:\Users\Erik\Desktop\Ransack\ransack-python-master\DISPLAY\hud.py", line 224, in addPopup

    msgText = text.Text(text, os.getcwd()+"/FONTS/gothic.ttf", 10, 10)

    AttributeError: 'str' object has no attribute 'Text'