Temple of The Roguelike Forums
Development => Design => Topic started by: tuturto on May 25, 2014, 09:42:38 AM
-
So, I finally managed to code something new that can be shown:
(http://i.imgur.com/XTCQSCql.png) (http://imgur.com/XTCQSCq)
It's a stationary fungus, that slowly multiplies if left alone. Eventually a large mass of them will merge into a stronger one that just sits there. Both of them will attack anything that comes close to them and is not related (so regular and great fungi will actually fight each other, thus limiting the multiplication rate). Unlike any other creature so far, these can attack to diagonal directions too. There's also a hard cap on their numbers, to prevent them taking over the whole level.
It's very basic monster currently and I'm thinking that I should try adding something little bit extra there to make them more interesting. Haven't figured out yet, what that extra would be. I'd like to hear any ideas you might come up with.
-
I like the concept of stationary and multiplying.
Also monster classes is a great idea. I thought of something similar instead of classes - levels. Monster with a higher level will attack monster with a lower level. similarly if possible lower level monster will try and retreat from higher ones. - I'll need to code it first though :)
-
The avoidance and retreating routines I'm missing too. Other monsters will happily march next to fungi and get damaged. They won't even attack back. I find it fun to bait other monsters near fungi where they get killed, but I think they should learn to avoid fungi, at least when not directly pursuing player.
I'm trying my hardest to have each different monster type to have something unique about them. Like, how and where they move or what kind of combat abilities they have. Roguebasin has couple good articles that list different ways of differentiating between monsters.
-
Have you played hyperrogue? It has a really cool stationary & multiplying monster. It's designed for a 1hp game, but the idea would work pretty well in other roguelikes too.
-
Definitely agree. I wrote a very complex AI routine which was eventually junked because it assumed that all monsters faced the same direction.
Currently mine are just standing around waiting for the AI. But at least they now face different directions.
People think that for retreat you just reverse the direction, but it's not always that simple - specially when trying to prevent monsters becoming stuck in corners.
Not played hyper - I'll check it out :)
-
That's actually a fine idea. If you want to further extend the concept you could add "ageing" to it. When they multiply their newborns are at their weakest state but as time advances their skin hardens turning them into tougher opponents. Maybe they can only multiply when reaching an adult state and when doing it so, they could also develop some sort of defense mechanism, like spitting some nasty stuff.
-
I'll try out HyperRogue. I have known that it exists for a while, but haven't gotten around to try it out yet. As a concept, it looks really nice and quite a bit different than what I have usually played.
Aging is interesting idea and worth exploring more. They could also grow spikes or start releasing toxic fumes (that don't spread too wide, otherwise player might run out of space to manoeuvre too soon). Spitting poison for a short distance (like two squares) would beef them up considerably.
-
A thought on ageing.
I had different skeletons with different colours and different speeds to denote their age. The older ones also had less intelligence.
They also were more prone to get bored when chasing you.
-
Hey there Adam Strange, about retreating for monsters there are some frustratingly good algorithms for this using dikjstra maps. Brogue uses them a lot. It's HORRIBLE! Goddamn monkeys steal my shit and run run run run run and can never catch them, they know which door to go for...
I think there is an article on how Brogue handles this but I cannot find it. Anyone want to find it for me? Pender's Dijkstra map article?
-
Another thing that could be done is having "adults" multiplying when killed, this would add a new strategy element urging the player to neutralize them before they can reach maturity. Finally, you could make them (if not already) releasing a toxic cloud whenever they are slayed, granting a negative side effect for those players standing too close to it as well as making ranged combat the ideal strategy to handle them (if not already).
-
Tried hyperrogue and that is really cool game. I liked how there are different environments with different kinds of monsters and mechanics. Stuff like living wall I might end borrowing with some modifications.
A thought on ageing.
I had different skeletons with different colours and different speeds to denote their age. The older ones also had less intelligence.
They also were more prone to get bored when chasing you.
I have simple skeletons in game. They just wander around the level, patrolling from room to room and if player walks too close to them, they start chasing him. If player can outrun them, they'll forget the encounter and return to patrolling. Having skeletons, zombies and mummies of different ages would be nice. I like the idea of the older one getting less and less interested on what is happening around them.
Another thing that could be done is having "adults" multiplying when killed, this would add a new strategy element urging the player to neutralize them before they can reach maturity. Finally, you could make them (if not already) releasing a toxic cloud whenever they are slayed, granting a negative side effect for those players standing too close to it as well as making ranged combat the ideal strategy to handle them (if not already).
This might be a really good idea for greater fungi. They are a bit boring now, since all the do is sit still and attack everything around them. Releasing a toxic cloud (think of spores) when killed and possibly spawning some regular fungi at the same sounds interesting way to differentiate them more.
-
The one thing I would warn is that if the things get more powerful as time goes on, you maybe only make that happen if the player is nearby, so they don't go explore the other side of the dungeon, not even realizing your fungus is there, and come back to find rooms full of mature superfungus.
Of course, if your levels are small enough, this doesn't really apply.
I played a game once (I think it was Crawl with its Oklob plants?) where there was some kind of reproducing monster and it ended up taking over a large portion of the level just because I went the other way. Annoying, especially 'cause even if I knew that it did that, I had no idea it was even there.
-
The one thing I would warn is that if the things get more powerful as time goes on, you maybe only make that happen if the player is nearby, so they don't go explore the other side of the dungeon, not even realizing your fungus is there, and come back to find rooms full of mature superfungus.
Of course, if your levels are small enough, this doesn't really apply.
I played a game once (I think it was Crawl with its Oklob plants?) where there was some kind of reproducing monster and it ended up taking over a large portion of the level just because I went the other way. Annoying, especially 'cause even if I knew that it did that, I had no idea it was even there.
I'm aware of that threat. Long ago I played a game with some sort of worms that kept multiplying. If you didn't kill them fast enough, they eventually got better of you and covered large areas of the level. That's something I want to avoid. Same thing applies to monsters that get stronger as time progresses.
Which gives me an idea. I could limit the multiplying effect to happen only in rooms. That way fungi would never escape into tunnels and their numbers would be more controlled.
This is probably one of those things that needs to be playtested over and over again when the game changes.
-
Hmmm, Thought about this one and came up with this idea:
lets say we have a fungus A.
if can replicate itself - but (here's the interesting bit) It's not of type A but Fungus B
Fungus B has a defined lifespan that after a certain time it dies. But it replicates itself (Fungus C)
Fungus C has a lower lifespan and when it dies it reproduces (Fungus B)
Havent coded it (might try it quickly and tweak the results), but you should have a self replicating moving fungus that won't completely take over?
-
Another thought would be to have fungus replicate only when you are within a certain range?
possibly replicate little ones when further away...
-
IRL plants do grow/replicate themselves as much as they can -- which usually limited by suitable soil and/or man-made structures.
Maybe you can make fungus grow only over specific floor type and thematically/strategically distribute this floor type over the level? E. g. it can grow all it want at the left side of the room with a very important door because there is a fountain in that corner.
-
I think I have to create more different fungi or plants, because of all the ideas :) AdamStrange's comment made me think of those egg sacks in Alien movies. They're dormant, but will awake when something suitable wanders too close.
I especially like the idea of having them to gather around some specific landmark, like fountain or patch of soil. If they prefer certain area and won't wander far from it, they won't take over the whole level.
One other monster I have been thinking of is bats (or other winged creatures). I have these pits:
(http://i.imgur.com/LYONyzn.png)
And they could use some spicing up. One idea I had is that there would sometimes be bats that circle around over the pit and when disturbed would attack the player. Or the pit might appear empty, but when player approaches, the bats might fly up from the pit.
-
I'm aware of that threat. Long ago I played a game with some sort of worms that kept multiplying. If you didn't kill them fast enough, they eventually got better of you and covered large areas of the level.
Sounds like Angband.
-
I'm aware of that threat. Long ago I played a game with some sort of worms that kept multiplying. If you didn't kill them fast enough, they eventually got better of you and covered large areas of the level.
Sounds like Angband.
Most likely it was. It had lots of references to Lord of the Rings and levels weren't persistent. Angband would fit the description.
-
I think that Cfyz's ground type restriction to be a fine idea making mechanics more realistic (my favorite). However, this can be surprise spoiler as one will be able to tell what kind of creatures he may find just by noticing the floor type. Keep this in mind.
-
bats and flying creatures, here's a thought...
Add a Levitate variable, default is false, levitating = true
if levitating then don't check for pits, (I suppose ground based things like traps, water, etc) etc
- this way any movement is the same, we just don't check it
So a bat is the same as a rat - but it has levitate as true
There is also something to note here. If we now have a levitate option. This can be used on any monster and also you - meaning you have a levitate spell, allows access to areas you couldn't previously get access so (e.g over lava or a big pit).
Of course you could use a levitate var:
0 = no levitate
<0 is permanent levitate
>0 is levitate (decreasing by 1)
this would mean you now have a timed levitate option...
-
Add a Levitate variable, default is false, levitating = true
if levitating then don't check for pits, (I suppose ground based things like traps, water, etc) etc
That's exactly how I did it in Veins of the Earth... Seems great minds think alike.
-
Hey there Adam Strange, about retreating for monsters there are some frustratingly good algorithms for this using dikjstra maps. Brogue uses them a lot. It's HORRIBLE! Goddamn monkeys steal my shit and run run run run run and can never catch them, they know which door to go for...
I think there is an article on how Brogue handles this but I cannot find it. Anyone want to find it for me? Pender's Dijkstra map article?
I think you mean the one on Rogue Basin: http://www.roguebasin.com/index.php?title=The_Incredible_Power_of_Dijkstra_Maps (http://www.roguebasin.com/index.php?title=The_Incredible_Power_of_Dijkstra_Maps)
-
I think that Cfyz's ground type restriction to be a fine idea making mechanics more realistic (my favorite). However, this can be surprise spoiler as one will be able to tell what kind of creatures he may find just by noticing the floor type. Keep this in mind.
This probably wouldn't be a problem, since special floor types wouldn't cover large areas. And on the other hand, they would serve as a warning to an experienced player "hm.. this soil is type where demon burrowers thrive, I better prepare accordingly".
bats and flying creatures, here's a thought...
Add a Levitate variable, default is false, levitating = true
if levitating then don't check for pits, (I suppose ground based things like traps, water, etc) etc
I haven't really thought whole flying thing yet. I can have magic effects that run out after certain time and that time might or might not be during players turn. It will probably depend a bit on what kind of traps and obstacles I have at the point when I start working on with flying.
I think you mean the one on Rogue Basin: http://www.roguebasin.com/index.php?title=The_Incredible_Power_of_Dijkstra_Maps (http://www.roguebasin.com/index.php?title=The_Incredible_Power_of_Dijkstra_Maps)
This is good stuff. Have to keep it in mind for the future.
-
Veins of the Earth looks might impressive :)
More thought on the levitation front as I've been coding it.
if your map is flat, then you won't be interested...
If your map is not flat (it has height) read on - note the pits would mean you have different floor heights.
OK. When levitating - I thought it would be a simple task of floating above the floor
But, if the floor height changes, then the floating must take account of that, so you don't simply drop down into the pit - you would either float over it, or slowly float downwards (depending on your weight)
so to recap:
floatingvar can be a simple height above, or feed it a sin value for wavelike floating
if floorheight > levitate height then
levitateHeight = floorHeight + floatingvar
else
levitateHeight = levitateHeight - (weight * 0.1)
That should make it work :)
-
Instead of thinking about what a monster does and what traits it has, imo you're better off thinking about what design goals you want your monsters to accomplish.
First decide that you want a monster that eg. forces the player to only engage with it when it is alone, and then think about what traits the monster needs to have in order to accomplish that.
-
Instead of thinking about what a monster does and what traits it has, imo you're better off thinking about what design goals you want your monsters to accomplish.
First decide that you want a monster that eg. forces the player to only engage with it when it is alone, and then think about what traits the monster needs to have in order to accomplish that.
That is a sensible approach to the problem (but I'm not exactly known for my sensibility..). Probably should try this approach too, after I have a bit more building blocks at my disposal.
My current approach is to create creatures that are varied and have distinct behaviour or traits. Then, hopefully I'll get something emergent when they are put on the same level. Like when I created rats that like walking alongside the walls and fire beetles that prefer areas away from walls. Place couple in the same room and the player will have hard time sneaking past.
-
mmm, I think I agree there. Much better to get a way to give monsters traits and what it does and then let it go.
But, surely a trait is a goal?
E.G.
(goal = kill player) = (trait = unfriendly)
(goal = wants gold) = (trait = wants gold)
Of course you could also add specific goals to monster and have the best of both
-
"kill player" isn't a game designer's goal. A goal would be "make open areas dangerous" or "force player out of safe corridors" and the creatures that fulfill this might be a swarming creature, or a creature that spawns enemies (requiring the player to address it sooner rather than later).
-
My current approach is to create creatures that are varied and have distinct behaviour or traits. Then, hopefully I'll get something emergent when they are put on the same level. Like when I created rats that like walking alongside the walls and fire beetles that prefer areas away from walls.
I like the way you think, I got fun effects by allowing each critter to modify the dungeon in different ways. Putting two different critters in the same level got substantially different architecture than either alone.
-
I like the way you think, I got fun effects by allowing each critter to modify the dungeon in different ways. Putting two different critters in the same level got substantially different architecture than either alone.
I have wanted to write creatures that would modify the level, but haven't yet. What kind of approach did you choose and in what ways are they modifying levels?
-
Monsters that knock down walls have been part of the moria tradition (including angband) since the mid-eighties. Monsters that both reproduce and knock down walls (and explode on death, killing more walls) have been in tomenet for about ten years (so-called "Unmakers"). Tomenet also has monsters with breath weapons that destroy walls (disintegration and rockets, which probably actually come from old school tome or zangband, but idk). If you're looking for a smarter kind of level modification, I don't know any good examples.
-
Also, keep in mind that creatures which replicate rarely can live forever. You could make it so that a fungus needs a certain amount of resources to sustain its growth level. Or hell, you could just set their growth level relative to a death rate, so the little buggers kill themselves off over time.
Wait a minute. What about genetic mutations? i.e. each time a fungus replicates, the offspring has "mutated stats," and then let the little buggers attack anything close by, including each other!!! You could produce a kind of natural selection this way, with the strongest fungi surviving. :D
-
I like the way you think, I got fun effects by allowing each critter to modify the dungeon in different ways. Putting two different critters in the same level got substantially different architecture than either alone.
I have wanted to write creatures that would modify the level, but haven't yet. What kind of approach did you choose and in what ways are they modifying levels?
I started off with wall modifiers because walls vs floor is the most meaningful terrain distinction for the player.
The function "koolaidman" looks at a 3 by 3 square of tiles and determines if changing the center tile could change the connectivity of the map. (this is because the koolaidman bursts through walls)
Rockworm larva move only orthogonaly and can burrow into walls that do not change connectivity. The creates a maze with walls a single tile thick.
### ###
.X. no #X. yes
### ###
Dwarf miners dig in straight lines turning 90 degrees whenever they find gold. When they collect enough gold they turn into dragons.
They occasionally create dwarf civilians.
Dwarf civilians remove exposed corners (unless it is next to a door)
###
.x#
..#
and place doors sometimes when they enter a room
#.#
#x#
..#
This combination creates a room and corridor layout.
Cave bison burst through walls that are only exposed on two opposite sides.
.#.
.X.
.##
this greatly increases connectivity and allows grass to spread so they can eat it.
Antelope clean up by removing walls that are exposed on three sides and do not change connectivity or wall connectivity. The finishes the transition from corridors to grassland.
There are also ants that carve a tunnel if
#
##
X
##
#
this creates a network of natural looking tunnels with plenty of short side tunnels.
-
Wait a minute. What about genetic mutations? i.e. each time a fungus replicates, the offspring has "mutated stats," and then let the little buggers attack anything close by, including each other!!! You could produce a kind of natural selection this way, with the strongest fungi surviving. :D
I love the way you think, Kimchi!
-
That's pretty much what I was after Hi, thanks for explaining.
Also, keep in mind that creatures which replicate rarely can live forever. You could make it so that a fungus needs a certain amount of resources to sustain its growth level. Or hell, you could just set their growth level relative to a death rate, so the little buggers kill themselves off over time.
That's the plan (limiting their lifespan) eventually. In the meantime I'll try to add something new on the game, since it's sorely lacking content. Just couple of different monsters and items don't carry that far. I'm tempted to add more undead ones, like zombies or mummies. Perhaps have graves that you can try to loot for items, while risking on angering the skeleton there.
-
mmmm, I'm ready to start and been tweaking values and came up with this:
monster = MONSTER_SPORE
spore is not active until triggered by you being in room/near
each frame, health of spore is decreased
if you are exactly at a distance of 3, the spore will attempt to spawn a new spore next to itself. It will also decrease it's health more rapidly.
when health of spore is 0 then the spore dies.
with this, the spores replicate and are also killed, spores only replicate when you are near, so staying around is your own fault. The spores don't move.
-
mmmm, I'm ready to start and been tweaking values and came up with this:
monster = MONSTER_SPORE
spore is not active until triggered by you being in room/near
each frame, health of spore is decreased
if you are exactly at a distance of 3, the spore will attempt to spawn a new spore next to itself. It will also decrease it's health more rapidly.
when health of spore is 0 then the spore dies.
with this, the spores replicate and are also killed, spores only replicate when you are near, so staying around is your own fault. The spores don't move.
If/when you code this, let us know how does it work. But wouldn't this eventually kill all the spores, if the player hangs close enough for their health to deplete, but not at a distance of 3? But I like how they are active only when player is close by. That saves from lot of hassle (like them taking over the level or eating up lots of CPU).
I added graves in the game this weekend. With correct tools, player can dig them up in search of items (currently mostly simply weapons, some martial ones with some luck), but risks disturbing possible monster there (mostly rats, sometimes skeletons). If there's a monster in the grave, it usually gets a free hit against the player, unless the monster is very slow or player is very fast.
-
ok here's what I've got
- when you are near, the spore is triggered
the replication code is in the AI section as it's a behaviour (spores can't move)
here's the spore AI:
- if random from 0 to 200 is < 2 continue
- get the distance from the spore to you
- if distance >= 2.5 or distance <= 4.5 Spawn new spore with double the decrease of spore health (new spores die faster)
in the rest of the game
- spore checks if you are near
- if near then pink spore attack (the spores are pink!)
I tweaked my setting till I got a replication auto death rate i liked. There was one time I got a > instead of a < and the spores kept replicating till they took over, which was cool, but not brilliant.
I also tried a variation when the spores would only replicate when you were further that 4 away from them - they took over, but not initially.
About the CPU, what is your monster provision?
I've got mine currently at a max of 200 on a 60x60 map without cpu issues (but i'm not checking monster against monster yet)
-
I removed all constraints for spawning extra fungi and let them flood the level as much as they could. The infighting limited it a bit in rooms, but corridors were mostly full. There were no problems with the CPU in this case, but I only had fungi on the level (so no pathfinding or any other complicated logic going on). Level size is 79x20, so some hundreds of monsters. Seems I was worried about CPU for nothing (at least in this case).
-
79x20 - interesting resolution.
I've not dealt with monster on monster interaction yet - but i've coded it so it should work with a little tweaking when I get there.
I thought the CPU would handle it (unless you were doing something really odd in the code) - yep, replication doesn't use path finding.
I've been looking at the new rooms, and rat AI entires on your blog (didn't realise you were using python to code with).
-
The resolution is holdover from earlier way of storing level data. I recently switched to system, where I don't have to worry about size of the levels while generating the levels. They can just freely grow to all directions as needed.
Yes, I'm coding in Python and slowly switching over to Hy (embedded Lisp running on top of Python). That gives me some performance penalty compared to using C/C++ for example, but as long as I don't do anything stupid it should be fine. And writing Python/Hy is much more faster for me than working with C/C++. Just have to figure out how to make easy to deploy packages for Linux and Windows without huge amount of effort. I know there are tools for that and I used to have Windows binaries at somepoint.
Here's a screenshot of an adventurer digging up those graves I mentioned earlier. All the items and monsters are spread around the grave as one digs them up. Here I was testing it with rats and skeletons, but I think it would be fun to create some more specialized monsters too. One idea I have been toying with is an undertaker that walks around the graveyard tending the graves. It mostly ignores the player, until he starts digging up the graves.
(http://i.imgur.com/7P3284Ml.png) (http://imgur.com/7P3284M)
-
great idea for the keeper, maybe he could fill in graves when he finds them open?
Just been dealing with puffballs that get larger as you get nearer. when you are next to them, they pop and any puffballs next to them start a countdown and also pop. Thinking I should add self replication, so once one pops, they will all pop!
before:
(https://vjointeractive.files.wordpress.com/2014/06/screen-shot-2014-06-10-at-11-43-08.png)
They pops:
(https://vjointeractive.files.wordpress.com/2014/06/screen-shot-2014-06-10-at-11-44-07.png)
As an aside I've got some flat 2d graphics left over from my first version if you want some walls (gauntlet style) in grey - color to be added if you want - all versions (corners/etc) complete. Also some floor graphics?
-
The resolution is holdover from earlier way of storing level data. I recently switched to system, where I don't have to worry about size of the levels while generating the levels. They can just freely grow to all directions as needed.
That's a cool system, how do you do it?
-
great idea for the keeper, maybe he could fill in graves when he finds them open?
I was thinking that he might have a very limited vision range and if he finds an open grave, he would first fill it and then actively start searching for the player. He could even be blind, so as long as the player doesn't end right next to him, it would be safe to move around.
Just been dealing with puffballs that get larger as you get nearer. when you are next to them, they pop and any puffballs next to them start a countdown and also pop. Thinking I should add self replication, so once one pops, they will all pop!
Looks nifty. When they pop, they'll do damage to player? Are there any secondary effects.
As an aside I've got some flat 2d graphics left over from my first version if you want some walls (gauntlet style) in grey - color to be added if you want - all versions (corners/etc) complete. Also some floor graphics?
I'm always interested on new graphics and would use them if they fit stylewise to what I already have.
The resolution is holdover from earlier way of storing level data. I recently switched to system, where I don't have to worry about size of the levels while generating the levels. They can just freely grow to all directions as needed.
That's a cool system, how do you do it?
Instead of storing maps in two dimensional array (list of lists actually), I'm using a dictionary with coordinates as key and tile structure as value. Querying level at given coordinates will return the data the program is after or null if there is no tile at the given coordinates. Assigning a value to given location will create a tile if there is no one there already. Negative coordinates work equally well as positive. If I wanted, I could use three dimensional coordinates to create cliffs, chasms and such, but that is starting to get a bit more complicated that I want to deal with right now.
I wrote a bit more detailed explanation at: http://engineersjourney.wordpress.com/2014/05/29/new-level-structure/
-
The resolution is holdover from earlier way of storing level data. I recently switched to system, where I don't have to worry about size of the levels while generating the levels. They can just freely grow to all directions as needed.
Why would you want to grow the levels arbitrarily during generation? Even if you have a good reason, why not creating a big dungeon canvas, generate your level, and then 'crop' it to the used size? Dictionary accesses sound terribly slow compared to contiguous memory, but then again not sure about anything performance-wise in hy.
-
The resolution is holdover from earlier way of storing level data. I recently switched to system, where I don't have to worry about size of the levels while generating the levels. They can just freely grow to all directions as needed.
Why would you want to grow the levels arbitrarily during generation? Even if you have a good reason, why not creating a big dungeon canvas, generate your level, and then 'crop' it to the used size? Dictionary accesses sound terribly slow compared to contiguous memory, but then again not sure about anything performance-wise in hy.
Dictionaries are slower than continuous blocks of memory, but since I don't have 2D-arrays at my disposal anyway, but have to use list of lists instead, the difference isn't big. And I'm writing a roguelike, performance isn't usually the problem (unless I'm doing something totally stupid).
Being able to grow to any direction is just a nice feature. One could just plop down a room and add rooms around it and connect them together with corridors. And then just repeat that over and over until level is ready, without worrying about running into a boundary. Cropping definitely would be another option doing that though.
Bonus is that I could add more rooms or tunnels during gameplay, again without worrying about boundaries. Not sure yet, why I would want to do this though.
-
Fair enough, lists suck for mass storage :)
And I'm writing a roguelike, performance isn't usually the problem (unless I'm doing something totally stupid).
Well, I'd be kinda cautious with that one, as some bad design decisions might limit you later on unless you do a massive overhaul, e.g. monster handling being overly slow -> not many monsters possible otherwise performance will suck
-
And I'm writing a roguelike, performance isn't usually the problem (unless I'm doing something totally stupid).
Well, I'd be kinda cautious with that one, as some bad design decisions might limit you later on unless you do a massive overhaul, e.g. monster handling being overly slow -> not many monsters possible otherwise performance will suck
That is very true. And time spent on rewriting is time not spent on writing new features.
-
Looks nifty. When they pop, they'll do damage to player? Are there any secondary effects.
Yep, they do a lot of damage, so keep away - this can all be tweaked of course
hmm, secondary effect - I hadn't thought of that :)
-
I've got some plant men in my project. They are not that tough but they give out a cloud of spores when hit.
(https://www.mediafire.com/convkey/17ee/5m01zwhbcomsz9j6g.jpg)
I'm trying to include a lot of different types of monsters which have different behavior and attack types rather than just a bunch of progressively tougher enemies.
These plant creatures for example won't usually attack unless you get too close, but the 'diseased' variety (the brown ones) start out crazed and will attack anyone they see, even other monsters if they are the closest threat.
Some roguelikes have a set of effects that can be set on the player, like dazed, diseased, poisoned etc... I hope to make good use of that to include a bunch of secondary effects.
I think using dictionaries for map data is a great idea for roguelikes. Most computers now can handle the extra drain and it makes things much more flexible. A tile can contain almost anything, and you can set traits of a tile on the fly, allowing spells or effects which can change the layout of the level. Imagine being able to place lava on a tile by hand, or "zap!" a wand of pit traps!
Unless your level is like 500x500 tiles in size I don't think you're going to get performance issues. Even then you could crop the areas which is active, not performing checks on creatures or items which are outside the active radius.
-
Mr Pickledtezcat, your blog seems broken with allowing comments by the way ;)
-
Those plantmen look pretty cool. Is it possible for them to hide in high grass or some other vegetation? Since they certainly look like they would blend in very well.
I haven't been working on new (or old) creatures in a while now sadly. I figured out a better way to build my levels, so I have been reworking the code for that. The good thing is that after I'm done, I can combine new parts more freely and hopefully create more interesting rooms.
But hopefully after that I can create some more content again. I have been given really good ideas for that stuff already anyway.
-
Mr Pickledtezcat, your blog seems broken with allowing comments by the way ;)
Hi, thanks for the heads up.
I think I fixed it. There was a problem but it should now allow anyone to post without having to do a verification or anything.
Those plantmen look pretty cool. Is it possible for them to hide in high grass or some other vegetation? Since they certainly look like they would blend in very well.
Yeah, I want to add some code so that certain monsters might spawn out of a certain tile or furniture item under certain conditions, like a giant spider may crawl out of a barrel if you check it for treasure, or zombies might come out of a grave. The plant men might climb up from out of the ground leaving a mound of dirt behind. I've got flying monsters such as bats which can fly down from the ceiling to land next to the player and ambush them (they will play a special animation as they are placed).
Such monsters should be quite weak, because players will be annoyed at a powerful monster suddenly appearing right next to them and killing their character before they get a chance to do anything. But having the ability to spawn in an unexpected place could be a fun game mechanic for certain monsters. The key is to make it interesting but not annoying, perhaps only allowing it to happen rarely, or limiting the number of times it could happen in a single level...
-
Such monsters should be quite weak, because players will be annoyed at a powerful monster suddenly appearing right next to them and killing their character before they get a chance to do anything. But having the ability to spawn in an unexpected place could be a fun game mechanic for certain monsters. The key is to make it interesting but not annoying, perhaps only allowing it to happen rarely, or limiting the number of times it could happen in a single level...
What if the monsters wouldn't normally spawn by themselves, but the player would have to do something to make it happen? I have graves that might contain items and player can dig them up. But while doing so, he might end up disturbing a skeleton that will then climb out of the grave and attack the player. Later on I'm planning to have tombs of rich and powerful people to have better items and stronger monsters. That way it's not nasty surprise that the player can't control in any way, but a calculated risk.
-
What if the monsters wouldn't normally spawn by themselves, but the player would have to do something to make it happen? I have graves that might contain items and player can dig them up. But while doing so, he might end up disturbing a skeleton that will then climb out of the grave and attack the player. Later on I'm planning to have tombs of rich and powerful people to have better items and stronger monsters. That way it's not nasty surprise that the player can't control in any way, but a calculated risk.
That would work. The key is not to create a situation where the player will be unfairly penalized for something they have no control over. People hate that.
But if they chose to dig up the grave... :)
Other situations:
Throwing a stone down a well might disturb something.
Taking a treasure from an altar could rouse some guardians.
Picking wild mushrooms might have bad consequences.
Feeding gremlins after midnight should be avoided.
Examining an alien egg too closely is not recommended.
Maybe there should be a sign nearby to warn them of the potential consequences, or maybe make sure they get a taste of a weaker encounter before they can trigger the more deadly type of event.
-
What if the monsters wouldn't normally spawn by themselves, but the player would have to do something to make it happen? I have graves that might contain items and player can dig them up. But while doing so, he might end up disturbing a skeleton that will then climb out of the grave and attack the player. Later on I'm planning to have tombs of rich and powerful people to have better items and stronger monsters. That way it's not nasty surprise that the player can't control in any way, but a calculated risk.
ADOM has this. The dwarven graveyard is a pretty good source of loot in diggable graves, but guarded by potentially extremely nasty undead.
Other situations:
Throwing a stone down a well might disturb something.
Taking a treasure from an altar could rouse some guardians.
Picking wild mushrooms might have bad consequences.
Feeding gremlins after midnight should be avoided.
Examining an alien egg too closely is not recommended.
Sounding a magical bell, lighting a brazier, rubbing an oil lamp. There's also the possibility of places where a certain taboo must be upheld to not anger the monsters standing guard. "You are free to roam this place, but don't eat from the trees/pick up any treasure/cast any spells/[...]" Needn't be a problem for players who can exercise restraint (breaking the taboo and getting away with it should entail some advantage, eg. a stat raise or precious stuffz), but then along comes some bastard who assigns a quest to steal an apple from the garden of the gods.
As always,
Minotauros
-
That would work. The key is not to create a situation where the player will be unfairly penalized for something they have no control over. People hate that.
But if they chose to dig up the grave... :)
...
Taking a treasure from an altar could rouse some guardians.
I was looking at implementing something similar in my game. Many of the artifact-level items are generally generated in some sort of arena-structure guarded by a difficult enemy boss encounter. These items are immensely useful, but in order to obtain them the player either needs to eliminate the difficult enemy. If the player wins, they are more powerful than before, thanks to the treasure.
The idea is to allow the player to set their comfort level to their choosing. A low-risk-low-reward game is entirely possible (although the end-game will be more difficult for it), but all that tempting treasure can create a high-risk-high-reward game for the player as well.
-
I like these sorts of ideas. Usually the risk with artifacts is the chance they might be cursed. This idea is much more interesting, and "realistic," I guess you can say (though obviously I use the term loosely), it makes a lot more sense for a powerful artifact to be guarded by a powerful monster in a tomb or vault rather than it just lying around on the dungeon floor.