Skip to content

Commit

Permalink
Fix mngrp writing
Browse files Browse the repository at this point in the history
  • Loading branch information
HobbitDur committed Sep 25, 2024
1 parent c1306b1 commit c863889
Show file tree
Hide file tree
Showing 5 changed files with 23 additions and 260 deletions.
2 changes: 1 addition & 1 deletion FF8GameData
Submodule FF8GameData updated 1 files
+2 −2 gamedata.py
33 changes: 16 additions & 17 deletions data.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@
import os
from dataclasses import dataclass

from font import FontManagement
from gamedata import GameData
from FF8GameData.gamedata import GameData


@dataclass
Expand Down Expand Up @@ -122,19 +121,19 @@ def __init__(self, bin, game_data: GameData):
self.file_bin_data = bytearray()
self.file_msg_data = bytearray()
self.file_mngrp_data = bytearray()
self.font_mgmt = FontManagement()
self.game_data = game_data
if bin.input_id == TypeId.CARD:
self.input_table = game_data.card_values
self.input_table = game_data.card_data_json["card_info"]
elif bin.input_id == TypeId.SPELL:
self.input_table = game_data.magic_values
self.input_table = game_data.magic_data_json["magic"]
elif bin.input_id == TypeId.ITEM:
self.input_table = game_data.item_values
self.input_table = game_data.item_data_json['items']
if bin.output_id == TypeId.CARD:
self.output_table = game_data.card_values
self.output_table = game_data.card_data_json["card_info"]
elif bin.output_id == TypeId.SPELL:
self.output_table = game_data.magic_values
self.output_table = game_data.magic_data_json["magic"]
elif bin.output_id == TypeId.ITEM:
self.output_table = game_data.item_values
self.output_table = game_data.item_data_json['items']

def read_bin_file(self, file_bin, file_msg):
with open(file_msg, "rb") as file:
Expand All @@ -150,13 +149,13 @@ def read_bin_file(self, file_bin, file_msg):
entry.text_offset = int.from_bytes(bytearray(self.file_bin_data[index:index + 2]), byteorder='little')
entry.amount_received = int(self.file_bin_data[index + 2])
entry.unk = int.from_bytes(bytearray(self.file_bin_data[index + 3:index + 5]), byteorder='little')
entry.input_id = self.input_table[int(self.file_bin_data[index + 5])]['ref']
entry.input_id = str(int(self.file_bin_data[index + 5])) + ':' + self.input_table[int(self.file_bin_data[index + 5])]['name']
entry.amount_required = int(self.file_bin_data[index + 6])
entry.output_id = self.output_table[int(self.file_bin_data[index + 7])]['ref']
entry.output_id = str(int(self.file_bin_data[index + 7])) + ':' + self.output_table[int(self.file_bin_data[index + 7])]['name']
# Each text is separated by a 0, so we search till this char (that is removed and replaced by a \n)
raw_data_text = self.file_msg_data[entry.text_offset:self.file_msg_data.index(bytes([0]), entry.text_offset)]
raw_data_text.extend(bytes(0x02))
entry.text = self.font_mgmt.translate_hex_to_str(raw_data_text)
entry.text = self.game_data.translate_hex_to_str(raw_data_text)
index += entry.ENTRY_SIZE

def write_bin_file(self, file_bin, file_msg, file_mngrp):
Expand All @@ -179,13 +178,13 @@ def write_bin_file(self, file_bin, file_msg, file_mngrp):
with open(file_mngrp, "rb") as file:
self.file_mngrp_data.extend(file.read())

self.file_mngrp_data[self.bin.mngrp_bin_offset:] = self.file_bin_data
self.file_mngrp_data[self.bin.mngrp_msg_offset:] = self.file_msg_data
self.file_mngrp_data[self.bin.mngrp_bin_offset:self.bin.mngrp_bin_offset+len(self.file_bin_data)] = self.file_bin_data
self.file_mngrp_data[self.bin.mngrp_msg_offset:self.bin.mngrp_msg_offset+len(self.file_msg_data)] = self.file_msg_data
with open(file_mngrp, "wb") as file:
file.write(self.file_mngrp_data)

def read_pandemona_file(self, path_input):
with open(os.path.join(path_input, self.bin.name + '.pandemona'), "r") as file:
with open(os.path.join(path_input, self.bin.name + '.pandemona'), "r", encoding="utf8") as file:
str_read = file.readlines()

current_line = 0
Expand All @@ -196,7 +195,7 @@ def read_pandemona_file(self, path_input):
current_line += 1 # Ignoring the first line that just specify the entry index
# Using [:-1] to remove the \n that we manually added
text_read = str_read[current_line].split(f'{self.CHAR_SEP}')[1][:-1]
entry.text = self.font_mgmt.translate_str_to_hex(text_read)
entry.text = self.game_data.translate_str_to_hex(text_read)
entry.text.extend([0x00]) # Adding the 0x00 that have been removed to note the end of the string
entry.text_offset = text_offset.to_bytes(2, byteorder='little')
entry.input_id = int(str_read[current_line + 1].split(f'{self.CHAR_SEP}')[1][:-1].split(':')[0])
Expand All @@ -223,5 +222,5 @@ def write_pandemona_file(self, path_output):
str_entry += f"unk{self.CHAR_SEP}{entry.unk}\n"
str_output += str_entry
str_output += '-----------------------------------------------------------------\n'
with open(os.path.join(path_output, self.bin.name + '.pandemona'), "w") as file:
with open(os.path.join(path_output, self.bin.name + '.pandemona'), "w", encoding="utf8") as file:
file.write(str_output)
199 changes: 0 additions & 199 deletions font.py

This file was deleted.

40 changes: 0 additions & 40 deletions gamedata.py

This file was deleted.

9 changes: 6 additions & 3 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
import os
import shutil

from FF8GameData.gamedata import GameData
from data import m000bin, BinManager, m001bin, m002bin, m003bin, m004bin
from gamedata import GameData

m000_data_list = ['t_mag_rf', 'i_mag_rf', 'f_mag_rf', 'l_mag_rf', 'time_mag_rf', 'st_mag_rf', 'supt_mag_rf',
'forbid_mag_rf']
Expand All @@ -14,7 +14,7 @@
pandemona_folder = '2 - PandemonaFiles'
output_folder = '3 - OutputFiles'

# The m00x.bin files consist of a data for each abilities. Each "data (abilities) has an entry of x bytes.
# The m00x.bin files consist of a data for each ability. Each "data (abilities) has an entry of x bytes.
if __name__ == '__main__':
parser = argparse.ArgumentParser(prog="Pandemona", description="This program read m00x.bin files")
args = parser.parse_args()
Expand All @@ -37,7 +37,10 @@
reading_pandemona = False


game_data = GameData()
game_data = GameData("FF8GameData")
game_data.load_item_data()
game_data.load_magic_data()
game_data.load_card_data()
for file in list_to_analyze:
if 'm000' in file:
bin_data = m000bin()
Expand Down

0 comments on commit c863889

Please sign in to comment.