battleman.py: Added a feature to conditions that allows them to end at the start of a turn or the end of a turn
This commit is contained in:
parent
593c9d2937
commit
1da238be5a
48
battleman.py
48
battleman.py
|
@ -18,7 +18,6 @@ import sys
|
||||||
|
|
||||||
|
|
||||||
class CombatGroup():
|
class CombatGroup():
|
||||||
|
|
||||||
# What we're mostly getting here is a definition of the *members*
|
# What we're mostly getting here is a definition of the *members*
|
||||||
# of the group... then we build them all and stick them in
|
# of the group... then we build them all and stick them in
|
||||||
# the group
|
# the group
|
||||||
|
@ -77,13 +76,10 @@ class CombatGroup():
|
||||||
|
|
||||||
|
|
||||||
def begin_turn(self):
|
def begin_turn(self):
|
||||||
msg = None
|
print '{} {} initiative.'.format(self.name, ['has', 'have'][len(self.members) != 1])
|
||||||
if self.is_solo_group():
|
|
||||||
msg = '{} has initiative.'.format(self.name)
|
|
||||||
else:
|
|
||||||
msg = '{} have initiative.'.format(self.name)
|
|
||||||
|
|
||||||
print msg
|
for c in self.members:
|
||||||
|
c.begin_turn()
|
||||||
|
|
||||||
|
|
||||||
def end_turn(self):
|
def end_turn(self):
|
||||||
|
@ -117,11 +113,12 @@ class Combatant():
|
||||||
|
|
||||||
# cond_type can be 's' or 't', for 'save' or 'timed'. If it is 't', condition expires at the end of the players turn
|
# cond_type can be 's' or 't', for 'save' or 'timed'. If it is 't', condition expires at the end of the players turn
|
||||||
# 'duration' rounds from now
|
# 'duration' rounds from now
|
||||||
def add_condition(self, name, cond_type, duration=None):
|
def add_condition(self, name, cond_type, duration=None, end_type='e'):
|
||||||
condition = {}
|
condition = {}
|
||||||
condition['name'] = name
|
condition['name'] = name
|
||||||
condition['cond_type'] = cond_type
|
condition['cond_type'] = cond_type
|
||||||
condition['duration'] = duration
|
condition['duration'] = duration
|
||||||
|
condition['end_type'] = end_type
|
||||||
condition['index'] = self.next_condition_index
|
condition['index'] = self.next_condition_index
|
||||||
if cond_type == 'timed' and duration == None:
|
if cond_type == 'timed' and duration == None:
|
||||||
print('Error: specified a timed condition with no duration.')
|
print('Error: specified a timed condition with no duration.')
|
||||||
|
@ -159,8 +156,17 @@ class Combatant():
|
||||||
c['duration'] -= 1
|
c['duration'] -= 1
|
||||||
|
|
||||||
|
|
||||||
|
def begin_turn(self):
|
||||||
|
for c in self.conditions.values():
|
||||||
|
if c['cond_type'] == 't' and c['end_type'] == 's':
|
||||||
|
if c['duration'] <= 0:
|
||||||
|
self.remove_condition(c['index'])
|
||||||
|
else:
|
||||||
|
print('{} is still affected by {} ({} round{} left).'.format(self, c['name'], c['duration'], 's'[c['duration']==1:]))
|
||||||
|
|
||||||
|
|
||||||
def end_turn(self):
|
def end_turn(self):
|
||||||
for (index, c) in self.conditions.items():
|
for c in self.conditions.values():
|
||||||
if c['cond_type'] == 's':
|
if c['cond_type'] == 's':
|
||||||
r = None
|
r = None
|
||||||
if self.pc:
|
if self.pc:
|
||||||
|
@ -171,16 +177,16 @@ class Combatant():
|
||||||
r = save_die.roll()['total']
|
r = save_die.roll()['total']
|
||||||
|
|
||||||
if r >= 10:
|
if r >= 10:
|
||||||
self.remove_condition(index)
|
self.remove_condition(c['index'])
|
||||||
|
print('{} successfully saved against {}.'.format(self, c['name']))
|
||||||
else:
|
else:
|
||||||
print('{} failed a save against {}.'.format(self, c['name']))
|
print('{} failed a save against {}.'.format(self, c['name']))
|
||||||
|
|
||||||
elif c['cond_type'] == 't':
|
elif c['cond_type'] == 't' and c['end_type'] == 'e':
|
||||||
c['duration'] -= 1
|
if c['duration'] <= 0:
|
||||||
if c['duration'] < 0:
|
self.remove_condition(c['index'])
|
||||||
self.remove_condition(index)
|
|
||||||
else:
|
else:
|
||||||
print('{} is still affected by {} ({} round{} left).'.format(self, c['name'], c['duration']+1, 's'[c['duration']==0:]))
|
print('{} is still affected by {} ({} round{} left).'.format(self, c['name'], c['duration'], 's'[c['duration']==1:]))
|
||||||
|
|
||||||
# fixme: still need to add recharges
|
# fixme: still need to add recharges
|
||||||
|
|
||||||
|
@ -490,9 +496,8 @@ def do_prompt():
|
||||||
(comm, rdata) = input_str('', default='?', show_default=False, prompt_str='>').partition(' ')[::2]
|
(comm, rdata) = input_str('', default='?', show_default=False, prompt_str='>').partition(' ')[::2]
|
||||||
data = rdata.split(' ')
|
data = rdata.split(' ')
|
||||||
|
|
||||||
# To simplify our checks later
|
|
||||||
if data == ['']:
|
if data == ['']:
|
||||||
data = None
|
data = []
|
||||||
|
|
||||||
if comm == '?':
|
if comm == '?':
|
||||||
do_help()
|
do_help()
|
||||||
|
@ -528,7 +533,6 @@ def do_prompt():
|
||||||
do_wait(data)
|
do_wait(data)
|
||||||
elif comm == 'W':
|
elif comm == 'W':
|
||||||
do_unwait(data)
|
do_unwait(data)
|
||||||
print('Sorry, this is still a stub function.')
|
|
||||||
elif comm == 'q':
|
elif comm == 'q':
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
|
@ -642,6 +646,7 @@ def do_second_wind(data):
|
||||||
|
|
||||||
def do_add_condition(data):
|
def do_add_condition(data):
|
||||||
duration = None
|
duration = None
|
||||||
|
end_type = 'e'
|
||||||
|
|
||||||
if len(data) >= 1:
|
if len(data) >= 1:
|
||||||
c = battle.get_combatant(int(data[0]))
|
c = battle.get_combatant(int(data[0]))
|
||||||
|
@ -664,7 +669,12 @@ def do_add_condition(data):
|
||||||
else:
|
else:
|
||||||
duration = input_int('duration')
|
duration = input_int('duration')
|
||||||
|
|
||||||
c.add_condition(name, ctype, duration)
|
if len(data) >= 5:
|
||||||
|
end_type = data[4]
|
||||||
|
else:
|
||||||
|
end_type = input_str('(s)tart|(e)nd', default='e', show_default=True)
|
||||||
|
|
||||||
|
c.add_condition(name, ctype, duration, end_type)
|
||||||
|
|
||||||
|
|
||||||
def do_remove_condition(data):
|
def do_remove_condition(data):
|
||||||
|
|
Loading…
Reference in New Issue
Block a user