Lachlan's misadventures in games programming

Showing posts with label Atlas Warriors. Show all posts
Showing posts with label Atlas Warriors. Show all posts

Sunday, 7 December 2014

Atlas Warriors Alpha 8 Released

12/07/2014 02:54:00 pm Posted by Lachlan No comments
Edit: New version has been released - go to https://github.com/lkingsford/AtlasWarriors/releases/tag/alpha-009 for information




Alpha 8 of Atlas Warriors has been released

Since Alpha 3, there have been a whole bunch of new bug fixes. There is also another new tutorial message (for when you are in flames). There is also a new AI for Healers that will prevent crashes later on in the game.

I highly recommend that you update to this version.

You can download the newest version at https://github.com/lkingsford/AtlasWarriors/releases/tag/alpha-008.

You can log issues at https://github.com/lkingsford/AtlasWarriors/issues. The new version will create an 'error.log' file when it crashes. It would be helpful if you could give that file to me when reporting a crash.

Saturday, 8 November 2014

Atlas Warriors Alpha 2 Released

11/08/2014 12:45:00 am Posted by Lachlan No comments

I've released the second alpha of Atlas Warriors on Github. You can get it on https://github.com/lkingsford/AtlasWarriors/releases/tag/alpha-002 for Windows.

Again, please provide any feedback you have.
Tell me what you like about my game, and tell me what is horribly wrong. There is an issue tracker for bugs and the like on https://github.com/lkingsford/AtlasWarriors/issues. Could you please report any minor or (far more importantly) major bugs that pop up?

If it is your first time playing, I recommend you have a look at the weapon summary here to understand how the different weapons worth. Providing an in-game explanation is a high priority.

Potentially incomplete list of changes:
- Added messages dialog
- Modified inventory and load out dialog
- Turned off cheats by default
- Added 'support' link to main menu
- Added support for image backgrounds
- Other bugfixes including (but not limited to)
- Closing issue #7
- Closing issue #6
- Closing issue #4
- Balance changes including
- Altering difficulty of Goliaths
- Altering difficulty of final level depending on difficulty chosen)

Good luck

Thursday, 6 November 2014

Graphical Upgrades for Atlas Warriors

11/06/2014 05:35:00 pm Posted by Lachlan No comments
I've been considering ways to make Atlas Warriors look a little bit better. One approach I'm trying is to display image background behind the playing field.

I think that the effect is striking, but has the potential to be problematic.

I think that I might make them toggleable, and I think that they need further work. For instance, I think that most are a little too bright (hence why I've added the shadows to the letters). I'm interested in your thoughts on whether this is a good idea or should be abandoned. You can click on the images for a closer look.

I can be fairly certain that they'll at least be in the next release.

      

I've also been working on improving the state of the dialog boxes. I've added a basic messages dialog. I've improved the inventory dialog (most notably by adding a 'floor' part - the former only way of picking something up was by walking on it). Finally, I've made the skills a bit tighter. Again, these will all be in the next release.

  


If you're OK dealing with source code or running python scripts, you can get the updates now from Github. You'll need Python 3.3 and Pygame installed. Otherwise, they'll be another release within the week.

Friday, 24 October 2014

Atlas Warriors, First Alpha Pre-Release

10/24/2014 04:57:00 pm Posted by Lachlan No comments
Tl;dr - First prerelease of Atlas Warriors is out, download from https://github.com/lkingsford/AtlasWarriors/releases. It's not quite finished yet.

I've opened up access to the first public pre-release of Atlas Warriors!

It is not finished yet, and shouldn't be considered to be so. There are still features missing (some minor, some glaring) and still some bugs that need fixing (again, some minor and some glaring). But it is playable, (theoretically) winnable and sometimes even fun.

But I really want to emphasise that it is still a work in progress. It still needs more stuff done before I will even consider moving it to Beta.

I finally wanted to get some feedback on how playable it is before starting to move on to attempting to balance the beast. So please - feedback away! Tell me what you like about my game, and tell me what is horribly wrong. There is an issue tracker for bugs and the like on https://github.com/lkingsford/AtlasWarriors/issues. Could you please report any minor or (far more importantly) major bugs that pop up?

You can download it from https://github.com/lkingsford/AtlasWarriors/releases. At the moment, I've only got a Windows 64 bit binary there (so if it doesn't work, that might be why).

You can also get the source from there. It's under an MIT license, so it's fairly open slather what you can do it. If you're running linux, you should be able to play it from source with Python 3.3 and Pygame. It's rl.py that contains the game proper.

If you'd like to support development financially, you can do so on https://pledgie.com/campaigns/27179 or by bitcoin (eek!) sent to 14PgnsEcgqgSrCFxTjVvczfu5Fyh85hjbU (barcode at the end of the post).

I don't think I've made it clear inside the game how some of the weapons work (although you should be able to figure it out fairly quickly). I recommend having a quick look at my previous post (http://www.nerdygentleman.com/2014/10/on-weapons.html) for a bit of a hint. You might also find the descriptions of the monsters on (http://www.nerdygentleman.com/2014/10/meet-monsters.html) to be helpful.

I'm not sure what else to say, so good luck (to both of us...)


Lachlan


PS - Bitcoin Donations - 
Bitcoin donations - to 14PgnsEcgqgSrCFxTjVvczfu5Fyh85hjbU

Tuesday, 7 October 2014

On Weapons

10/07/2014 01:38:00 pm Posted by Lachlan No comments

I have a similar philosophy for this game with weapons in that each weapon class needs to have a unique purpose. Although unlike monsters, I'm very willing to allow weapons to be incremental upgrades of other weapons.

The Weapon Classes will play differently, very inspired by Brogue. We have:

  • Daggers - You get a free counterattack when you are attacked and hit.
  • Swords - Blocking a hit with a sword allows you to parry, effectively attacking the monster.
  • Polearms - Polearms can attack two monsters in a row. At the moment, this only works when one monster is adjacent to you. I'm considering whether or not this should chance.
  • Axes - Axes are slow, but attack in a 90 degree arc. 
  • Blunt - Blunt weapons will stun any monster for one turn, if they hit.
This will hopefully provide some interesting gameplay opportunities.

Sunday, 5 October 2014

Meet the Monsters

10/05/2014 12:45:00 pm Posted by Lachlan 1 comment

My design philosophy (as much as I've had one) for Atlas Warriors is that everything has to have purpose. There is no need on having two different monsters that perform the same function and gameplay.

In order to do this, I do have different levels of some monsters - so (for instance) you can find Bandits, Experienced Bandits, Veteran Bandits and (hopefully never in a promising game) Bandit Warlords. Bandits are unique in being Melee characters who use weapons. There is no need to have another monster just to add a different letter and colour that does the exact same thing just may be a little harder.

As such, there are a small amount of monsters in Atlas Warriors - but they all provide a different experience.

We have (in order of appearance):

Critters - Cute. Furry. Fanged. Clawed. Actually - forget the Cute. They blindly move towards the player and attack them. Usually pretty weak.

Bandits - Men and woman who have dedicated themselves to causing crime for self interests sake. They seek out the player (and are clever enough to find the player rather then just wander in their direction), and attack the player with weapons. They get the same type of weapon effects that the player does.

Orcs - Archers from a foreign land. Orcs are reasonably strong, and have a melee attack but specialise in shooting you from afar.

Goliaths - Big. Gigantic. Brute. These horrors of gargantuan proportions are slow as they are dumb - but they can hit like a tonne of bricks and charge. They have no definition of friend or foe - they mercilessly kill anything in the dungeon and get stronger in the process.

Assassins - You think you see a shadow in the corner of the room. As soon as you turn to look at it, it's gone. You don't even feel the blade between your ribs until it is too late. Unless you are adjacent to them, Assassins are invisible when directly next to a wall or door. They've got low health, but a deadly strike.

Drakes - If it weren't for the stench of sulfur and smoke, you might consider that this midget dragon was almost cute. These breathe fire at you, and can set you alight.

Zombies - You smell the rotting flesh before you see a long dead corpse with the mission to kill. Zombies are fairly weak and have a weak attack. However, each adjacent Zombie reduces your defence significantly. Strength in numbers!

Necromancer - The first subboss. He may be skippable - if you're lucky. Raises Zombies. (I may also give him a bolt attack)

True Dragon - The second subboss. He may be skippable, but killing him will guarantee a very nice reward. This is almost the exception to my minimalism, as it really is a far stronger version of a drake. The True Drgaon will gratuitously provide rolling flames of swift death.

Final Boss - To be determined.

Friday, 3 October 2014

The Tomb of the Necromancer

10/03/2014 12:07:00 pm Posted by Lachlan No comments
I've spent the last few days redoing the monster-generation for levels. It's working reasonably well.

One of the things I've decided is to include a special undead level - the Tomb of the Necromancer. The Tomb of the Necromancer includes the titular Necromancer and Zombies. It's a regularly patterned level with lots of doors that will hopefully have players surrounded and be a sufficiently horrifying and memorable experience.





Zombies are going to be reasonably weak, but they're going to reduce your defense significantly when they're adjacent to you. You won't want too many nearby, or else you're going to be taking a lot more damage and dying a lot sooner.

Friday, 29 August 2014

I don't want to set the world on fire

8/29/2014 02:41:00 pm Posted by Lachlan No comments

TL;DR version - Scroll to the bottom for cool fire spewing animations

I've spent the last days adding at least a basic animation framework, and a fairly cool animation to Atlas Warriors. As a test, I added a blue shimmer when a Healer heals another enemy - which worked just fine but isn't particularly interesting.

The primary reason I wanted it was for implementing Dragons. What is a dragon without some good and proper fire breathing? So, without further ado...

FUS RO DAH!

Lame, I understand - but at least it wasn't another Arrow In The Knee reference

The first step was an algorithm for determining flame coverage over the area fired. That algorithm can be used (with the actual distance) for determining who to ignite, and (by looping the distance from 0 to the actual distance) for creating the animation.

The algorithm is far more simple then what I've probably made it. My pseudo code also probably gives away that I'm a lawyer - not a compsci or programming major... so I hope you can at least understand it. Also know that some was more trial and error'd then well planned. This is sure as hell not best practice!

  • Given:
    • Source
    • Target
    • Desired Distance
    • Desired Radius at distance
  • Calculate angle between Target and Source
  • Calculate the end point ( end(x,y) = (sin(angle) * distance, cos(angle) * distance) )
  • Calculate angle to the other end points. The other end points are separated by 1 unit, perpendicular to the end point, in distance radius in each direction. Put the angles in list J
  • Create a 2D array (G) initialised to zero from [-distance,distance][-distance,distance]
  • For i in J
    • For k := 1 to Distance
      • x = sin(i) * k
      • y = cos(i) * k
      • If x,y blocks flame then break
    • xpart = frac(x + .5)
    • if (xpart < 0) then xpart = xpart + 1
    • ypart = frac(y + .5)
    • if (ypart < 0) then ypart = ypart + 1
    • xint = floor(x + .5)
    • yint = floor(y + .5)
    • G[xint,yint] = G[xint,yint] + xpart/8 + ypart/8
    • G[xint+1,yint] = G[xint,yint] + (1-xpart)/8 + ypart/8
    • G[xint+1,yint+1] = G[xint,yint] + (1-xpart)/8 +(1-ypart)/8
    • G[xint,yint+1] = G[xint,yint] + xpart/8 + (1-ypart)/8
  • Return G
This returns a grid showing how much flame hit each section. That G will have some fractions where only part of a square was hit by the flame. I'm going to use those fractions as the chance of igniting a monster on those tiles. I also use them in the animation.

A sensible person (including possibly me in the future) would: leverage whatever antialiased line algorithm they had access to (including, for instance the pygame ones), do the drawings of a black line on a white surface and use the darkness as the percentage of the square hit. I may still migrate to this in the future. It does still have to be looped to have the collision detection.

The animation is quite simple. As described already, the above algorithm is looped from 0 to the desired distance. For each frame, it loops over the grid and draws a character in a foreground color  and a background color all selected to reflect the value. Mine use > 3, >2, >1, >.75, >.5, >.25, >0.15 and > 0. It does nothing on a 0.

The end result is reasonably good, if not yet perfect. I will note that it will be coming from Dragons - not from the player as in these gifs. They will hopefully be sufficiently horrifying when you have an encounter with them!







Any comments would be appreciated.

Saturday, 23 August 2014

Better Levels, and 'Second Wind'

8/23/2014 10:37:00 am Posted by Lachlan No comments
Since the last post, I've been working on two things. Firstly, I've made the levels more interesting. I've made heavy adjustments to how it plans new rooms, and added the possibility of rooms interconnecting.

I've also added a 'Kill or be Killed' mode (which is essentially the Second Wind mode from  Borderlands). One of my goals has been to keep the figures (like HP and damage) low. Having Kill or be Killed allows me to keep the figures low and make the game a little more harsh knowing that a player will often be able to get themselves back.

The game is never going to be the greatest roguelike - but I'm hoping it'll be a bit of freely available fun. It's also proving to be a good learning exercise.

Not looking forward to trying to balance it though.






Wednesday, 20 August 2014

Atlas Warriors

8/20/2014 01:02:00 am Posted by Lachlan No comments

I've been spending some time working on a Roguelike in Python. It has been so far confirmed to be completable, but way incomplete and unbalanced.

The goal is for a game to be completable in 30 to 60 minutes.

I'm experimenting with a couple of things that will hopefully work out well. I've got an interesting system for calculating accuracy comparing the attackers to hit. Secondly, I've got a heal-on-exploration mechanic where you only replenish health as you explore more areas. I'm trying to keep the numbers nice and low (including HP) - so I'm hoping that levelling up might be almost treated as a method of healing.

Some screens are below



More news will (probably) follow.