Mercurial > touhou
annotate pytouhou/formats/anm0.py @ 413:6d7dbcb31d95
Let the gc do its work, don’t keep useless references.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Wed, 12 Jun 2013 18:32:35 +0200 |
parents | 88e2a2485b2b |
children | 40d5f3083ebc |
rev | line source |
---|---|
52
ab826bc29aa2
Add some documentation, GPLv3 headers, README and COPYING file.
Thibaut Girka <thib@sitedethib.com>
parents:
41
diff
changeset
|
1 # -*- encoding: utf-8 -*- |
ab826bc29aa2
Add some documentation, GPLv3 headers, README and COPYING file.
Thibaut Girka <thib@sitedethib.com>
parents:
41
diff
changeset
|
2 ## |
ab826bc29aa2
Add some documentation, GPLv3 headers, README and COPYING file.
Thibaut Girka <thib@sitedethib.com>
parents:
41
diff
changeset
|
3 ## Copyright (C) 2011 Thibaut Girka <thib@sitedethib.com> |
ab826bc29aa2
Add some documentation, GPLv3 headers, README and COPYING file.
Thibaut Girka <thib@sitedethib.com>
parents:
41
diff
changeset
|
4 ## |
ab826bc29aa2
Add some documentation, GPLv3 headers, README and COPYING file.
Thibaut Girka <thib@sitedethib.com>
parents:
41
diff
changeset
|
5 ## This program is free software; you can redistribute it and/or modify |
ab826bc29aa2
Add some documentation, GPLv3 headers, README and COPYING file.
Thibaut Girka <thib@sitedethib.com>
parents:
41
diff
changeset
|
6 ## it under the terms of the GNU General Public License as published |
ab826bc29aa2
Add some documentation, GPLv3 headers, README and COPYING file.
Thibaut Girka <thib@sitedethib.com>
parents:
41
diff
changeset
|
7 ## by the Free Software Foundation; version 3 only. |
ab826bc29aa2
Add some documentation, GPLv3 headers, README and COPYING file.
Thibaut Girka <thib@sitedethib.com>
parents:
41
diff
changeset
|
8 ## |
ab826bc29aa2
Add some documentation, GPLv3 headers, README and COPYING file.
Thibaut Girka <thib@sitedethib.com>
parents:
41
diff
changeset
|
9 ## This program is distributed in the hope that it will be useful, |
ab826bc29aa2
Add some documentation, GPLv3 headers, README and COPYING file.
Thibaut Girka <thib@sitedethib.com>
parents:
41
diff
changeset
|
10 ## but WITHOUT ANY WARRANTY; without even the implied warranty of |
ab826bc29aa2
Add some documentation, GPLv3 headers, README and COPYING file.
Thibaut Girka <thib@sitedethib.com>
parents:
41
diff
changeset
|
11 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
ab826bc29aa2
Add some documentation, GPLv3 headers, README and COPYING file.
Thibaut Girka <thib@sitedethib.com>
parents:
41
diff
changeset
|
12 ## GNU General Public License for more details. |
ab826bc29aa2
Add some documentation, GPLv3 headers, README and COPYING file.
Thibaut Girka <thib@sitedethib.com>
parents:
41
diff
changeset
|
13 ## |
ab826bc29aa2
Add some documentation, GPLv3 headers, README and COPYING file.
Thibaut Girka <thib@sitedethib.com>
parents:
41
diff
changeset
|
14 |
204
88361534c77e
Add some documentation (argh, so much left to document!)
Thibaut Girka <thib@sitedethib.com>
parents:
170
diff
changeset
|
15 """ANM0 files handling. |
88361534c77e
Add some documentation (argh, so much left to document!)
Thibaut Girka <thib@sitedethib.com>
parents:
170
diff
changeset
|
16 |
88361534c77e
Add some documentation (argh, so much left to document!)
Thibaut Girka <thib@sitedethib.com>
parents:
170
diff
changeset
|
17 This module provides classes for handling the ANM0 file format. |
88361534c77e
Add some documentation (argh, so much left to document!)
Thibaut Girka <thib@sitedethib.com>
parents:
170
diff
changeset
|
18 The ANM0 format is a format used in Touhou 6: EoSD to describe sprites |
88361534c77e
Add some documentation (argh, so much left to document!)
Thibaut Girka <thib@sitedethib.com>
parents:
170
diff
changeset
|
19 and animations. |
88361534c77e
Add some documentation (argh, so much left to document!)
Thibaut Girka <thib@sitedethib.com>
parents:
170
diff
changeset
|
20 Almost everything rendered in the game is described by an ANM0 file. |
88361534c77e
Add some documentation (argh, so much left to document!)
Thibaut Girka <thib@sitedethib.com>
parents:
170
diff
changeset
|
21 """ |
88361534c77e
Add some documentation (argh, so much left to document!)
Thibaut Girka <thib@sitedethib.com>
parents:
170
diff
changeset
|
22 |
2
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
23 from struct import pack, unpack |
69
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
24 from pytouhou.utils.helpers import read_string, get_logger |
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
25 |
377
70e2ed71b09c
Add meaningful exceptions in format parsing.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
300
diff
changeset
|
26 from pytouhou.formats import WrongFormatError |
70e2ed71b09c
Add meaningful exceptions in format parsing.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
300
diff
changeset
|
27 |
69
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
28 |
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
29 logger = get_logger(__name__) |
2
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
30 |
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
31 #TODO: refactor/clean up |
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
32 |
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
33 |
236
741860192b56
Implement ANM0 interrupts
Thibaut Girka <thib@sitedethib.com>
parents:
204
diff
changeset
|
34 class Script(list): |
741860192b56
Implement ANM0 interrupts
Thibaut Girka <thib@sitedethib.com>
parents:
204
diff
changeset
|
35 def __init__(self): |
741860192b56
Implement ANM0 interrupts
Thibaut Girka <thib@sitedethib.com>
parents:
204
diff
changeset
|
36 list.__init__(self) |
741860192b56
Implement ANM0 interrupts
Thibaut Girka <thib@sitedethib.com>
parents:
204
diff
changeset
|
37 self.interrupts = {} |
741860192b56
Implement ANM0 interrupts
Thibaut Girka <thib@sitedethib.com>
parents:
204
diff
changeset
|
38 |
741860192b56
Implement ANM0 interrupts
Thibaut Girka <thib@sitedethib.com>
parents:
204
diff
changeset
|
39 |
741860192b56
Implement ANM0 interrupts
Thibaut Girka <thib@sitedethib.com>
parents:
204
diff
changeset
|
40 |
282
dbb1a86c0235
Rename Animations to ANM0 and prepare AnmWrapper for dialogs and interface.
Thibaut Girka <thib@sitedethib.com>
parents:
245
diff
changeset
|
41 class ANM0(object): |
69
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
42 _instructions = {0: ('', 'delete'), |
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
43 1: ('I', 'set_sprite'), |
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
44 2: ('ff', 'set_scale'), |
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
45 3: ('I', 'set_alpha'), |
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
46 4: ('BBBx', 'set_color'), |
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
47 5: ('I', 'jump'), |
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
48 7: ('', 'toggle_mirrored'), |
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
49 9: ('fff', 'set_3d_rotations'), |
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
50 10: ('fff', 'set_3d_rotations_speed'), |
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
51 11: ('ff', 'set_scale_speed'), |
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
52 12: ('ii', 'fade'), |
72
6a08f44fa01b
Handle a few more ANM instructions. pytouhou.game.background needs some serious refactoring.
Thibaut Girka <thib@sitedethib.com>
parents:
71
diff
changeset
|
53 13: ('', 'set_blendmode_add'), |
6a08f44fa01b
Handle a few more ANM instructions. pytouhou.game.background needs some serious refactoring.
Thibaut Girka <thib@sitedethib.com>
parents:
71
diff
changeset
|
54 14: ('', 'set_blendmode_alphablend'), |
69
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
55 15: ('', 'keep_still'), |
80
211e84207b3b
Fix set_random_sprite's format
Thibaut Girka <thib@sitedethib.com>
parents:
72
diff
changeset
|
56 16: ('ii', 'set_random_sprite'), |
170
e7902309305c
Implement move anm instructions.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
111
diff
changeset
|
57 17: ('fff', 'set_3d_translation'), |
e7902309305c
Implement move anm instructions.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
111
diff
changeset
|
58 18: ('fffi', 'move_to_linear'), |
e7902309305c
Implement move anm instructions.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
111
diff
changeset
|
59 19: ('fffi', 'move_to_decel'), |
e7902309305c
Implement move anm instructions.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
111
diff
changeset
|
60 20: ('fffi', 'move_to_accel'), |
236
741860192b56
Implement ANM0 interrupts
Thibaut Girka <thib@sitedethib.com>
parents:
204
diff
changeset
|
61 21: ('', 'wait'), |
741860192b56
Implement ANM0 interrupts
Thibaut Girka <thib@sitedethib.com>
parents:
204
diff
changeset
|
62 22: ('i', 'interrupt_label'), |
69
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
63 23: ('', 'set_corner_relative_placement'), |
402
88e2a2485b2b
Add a version attribute to ANM0 and latest discovered instruction.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
377
diff
changeset
|
64 24: ('', 'wait_ex'), |
71
a03d7a94b997
Add support for a few ANM instructions
Thibaut Girka <thib@sitedethib.com>
parents:
69
diff
changeset
|
65 25: ('i', 'set_allow_offset'), #TODO: better name |
81
f5f9b5eb69a3
Handle one more ANM instruction, and handle sprite indexes offsets
Thibaut Girka <thib@sitedethib.com>
parents:
80
diff
changeset
|
66 26: ('i', 'set_automatic_orientation'), |
69
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
67 27: ('f', 'shift_texture_x'), |
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
68 28: ('f', 'shift_texture_y'), |
245
d3ba32a9096e
Implement ANM0 instruction 29 and fix 24
Thibaut Girka <thib@sitedethib.com>
parents:
239
diff
changeset
|
69 29: ('i', 'set_visible'), |
71
a03d7a94b997
Add support for a few ANM instructions
Thibaut Girka <thib@sitedethib.com>
parents:
69
diff
changeset
|
70 30: ('ffi', 'scale_in'), |
a03d7a94b997
Add support for a few ANM instructions
Thibaut Girka <thib@sitedethib.com>
parents:
69
diff
changeset
|
71 31: ('i', None)} |
69
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
72 |
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
73 |
2
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
74 def __init__(self): |
402
88e2a2485b2b
Add a version attribute to ANM0 and latest discovered instruction.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
377
diff
changeset
|
75 self.version = 0 |
2
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
76 self.size = (0, 0) |
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
77 self.first_name = None |
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
78 self.secondary_name = None |
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
79 self.sprites = {} |
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
80 self.scripts = {} |
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
81 |
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
82 |
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
83 @classmethod |
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
84 def read(cls, file): |
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
85 nb_sprites, nb_scripts, zero1 = unpack('<III', file.read(12)) |
300
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
282
diff
changeset
|
86 width, height, format, unknown1 = unpack('<IIII', file.read(16)) |
2
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
87 first_name_offset, unused, secondary_name_offset = unpack('<III', file.read(12)) |
300
da53bc29b94a
Add the game interface.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
282
diff
changeset
|
88 version, unknown2, thtxoffset, hasdata, nextoffset, zero2 = unpack('<IIIIII', file.read(24)) |
2
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
89 if version != 0: |
377
70e2ed71b09c
Add meaningful exceptions in format parsing.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
300
diff
changeset
|
90 raise WrongFormatError(version) |
70e2ed71b09c
Add meaningful exceptions in format parsing.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
300
diff
changeset
|
91 assert (zero1, zero2) == (0, 0) |
2
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
92 |
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
93 sprite_offsets = [unpack('<I', file.read(4))[0] for i in range(nb_sprites)] |
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
94 script_offsets = [unpack('<II', file.read(8)) for i in range(nb_scripts)] |
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
95 |
282
dbb1a86c0235
Rename Animations to ANM0 and prepare AnmWrapper for dialogs and interface.
Thibaut Girka <thib@sitedethib.com>
parents:
245
diff
changeset
|
96 self = cls() |
2
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
97 |
282
dbb1a86c0235
Rename Animations to ANM0 and prepare AnmWrapper for dialogs and interface.
Thibaut Girka <thib@sitedethib.com>
parents:
245
diff
changeset
|
98 self.size = (width, height) |
2
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
99 |
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
100 # Names |
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
101 if first_name_offset: |
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
102 file.seek(first_name_offset) |
282
dbb1a86c0235
Rename Animations to ANM0 and prepare AnmWrapper for dialogs and interface.
Thibaut Girka <thib@sitedethib.com>
parents:
245
diff
changeset
|
103 self.first_name = read_string(file, 32, 'ascii') #TODO: 32, really? |
2
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
104 if secondary_name_offset: |
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
105 file.seek(secondary_name_offset) |
282
dbb1a86c0235
Rename Animations to ANM0 and prepare AnmWrapper for dialogs and interface.
Thibaut Girka <thib@sitedethib.com>
parents:
245
diff
changeset
|
106 self.secondary_name = read_string(file, 32, 'ascii') #TODO: 32, really? |
2
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
107 |
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
108 |
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
109 # Sprites |
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
110 file.seek(64) |
282
dbb1a86c0235
Rename Animations to ANM0 and prepare AnmWrapper for dialogs and interface.
Thibaut Girka <thib@sitedethib.com>
parents:
245
diff
changeset
|
111 self.sprites = {} |
2
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
112 for offset in sprite_offsets: |
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
113 file.seek(offset) |
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
114 idx, x, y, width, height = unpack('<Iffff', file.read(20)) |
282
dbb1a86c0235
Rename Animations to ANM0 and prepare AnmWrapper for dialogs and interface.
Thibaut Girka <thib@sitedethib.com>
parents:
245
diff
changeset
|
115 self.sprites[idx] = x, y, width, height |
2
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
116 |
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
117 |
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
118 # Scripts |
282
dbb1a86c0235
Rename Animations to ANM0 and prepare AnmWrapper for dialogs and interface.
Thibaut Girka <thib@sitedethib.com>
parents:
245
diff
changeset
|
119 self.scripts = {} |
2
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
120 for i, offset in script_offsets: |
282
dbb1a86c0235
Rename Animations to ANM0 and prepare AnmWrapper for dialogs and interface.
Thibaut Girka <thib@sitedethib.com>
parents:
245
diff
changeset
|
121 self.scripts[i] = Script() |
38
cb5b27011044
Small refactoring and proper anm0's instruction 5 handling
Thibaut Girka <thib@sitedethib.com>
parents:
35
diff
changeset
|
122 instruction_offsets = [] |
2
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
123 file.seek(offset) |
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
124 while True: |
38
cb5b27011044
Small refactoring and proper anm0's instruction 5 handling
Thibaut Girka <thib@sitedethib.com>
parents:
35
diff
changeset
|
125 instruction_offsets.append(file.tell() - offset) |
111 | 126 time, opcode, size = unpack('<HBB', file.read(4)) |
127 data = file.read(size) | |
69
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
128 if opcode in cls._instructions: |
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
129 args = unpack('<%s' % cls._instructions[opcode][0], data) |
38
cb5b27011044
Small refactoring and proper anm0's instruction 5 handling
Thibaut Girka <thib@sitedethib.com>
parents:
35
diff
changeset
|
130 else: |
cb5b27011044
Small refactoring and proper anm0's instruction 5 handling
Thibaut Girka <thib@sitedethib.com>
parents:
35
diff
changeset
|
131 args = (data,) |
69
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
132 logger.warn('unknown opcode %d', opcode) |
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
133 |
282
dbb1a86c0235
Rename Animations to ANM0 and prepare AnmWrapper for dialogs and interface.
Thibaut Girka <thib@sitedethib.com>
parents:
245
diff
changeset
|
134 self.scripts[i].append((time, opcode, args)) |
69
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
135 if opcode == 0: |
2
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
136 break |
69
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
137 |
236
741860192b56
Implement ANM0 interrupts
Thibaut Girka <thib@sitedethib.com>
parents:
204
diff
changeset
|
138 # Translate offsets to instruction pointers and register interrupts |
282
dbb1a86c0235
Rename Animations to ANM0 and prepare AnmWrapper for dialogs and interface.
Thibaut Girka <thib@sitedethib.com>
parents:
245
diff
changeset
|
139 for instr_offset, (j, instr) in zip(instruction_offsets, enumerate(self.scripts[i])): |
69
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
140 time, opcode, args = instr |
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
141 if opcode == 5: |
a142e57218a0
Refactor. Move VMs to pytouhou.vm.
Thibaut Girka <thib@sitedethib.com>
parents:
57
diff
changeset
|
142 args = (instruction_offsets.index(args[0]),) |
239
901489c21d19
Fix a few crashes in the anmrunner, disable fullscreen switch, change alt+Fx to shift+Fx
Thibaut Girka <thib@sitedethib.com>
parents:
236
diff
changeset
|
143 elif opcode == 22: |
236
741860192b56
Implement ANM0 interrupts
Thibaut Girka <thib@sitedethib.com>
parents:
204
diff
changeset
|
144 interrupt = args[0] |
282
dbb1a86c0235
Rename Animations to ANM0 and prepare AnmWrapper for dialogs and interface.
Thibaut Girka <thib@sitedethib.com>
parents:
245
diff
changeset
|
145 self.scripts[i].interrupts[interrupt] = j + 1 |
dbb1a86c0235
Rename Animations to ANM0 and prepare AnmWrapper for dialogs and interface.
Thibaut Girka <thib@sitedethib.com>
parents:
245
diff
changeset
|
146 self.scripts[i][j] = time, opcode, args |
2
057cb96907e3
Add preliminay support for EoSD's ANM format
Thibaut Girka <thib@sitedethib.com>
parents:
diff
changeset
|
147 |
282
dbb1a86c0235
Rename Animations to ANM0 and prepare AnmWrapper for dialogs and interface.
Thibaut Girka <thib@sitedethib.com>
parents:
245
diff
changeset
|
148 return self |