Skip to content
This repository was archived by the owner on Jul 22, 2020. It is now read-only.

Commit 63062fa

Browse files
committed
Improve combat messages considerably.
1 parent f32957e commit 63062fa

File tree

1 file changed

+40
-17
lines changed

1 file changed

+40
-17
lines changed

tomb-of-the-snake.py

Lines changed: 40 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1227,10 +1227,25 @@ def __init__(self):
12271227
self.messages = []
12281228

12291229
def say(self, message):
1230+
message = message[0].capitalize() + message[1:]
12301231
self.messages.append(message)
12311232
while len(self.messages) > 100:
12321233
del self.messages[0]
1233-
1234+
1235+
def call_attack(self, attacker, defender, damage):
1236+
name1 = attacker.the_name()
1237+
name2 = defender.the_name()
1238+
if damage <= 0:
1239+
self.say("%s pokes %s harmlessly." % (name1, name2))
1240+
elif damage > defender.life():
1241+
msg = "%s strikes %s for %d damage, killing %s!"
1242+
msg = msg % (name1, name2, damage, defender.pronoun)
1243+
self.say(msg)
1244+
else:
1245+
msg = "%s strikes %s for %d damage."
1246+
msg = msg % (name1, name2, damage)
1247+
self.say(msg)
1248+
12341249
def __call__(self, message):
12351250
self.say(message)
12361251

@@ -1241,6 +1256,8 @@ def __init__(self):
12411256

12421257
self.mcguffin = Item(items["idol"])
12431258
self.player = Creature(creatures["human"])
1259+
self.player.pronoun = "them"
1260+
self.player.proper_name = True
12441261
self.level0 = DungeonLevel(0, levels[0])
12451262
self.level0.populate()
12461263

@@ -1258,12 +1275,8 @@ def update(self):
12581275
drop = Item(drop)
12591276
drop.move_to(i.x, i.y, i.level)
12601277
i.move_to(-1, -1, None)
1261-
log(i.name + " is dead!")
12621278
elif i.action_points <= 0:
12631279
i.action_points += i.speed * i.dice_size
1264-
#elif i.distance_to(self.player) == 1:
1265-
# if not self.player.is_dead():
1266-
# i.attack(self.player)
12671280
elif i.mind == "animal":
12681281
self.animal_ai.take_turn(i)
12691282
elif i.mind == "undead":
@@ -1357,6 +1370,8 @@ def __init__(self):
13571370
self.y = -1
13581371

13591372
self.name = "thing"
1373+
self.pronoun = "it"
1374+
self.proper_name = False
13601375
self.special = None
13611376

13621377
def move_to(self, x, y, parent = None):
@@ -1376,8 +1391,20 @@ def move_to(self, x, y, parent = None):
13761391
else:
13771392
raise ValueError("Can't move outside the level map.")
13781393

1394+
def the_name(self):
1395+
if self.proper_name:
1396+
return self.name
1397+
else:
1398+
return "the " + self.name
1399+
1400+
def a_name(self):
1401+
if self.name[0] in ('a', 'e', 'i', 'o', 'u'):
1402+
return "an " + self.name
1403+
else:
1404+
return "a " + self.name
1405+
13791406
def __str__(self):
1380-
return self.name
1407+
return self.a_name()
13811408

13821409
class Item(Thing):
13831410
def __init__(self, template):
@@ -1514,7 +1541,7 @@ def is_enemy(self, creature):
15141541

15151542
def attack(self, creature):
15161543
if self.distance_to(creature) > 1:
1517-
self.log(creature.name +
1544+
self.log(creature.the_name() +
15181545
" is too far away for melee.")
15191546
return False
15201547

@@ -1537,14 +1564,10 @@ def attack(self, creature):
15371564
damage = creature.apply_armor(damage)
15381565
if damage > 0:
15391566
creature.wounds += damage
1540-
self.log("%s strikes %s for %d damage!" %
1541-
(self.name, creature.name, damage))
1542-
else:
1543-
self.log("%s pokes %s harmlessly." %
1544-
(self.name, creature.name))
1567+
self.log.call_attack(self, creature, damage)
15451568
else:
15461569
self.log("%s misses %s." %
1547-
(self.name, creature.name))
1570+
(self.the_name(), creature.the_name()))
15481571

15491572
if self.weapon != None:
15501573
self.action_points -= 4 + self.weapon.weight
@@ -1585,14 +1608,14 @@ def fire_at(self, x, y):
15851608
if damage > 0:
15861609
creature.wounds += damage
15871610
self.log("%s shoots %s for %d damage!" %
1588-
(self.name, creature.name, damage))
1611+
(self.the_name(), creature.the_name(), damage))
15891612
else:
15901613
self.log("%s hits %s harmlessly." %
1591-
(self.name, creature.name))
1614+
(self.the_name(), creature.the_name()))
15921615
else:
15931616
self.ammo.move_to(x, y, self.level)
15941617
self.log("%s's shot misses %s." %
1595-
(self.name, creature.name))
1618+
(self.the_name(), creature.the_name()))
15961619

15971620
for item in self.content.copy():
15981621
if item.name == self.ammo.name:
@@ -1633,7 +1656,7 @@ def apply_effect(self, effect):
16331656
damage, self.effects[kind]["damage"])
16341657
else:
16351658
self.effects[kind] = {"turns": turns, "damage": damage}
1636-
self.log("%s is %s!" % (self.name, fxdescs[kind]))
1659+
self.log("%s is %s!" % (self.the_name(), fxdescs[kind]))
16371660

16381661
def is_dead(self):
16391662
return self.wounds >= self.dice_size * self.stamina

0 commit comments

Comments
 (0)