annotate nagslang/protagonist.py @ 333:3dd32686dbc3

Better wolf claw attack.
author Jeremy Thurgood <firxen@gmail.com>
date Fri, 06 Sep 2013 10:49:19 +0200
parents 768e1d06155f
children a3f1b2f0e3fb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
65
a99ac95a2940 Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
1 import pymunk
a99ac95a2940 Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
2 import pymunk.pygame_util
229
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
3 from pymunk.vec2d import Vec2d
65
a99ac95a2940 Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
4
207
42e8993c31fd Break out Renderers
Stefano Rivera <stefano@rivera.za.net>
parents: 200
diff changeset
5 from nagslang import render
281
9b56e954c674 Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents: 277
diff changeset
6 from nagslang.constants import (
9b56e954c674 Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents: 277
diff changeset
7 COLLISION_TYPE_PLAYER, ZORDER_MID, WEREWOLF_SOAK_FACTOR,
9b56e954c674 Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents: 277
diff changeset
8 PROTAGONIST_HEALTH_MIN_LEVEL, PROTAGONIST_HEALTH_MAX_LEVEL,
333
3dd32686dbc3 Better wolf claw attack.
Jeremy Thurgood <firxen@gmail.com>
parents: 313
diff changeset
9 NON_GAME_OBJECT_COLLIDERS, BULLET_DAMAGE, CLAW_DAMAGE)
313
David Sharpe
parents: 312
diff changeset
10 from nagslang.events import FireEvent, ClawEvent
215
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
11 from nagslang.game_object import GameObject, Physicser, make_body
76
Stefano Rivera <stefano@rivera.za.net>
parents: 73
diff changeset
12 from nagslang.mutators import FLIP_H
65
a99ac95a2940 Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
13 from nagslang.resources import resources
285
ef4f6375c0b5 Basic death
Neil Muller <drnlmuller@gmail.com>
parents: 281
diff changeset
14 from nagslang.events import ScreenChange
28
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
15
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
16
215
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
17 class ProtagonistPhysicser(Physicser):
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
18 def __init__(self, space, form_shapes):
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
19 self._space = space
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
20 self._form_shapes = form_shapes
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
21
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
22 def switch_form(self, old_form, new_form):
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
23 self._space.remove(self._form_shapes[old_form])
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
24 shape = self._form_shapes[new_form]
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
25 self._space.add(shape)
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
26 for attr, value in shape.protagonist_body_props.iteritems():
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
27 setattr(shape.body, attr, value)
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
28
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
29 def get_shape(self):
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
30 return self._form_shapes[self.game_object.form]
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
31
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
32
218
9e2ef2f15035 Better rendering and movement detection.
Jeremy Thurgood <firxen@gmail.com>
parents: 217
diff changeset
33 class ProtagonistFormSelectionRenderer(render.RendererSelectionRenderer):
9e2ef2f15035 Better rendering and movement detection.
Jeremy Thurgood <firxen@gmail.com>
parents: 217
diff changeset
34 def select_renderer(self):
229
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
35 return self.game_object.form
218
9e2ef2f15035 Better rendering and movement detection.
Jeremy Thurgood <firxen@gmail.com>
parents: 217
diff changeset
36
9e2ef2f15035 Better rendering and movement detection.
Jeremy Thurgood <firxen@gmail.com>
parents: 217
diff changeset
37
65
a99ac95a2940 Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
38 class Protagonist(GameObject):
28
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
39 """Representation of our fearless protagonist.
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
40
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
41 TODO: Factor out a bunch of this stuff when we need it for other objects.
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
42 """
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
43
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
44 HUMAN_FORM = 'human'
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
45 WOLF_FORM = 'wolf'
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
46
277
56e42c00da25 Protagonist and enemies should see the world
Neil Muller <drnlmuller@gmail.com>
parents: 276
diff changeset
47 def __init__(self, space, world, position):
215
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
48 physicser = self._make_physics(space, position)
218
9e2ef2f15035 Better rendering and movement detection.
Jeremy Thurgood <firxen@gmail.com>
parents: 217
diff changeset
49 renderer = self._make_renderer()
28
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
50 self.inventory = {}
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
51 self.form = self.HUMAN_FORM
218
9e2ef2f15035 Better rendering and movement detection.
Jeremy Thurgood <firxen@gmail.com>
parents: 217
diff changeset
52 self.angle = 0
9e2ef2f15035 Better rendering and movement detection.
Jeremy Thurgood <firxen@gmail.com>
parents: 217
diff changeset
53 self.is_moving = False
277
56e42c00da25 Protagonist and enemies should see the world
Neil Muller <drnlmuller@gmail.com>
parents: 276
diff changeset
54 self.world = world
28
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
55
218
9e2ef2f15035 Better rendering and movement detection.
Jeremy Thurgood <firxen@gmail.com>
parents: 217
diff changeset
56 super(Protagonist, self).__init__(physicser, renderer)
107
b90d01e4d9d4 Layered drawing.
Jeremy Thurgood <firxen@gmail.com>
parents: 104
diff changeset
57 self.zorder = ZORDER_MID
65
a99ac95a2940 Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
58
246
281c54cefe08 Added health to protagonist.
David Sharpe
parents: 230
diff changeset
59 self.health_level = 100
281c54cefe08 Added health to protagonist.
David Sharpe
parents: 230
diff changeset
60
65
a99ac95a2940 Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
61 self.go_human()
a99ac95a2940 Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
62
215
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
63 def _make_physics(self, space, position):
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
64 body = make_body(10, pymunk.inf, position, 0.8)
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
65 body.velocity_limit = 1000
65
a99ac95a2940 Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
66
215
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
67 human = pymunk.Poly(body, [(-15, -30), (15, -30), (15, 30), (-15, 30)])
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
68 human.elasticity = 1.0
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
69 human.collision_type = COLLISION_TYPE_PLAYER
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
70 human.protagonist_body_props = {
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
71 'mass': 10,
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
72 'damping': 0.8,
93
d6a49f0c1e6e Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents: 81
diff changeset
73 }
215
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
74
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
75 wolf = pymunk.Circle(body, 30)
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
76 wolf.elasticity = 1.0
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
77 wolf.collision_type = COLLISION_TYPE_PLAYER
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
78 wolf.protagonist_body_props = {
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
79 'mass': 100,
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
80 'damping': 0.9,
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
81 }
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
82
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
83 return ProtagonistPhysicser(space, {
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
84 self.HUMAN_FORM: human,
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
85 self.WOLF_FORM: wolf,
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
86 })
65
a99ac95a2940 Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
87
66
8bf0459ebc56 Clean up a few things.
Jeremy Thurgood <firxen@gmail.com>
parents: 65
diff changeset
88 def _get_image(self, name, *transforms):
8bf0459ebc56 Clean up a few things.
Jeremy Thurgood <firxen@gmail.com>
parents: 65
diff changeset
89 return resources.get_image('creatures', name, transforms=transforms)
8bf0459ebc56 Clean up a few things.
Jeremy Thurgood <firxen@gmail.com>
parents: 65
diff changeset
90
276
3153196517fc Move protagonist to the world
Neil Muller <drnlmuller@gmail.com>
parents: 265
diff changeset
91 def change_space(self, new_space):
3153196517fc Move protagonist to the world
Neil Muller <drnlmuller@gmail.com>
parents: 265
diff changeset
92 self.physicser.remove_from_space()
3153196517fc Move protagonist to the world
Neil Muller <drnlmuller@gmail.com>
parents: 265
diff changeset
93 self.physicser.set_space(new_space)
3153196517fc Move protagonist to the world
Neil Muller <drnlmuller@gmail.com>
parents: 265
diff changeset
94 self.physicser.add_to_space()
3153196517fc Move protagonist to the world
Neil Muller <drnlmuller@gmail.com>
parents: 265
diff changeset
95
285
ef4f6375c0b5 Basic death
Neil Muller <drnlmuller@gmail.com>
parents: 281
diff changeset
96 def reset(self):
ef4f6375c0b5 Basic death
Neil Muller <drnlmuller@gmail.com>
parents: 281
diff changeset
97 self.health_level = 100
ef4f6375c0b5 Basic death
Neil Muller <drnlmuller@gmail.com>
parents: 281
diff changeset
98 self.is_moving = False
ef4f6375c0b5 Basic death
Neil Muller <drnlmuller@gmail.com>
parents: 281
diff changeset
99
ef4f6375c0b5 Basic death
Neil Muller <drnlmuller@gmail.com>
parents: 281
diff changeset
100 self.go_human()
ef4f6375c0b5 Basic death
Neil Muller <drnlmuller@gmail.com>
parents: 281
diff changeset
101
218
9e2ef2f15035 Better rendering and movement detection.
Jeremy Thurgood <firxen@gmail.com>
parents: 217
diff changeset
102 def _make_renderer(self):
9e2ef2f15035 Better rendering and movement detection.
Jeremy Thurgood <firxen@gmail.com>
parents: 217
diff changeset
103 return ProtagonistFormSelectionRenderer({
217
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 215
diff changeset
104 self.HUMAN_FORM: render.FacingSelectionRenderer(
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 215
diff changeset
105 {
229
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
106 'N': render.MovementAnimatedRenderer(
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
107 [self._get_image('human_N_1.png'),
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
108 self._get_image('human_N_2.png')], 3),
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
109 'S': render.MovementAnimatedRenderer(
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
110 [self._get_image('human_S_1.png'),
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
111 self._get_image('human_S_2.png')], 3),
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
112 'W': render.MovementAnimatedRenderer(
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
113 [self._get_image('human_W_1.png'),
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
114 self._get_image('human_W_2.png')], 3),
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
115 'E': render.MovementAnimatedRenderer(
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
116 [self._get_image('human_W_1.png', FLIP_H),
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
117 self._get_image('human_W_2.png', FLIP_H)], 3),
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
118 'NW': render.MovementAnimatedRenderer(
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
119 [self._get_image('human_NW_1.png'),
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
120 self._get_image('human_NW_2.png')], 3),
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
121 'NE': render.MovementAnimatedRenderer(
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
122 [self._get_image('human_NW_1.png', FLIP_H),
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
123 self._get_image('human_NW_2.png', FLIP_H)], 3),
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
124 'SW': render.MovementAnimatedRenderer(
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
125 [self._get_image('human_SW_1.png'),
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
126 self._get_image('human_SW_2.png')], 3),
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
127 'SE': render.MovementAnimatedRenderer(
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
128 [self._get_image('human_SW_1.png', FLIP_H),
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
129 self._get_image('human_SW_2.png', FLIP_H)], 3),
217
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 215
diff changeset
130 }),
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 215
diff changeset
131 self.WOLF_FORM: render.FacingSelectionRenderer(
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 215
diff changeset
132 {
229
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
133 'N': render.MovementAnimatedRenderer(
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
134 [self._get_image('werewolf_N_1.png'),
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
135 self._get_image('werewolf_N_2.png')], 3),
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
136 'S': render.MovementAnimatedRenderer(
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
137 [self._get_image('werewolf_S_1.png'),
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
138 self._get_image('werewolf_S_2.png')], 3),
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
139 'W': render.MovementAnimatedRenderer(
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
140 [self._get_image('werewolf_W_1.png'),
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
141 self._get_image('werewolf_W_2.png')], 3),
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
142 'E': render.MovementAnimatedRenderer(
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
143 [self._get_image('werewolf_W_1.png', FLIP_H),
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
144 self._get_image('werewolf_W_2.png', FLIP_H)], 3),
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
145 'NW': render.MovementAnimatedRenderer(
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
146 [self._get_image('werewolf_NW_1.png'),
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
147 self._get_image('werewolf_NW_2.png')], 3),
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
148 'NE': render.MovementAnimatedRenderer(
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
149 [self._get_image('werewolf_NW_1.png', FLIP_H),
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
150 self._get_image('werewolf_NW_2.png', FLIP_H)], 3),
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
151 'SW': render.MovementAnimatedRenderer(
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
152 [self._get_image('werewolf_SW_1.png'),
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
153 self._get_image('werewolf_SW_2.png')], 3),
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
154 'SE': render.MovementAnimatedRenderer(
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
155 [self._get_image('werewolf_SW_1.png', FLIP_H),
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
156 self._get_image('werewolf_SW_2.png', FLIP_H)], 3),
217
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 215
diff changeset
157 }),
218
9e2ef2f15035 Better rendering and movement detection.
Jeremy Thurgood <firxen@gmail.com>
parents: 217
diff changeset
158 })
65
a99ac95a2940 Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
159
28
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
160 @classmethod
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
161 def from_saved_state(cls, saved_state):
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
162 """Create an instance from the provided serialised state.
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
163 """
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
164 obj = cls()
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
165 # TODO: Update from saved state.
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
166 return obj
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
167
93
d6a49f0c1e6e Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents: 81
diff changeset
168 def get_render_angle(self):
229
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
169 # No image rotation when rendering, please.
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
170 return 0
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
171
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
172 def get_facing_direction(self):
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
173 # It's easier to work with a vector than an angle here.
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
174 vec = Vec2d.unit()
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
175 vec.angle = self.angle
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
176 # We probably don't have exactly -1, 0, or 1 here.
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
177 x = int(round(vec.x))
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
178 y = int(round(vec.y))
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
179
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
180 return {
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
181 (0, 1): 'N',
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
182 (0, -1): 'S',
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
183 (-1, 0): 'W',
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
184 (1, 0): 'E',
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
185 (1, 1): 'NE',
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
186 (1, -1): 'SE',
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
187 (-1, 1): 'NW',
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
188 (-1, -1): 'SW',
329b3044ddef Much better facing renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 218
diff changeset
189 }[(x, y)]
93
d6a49f0c1e6e Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents: 81
diff changeset
190
65
a99ac95a2940 Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
191 def go_werewolf(self):
215
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
192 self.physicser.switch_form(self.form, self.WOLF_FORM)
65
a99ac95a2940 Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
193 self.form = self.WOLF_FORM
a99ac95a2940 Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
194 self.impulse_factor = 4000
215
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
195
65
a99ac95a2940 Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
196 def go_human(self):
215
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
197 self.physicser.switch_form(self.form, self.HUMAN_FORM)
65
a99ac95a2940 Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
198 self.form = self.HUMAN_FORM
a99ac95a2940 Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
199 self.impulse_factor = 500
215
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
200
65
a99ac95a2940 Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
201 def set_direction(self, dx, dy):
a99ac95a2940 Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
202 if (dx, dy) == (0, 0):
218
9e2ef2f15035 Better rendering and movement detection.
Jeremy Thurgood <firxen@gmail.com>
parents: 217
diff changeset
203 self.is_moving = False
65
a99ac95a2940 Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
204 return
218
9e2ef2f15035 Better rendering and movement detection.
Jeremy Thurgood <firxen@gmail.com>
parents: 217
diff changeset
205 self.is_moving = True
93
d6a49f0c1e6e Rectangular human protagonist shape, refactored physicsers.
Jeremy Thurgood <firxen@gmail.com>
parents: 81
diff changeset
206 self.angle = pymunk.Vec2d((dx, dy)).angle
215
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
207 self.physicser.apply_impulse(
65
a99ac95a2940 Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
208 (dx * self.impulse_factor, dy * self.impulse_factor))
a99ac95a2940 Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
209
179
1ee8756888e4 Add some state manipulation helper methods
Neil Muller <drnlmuller@gmail.com>
parents: 156
diff changeset
210 def set_position(self, position):
215
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
211 self.physicser.position = position
179
1ee8756888e4 Add some state manipulation helper methods
Neil Muller <drnlmuller@gmail.com>
parents: 156
diff changeset
212
1ee8756888e4 Add some state manipulation helper methods
Neil Muller <drnlmuller@gmail.com>
parents: 156
diff changeset
213 def copy_state(self, old_protagonist):
215
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
214 self.physicser.position = old_protagonist.physicser.position
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
215 self.physicser.switch_form(self.form, old_protagonist.form)
217
d98daba73055 Composition-based renderers.
Jeremy Thurgood <firxen@gmail.com>
parents: 215
diff changeset
216 self.impulse_factor = old_protagonist.impulse_factor
179
1ee8756888e4 Add some state manipulation helper methods
Neil Muller <drnlmuller@gmail.com>
parents: 156
diff changeset
217 self.form = old_protagonist.form
1ee8756888e4 Add some state manipulation helper methods
Neil Muller <drnlmuller@gmail.com>
parents: 156
diff changeset
218 self.angle = old_protagonist.angle
1ee8756888e4 Add some state manipulation helper methods
Neil Muller <drnlmuller@gmail.com>
parents: 156
diff changeset
219 self.inventory = old_protagonist.inventory
1ee8756888e4 Add some state manipulation helper methods
Neil Muller <drnlmuller@gmail.com>
parents: 156
diff changeset
220
65
a99ac95a2940 Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
221 def toggle_form(self):
a99ac95a2940 Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
222 if self.form == self.WOLF_FORM:
a99ac95a2940 Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
223 self.go_human()
a99ac95a2940 Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
224 else:
a99ac95a2940 Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
225 self.go_werewolf()
a99ac95a2940 Move protagonist object to the right place.
Jeremy Thurgood <firxen@gmail.com>
parents: 28
diff changeset
226
281
9b56e954c674 Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents: 277
diff changeset
227 def get_current_interactible(self):
9b56e954c674 Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents: 277
diff changeset
228 for shape in self.get_space().shape_query(self.get_shape()):
9b56e954c674 Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents: 277
diff changeset
229 if shape.collision_type in NON_GAME_OBJECT_COLLIDERS:
9b56e954c674 Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents: 277
diff changeset
230 # No game object here.
9b56e954c674 Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents: 277
diff changeset
231 continue
9b56e954c674 Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents: 277
diff changeset
232 interactible = shape.physicser.game_object.interactible
9b56e954c674 Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents: 277
diff changeset
233 if interactible is not None:
9b56e954c674 Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents: 277
diff changeset
234 return interactible
9b56e954c674 Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents: 277
diff changeset
235 return None
9b56e954c674 Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents: 277
diff changeset
236
9b56e954c674 Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents: 277
diff changeset
237 def perform_action(self):
28
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
238 """Perform an action on the target.
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
239 """
281
9b56e954c674 Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents: 277
diff changeset
240 interactible = self.get_current_interactible()
9b56e954c674 Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents: 277
diff changeset
241 if interactible is None:
9b56e954c674 Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents: 277
diff changeset
242 # Nothing to interact with.
9b56e954c674 Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents: 277
diff changeset
243 return
9b56e954c674 Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents: 277
diff changeset
244 action = interactible.select_action(self)
9b56e954c674 Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents: 277
diff changeset
245 if action is None:
9b56e954c674 Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents: 277
diff changeset
246 # Nothing to do with it.
9b56e954c674 Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents: 277
diff changeset
247 return
9b56e954c674 Protagonist actions, now required for operating doors.
Jeremy Thurgood <firxen@gmail.com>
parents: 277
diff changeset
248 return action.perform(self)
28
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
249
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
250 def attack(self):
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
251 """Attempt to hurt something.
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
252 """
265
8a695b8ecd6c Correcting damage application
David Sharpe
parents: 261
diff changeset
253 if self.in_wolf_form():
312
72aca01c87ed Basic claw attack, stealing liberally from other people's code! ;)
David Sharpe
parents: 309
diff changeset
254 self.claw()
265
8a695b8ecd6c Correcting damage application
David Sharpe
parents: 261
diff changeset
255 else:
286
248b8fdb160c Collect gun (which currently looks like a bullet) to shoot.
Jeremy Thurgood <firxen@gmail.com>
parents: 285
diff changeset
256 self.shoot()
248b8fdb160c Collect gun (which currently looks like a bullet) to shoot.
Jeremy Thurgood <firxen@gmail.com>
parents: 285
diff changeset
257
248b8fdb160c Collect gun (which currently looks like a bullet) to shoot.
Jeremy Thurgood <firxen@gmail.com>
parents: 285
diff changeset
258 def shoot(self):
248b8fdb160c Collect gun (which currently looks like a bullet) to shoot.
Jeremy Thurgood <firxen@gmail.com>
parents: 285
diff changeset
259 if not self.has_item('gun'):
248b8fdb160c Collect gun (which currently looks like a bullet) to shoot.
Jeremy Thurgood <firxen@gmail.com>
parents: 285
diff changeset
260 return
248b8fdb160c Collect gun (which currently looks like a bullet) to shoot.
Jeremy Thurgood <firxen@gmail.com>
parents: 285
diff changeset
261 vec = Vec2d.unit()
248b8fdb160c Collect gun (which currently looks like a bullet) to shoot.
Jeremy Thurgood <firxen@gmail.com>
parents: 285
diff changeset
262 vec.angle = self.angle
291
c0e563fdfd90 Faster bullet
Stefano Rivera <stefano@rivera.za.net>
parents: 286
diff changeset
263 vec.length = 1000
333
3dd32686dbc3 Better wolf claw attack.
Jeremy Thurgood <firxen@gmail.com>
parents: 313
diff changeset
264 FireEvent.post(
3dd32686dbc3 Better wolf claw attack.
Jeremy Thurgood <firxen@gmail.com>
parents: 313
diff changeset
265 self.physicser.position, vec, BULLET_DAMAGE, COLLISION_TYPE_PLAYER)
28
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
266
312
72aca01c87ed Basic claw attack, stealing liberally from other people's code! ;)
David Sharpe
parents: 309
diff changeset
267 def claw(self):
72aca01c87ed Basic claw attack, stealing liberally from other people's code! ;)
David Sharpe
parents: 309
diff changeset
268 vec = Vec2d.unit()
72aca01c87ed Basic claw attack, stealing liberally from other people's code! ;)
David Sharpe
parents: 309
diff changeset
269 vec.angle = self.angle
333
3dd32686dbc3 Better wolf claw attack.
Jeremy Thurgood <firxen@gmail.com>
parents: 313
diff changeset
270 vec.length = 30
3dd32686dbc3 Better wolf claw attack.
Jeremy Thurgood <firxen@gmail.com>
parents: 313
diff changeset
271 ClawEvent.post(self.physicser.position, vec, CLAW_DAMAGE)
312
72aca01c87ed Basic claw attack, stealing liberally from other people's code! ;)
David Sharpe
parents: 309
diff changeset
272
28
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
273 def in_wolf_form(self):
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
274 return self.form == self.WOLF_FORM
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
275
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
276 def in_human_form(self):
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
277 return self.form == self.HUMAN_FORM
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
278
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
279 def has_item(self, item):
c03982fe3c70 Protagonist and environment.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
280 return item in self.inventory
73
e118458a4e9c Added environmental motion effects to protagonist.
davidsharpe@185.4.16.172.in-addr.arpa
parents: 66
diff changeset
281
e118458a4e9c Added environmental motion effects to protagonist.
davidsharpe@185.4.16.172.in-addr.arpa
parents: 66
diff changeset
282 def environmental_movement(self, dx, dy):
e118458a4e9c Added environmental motion effects to protagonist.
davidsharpe@185.4.16.172.in-addr.arpa
parents: 66
diff changeset
283 if (dx, dy) == (0, 0):
e118458a4e9c Added environmental motion effects to protagonist.
davidsharpe@185.4.16.172.in-addr.arpa
parents: 66
diff changeset
284 return
215
325c317cbfa1 Better protagonist physicser.
Jeremy Thurgood <firxen@gmail.com>
parents: 208
diff changeset
285 self.physicser.apply_impulse((dx, dy))
246
281c54cefe08 Added health to protagonist.
David Sharpe
parents: 230
diff changeset
286
281c54cefe08 Added health to protagonist.
David Sharpe
parents: 230
diff changeset
287 def get_health_level(self):
249
David Sharpe
parents: 248
diff changeset
288 """Return current health level
David Sharpe
parents: 248
diff changeset
289 """
246
281c54cefe08 Added health to protagonist.
David Sharpe
parents: 230
diff changeset
290 return self.health_level
281c54cefe08 Added health to protagonist.
David Sharpe
parents: 230
diff changeset
291
285
ef4f6375c0b5 Basic death
Neil Muller <drnlmuller@gmail.com>
parents: 281
diff changeset
292 def die(self):
ef4f6375c0b5 Basic death
Neil Muller <drnlmuller@gmail.com>
parents: 281
diff changeset
293 # Handle player death - may be called due to other reasons
ef4f6375c0b5 Basic death
Neil Muller <drnlmuller@gmail.com>
parents: 281
diff changeset
294 # than zero health
ef4f6375c0b5 Basic death
Neil Muller <drnlmuller@gmail.com>
parents: 281
diff changeset
295 ScreenChange.post('dead')
ef4f6375c0b5 Basic death
Neil Muller <drnlmuller@gmail.com>
parents: 281
diff changeset
296
246
281c54cefe08 Added health to protagonist.
David Sharpe
parents: 230
diff changeset
297 def lose_health(self, amount):
281c54cefe08 Added health to protagonist.
David Sharpe
parents: 230
diff changeset
298 if self.in_human_form():
281c54cefe08 Added health to protagonist.
David Sharpe
parents: 230
diff changeset
299 self.health_level -= amount
281c54cefe08 Added health to protagonist.
David Sharpe
parents: 230
diff changeset
300 else:
281c54cefe08 Added health to protagonist.
David Sharpe
parents: 230
diff changeset
301 self.health_level -= amount / WEREWOLF_SOAK_FACTOR
285
ef4f6375c0b5 Basic death
Neil Muller <drnlmuller@gmail.com>
parents: 281
diff changeset
302 if self.health_level <= PROTAGONIST_HEALTH_MIN_LEVEL:
ef4f6375c0b5 Basic death
Neil Muller <drnlmuller@gmail.com>
parents: 281
diff changeset
303 self.die()
246
281c54cefe08 Added health to protagonist.
David Sharpe
parents: 230
diff changeset
304
281c54cefe08 Added health to protagonist.
David Sharpe
parents: 230
diff changeset
305 def gain_health(self, amount):
281c54cefe08 Added health to protagonist.
David Sharpe
parents: 230
diff changeset
306 self.health_level += amount
281c54cefe08 Added health to protagonist.
David Sharpe
parents: 230
diff changeset
307 if self.health_level > PROTAGONIST_HEALTH_MAX_LEVEL:
248
b86a88ed87a1 More pep8
David Sharpe
parents: 246
diff changeset
308 self.health_level = PROTAGONIST_HEALTH_MAX_LEVEL
309
2b0494b3ce6a Werewolf form heals every second.
Jeremy Thurgood <firxen@gmail.com>
parents: 305
diff changeset
309
2b0494b3ce6a Werewolf form heals every second.
Jeremy Thurgood <firxen@gmail.com>
parents: 305
diff changeset
310 def update(self, dt):
333
3dd32686dbc3 Better wolf claw attack.
Jeremy Thurgood <firxen@gmail.com>
parents: 313
diff changeset
311 if int(self.lifetime + dt) > int(self.lifetime):
3dd32686dbc3 Better wolf claw attack.
Jeremy Thurgood <firxen@gmail.com>
parents: 313
diff changeset
312 if self.form == self.WOLF_FORM:
3dd32686dbc3 Better wolf claw attack.
Jeremy Thurgood <firxen@gmail.com>
parents: 313
diff changeset
313 self.gain_health(1)
309
2b0494b3ce6a Werewolf form heals every second.
Jeremy Thurgood <firxen@gmail.com>
parents: 305
diff changeset
314 super(Protagonist, self).update(dt)