Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - tuturto

Pages: 1 2 3 [4] 5 6 ... 18
46
Programming / Re: LambdaHack and new content
« on: May 27, 2015, 04:08:54 AM »
Created some more books that can be used to boost your stats. One such is book of close combat, that gives 3% damage to close combat, but 3% penalty to ranged one.

Fun stuff, as well as the librarian that often carries those. From my experience in my games (but YMMV), 3% bonus to damage dealt is not worth an equipment slot, and if there's a penalty, it's not even worth the turn spent picking it up. OTOH, if you scale up the bonus and the malus, players may be tempted to wear some items for melee combat and take them off for ranged combat. Which may be fun on levels with corridors, where you risk that you start a fight with wrong equipment, but is rather tedius on open levels, where you just need to remember the routine. The joys of endless balancing. ;)

I would like to avoid encouraging micro-management as much as possible. But if 3% is too little for player to consider using the item, I think I'll scale it upwards a bit and maybe introduce some variation to score too.

Quote
I also noticed a bug in the engine. If your character has maxed equipment (as many items equipped as possible) and you try to equip one more, the game crashes with error message: execFailure: cannot equip any more items

Thanks a lot. Could you give the the git hash (or commit message) of the commit on the LH master branch that you work with? Also did it happen when the player's leader tried to equip, or another player's actor or the AI faction?

It's commit 06ee15ce77d656b1b23a7ab898150ac41d7eebef (Fix followers that got stuck when leader targeted unwalkable tile). I haven't checked what changes the latest LambdaHack has, I should update sometime soon.

From the error message, it was bname = "Hero 1". It wasn't AI controlled at this time, but by me.

Quote
LambdaHack has pretty refreshing take on inventory management and used items. I like that I'm able to equip several weapons that boost my stats and use the strongest one in combat.

I'm glad to hear that. The idea was to make the inventory management as automatic as possible, given that the player controls many actors and also given that newbies should be taken care of until they learn to make their own equipment choices (the 'make your own detailed equipment choices' part is partially WIP, e.g., we still don't have a way to order the actor to attack with a particular weapon).

Great, looking forward to see what kinds other new stuff the future will bring.

47
Programming / Re: LambdaHack and new content
« on: May 26, 2015, 08:48:03 PM »
Created some more books that can be used to boost your stats. One such is book of close combat, that gives 3% damage to close combat, but 3% penalty to ranged one.

I also noticed a bug in the engine. If your character has maxed equipment (as many items equipped as possible) and you try to equip one more, the game crashes with error message: execFailure: cannot equip any more items

LambdaHack has pretty refreshing take on inventory management and used items. I like that I'm able to equip several weapons that boost my stats and use the strongest one in combat.

48
Programming / Re: LambdaHack and new content
« on: May 24, 2015, 09:10:27 PM »
I was playing with wands because I thought they could be used to create guns and such. But there's plenty of other things to do, so that can wait. I'm not even completely sure if I want guns in game or not :)

49
Programming / Re: LambdaHack and new content
« on: May 22, 2015, 06:08:36 PM »
I was experimenting with creation of wands, but didn't manage to do anything useful (I either burned myself with wand of fire or just threw it away). Looking at https://github.com/LambdaHack/LambdaHack/blob/5476c9352782f6ce688e984673ef06224fef6b04/Game/LambdaHack/Common/Ability.hs I didn't see anything about zapping specifically, so I guess wands aren't currently possible?

Btw, good catch with storm hammer being overpowered. I added a short charging period on it and now it's not as effective at keeping enemies at distance as it was before. I might add some secondary effects on it still, like you have.

50
Programming / Re: LambdaHack and new content
« on: May 19, 2015, 05:03:09 PM »
Cool, thanks for the help. I'll continue tinkering with the space privateers and probably ask more basic questions as I progress.

51
Programming / LambdaHack and new content
« on: May 19, 2015, 05:21:19 AM »
I have been poking around with LambdaHack engine again and got couple things I need to understand better. Decided to ask here instead of mailing the author directly so other will benefit from the answers too.

How do items work? Especially are aspects of all items that are being carried active or only those that are currently equipped?

What are EqpSlots used for? For example, ring of Rush has
Code: [Select]
EqpSlot EqpSlotAddSpeed "".

How does rarities work? ItemKind has field rarity that has array of tupples. First value is dungeon level and the second one is rarity. But what does rarity 1 or rarity 10 signify?

52
Programming / Re: Adding Scripting language to your game(C++)
« on: April 07, 2015, 08:14:08 AM »
There's interesting article at http://carloscarrasco.com/embedding-scheme-for-a-game-mission-scripting-dsl.html that touches the subject briefly. However, it doesn't go that much in detail how to bridge C++ and Scheme are bridged and how to generated foreign function interface easily. CFFI (https://common-lisp.net/project/cffi/) doesn't look too bad, you would need to define each and every C++ function you need to call though. Are there really that many, that it would be too unwieldy?

Yes, lisp is really great language.

53
I liked writing a game using LambdaHack. It was pretty easy to get things up and running and the developer of the engine even added some neat features I was wondering about. Party based play is neat and you can change tactics of your team on the fly (let them explore the area freely or stick close to you for example). The stumbling block for me was, that I don't know nearly enough of Haskell to actually code anything complicated. I'm planning on getting back to it though, since there are new features being added on the engine that I want to try out.

54
Programming / Re: LambdaHack
« on: December 15, 2014, 07:34:06 PM »
Thanks, now it works. I played just briefly, so I didn't test everything, but everything so far works. Now I can start tinkering with the new features and see what kinds of things I can do with them. I'm going to add that screen saver mode back in too, should be helpful for testing. And it's fun to watch the game to play itself sometimes :)

55
Programming / Re: LambdaHack
« on: December 15, 2014, 08:02:42 AM »
:D luckily not. That's just output of the data the program is validating and finding problems.

The actual code is more like:

Code: [Select]
-- | Basic players definitions.
module Content.ModeKindPlayer
  ( playerHero, playerMerchant, playerChaos, playerTechCult, playerHorror, playerSpawn
  ) where

import qualified Data.EnumMap.Strict as EM

import Game.LambdaHack.Common.Ability
import Game.LambdaHack.Common.Dice
import Game.LambdaHack.Common.Misc
import Game.LambdaHack.Content.ModeKind

playerHero, playerMerchant, playerChaos, playerHorror, playerTechCult, playerSpawn :: Player Dice

playerHero = Player
  { fname = "Space Privateers"
  , fgroup = "hero"
  , fskillsOther = allSkills
  , fcanEscape = True
  , fneverEmpty = True
  , fhasNumbers = True
  , fhasGender = True
  , ftactic = TFollow
  , fentryLevel = -1
  , finitialActors = 3
  , fleaderMode = LeaderUI $ AutoLeader False False
  , fhasUI = True
  }

playerMerchant = Player
  { fname = "Merchant Mariners"
  , fgroup = "merchant"
  , fskillsOther = meleeAdjacent
  , fcanEscape = False
  , fneverEmpty = False
  , fhasNumbers = False
  , fhasGender = True
  , ftactic = TPatrol
  , fentryLevel = -1
  , finitialActors = 3
  , fleaderMode = LeaderAI $ AutoLeader True False
  , fhasUI = False
  }

playerChaos = Player
  { fname = "Forces of Chaos"
  , fgroup = "chaos"
  , fskillsOther = _meleeAndRanged
  , fcanEscape = False
  , fneverEmpty = False
  , fhasNumbers = False
  , fhasGender = True
  , ftactic = TExplore
  , fentryLevel = -1
  , finitialActors = 3
  , fleaderMode = LeaderAI $ AutoLeader True False
  , fhasUI = False
  }

playerSpawn = Player
  { fname = "Spawns of Warp"
  , fgroup = "spawn"
  , fskillsOther = animalSkills
  , fcanEscape = False
  , fneverEmpty = False
  , fhasNumbers = False
  , fhasGender = False
  , ftactic = TRoam
  , fentryLevel = -2
  , finitialActors = 3
  , fleaderMode = LeaderAI $ AutoLeader True False
  , fhasUI = False
  }

playerTechCult = Player
  { fname = "Tech Cult"
  , fgroup = "tech"
  , fskillsOther = techSkills
  , fcanEscape = False
  , fneverEmpty = True
  , fhasNumbers = False
  , fhasGender = False
  , ftactic = TFollow
  , fentryLevel = -2
  , finitialActors = 4
  , fleaderMode = LeaderAI $ AutoLeader True False
  , fhasUI = False
  } -- TODO: change fleaderMode = LeaderAI $ AutoLeader False True

-- | A special player, for summoned actors that don't belong to any
-- of the main players of a given game. E.g., animals summoned during
-- a duel game between two hero players land in the horror faction.
-- In every game, either all factions for which summoning items exist
-- should be present or a horror player should be added to host them.
-- Actors that can be summoned should have "horror" in their @ifreq@ set.
playerHorror = Player
  { fname = "Horrors of Warp"
  , fgroup = "horror"
  , fskillsOther = unitSkills
  , fcanEscape = False
  , fneverEmpty = False
  , fhasNumbers = False
  , fhasGender = False
  , ftactic = TPatrol
  , fentryLevel = -3
  , finitialActors = 0
  , fleaderMode = LeaderNull
  , fhasUI = False
  }

minusHundred, meleeAdjacent, _meleeAndRanged, animalSkills, techSkills, allSkills :: Skills

-- To make sure weak items can't override move-only-leader, etc.
minusHundred = EM.fromList $ zip [minBound..maxBound] [-100, -100..]

meleeAdjacent = addSkills minusHundred
                $ EM.fromList $ zip [AbWait, AbMelee] [101, 101..]

-- Melee and reaction fire.
_meleeAndRanged = addSkills minusHundred
                  $ EM.fromList $ zip [AbWait, AbMelee, AbProject] [101, 101..]

animalSkills = addSkills minusHundred
               $ EM.fromList $ zip [AbMove, AbMelee, AbAlter, AbWait, AbTrigger] [101, 101..]

techSkills = addSkills minusHundred
             $ EM.fromList $ zip [AbMove, AbMelee, AbProject, AbAlter, AbWait] [101, 101..]

allSkills = addSkills minusHundred
            $ EM.fromList $ zip [AbMove, AbMelee, AbProject, AbAlter, AbWait, AbTrigger] [101, 101..]

I'm probably having some really simple problem that I'm too blind to spot.

56
Programming / Re: LambdaHack
« on: December 15, 2014, 07:47:42 AM »
A new version of LambdaHack has been released and I upgraded Space Privateers to use it. Getting the program to type check was pretty fast and straight forward, but I seem to be having a problem in my campaign settings. After starting the game, I get the error:

Quote
Internal failure occurred and the following is to blame:
  ("no unique group",(starting,fromList [(campaign,[(1,(Id 0,ModeKind {msymbol = 'a', mname = "campaign", mfreq = [(campaign,1)], mroster = Roster {rosterList = [Player {fname = "Space Privateers", fgroup = hero, fskillsOther = fromList [(move,1),(melee,1),(displace,-100),(alter tile,1),(wait,1),(manage items,-100),(fling,1),(activate,-100),(trigger tile,1)], fcanEscape = True, fneverEmpty = True, fhasNumbers = True, fhasGender = True, ftactic = follow leader's target or position, fentryLevel = - (1) - (0), finitialActors = 3, fleaderMode = LeaderUI (AutoLeader {autoDungeon = False, autoLevel = False}), fhasUI = True},Player {fname = "Merchant Mariners", fgroup = merchant, fskillsOther = fromList [(move,-100),(melee,1),(displace,-100),(alter tile,-100),(wait,1),(manage items,-100),(fling,-100),(activate,-100),(trigger tile,-100)], fcanEscape = False, fneverEmpty = False, fhasNumbers = False, fhasGender = True, ftactic = find and patrol an area (TODO), fentryLevel = - (1) - (0), finitialActors = 3, fleaderMode = LeaderAI (AutoLeader {autoDungeon = True, autoLevel = False}), fhasUI = False},Player {fname = "Forces of Chaos", fgroup = chaos, fskillsOther = fromList [(move,-100),(melee,1),(displace,-100),(alter tile,-100),(wait,1),(manage items,-100),(fling,1),(activate,-100),(trigger tile,-100)], fcanEscape = False, fneverEmpty = False, fhasNumbers = False, fhasGender = True, ftactic = explore unknown, chase targets, fentryLevel = - (1) - (0), finitialActors = 3, fleaderMode = LeaderAI (AutoLeader {autoDungeon = True, autoLevel = False}), fhasUI = False},Player {fname = "Tech Cult", fgroup = tech, fskillsOther = fromList [(move,1),(melee,1),(displace,-100),(alter tile,1),(wait,1),(manage items,-100),(fling,1),(activate,-100),(trigger tile,-100)], fcanEscape = False, fneverEmpty = True, fhasNumbers = False, fhasGender = False, ftactic = follow leader's target or position, fentryLevel = - (2) - (0), finitialActors = 4, fleaderMode = LeaderAI (AutoLeader {autoDungeon = True, autoLevel = False}), fhasUI = False},Player {fname = "Horrors of Warp", fgroup = horror, fskillsOther = fromList [(move,1),(melee,1),(displace,1),(alter tile,1),(wait,1),(manage items,1),(fling,1),(activate,1),(trigger tile,1)], fcanEscape = False, fneverEmpty = False, fhasNumbers = False, fhasGender = False, ftactic = find and patrol an area (TODO), fentryLevel = - (3) - (0), finitialActors = 0, fleaderMode = LeaderNull, fhasUI = False},Player {fname = "Spawns of Warp", fgroup = spawn, fskillsOther = fromList [(move,1),(melee,1),(displace,-100),(alter tile,1),(wait,1),(manage items,-100),(fling,-100),(activate,-100),(trigger tile,1)], fcanEscape = False, fneverEmpty = False, fhasNumbers = False, fhasGender = False, ftactic = roam freely, chase targets, fentryLevel = - (2) - (0), finitialActors = 3, fleaderMode = LeaderAI (AutoLeader {autoDungeon = True, autoLevel = False}), fhasUI = False}], rosterEnemy = [("Space Privateers","Merchant Mariners"),("Space Privateers","Forces of Chaos"),("Space Privateers","Spawns of Warp"),("Merchant Mariners","Forces of Chaos"),("Merchant Mariners","Spawns of Warp"),("Tech Cult","Forces of Chaos"),("Tech Cult","Spawns of Warp")], rosterAlly = [("Forces of Chaos","Spawns of Warp"),("Merchant Mariners","Tech Cult")]}, mcaves = fromList [(-10,(caveRogue,Nothing)),(-9,(campaign random,Nothing)),(-8,(campaign random,Nothing)),(-7,(campaign random,Nothing)),(-6,(campaign random,Nothing)),(-5,(campaign random,Nothing)),(-4,(campaign random,Nothing)),(-3,(caveRogue,Nothing)),(-2,(temple,Nothing)),(-1,(caveRogue,Just True))], mdesc = "Get ready to assault the city vessel and plunder some loot!"}))])]))
SpacePrivateers: Control.Exception.Assert.Sugar.failure

I tried comparing my ModeKind.hs and ModeKindPlayer.hs to those of LambdaHack, but couldn't spot if I have a problem there somewhere.  Now, it would be cool if someone (Mikon for example ;) could give some pointers where to continue solving this problem.

I pretty excited about the possibility to have working storm hammers and privateer grog, so this update is something I want to get working soon.

57
Traditional Roguelikes (Turn Based) / Re: LambdaHack/Allure of the Stars
« on: December 12, 2014, 07:21:11 PM »
Ooh, new version of LambdaHack. I should try it out and see about the new features.

Funny thing is that just today we were talking with colleagues about programming with Haskell. Maybe that's a sign that I should continue too :)

58
Programming / Re: Theory about popularity of languages
« on: September 16, 2014, 03:40:53 AM »
I'm sure which tools are right depends on the tastes and abilities of the individual programmer. Personally, I've glanced at a few IDEs, and always go "bleh", feeling much more comfortable using a simple text editor (emacs  :-*) and keeping sources and notes in one big messy directory tree.

I wouldn't call emacs a simple text editor, it's closer to an operating system really. However, I have heard that it has a package (several actually) for editing text :P (I use emacs a lot and really like how extendable and configurable it is).

59
Programming / Re: LambdaHack
« on: September 11, 2014, 06:56:02 PM »
Indeed, Calm below 2/3 of max inhibits any item manipulation involving the shared stash.
Also, summoning depends on and uses up Calm. Current Calm also bounds the sight radius.
And a nasty effect: at Calm 0, when an actor is impressed by enemies, he defects.

That last one is quite grave and good motivator keeping ones calm above 0. I wasn't aware of that or the sight radius cap. Thrown potions that lower calm just got really dangerous.

60
Programming / Re: LambdaHack
« on: September 11, 2014, 07:11:38 AM »
Hey, how did I miss that. Grog has slight boost for calm already, but somewhat more complete model would be neat.

Currently calm affects if character can access to shared cache or use potions. Mikon, was there anything else that it affects?

I think I would wait for timed effects and have a privateers who is somewhat drunk to have advantage in combat. Could even add more alcoholic beverages with slightly varying effects and alcohol content.

Pages: 1 2 3 [4] 5 6 ... 18