annotate pytouhou/resource/anmwrapper.py @ 316:f0be7ea62330

Fix a bug with ECL instruction 96, and fix overall ECL handling. The issue with instruction 96 was about death callbacks, being executed on the caller of instruction 96 instead of the dying enemies. This was introduced by changeset 5930b33a0370. Additionnaly, ECL processes are now an attribute of the Enemy, and death/timeout conditions are checked right after the ECL frame, even if the ECL script has already ended, just like in the original game.
author Thibaut Girka <thib@sitedethib.com>
date Thu, 29 Mar 2012 21:18:35 +0200
parents 2100276c289d
children 40d5f3083ebc
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
285
2100276c289d Document some AnmWrapper related functions.
Thibaut Girka <thib@sitedethib.com>
parents: 282
diff changeset
1 # -*- encoding: utf-8 -*-
2100276c289d Document some AnmWrapper related functions.
Thibaut Girka <thib@sitedethib.com>
parents: 282
diff changeset
2 ##
2100276c289d Document some AnmWrapper related functions.
Thibaut Girka <thib@sitedethib.com>
parents: 282
diff changeset
3 ## Copyright (C) 2012 Thibaut Girka <thib@sitedethib.com>
2100276c289d Document some AnmWrapper related functions.
Thibaut Girka <thib@sitedethib.com>
parents: 282
diff changeset
4 ##
2100276c289d Document some AnmWrapper related functions.
Thibaut Girka <thib@sitedethib.com>
parents: 282
diff changeset
5 ## This program is free software; you can redistribute it and/or modify
2100276c289d Document some AnmWrapper related functions.
Thibaut Girka <thib@sitedethib.com>
parents: 282
diff changeset
6 ## it under the terms of the GNU General Public License as published
2100276c289d Document some AnmWrapper related functions.
Thibaut Girka <thib@sitedethib.com>
parents: 282
diff changeset
7 ## by the Free Software Foundation; version 3 only.
2100276c289d Document some AnmWrapper related functions.
Thibaut Girka <thib@sitedethib.com>
parents: 282
diff changeset
8 ##
2100276c289d Document some AnmWrapper related functions.
Thibaut Girka <thib@sitedethib.com>
parents: 282
diff changeset
9 ## This program is distributed in the hope that it will be useful,
2100276c289d Document some AnmWrapper related functions.
Thibaut Girka <thib@sitedethib.com>
parents: 282
diff changeset
10 ## but WITHOUT ANY WARRANTY; without even the implied warranty of
2100276c289d Document some AnmWrapper related functions.
Thibaut Girka <thib@sitedethib.com>
parents: 282
diff changeset
11 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2100276c289d Document some AnmWrapper related functions.
Thibaut Girka <thib@sitedethib.com>
parents: 282
diff changeset
12 ## GNU General Public License for more details.
2100276c289d Document some AnmWrapper related functions.
Thibaut Girka <thib@sitedethib.com>
parents: 282
diff changeset
13 ##
2100276c289d Document some AnmWrapper related functions.
Thibaut Girka <thib@sitedethib.com>
parents: 282
diff changeset
14
2100276c289d Document some AnmWrapper related functions.
Thibaut Girka <thib@sitedethib.com>
parents: 282
diff changeset
15 from itertools import repeat
282
dbb1a86c0235 Rename Animations to ANM0 and prepare AnmWrapper for dialogs and interface.
Thibaut Girka <thib@sitedethib.com>
parents: 97
diff changeset
16
dbb1a86c0235 Rename Animations to ANM0 and prepare AnmWrapper for dialogs and interface.
Thibaut Girka <thib@sitedethib.com>
parents: 97
diff changeset
17
97
ac2e5e1c2c3c Refactor \o/
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
18 class AnmWrapper(object):
285
2100276c289d Document some AnmWrapper related functions.
Thibaut Girka <thib@sitedethib.com>
parents: 282
diff changeset
19 def __init__(self, anm_files, offsets=None):
2100276c289d Document some AnmWrapper related functions.
Thibaut Girka <thib@sitedethib.com>
parents: 282
diff changeset
20 """Wrapper for scripts and sprites described in “anm_files”.
2100276c289d Document some AnmWrapper related functions.
Thibaut Girka <thib@sitedethib.com>
parents: 282
diff changeset
21
2100276c289d Document some AnmWrapper related functions.
Thibaut Girka <thib@sitedethib.com>
parents: 282
diff changeset
22 The optional “offsets” argument specifies a list of offsets to be added
2100276c289d Document some AnmWrapper related functions.
Thibaut Girka <thib@sitedethib.com>
parents: 282
diff changeset
23 to script and sprite numbers of each file described in “anm_files”.
2100276c289d Document some AnmWrapper related functions.
Thibaut Girka <thib@sitedethib.com>
parents: 282
diff changeset
24
2100276c289d Document some AnmWrapper related functions.
Thibaut Girka <thib@sitedethib.com>
parents: 282
diff changeset
25 That is, if anm_files[0] and anm_files[1] each have only one sprite,
2100276c289d Document some AnmWrapper related functions.
Thibaut Girka <thib@sitedethib.com>
parents: 282
diff changeset
26 numbered 0 in both cases, and offsets=(0, 1), the first file's sprite
2100276c289d Document some AnmWrapper related functions.
Thibaut Girka <thib@sitedethib.com>
parents: 282
diff changeset
27 will be numbered 0 and the second file's will be numbered 1.
2100276c289d Document some AnmWrapper related functions.
Thibaut Girka <thib@sitedethib.com>
parents: 282
diff changeset
28 """
282
dbb1a86c0235 Rename Animations to ANM0 and prepare AnmWrapper for dialogs and interface.
Thibaut Girka <thib@sitedethib.com>
parents: 97
diff changeset
29 self.scripts = {}
dbb1a86c0235 Rename Animations to ANM0 and prepare AnmWrapper for dialogs and interface.
Thibaut Girka <thib@sitedethib.com>
parents: 97
diff changeset
30 self.sprites = {}
dbb1a86c0235 Rename Animations to ANM0 and prepare AnmWrapper for dialogs and interface.
Thibaut Girka <thib@sitedethib.com>
parents: 97
diff changeset
31
285
2100276c289d Document some AnmWrapper related functions.
Thibaut Girka <thib@sitedethib.com>
parents: 282
diff changeset
32 if not offsets:
2100276c289d Document some AnmWrapper related functions.
Thibaut Girka <thib@sitedethib.com>
parents: 282
diff changeset
33 offsets = repeat(0) # “offsets” defaults to zeroes
2100276c289d Document some AnmWrapper related functions.
Thibaut Girka <thib@sitedethib.com>
parents: 282
diff changeset
34
2100276c289d Document some AnmWrapper related functions.
Thibaut Girka <thib@sitedethib.com>
parents: 282
diff changeset
35 for anm, offset in zip(anm_files, offsets):
282
dbb1a86c0235 Rename Animations to ANM0 and prepare AnmWrapper for dialogs and interface.
Thibaut Girka <thib@sitedethib.com>
parents: 97
diff changeset
36 for script_id, script in anm.scripts.iteritems():
dbb1a86c0235 Rename Animations to ANM0 and prepare AnmWrapper for dialogs and interface.
Thibaut Girka <thib@sitedethib.com>
parents: 97
diff changeset
37 self.scripts[script_id + offset] = (anm, script) #TODO: check
dbb1a86c0235 Rename Animations to ANM0 and prepare AnmWrapper for dialogs and interface.
Thibaut Girka <thib@sitedethib.com>
parents: 97
diff changeset
38 for sprite_id, sprite in anm.sprites.iteritems():
dbb1a86c0235 Rename Animations to ANM0 and prepare AnmWrapper for dialogs and interface.
Thibaut Girka <thib@sitedethib.com>
parents: 97
diff changeset
39 self.sprites[sprite_id + offset] = (anm, sprite)
97
ac2e5e1c2c3c Refactor \o/
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
40
ac2e5e1c2c3c Refactor \o/
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
41
ac2e5e1c2c3c Refactor \o/
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
42 def get_sprite(self, sprite_index):
282
dbb1a86c0235 Rename Animations to ANM0 and prepare AnmWrapper for dialogs and interface.
Thibaut Girka <thib@sitedethib.com>
parents: 97
diff changeset
43 return self.sprites[sprite_index]
97
ac2e5e1c2c3c Refactor \o/
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
44
ac2e5e1c2c3c Refactor \o/
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
45
ac2e5e1c2c3c Refactor \o/
Thibaut Girka <thib@sitedethib.com>
parents:
diff changeset
46 def get_script(self, script_index):
282
dbb1a86c0235 Rename Animations to ANM0 and prepare AnmWrapper for dialogs and interface.
Thibaut Girka <thib@sitedethib.com>
parents: 97
diff changeset
47 return self.scripts[script_index]
dbb1a86c0235 Rename Animations to ANM0 and prepare AnmWrapper for dialogs and interface.
Thibaut Girka <thib@sitedethib.com>
parents: 97
diff changeset
48