Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file not shown.
6 changes: 6 additions & 0 deletions coilsnake/assets/ips/Earthbound/battle_animation_expand.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Title: Modify battle animation functions to play expanded animations
Author: Jeffman (IPS format conversion by SupremeKirb)
Source: https://github.com/jeffman/EbPsiAnimationEditor/blob/master/additional-animations.md
Hidden: True
Header: 0x200
Ranges: []
1 change: 1 addition & 0 deletions coilsnake/assets/modulelist.txt
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ eb.DeathScreenModule
eb.SoundStoneModule
eb.CastModule
eb.AnimationModule
eb.BattleAnimationModule
eb.MapModule
eb.MapEnemyModule
eb.MapMusicModule
Expand Down
23 changes: 15 additions & 8 deletions coilsnake/assets/structures/eb.yml
Original file line number Diff line number Diff line change
Expand Up @@ -414,16 +414,23 @@
type: pointer
- name: Frame duration (1/60th seconds)
size: 1
- name: Palette duration (1/60th seconds)
- name: Palette cycle duration (1/60th seconds)
size: 1
- name: Palette cycle lower index
size: 1
- name: Palette cycle upper index
size: 1
- name: unknown
size: 2
type: bytearray
- name: Frame count
size: 1
- name: unknown 2
size: 2
type: bytearray
- name: Targetting
values:
- single
- row
- all
- random
size: 1
- name: Delay before enemy colour change
size: 1
- name: Duration of enemy colour change
size: 1
- name: Enemy colour
Expand All @@ -436,7 +443,7 @@
13431935: &id091
entries:
- name: Palette
size: 16
size: 8
type: palette
name: PSI_ANIM_PALETTES
offset: 13431935
Expand Down
33 changes: 32 additions & 1 deletion coilsnake/model/eb/graphics.py
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,6 @@ def __eq__(self, other):
def __getitem__(self, key):
return self.tiles[key]


class EbTileArrangementItem(EqualityMixin, StringRepresentationMixin):
def __init__(self, tile=0, subpalette=0, is_vertically_flipped=False, is_horizontally_flipped=False,
is_priority=False):
Expand Down Expand Up @@ -244,6 +243,17 @@ def to_block(self, block, offset=0):
| self.tile),
2)

class EbOneByteTileArrangementItem(EbTileArrangementItem):
def check_validity(self):
if self.tile < 0 or self.tile > 0xFF:
raise InvalidArgumentError("Invalid tile[{}]".format(self.tile))

def from_block(self, block, offset=0):
self.tile = block[offset]

def to_block(self, block, offset=0):
self.check_validity()
block[offset] = self.tile

class EbTileArrangement(EqualityMixin):
"""A class representing an image formed by an arrangement of tile-based graphics with a certain palette."""
Expand Down Expand Up @@ -387,7 +397,28 @@ def __getitem__(self, key):
x, y, self.width, self.height))
return self.arrangement[y][x]

class EbOneByteTileArrangement(EbTileArrangement):
"""A class representing a tilemap that consists only of a single byte with a 0-255 tile ID per tile.
It's expected that other data, such as palette, priority, etc, is appended later."""
def __init__(self, width, height):
super().__init__(width, height)
self.arrangement = [[EbOneByteTileArrangementItem() for x in range(self.width)] for y in range(self.height)]

def from_block(self, block, offset=0):
for row in self.arrangement:
for item in row:
item.from_block(block, offset)
offset += 1

def to_block(self, block, offset=0):
for row in self.arrangement:
for item in row:
item.to_block(block, offset)
offset += 1

def block_size(self):
return sum([len(x) for x in self.arrangement])

class EbCompressedGraphic(object):
def __init__(self, num_tiles, tile_width, tile_height, bpp, arrangement_width, arrangement_height,
num_palettes, num_subpalettes, subpalette_length, compressed_palettes=True):
Expand Down
2 changes: 1 addition & 1 deletion coilsnake/modules/common/GenericModule.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,5 @@ def read_from_project(self, resource_open):
def write_to_project(self, resource_open):
pass

def upgrade_project(self, old_version, new_version, rom, resource_open_r, resource_open_w, resource_delete):
def upgrade_project(self, old_version, new_version, rom, old_compiled_rom, resource_open_r, resource_open_w, resource_delete):
pass
2 changes: 1 addition & 1 deletion coilsnake/modules/common/PatchModule.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ def read_from_project(self, resource_open):
with resource_open("patches", "yml", True) as f:
self.patches = yml_load(f)

def upgrade_project(self, old_version, new_version, rom, resource_open_r, resource_open_w, resource_delete):
def upgrade_project(self, old_version, new_version, rom, old_compiled_rom, resource_open_r, resource_open_w, resource_delete):
if old_version == 1:
self.read_from_rom(rom)
self.write_to_project(resource_open_w)
Expand Down
3 changes: 2 additions & 1 deletion coilsnake/modules/common/UsedRangeModule.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ def __init__(self):
super(UsedRangeModule, self).__init__()
self.ranges = []

def upgrade_project(self, old_version, new_version, rom, resource_open_r, resource_open_w, resource_delete):
def upgrade_project(self, old_version, new_version, rom, old_compiled_rom, resource_open_r, resource_open_w, resource_delete):
"""
Upgrades a project's used ranges module to the latest version.
"""
Expand All @@ -66,6 +66,7 @@ def upgrade_project(self, old_version, new_version, rom, resource_open_r, resour
old_version + 1,
new_version,
rom,
old_compiled_rom,
resource_open_r,
resource_open_w,
resource_delete)
Expand Down
2 changes: 1 addition & 1 deletion coilsnake/modules/eb/AnimationModule.py
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ def write_to_project(self, resource_open):
with resource_open('Animations/animations', 'yml', True) as f:
yml_dump(animation_data, f, default_flow_style=False)

def upgrade_project(self, old_version, new_version, rom, resource_open_r, resource_open_w, resource_delete):
def upgrade_project(self, old_version, new_version, rom, old_compiled_rom, resource_open_r, resource_open_w, resource_delete):
if old_version < 10:
self.read_from_rom(rom)
self.write_to_project(resource_open_w)
Loading
Loading