Showing posts with label Angband. Show all posts
Showing posts with label Angband. Show all posts

Tuesday, 19 July 2011

New Fonts?

As part of a general overhaul of the UI, I'm experimenting with using Angband fonts:


To be honest, I think it improves the look of the game dramatically. Due to their slightly larger size however, I'm going to have to move the equipped items out of the inventory items view and into a new view of their own (like Angband!), but I think I'll only do that when I implement proper keyboard-equipping and removing items.

I do have a query though before going ahead with this in the next Alpha Release, which I've been unable to find the answer anywhere on the web: am I legally allowed to use the fonts that come with Angband in an MPL project? If so, what license are they under? If they are GPL, then I think I can distribute them solely as GPL and include them in my MPL program and then get a sore head due to all these mad license incompatibility.

Tuesday, 12 July 2011

Source-diving

I now have the Angband source for a deep perusal, which will help with implementation of magic and better monster AI. I think I'm moving away from a Crawl-inspired game towards an Angband inspired game, although I think there are many wonderful features in Crawl worth stealing^H^H^H^H^H^H^Hborrowing. Both are excellent games though.

Saturday, 9 July 2011

Moving to Edit Files

Following much thought, I've decided to move to Edit Files to store at least the Monster Definitions, instead of in an SQLLite Database. The main reason is actually flexibility.

The model I've chosen is something similar to the Angband edit file, with a few modifications. Here is the template:

# Each creature has an individual entry in the following format:
#
# N: ID : singlular name : plural name
# L: Creature Level : Rarity : Uniqable?
# E: Ecology : Type: Pickup Items?
# G: Display Character : Display Colour
# I: Hit Dice : Armour Class : Evasion : Speed
# V: Initial Alertness Level
# A: Action Frequency : Action Text
# S: Speech Frequency : Speech Text
# B: Attack Method : Attack Effect : Damage
# M: Spell | Spell | Spell | etc
# F: Flag | Flag | Flag | etc
# C: Class | Class | etc
# D: Description

Anyone familiar with the Angband source should recognise most of these options, although I've enhanced a couple, and added a few additional sections.

Below I give a couple of excerpts of 2 creatures already in Kharne translated over to the new format:

N: 2 : Kobold : Kobolds
L: 1 : Common : Yes
E: Fortress: Goblinoid: Yes
G: k: $004080
I: 1: 5: 11: 12
V: 255
A: 10: "picks a chunk of rotten meat from its teeth"
A: 10: "yips noisily"
S: 20: "I'm gonna kill you! Yip yip!"
B: HIT: HURT: 1d6
B: SHOOT: HURT: 1d6
F: COWARDLY | FLEE | OPEN_DOOR | GREEDY
F: EVIL | POISONOUS | CORPSES
F: DROP_ITEMS_POOR | DROP_CASH
C: Commando | Archer | Lurker
D: "Kobolds are short, ugly goblinoid humanoids."
D: "They are known to have cowardly and sadistic tendencies."

N: 23 : Ogre Mage : Ogre Magi
L: 4 : Rare : Yes
E: Fortress: Giant : Yes
G: O: $FF00FF
I: 4: 6: 12: 12
V: 255
A: 10: "waves a magic stick"
A: 10: "yells a magic word"
S: 20: "dis two and dat two make four, right?"
B: HIT: SLAM: 1d6
M: MAGIC_MISSILE | HEAL | HOLD | TELEPORT
F: RANGED | BESERK | OPEN_DOOR | GREEDY
F: EVIL | CORPSES
F: DROP_ITEMS_POOR | DROP_ITEMS_GOOD | DROP_CASH
D: "Ogre Magi are hideous and deformed ogres wrapped in deathly black robes"
D: "They are known to be cruel and masters of deadly arcane magics."

Sunday, 3 July 2011

"Overconfidence will be your weakness...."

Boo! OOD 11-headed hydras + overconfidence = dead @. Still, it was a most enjoyable run whilst it lasted, and I've come away with more ideas for Kharne (the last version of Angband I played before this was 2.7!)

[Angband 3.2.0 Character Dump]

Name Berta Self RB CB EB Best
Sex Female Age 25 STR: 18/68 +4 +5 +4 18/198
Race Half-Troll Height 85 INT: 13 -4 -2 +0 7
Class Warrior Weight 220 WIS: 12 -2 -2 +3 11
Title Commando Social Known DEX: 18/57 -4 +2 +0 18/37
HP -11/575 Maximize Y CON: 18/80 +3 +2 +0 18/130
SP 0/0 CHR: 16 -6 -1 +3 12

Level 32 Armor [37,+59] Saving Throw 43%
Cur Exp 180931 Fight (+20,+17) Stealth Fair
Max Exp 180931 Melee (+32,+29) Fighting Legendary
Adv Exp 240000 Shoot (+38,+11) Shooting Heroic
MaxDepth 1800' (L36) Blows 2.3/turn Disarming 51%
Game Turns 589895 Shots 2/turn Magic Device 32
Standard Turns 91367 Infra 30 ft Perception 1 in 43
Resting Turns 746 Speed 7 Searching 13%
Gold 30817 Burden 203.7 lbs

Your father was a Water-Troll Warrior. You have blue-bloodshot eyes,
oily dark purple hair, and white scabby skin.



rAcid:....+.+...... rConf:.........+...
rElec:*.....+.+.... Sound:.............
rFire:......+...... Shard:.......+.....
rCold:......+...... Nexus:.............
rPois:............. Nethr:......+......
rFear:............+ Chaos:.............
rLite:............. Disen:.............
rDark:......+...... S.Dig:.............
rBlnd:............. Feath:.............

Light:............. Aggrv:.............
Regen:............+ Stea.:......+......
ESP:............. Sear.:.............
Invis:...+......... Infra:............+
FrAct:..+.......... Tunn.:.............
HLife:............. Speed:...........+.
ImpHP:............. Blows:.............
ImpSP:............. Shots:.+...........
Fear:............. Might:.............


[Last Messages]

> One of your Scrolls titled "sus aetasta" of Word of Recall (j) was destroyed!
> The 11-headed hydra breathes fire.
> The 4-headed hydra squeals in pain.
> One of your Scrolls titled "nundisco" of Satisfy Hunger (i) was destroyed!
> Some of your Arrows (1d4) (+0,+0) (n) were destroyed!
> The Hellhound pushes past the 4-headed hydra.
> You zap the 11-headed hydra.
> You miss the 11-headed hydra.
> The 11-headed hydra breathes fire.
> The Hellhound resists a lot.
> Some of your Arrows (1d4) (+0,+0) (n) were destroyed!
> The 11-headed hydra breathes fire.
> The 11-headed hydra resists a lot.
> The Hellhound resists a lot.
> You die.

Killed by a 11-headed hydra.

[Character Equipment]

a) The Mace 'Taratol' (3d4) (+12,+12)
Dropped by Beorn, the Shape-Changer at 1500 feet (level 30).
*Slays* dragons.
Branded with lightning.
Provides immunity to lightning.
Cannot be harmed by acid, electricity, fire, cold.
When activated, it hastens you for d20+20 turns.
Takes 171 to 340 turns to recharge at your current speed.
Your chance of success is 87.5%
Combat info:
2.3 blows/round.
With an additional 3 strength and 0 dex you would get 2.7 blows
With an additional 0 strength and 2 dex you would get 2.7 blows
Average damage/round: 132 vs. creatures not resistant to
electricity, 171.5 vs. dragons, and 92.3 vs. others.
b) a Long Bow of Extra Shots (x3) (+18,+11) (+1)
Found lying on the floor at 1550 feet (level 31).
+1 shooting speed.
c) a Malachite Ring of Free Action
Found lying on the floor at 450 feet (level 9).
Prevents paralysis.
d) a Mithril Ring of See Invisible
Found lying on the floor at 1750 feet (level 35).
Grants the ability to see invisible things.
e) a Copper Amulet of Resist Acid
Bought from a store.
Provides resistance to acid.
Cannot be harmed by acid.
f) The Phial of Galadriel
Dropped by Nár, the Dwarf at 1000 feet (level 20).
Cannot be harmed by acid, electricity, fire, cold.
When activated, it lights up the surrounding area, hurting
light-sensitive creatures.
Takes 18 to 34 turns to recharge at your current speed.
Your chance of success is 90.4%
Radius 3 light.
g) The Soft Leather Armour 'Hithlomir' [10,+20] (+4)
Found lying on the floor at 1750 feet (level 35).
+4 stealth.
Provides resistance to acid, lightning, fire, cold, dark, nether.
Cannot be harmed by acid, electricity, fire, cold.
h) a Fur Cloak of Protection [3,+10]
Dropped by a Grave wight at 1600 feet (level 32).
Provides resistance to shards.
Cannot be harmed by acid, electricity, fire, cold.
i) a Large Metal Shield of Resist Lightning [12,+7]
Found lying on the floor at 1550 feet (level 31).
Provides resistance to lightning.
Cannot be harmed by electricity.
j) The Metal Cap of Thengel [3,+12] (+3)
Dropped by a Mature blue dragon at 1600 feet (level 32).
+3 wisdom, charisma.
Provides resistance to confusion.
Cannot be harmed by acid, electricity, fire, cold.
k) a Set of Caestus of Power (+3,+2) [5,+2] (+4)
Found lying on the floor at 1100 feet (level 22).
+4 strength.
l) a Pair of Iron Shod Boots of Speed [4,+6] (+8)
Dropped by a Dark elven warrior at 500 feet (level 10).
+8 speed.


[Character Quiver]

n) 30 Arrows (1d4) (+0,+0)
Bought from a store.
Combat info:
Hits targets up to 120 feet away.
Average damage/round: 82.6.
35% chance of breaking upon contact.
o) (nothing)
p) (nothing)
q) (nothing)
r) (nothing)
s) (nothing)
t) (nothing)
u) (nothing)
v) (nothing)
w) (nothing)


[Character Inventory]

a) 15 Rations of Food
b) 9 Gold Potions of Cure Serious Wounds
c) 58 Violet Speckled Potions of Cure Critical Wounds
d) 2 Cloudy Potions of Restore Strength
e) an Icky Green Potion of Restore Intelligence
Found lying on the floor at 1750 feet (level 35).
f) a Silver Speckled Potion of Restore Constitution
Found lying on the floor at 1750 feet (level 35).
g) a Copper Speckled Potion of Enlightenment
h) 6 Scrolls titled "quandus oc" of Phase Door
i) 20 Scrolls titled "nundisco" of Satisfy Hunger
j) 7 Scrolls titled "sus aetasta" of Word of Recall
k) 2 Nickel-Plated Rods of Treasure Location
l) 3 Cast Iron Rods of Curing
m) 3 Lead-Plated Rods of Illumination
n) 2 Zinc-Plated Wands of Trap/Door Destruction (20 charges)
o) 3 Platinum Wands of Teleport Other (27 charges)
p) 4 Sycamore Staves of Detect Invisible (45 charges)
q) a Mahogany Staff of Detect Evil (22 charges)
Dropped by a Novice paladin at 1750 feet (level 35).
r) an Elm Staff of Teleportation (6 charges)
s) 7 Cedar Staves of Identify (44 charges)
t) a Topaz Ring of Soulkeeping
Found lying on the floor at 1650 feet (level 33).
Sustains strength, intelligence, wisdom.
u) a Sling of Extra Might (x3) (+10,+22) (+1)
Found lying on the floor at 1700 feet (level 34).
+1 shooting power.


[Home Inventory]

a) a Blue Speckled Potion of Restore Dexterity
Found lying on the floor at 1600 feet (level 32).
b) a Scroll titled "fursus ducero" of *Remove Curse*
Found lying on the floor at 450 feet (level 9).
c) a Scroll titled "am cedus" of Deep Descent
Dropped by a Black knight at 1650 feet (level 33).
d) a Scroll titled "agiacto pirrum" of *Destruction*
Dropped by a Black ogre at 1500 feet (level 30).
e) a Chromium Wand of Stone to Mud (5 charges)
f) a Balsa Staff of Starlight (11 charges)
Dropped by an Uruk at 1550 feet (level 31).
g) a Main Gauche of *Slay Troll* (1d5) (+5,+11) (+1)
Found lying on the floor at 750 feet (level 15).
+1 strength.
Slays trolls.
Speeds regeneration.
Combat info:
3.8 blows/round.
With an additional 0 strength and 2 dex you would get 4.1 blows
Average damage/round: 149.7 vs. trolls, and 125.5 vs. others.
h) a Katana of Slay Demon (3d5) (+8,+8)
Dropped by an Ice troll at 1600 feet (level 32).
Slays demons.
Combat info:
3.3 blows/round.
With an additional 1 strength and 0 dex you would get 3.4 blows
With an additional 0 strength and 2 dex you would get 3.5 blows
Average damage/round: 181.8 vs. demons, and 117.5 vs. others.
i) a Ball-and-Chain of *Slay Dragon* (2d4) (+4,+7) (+1)
Found lying on the floor at 1600 feet (level 32).
+1 constitution.
*Slays* dragons.
Provides resistance to fear.
Combat info:
3.0 blows/round.
With an additional 3 strength and 0 dex you would get 3.3 blows
With an additional 0 strength and 2 dex you would get 3.3 blows
Average damage/round: 156.6 vs. dragons, and 91.2 vs. others.


============================================================
CHAR.
| TURN | DEPTH |LEVEL| EVENT
============================================================
1 0' 1 Began the quest to destroy Morgoth.
5616 50' 1 Found The Set of Gauntlets 'Paurhach' (LOST)
9483 50' 2 Reached level 2
14494 100' 2 Killed Fang, Farmer Maggot's dog
14494 100' 3 Reached level 3
14494 100' 4 Reached level 4
18450 100' 4 Killed Grip, Farmer Maggot's dog
19524 100' 5 Reached level 5
26486 150' 6 Reached level 6
36327 200' 7 Reached level 7
46211 300' 8 Reached level 8
48081 300' 9 Reached level 9
52088 350' 10 Reached level 10
52516 350' 11 Reached level 11
63456 450' 12 Reached level 12
76030 500' 13 Reached level 13
81264 500' 14 Reached level 14
89505 550' 15 Reached level 15
89688 550' 15 Killed Ufthak of Cirith Ungol
89688 550' 16 Reached level 16
91053 550' 17 Reached level 17
94708 550' 18 Reached level 18
96416 550' 19 Reached level 19
119021 650' 19 Killed Lagduf, the Snaga
122086 700' 20 Reached level 20
137186 750' 21 Reached level 21
146949 900' 22 Reached level 22
150085 950' 22 Killed Sangahyando of Umbar
152877 950' 23 Reached level 23
158592 1000' 23 Killed Nar, the Dwarf
158608 1000' 23 Found The Phial of Galadriel
160374 1000' 24 Reached level 24
168080 1000' 24 Killed Wormtongue, Agent of Saruman
169739 1000' 24 Killed Angamaite of Umbar
169932 1000' 24 Killed Bullroarer the Hobbit
174502 1050' 25 Reached level 25
181000 1100' 25 Killed Shagrat, the Orc Captain
186480 1100' 25 Killed Boldor, King of the Yeeks
199094 1350' 26 Reached level 26
206575 1350' 26 Reached level 26
208044 1350' 26 Reached level 26
211923 1400' 26 Killed Brodda, the Easterling
229571 1450' 27 Reached level 27
244687 1500' 27 Killed Khim, Son of Mim
247822 1500' 28 Reached level 28
253483 1550' 28 Killed Ugluk, the Uruk
267364 1550' 28 Killed Mim, Betrayer of Turin
278566 1600' 28 Killed Gorbag, the Orc Captain
284546 1600' 29 Reached level 29
303731 1600' 29 Killed Grishnakh, the Hill Orc
369012 0' 29 Reached level 29
388677 1550' 30 Reached level 30
393497 1500' 30 Killed Lugdush, the Uruk
403183 1600' 30 Reached level 30
404550 1600' 30 Found The Metal Cap of Thengel
418562 1600' 30 Killed Ulfast, Son of Ulfang
429823 1550' 30 Killed Bolg, Son of Azog
460637 1500' 30 Killed Beorn, the Shape-Changer
460664 1500' 30 Found The Mace 'Taratol'
469152 1550' 30 Killed Ibun, Son of Mim
474128 1550' 31 Reached level 31
480978 1600' 31 Reached level 31
484319 0' 31 Reached level 31
489729 1600' 31 Reached level 31
514270 1650' 31 Reached level 31
520086 1700' 31 Killed Lokkak, the Ogre Chieftain
531880 1750' 31 Killed Draebor, the Imp
552788 1750' 31 Killed Golfimbul, the Hill Orc Chief
572325 1750' 31 Found The Soft Leather Armour 'Hithlomir'
581708 1700' 31 Killed Uldor the Accursed
588857 1700' 32 Reached level 32


[Options]

Maximize effect of race/class bonuses : yes (adult_maximize)
Randomize the artifacts (except a few) : no (adult_randarts)
Restrict the use of stairs/recall : no (adult_ironman)
Restrict the use of stores/home : no (adult_no_stores)
Restrict creation of artifacts : no (adult_no_artifacts)
Don't stack objects on the floor : no (adult_no_stacking)
Lose artifacts when leaving level : no (adult_no_preserve)
Don't generate connected stairs : no (adult_no_stairs)
Don't show level feelings : no (adult_no_feelings)
Items always sell for 0 gold : no (adult_no_selling)
Adult: Monsters chase current location : yes (adult_ai_sound)
Adult: Monsters chase recent locations : yes (adult_ai_smell)
Adult: Monsters act smarter in groups : yes (adult_ai_packs)
Adult: Monsters learn from their mistakes : no (adult_ai_learn)
Adult: Monsters exploit players weaknesses : no (adult_ai_cheat)
Adult: Monsters behave more intelligently (broken): no (adult_ai_smart)
Score: Peek into object creation : no (score_peek)
Score: Peek into monster creation : no (score_hear)
Score: Peek into dungeon creation : no (score_room)
Score: Peek into something else : no (score_xtra)
Score: Know complete monster info : no (score_know)
Score: Allow player to avoid death : no (score_live)


Saturday, 2 July 2011

Jade....meh?

So finally, after three billion years (approximately), JADE is out. Well, the first version anyway (0.10).

What did I think of it?

I have no idea.

I got as far as the 2nd character selection screen - the one with the gadzillion of skill options and went "sod it"; and switched back to stat-gaining my current Half-Troll Warrior on Angband.

There's a lesson for us all. And why Crawl is so successful. And why I ditched the intensive character min-maxing in a very early version of my own (as incomplete) roguelike.

Grab me in please. Without having to go through twenty-billion (contextless) options.

I just want to play!

Friday, 9 January 2009

Congratulations to Angband.

A hearty congratuations to the Angband folks. The new version (v3.1.0) is now officially GPL, thus ending a saga over licensing that has dragged on for literally years. Whilst I'm not entirely a fan of the GPL (its a bit too viral for my tastes; yes, I am aware of the counterarguments that this may not the case), I do support the principle of open-source software where feasible (and there are many reasons why in some circumstances a closed-source/propriety-based route for software is preferable).

Hence Kharne, if it ever gets released will probably be LGPL at most. It cannot be GPL since it uses 3rd party VCL components which themselves are not-GPL compatible (for the record, the license terms of said components allow embedding and distribution in free software).

Getting back to Angband, a couple of change in the new version have caught my programmer's eye. Firstly,

"Set up an event system for UI display updates, where the game communicates with the UI by sending messages saying that something's changed that the UI might be interested in, rather than deciding that specific things should be redraw. The main screen updates all use this system now. Amongst other things, this system should help things like the borg and graphical frontends, because they can hook right into changes in state. (#348) "

Obviously Angband is at heart (and still is) a console application, but it is interesting to note they appear to have finally moved to a paradigm that window-based GUIs have had since almost the year dot. Its a heck of a lot easier for the UI to be in charge of updating the screen than it is for screen updates to be scattered willy-nilly about the rest of the code. As I'm not familiar with the Angband codebase to any extent beyond being "inspired" by its dungeon generation algorithm, I don't know the exact reasons for the switch now, but being a professional software engineer in my non-Roguelike existance, I'd put money on two things: 1) refactoring the UI code was most likely a massive job and they had to wait until they had a sucker^H^H^H^H^H^Hvolunteer lined up to do it, and 2) the previous code was getting really really REALLY unmaintainable.

The second change of note ties somewhat into this recent thread on r.g.r.d:

"Monster HP is now specified as an average value around which to randomise, instead of using a "12d5"-type calculation. Uniques always have the number of HPs specified in the monster.txt file, like before."

At first glance, this sounds like an attempt to blunt the fangs of that fearsome elite mob, the RNG. Is this such a good thing? I'm not sure. For standard monsters, isn't part of the "fun" finding one that goes down like a sack of potatoes, or one that is hard as nails? Or is the fact that one orc may have six times as many hit points as his brother simply random-masochism or the sake of it?