Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Merge pull request #57 from Mikolaj/mikolaj

Milestone 0.4.4
  • Loading branch information...
commit 7614bdd451c2c7d39ff78eddfe32a6633d621781 2 parents 3f768d8 + fcca32a
Mikolaj Konarski Mikolaj authored
13 Allure.cabal
View
@@ -1,9 +1,9 @@
cabal-version: >= 1.10
name: Allure
-version: 0.4.3
+version: 0.4.4
license: OtherLicense
license-file: LICENSE
-tested-with: GHC == 7.2.2, GHC == 7.4
+tested-with: GHC == 7.2.2, GHC == 7.4.1
data-files: LICENSE, CREDITS, PLAYING.md, README.md,
config.default, config.bot, scores
author: Andres Loeh, Mikolaj Konarski and others
@@ -13,6 +13,9 @@ description: This is an alpha release of Allure of the Stars,
The game is barely fun at this stage and not yet
really Sci-Fi. See the wiki for design notes and contribute.
.
+ New in this release are missiles flying for three turns
+ (by an old kosmikus' idea), visual feedback for targeting
+ and animations of combat and individual monster moves.
Long term goals are high replayability and auto-balancing
through procedural content generation and persistent content
modification based on player behaviour.
@@ -41,7 +44,7 @@ executable Allure
ConfigDefault
hs-source-dirs: src
other-modules: Paths_Allure
- build-depends: LambdaHack >= 0.2.0 && < 0.2.1,
+ build-depends: LambdaHack >= 0.2.1 && < 0.2.2,
template-haskell >= 2.6 && < 3,
ConfigFile >= 1.1.1 && < 2,
array >= 0.3.0.3 && < 1,
@@ -60,6 +63,6 @@ executable Allure
BangPatterns, RecordWildCards, NamedFieldPuns
other-extensions: CPP, QuasiQuotes
ghc-options: -Wall -fwarn-orphans -fwarn-tabs -fwarn-incomplete-uni-patterns -fwarn-incomplete-record-updates -fwarn-monomorphism-restriction -fwarn-unrecognised-pragmas
- ghc-options: -fno-warn-auto-orphans -fno-warn-implicit-prelude -fno-warn-unused-do-bind
+ ghc-options: -fno-warn-auto-orphans -fno-warn-implicit-prelude
ghc-options: -fno-ignore-asserts -funbox-strict-fields
- ghc-options: -threaded
+ ghc-options: -threaded -with-rtsopts=-C0.005
84 PLAYING.md
View
@@ -55,11 +55,8 @@ the vi text editor keys (also known as "Rogue-like keys").
/|\ /|\
1 2 3 b j n
-Shift and a movement key make the hero run in the indicated direction,
-until anything of interest is spotted. '5' and '.' skip a turn.
-(Note that If you are using the curses or vty frontends,
-numerical keypad may not work correctly depending on the versions
-of curses, terminfo and terminal emulators. Vi keys should work regardless.)
+SHIFT (or CTRL) and a movement key make the hero run in the indicated
+direction, until anything of interest is spotted. '5' and '.' skip a turn.
Melee, searching for secret doors and opening closed doors can be done
by bumping into a monster, a wall and a door, respectively.
@@ -67,22 +64,22 @@ Below are the default keys for major commands. The last four commands
are specialized versions of 'a' and 'p', offering narrower default item choice.
The commands that take player time are marked with a *.
- key command
- < ascend a level*
- > descend a level*
- ? display help
- Q quit without saving
- X save and exit the game
- a apply a consumable*
- c close a door*
- d drop an object*
- g get an object*
- i display inventory
- p project a projectile*
- q quaff a drink*
- r read a comm*
- t throw a missile*
- z zap a mechanism*
+ key command
+ < ascend a level*
+ > descend a level*
+ ? display help
+ Q quit without saving
+ X save and exit the game
+ a apply a consumable*
+ c close a door*
+ d drop an object*
+ g get an object*
+ i display inventory
+ p project a projectile*
+ q quaff a drink*
+ r read a comm*
+ t throw a missile*
+ z zap a mechanism*
To make a ranged attack, you need to set your target first, using
targeting mode. Note that the target, for the few commands that require any,
@@ -95,28 +92,29 @@ at a remote level (when the cursor is on a different level
than the selected hero). The targeting commands and all the less used
commands are listed below. None of them takes hero time.
- key command
- ESC cancel action
- RET accept choice
- SPACE clear messages
- TAB cycle among heroes on level
- * target monster
- / target location
- D dump current configuration
- P display previous messages
- V display game version
- [ target next shallower level
- ] target next deeper level
- { target 10 levels shallower
- } target 10 levels deeper
- 0--9 select a hero anywhere in the spaceship (gtk only)
-
-There are also some debug and cheat keys. Use at your own peril!
-
- key command
- O toggle "omniscience"
- I inform about level meta-data
- R rotate display modes
+ key command
+ ESC cancel action
+ RET accept choice
+ SPACE clear messages
+ TAB cycle among heroes on level
+ * target monster
+ / target location
+ D dump current configuration
+ P display previous messages
+ V display game version
+ [ target next shallower level
+ ] target next deeper level
+ { target 10 levels shallower
+ } target 10 levels deeper
+ 0--9 select a hero anywhere in the spaceship
+
+There are also some debug and cheat keys, all entered with the CTRL
+key modifier. Use at your own peril!
+
+ key command
+ CTRL-o toggle "omniscience"
+ CTRL-i inform about level meta-data
+ CTRL-r rotate vision modes (effective next turn)
Monsters
13 README.md
View
@@ -23,13 +23,22 @@ from a development branch, download the game source from [github] [3]
and run 'cabal install' from the main directory.
-Compatibility note
-------------------
+Compatibility notes
+-------------------
The current code was tested with GHC 7.2.2 and several pre-release versions
of GHC 7.4. A [few tweaks] [7] are needed to compile with 7.0
and some more are needed for 6.12.
+If you are using the curses or vty frontends,
+numerical keypad may not work correctly depending on the versions
+of curses, terminfo and terminal emulators.
+Selecting heroes via number keys or SHIFT-keypad keys is disabled
+with curses, because CTRL-keypad for running does not work there,
+so the numbers produced by the keypad have to be used. With vty on xterm,
+CTRL-direction keys seem to work OK, but on rxvt they do not.
+Vi keys (ykuhlbjn) should work everywhere regardless. Gtk works fine, too.
+
Further information
-------------------
14 config.default
View
@@ -22,18 +22,20 @@
; braceright: TgtAscend (-10)
; slash: TgtFloor
; asterisk: TgtEnemy
+; plus: EpsIncr True
+; minus: EpsIncr False
; Tab: HeroCycle
; ;
; ; Items.
; g: Pickup
; d: Drop
; i: Inventory
-; a: Apply { verb = "apply", object = "consumable", syms = "!?" }
-; p: Project { verb = "project", object = "projectile", syms = "/|" }
+; a: Apply { verb = "apply", object = "consumable", syms = "!?,_~" }
+; p: Project { verb = "project", object = "missile", syms = "-}{" }
; q: Apply { verb = "quaff", object = "drink", syms = "!" }
-; r: Apply { verb = "read", object = "comm", syms = "?" }
-; z: Project { verb = "zap", object = "mechanism", syms = "/" }
-; t: Project { verb = "throw", object = "missile", syms = "|" }
+; r: Apply { verb = "read", object = "tablet", syms = "?" }
+; z: Project { verb = "zap", object = "mechanism", syms = "-" }
+; t: Project { verb = "throw", object = "projectile", syms = "}{" }
; ;
; ; Saving or ending the game.
; X: GameSave
@@ -95,7 +97,7 @@
; period: KP_Begin
; [monsters]
-; smellTimeout: 1000
+; smellTimeout: 100
; [ui]
; font: Terminus,Monospace normal normal normal normal 12
BIN  scores
View
Binary file not shown
34 src/Content/ActorKind.hs
View
@@ -10,6 +10,7 @@ import Game.LambdaHack.Color
import qualified Game.LambdaHack.Content as Content
import Game.LambdaHack.Content.ActorKind
import Game.LambdaHack.Random
+import Game.LambdaHack.Time
cdefs :: Content.CDefs ActorKind
cdefs = Content.CDefs
@@ -18,9 +19,9 @@ cdefs = Content.CDefs
, getFreq = afreq
, validate = avalidate
, content =
- [hero, eye, fastEye, nose]
+ [hero, projectile, eye, fastEye, nose]
}
-hero, eye, fastEye, nose :: ActorKind
+hero, projectile, eye, fastEye, nose :: ActorKind
hero = ActorKind
{ asymbol = '@'
@@ -28,11 +29,24 @@ hero = ActorKind
, afreq = [("hero", 1)] -- Does not appear randomly in the dungeon.
, acolor = BrWhite -- Heroes white, monsters colorful.
, ahp = RollDice 60 1
- , aspeed = 10
+ , aspeed = toSpeed 2
, asight = True
, asmell = False
, aiq = 13 -- Can see hidden doors, when he is under alien control.
- , aregen = 5000
+ , aregen = 500
+ }
+
+projectile = ActorKind -- includes homing missiles
+ { asymbol = '*'
+ , aname = "projectile"
+ , afreq = [("projectile", 1)] -- Does not appear randomly in the dungeon.
+ , acolor = BrWhite
+ , ahp = RollDice 0 0
+ , aspeed = toSpeed 0
+ , asight = False
+ , asmell = False
+ , aiq = 0
+ , aregen = maxBound
}
eye = ActorKind
@@ -41,11 +55,11 @@ eye = ActorKind
, afreq = [("monster", 60), ("summon", 50)]
, acolor = BrYellow
, ahp = RollDice 3 4
- , aspeed = 10
+ , aspeed = toSpeed 2
, asight = True
, asmell = False
, aiq = 8
- , aregen = 1000
+ , aregen = 100
}
fastEye = ActorKind
{ asymbol = 'm'
@@ -53,11 +67,11 @@ fastEye = ActorKind
, afreq = [("monster", 15)]
, acolor = BrMagenta
, ahp = RollDice 1 4
- , aspeed = 5
+ , aspeed = toSpeed 4
, asight = True
, asmell = False
, aiq = 12
- , aregen = 50 -- Regenerates fast (at max HP most of the time!).
+ , aregen = 5 -- Regenerates fast (at max HP most of the time!).
}
nose = ActorKind
{ asymbol = 'h'
@@ -65,9 +79,9 @@ nose = ActorKind
, afreq = [("monster", 20), ("summon", 100)]
, acolor = Green
, ahp = RollDice 7 2
- , aspeed = 11
+ , aspeed = toSpeed 1.8
, asight = False
, asmell = True
, aiq = 0
- , aregen = 1000
+ , aregen = 100
}
20 src/Content/CaveKind.hs
View
@@ -41,8 +41,12 @@ rogue = CaveKind
, copenChance = 1%10
, chiddenChance = 1%5
, citemNum = RollDice 5 2
- , cdefTile = "fillerWall"
- , ccorTile = "darkCorridor"
+ , cdefaultTile = "fillerWall"
+ , ccorridorTile = "darkCorridor"
+ , cfillerTile = "fillerWall"
+ , cdarkLegendTile = "darkLegend"
+ , clitLegendTile = "litLegend"
+ , chiddenTile = "hidden"
}
arena = rogue
{ csymbol = 'A'
@@ -54,8 +58,8 @@ arena = rogue
, cvoidChance = 1%3
, cnonVoidMin = 2
, citemNum = RollDice 3 2 -- few rooms
- , cdefTile = "floorArenaLit"
- , ccorTile = "path"
+ , cdefaultTile = "floorArenaLit"
+ , ccorridorTile = "path"
}
empty = rogue
{ csymbol = '.'
@@ -69,8 +73,8 @@ empty = rogue
, cnonVoidMin = 1
, cminStairDist = 50
, citemNum = RollDice 6 2 -- whole floor strewn with treasure
- , cdefTile = "floorRoomLit"
- , ccorTile = "floorRoomLit"
+ , cdefaultTile = "floorRoomLit"
+ , ccorridorTile = "floorRoomLit"
}
noise = rogue
{ csymbol = '!'
@@ -82,6 +86,6 @@ noise = rogue
, cvoidChance = 0
, cnonVoidMin = 0
, citemNum = RollDice 3 2 -- few rooms
- , cdefTile = "noiseSet"
- , ccorTile = "path"
+ , cdefaultTile = "noiseSet"
+ , ccorridorTile = "path"
}
102 src/Content/ItemKind.hs
View
@@ -6,6 +6,8 @@
-- | Weapons and treasure for Allure of the Stars.
module Content.ItemKind ( cdefs ) where
+import qualified Data.List as L
+
import Game.LambdaHack.Color
import qualified Game.LambdaHack.Content as Content
import Game.LambdaHack.Effect
@@ -20,14 +22,37 @@ cdefs = Content.CDefs
, getFreq = ifreq
, validate = ivalidate
, content =
- [necklace, dart, gem1, gem2, gem3, gold, javelin, potion1, potion2, potion3, ring, scroll1, scroll2, scroll3, sword, wand, fist, foot, tentacle, weight]
+ [necklace, dart, gem1, gem2, gem3, gold, javelin, kitchenKnife, potion1, potion2, potion3, ring, scroll1, scroll2, scroll3, sword, wand, fist, foot, tentacle, weight]
}
-necklace, dart, gem1, gem2, gem3, gold, javelin, potion1, potion2, potion3, ring, scroll1, scroll2, scroll3, sword, wand, fist, foot, tentacle, weight :: ItemKind
+necklace, dart, gem1, gem2, gem3, gold, javelin, kitchenKnife, potion1, potion2, potion3, ring, scroll1, scroll2, scroll3, sword, wand, fist, foot, tentacle, weight :: ItemKind
gem, potion, scroll :: ItemKind -- generic templates
-- rollDeep (aDb, xDy) = rollDice aDb + lvl * rollDice xDy / depth
+{- Item group symbols (from Angband, only as an informal convention for now):
+
+! potion, flask, concoction, bottle, jar, vial, canister
+? scroll, book, note, tablet, remote
+, food
+- magical wand, magical rod, transmitter, pistol, rifle
+_ magical staff, scanner
+= ring
+" necklace
+$ gold, gem
+~ light, tool
+/ polearm
+| edged weapon
+\ hafted weapon
+} launcher
+{ projectile
+( clothes
+[ torso armour
+] misc. armour
+) shield
+
+-}
+
necklace = ItemKind
{ isymbol = '"'
, iname = "necklace"
@@ -37,29 +62,35 @@ necklace = ItemKind
, icount = intToDeep 1
, ipower = (RollDice 2 3, RollDice 1 10)
, iverbApply = "tear down"
- , iverbProject = "throw"
+ , iverbProject = "cast"
+ , iweight = 30
+ , itoThrow = -50 -- not dense enough
}
dart = ItemKind
- { isymbol = '|'
+ { isymbol = '{'
, iname = "billiard ball"
, ifreq = [("dng", 30)]
- , iflavour = zipPlain [Cyan]
+ , iflavour = zipPlain [BrWhite]
, ieffect = Wound (RollDice 1 1)
, icount = (RollDice 3 3, RollDice 0 0)
, ipower = intToDeep 0
- , iverbApply = "snap"
- , iverbProject = "throw"
+ , iverbApply = "splinter"
+ , iverbProject = "hurl"
+ , iweight = 50
+ , itoThrow = 0 -- a cheap dart
}
gem = ItemKind
- { isymbol = '*'
+ { isymbol = '$'
, iname = "precious gem"
, ifreq = [("dng", 20)] -- x3, but rare on shallow levels
- , iflavour = zipPlain brightCol -- natural, so not fancy
+ , iflavour = zipPlain $ L.delete BrYellow brightCol -- natural, so not fancy
, ieffect = NoEffect
, icount = intToDeep 0
, ipower = intToDeep 0
, iverbApply = "crush"
- , iverbProject = "throw"
+ , iverbProject = "toss"
+ , iweight = 50
+ , itoThrow = 0
}
gem1 = gem
{ icount = (RollDice 0 0, RollDice 1 1) -- appears on max depth
@@ -79,22 +110,39 @@ gold = ItemKind
, icount = (RollDice 0 0, RollDice 10 10)
, ipower = intToDeep 0
, iverbApply = "grind"
- , iverbProject = "throw"
+ , iverbProject = "toss"
+ , iweight = 31
+ , itoThrow = 0
}
javelin = ItemKind
- { isymbol = '|'
- , iname = "kitchen knife"
+ { isymbol = '{'
+ , iname = "javelin"
, ifreq = [("dng", 30)]
, iflavour = zipPlain [Brown]
, ieffect = Wound (RollDice 1 2)
- , icount = (RollDice 0 0, RollDice 2 2)
+ , icount = (RollDice 0 0, RollDice 1 1)
, ipower = (RollDice 1 1, RollDice 2 2)
, iverbApply = "break up"
+ , iverbProject = "hurl"
+ , iweight = 2000
+ , itoThrow = 0 -- cheap but deadly
+ }
+kitchenKnife = ItemKind
+ { isymbol = '{'
+ , iname = "kitchen knife"
+ , ifreq = [("dng", 30)]
+ , iflavour = zipPlain [BrCyan]
+ , ieffect = Wound (RollDice 1 1)
+ , icount = (RollDice 0 0, RollDice 1 2)
+ , ipower = (RollDice 0 0, RollDice 1 2)
+ , iverbApply = "bend"
, iverbProject = "throw"
+ , iweight = 200
+ , itoThrow = -50 -- too flexible and the handle causes air resistance
}
potion = ItemKind
{ isymbol = '!'
- , iname = "concoction"
+ , iname = "vial"
, ifreq = [("dng", 15)]
, iflavour = zipFancy stdCol
, ieffect = NoEffect
@@ -102,6 +150,8 @@ potion = ItemKind
, ipower = intToDeep 0
, iverbApply = "gulp down"
, iverbProject = "lob"
+ , iweight = 200
+ , itoThrow = -50 -- oily, bad grip
}
potion1 = potion
{ ifreq = [("dng", 5)]
@@ -125,18 +175,22 @@ ring = ItemKind
, icount = intToDeep 1
, ipower = (RollDice 1 6, RollDice 3 2)
, iverbApply = "squeeze down"
- , iverbProject = "throw"
+ , iverbProject = "toss"
+ , iweight = 15
+ , itoThrow = 0
}
scroll = ItemKind
{ isymbol = '?'
- , iname = "comm tablet"
+ , iname = "tablet"
, ifreq = [("dng", 6)]
, iflavour = zipFancy darkCol -- arcane and old
, ieffect = NoEffect
, icount = intToDeep 1
, ipower = intToDeep 0
, iverbApply = "dial"
- , iverbProject = "throw"
+ , iverbProject = "lob"
+ , iweight = 700
+ , itoThrow = -25 -- bad grip
}
scroll1 = scroll
{ ieffect = SummonFriend
@@ -149,19 +203,21 @@ scroll3 = scroll
{ ieffect = Descend
}
sword = ItemKind
- { isymbol = ')'
+ { isymbol = '/'
, iname = "sharpened pipe"
, ifreq = [("dng", 60)]
- , iflavour = zipPlain [BrCyan]
+ , iflavour = zipPlain [Cyan]
, ieffect = Wound (RollDice 3 1)
, icount = intToDeep 1
, ipower = (RollDice 1 2, RollDice 4 2)
, iverbApply = "hit"
, iverbProject = "heave"
+ , iweight = 3000
+ , itoThrow = -25 -- bad grip
}
wand = ItemKind
- { isymbol = '/'
- , iname = "transmitter"
+ { isymbol = '-'
+ , iname = "injector"
, ifreq = [("dng", 15)]
, iflavour = zipFancy [BrRed]
, ieffect = Dominate
@@ -169,6 +225,8 @@ wand = ItemKind
, ipower = intToDeep 0
, iverbApply = "snap"
, iverbProject = "zap"
+ , iweight = 300
+ , itoThrow = 25 -- jet
}
fist = sword
{ isymbol = '@'
2  src/Content/RuleKind.hs
View
@@ -37,4 +37,6 @@ standard = RuleKind
, rtitle = "Allure of the Stars"
, rpathsDataFile = Self.getDataFileName
, rpathsVersion = Self.version
+ , ritemMelee = "/|\\"
+ , ritemProject = "!?,-~}{"
}
Please sign in to comment.
Something went wrong with that request. Please try again.