Thursday, September 22, 2011

Development will probably grind to a halt for a while as I get through dota2, grad school, interviews etc. Check back periodically but probably not till 2012!

Wednesday, September 21, 2011

Added "fire" as a craftable item that repels wolves, but due to how pathfinding is specific to an exact coordinate, if that coordinate isn't movable to (e.g. a wall) the wolf just gets stuck.

Added "degrades" tag to items, so they expire over time.
"fire" has this tag, so you can craft it, repel wolves for a few seconds, then get eaten alive as the 10 wolves that are stuck around you get unstuck.

Also ran two stress tests:
200 deer all pathfinding at the same time: very choppy, but still runs.
Running for as long as it can: 30 minutes before the closedList of a pathfinding wolf threw an outofmemory exception, so I fiddled with that. Running it again as I post this (at 10 minutes right now).

Things I'm working on before it becomes a proper game: getting flee to work correctly for wolves, field-of-view to work correctly, tags for buildings/remaking the whole buildings thing, and then altars and gods.
Kludged NPCs together again.

Wolves are in, and are killing everything in sight pretty quickly.
Added day/night cycle.

Working on getting wolves working, but I'm having problems deciding how NPCs should work.

Monday, September 19, 2011

Changed options for spritebatch draw to make zooming not blurry and added oryx's lofi font (thanks to poemdexter for showing me how to do the first and for the reordered bitmap font!)

Added messages (you killed a goblin, chopped a tree, etc.) box at the bottom.

NPCs/Players drop corpses on death, and are added to a "dead list" (again, thanks to poem for this idea. For his roguelike he was thinking about necromancy/zombies etc.)
Added fog-of-war to the game.

From a design standpoint, I wasn't really sure what I wanted from a roguelike or DFlike in general. After playing a little minecraft and DCSS today I came to the conclusion that exploration is interesting, and having the whole map revealed though convenient, is pretty boring. This is probably intuitive to anyone reading this, but it's not really something I thought about until now. Anyways, have a screenshot:

Also, added saving of turns (will be used for weather, tides, day/night cycles, and seasons.)
Still need to add saving of HP, inventories, and now the fow map.
Also need to add a more functional fow (walls should block vision).

Saturday, September 17, 2011

NPCs and players can now drop things on death.
Saving and loading almost fully implemented (just need to add saving turns, HP values, and inventories).
Refined pathfinding again (originally counted the initial square in movement)
Refined attacking for player (player will continously findpath to target, whether to add this for enemies is yet to be seen)
Added workshop functionality, terraria style (need to be close to workshop to build certain items)
Added command allowing player to attack NPCs, added drop and get commands, and cleaned up building commands.

Now pretty much ready to start to make functional buildings.

Friday, September 16, 2011

Added:

  • Everyone now has a damage rating.
  • Default enemies (goblins for now) now attack the player.
  • Significantly cleaned up player movement and digging. Integrated everything for transition to many dwarves. (commands all off of player and totalBehavior rather than separate and on game end)
  • Turn count is now shown, and apparently I'm running at about 60 FPS, so I think things are in good shape.

Thursday, September 15, 2011

Added a* pathfinding to NPCs, cleaned it up for NPCs, rewrote some of the flee behavior for deer, and added a generic enemy type NPC.

Enemy chases the player around!

Tuesday, September 13, 2011

A little cleaning of pathfinding just to make sure everything is fine and dandy.

Added zooming in/out.

Monday, September 12, 2011

Ok, I am the worst. Looking through pathfinding again and trying to see where I had spots I could optimize, I noticed that the closedList looked mighty big. Digging through it deeper, I saw that it had repeats, even though it's not supposed to. Turns out I forgot to exclude the closedList coordinates from my pathfinding. The pathfinding is now ridiculously faster than it was before, and doesn't even hiccup when moving across the whole 200x200 map. The good news is that after a month, I've finally gotten through the hard stuff and now can move to combat without worry; bad news is obviously that it took a month for me to figure it out (well, a few days if we count actual days thinking about it).

Sunday, September 11, 2011

Crawled through my pathfinding again to see if there anywhere I can optimize, but it seems like this is about it. If anyone has any ideas (I'm using a* with a binaryheap for the openlist) please let me know. It takes about 2 seconds to pathfind a decently complicated 50x100 space.

Reminder: I need to implement flood-fill passable check for different areas.

Anyways, I've gotten as far as I can for now with pathfinding and am dangerously close to getting bored. Even though I thought/think that speedy pathfinding will be the limitation for the game I'd rather move on to more interesting stuff.

Added:

NPCs dying when hitting 0 hp

Sunday, July 31, 2011

Added pausing, a help menu to remember all the hotkeys, and right click to give you info.
For future reference, previous optimization of pathfinding was writing and using a binary heap for the openList. Did a little more optimization by checking if the movement endpoint is actually walkable or not.
Optimized pathfinding a little, but it's still a little slow. Might look into threading later but for now I think I have to use my old pathfinding for long distances and a* only for the short one.

Time to start on the fun part, combat!

Thursday, July 28, 2011

good a* pathfinding implemented for the player's regular movement and move-to-dig.
Need to expand this to move-to-build and the ai, and add flood-fill passable terrain map for both ai and player to make sure game doesn't wait forever while calculating a* to inaccessible areas.

Saturday, July 23, 2011

Perfected mapgen a little.
I think I'm going to make a 200 by 200 map as an overworld, and take chunks of it (probably 5x5) and derive 200x200 maps from those as actual working maps to play on. The current mapgen is pretty good for an overworld, and it's easy enough to adjust for the smaller pieces. This is mostly due to too much stuff that needs to be checked and drawn for maps larger than 200x200.

Bad pathing is definite starting to become a problem. Deer can't maneuver through the map very well now.

Still need to learn perlin well.

timber's been added, and similarly trees.

I think pathing needs to be fully resolved before I'll move on to combat, so this may take a while because I need to slog through a*.
About the month-long pause, got bored/busy with real life:

So, got lazy and implemented perlin noise from:

resulting in this decent looking map generation:


Some issues I need to think about:
  • my fillermoving (not true A* apparently) pathfinding still isn't robust enough, probably I need to really implement A*
  • how large the map needs to be: current 200x200 map with about 10,000 rock walls is a little laggy, but not too bad. I shudder to think what a 1000x1000 map with multiple AI and dwarves would play like though.
  • what the map actually represents. Is it 1 dwarf per dwarf tile? If so, this map gen varies a little too hard and needs to be stretched
  • actually learning the perlinNoise stuff implemented all the way through: I know enough of the basics but I'd like know it well enough to be able to tune it completely to my preferences/code it from scratch
things I need to start doing:
  • adding combat
  • adding more items (just rocks and grass right now)
  • adding more craftables/buildings (just doors right now)
I feel somewhat satisfied with the mapgen and the fact that I still come back to this and not be lost looking through my code. I'll probably be working on this a lot harder after this weekend.

Tuesday, June 21, 2011

Added movement penalties for appropriate floors

Looking into Perlin noise for map generation here:

  • http://digitalerr0r.wordpress.com/2011/05/15/xna-shader-programming-tutorial-25-perlin-noise-using-the-gpu/
  • http://freespace.virgin.net/hugo.elias/models/m_perlin.htm
  • http://stackoverflow.com/questions/4753055/perlin-noise-generation-for-terrain

Monday, June 20, 2011

Added different floor types
Added items spawning on different floor types (grass spawns on grass floors)

Fixed items and walls code to make it less spaghetti codelike and ease the pain of adding new items/walls

Thursday, June 16, 2011

NPCs (deer) are in with good behavior (fleeing from dwarves, looking for grass etc.)

Tuesday, June 14, 2011

Scrollable maps are go (maps bigger than the gamewindow size), scrolling is fine
Saving and loading of walls are added, items, inventory, buildables etc. should be easy tomorrow.

Monday, June 13, 2011

Building Works

Implemented better pathfinding (apparently not a* and just some bastardization of it?)
Building items work
- Doors
Probably need to clean up spaghetti code at the end of every week, but I'm pretty happy right now making doors.

Sunday, June 12, 2011

And Back to C#

Back again, libtcod rubs me the wrong way because I don't feel like I'm actually doing anything but following the tutorial/using their nice code.

Back to C#, and using XNA 4.0 (faith in C# restored due to Terraria using it? Thoughts from a novice).

Using Oryx's very nice pixelart pack.

Things done that were in the last version of the first try with c#:
Basically everything expect for monsters, dropping corpses, scrollable map (it's fixed right now).

Things that are added due to XNA being nice:
graphics. (Oryx)

Things that are added:
mouse control
usable pathfinding (that doesn't involve just charging through walls in a straight line)

Tuesday, April 12, 2011

Let's Do This Again!

Back, and using libtcod on python instead because of total data loss.

Starting from the libtcod/python tutorial on roguebasin.

modified:
monster_death:
monsters now drop their corpses as items instead of turning into corpse objects

monster_ai:
monsters move randomly while out of fov

implemented:
Digging, walls have default 5 digtries (HP) before death