3
0
mirror of synced 2024-11-23 23:00:58 +01:00

Chara search by name, get hariai from game files

This commit is contained in:
Shinrin Ouja Moriking 2024-05-11 20:11:11 -06:00
parent 72293be29b
commit e27e4949b7
4 changed files with 86 additions and 19 deletions

View File

@ -45,6 +45,7 @@
"New chart format": "New chart format",
"Background": "Background",
"Hariai": "Hariai",
"From game files": "From game files",
"Output folder": "Output folder",
"Create Mod": "Create Mod",
"Fw error": "FW fields can't be Hiragana, kanji or have symbols",

View File

@ -766,6 +766,7 @@ if __name__ == "__main__":
requiredNamed.add_argument('--banner', help='Banner image (must be 244x58)', default=None, required=True)
parser.add_argument('--bg', help='Background image (must be 128x256)', default=None, required=False)
parser.add_argument('--hariai', help='Hariai image (must be 250x322 or 382x502)', default=None)
parser.add_argument('--metadata-hariai-in-game', help='hariai already is in game files', default=False, action='store_true')
parser.add_argument('--metadata-fw-title', help='Fullwidth music title for database', default=None)
parser.add_argument('--metadata-fw-artist', help='Fullwidth music artist for database', default=None)
parser.add_argument('--metadata-fw-genre', help='Fullwidth music genre for database', default=None)
@ -829,7 +830,6 @@ if __name__ == "__main__":
# Chart level
level = args_vars['lvl_%s' % difficulty]
level = level if level != None else 1
chart = E.chart(
E.folder("custom", __type="str"),
E.filename(args.name, __type="str"),
@ -899,9 +899,14 @@ if __name__ == "__main__":
# Create banner folder
tex_files['kc_diff_ifs'] = create_banner(output_path, args.musicid, args.banner)
hariai = ""
if args.hariai:
# Create hariai folder
tex_files['ha_merge_ifs'] = create_hariai(output_path, args.musicid, args.hariai)
# If hariai is on game files, dont need to create again
if args.metadata_hariai_in_game:
hariai = args.hariai
else: # Create hariai folder
tex_files['ha_merge_ifs'] = create_hariai(output_path, args.musicid, args.hariai)
hariai = tex_files['ha_merge_ifs']
mask |= 0x00800000 # Required for songs that show a hariai image on the music selection screen
if args.bg:
@ -925,7 +930,7 @@ if __name__ == "__main__":
E.cs_version(str(args.metadata_cs_version), __type="u32"),
E.categories(str(args.metadata_categories), __type="u32"),
E.charts(*charts_xml),
E.ha(tex_files.get('ha_merge_ifs', ""), __type="str"),
E.ha(hariai, __type="str"),
E.chara_x(str(args.metadata_chara_x), __type="u32"),
E.chara_y(str(args.metadata_chara_y), __type="u32"),
E.unk1("0 0 0 0 0 0 36 0 0 59 77 0 0 0 0 134 0 0 68 67 222 0 0 0 0 0 0 0 0 0 0 0", __type="u16", __count="32"),

View File

@ -5,6 +5,7 @@ import os
import jaconv
import subprocess
import re
import cutlet
from tkinter import filedialog as fd
from tkinter import messagebox
from tkinter.messagebox import showinfo,askyesno
@ -65,7 +66,7 @@ class Application(tkinter.Frame):
self.has_battle_var = BooleanVar()
self.is_jacket_var = BooleanVar()
self.new_chart_format = BooleanVar()
self.hariai_in_game = BooleanVar()
# first menu
self.menu_bar= tkinter.Menu(parent)
self.menu_file = tkinter.Menu(self.menu_bar, tearoff=False)
@ -223,14 +224,14 @@ class Application(tkinter.Frame):
self.tag_chara_1.grid(column=0, row=18,sticky="W",pady = 2)
self.box_chara_1 = tkinter.Entry(parent)
self.box_chara_1.grid(column=1, row=18,sticky='ew')
self.sel_chara_1 = tkinter.Button(parent,text=self.tr["Open"],command=lambda: self.chara_selection(parent,self.box_chara_1))
self.sel_chara_1 = tkinter.Button(parent,text=self.tr["Open"],command=lambda: self.chara_selection(parent,self.box_chara_1,0))
self.sel_chara_1.grid(column=2, row=18,sticky="W")
#Chara 2
self.tag_chara_2 = tkinter.Label(parent, text=self.tr["Chara 2"])
self.tag_chara_2.grid(column=0, row=19,sticky="W",pady = 2)
self.box_chara_2 = tkinter.Entry(parent)
self.box_chara_2.grid(column=1, row=19,sticky='ew')
self.sel_chara_2 = tkinter.Button(parent,text=self.tr["Open"],command=lambda: self.chara_selection(parent,self.box_chara_2))
self.sel_chara_2 = tkinter.Button(parent,text=self.tr["Open"],command=lambda: self.chara_selection(parent,self.box_chara_2,0))
self.sel_chara_2.grid(column=2, row=19,sticky="W")
#Has battle hyper
self.tag_battle_hyper = tkinter.Label(parent, text=self.tr["Has battle hyper"])
@ -372,19 +373,27 @@ class Application(tkinter.Frame):
self.find_hariai.grid(column=7, row=25,sticky="W")
self.clean_hariai = tkinter.Button(parent,text=self.tr["Clean"],command=lambda: self.clean_image(parent,"hariai",self.box_hariai))
self.clean_hariai.grid(column=8, row=25,sticky="w",columnspan=1)
#Hariai from game
self.tag_game_hariai = tkinter.Label(parent, text=self.tr["From game files"])
self.tag_game_hariai.grid(column=5, row=26,sticky="W",pady = 2)
self.check_game_hariai = tkinter.Checkbutton(parent,onvalue=True, offvalue=False,variable=self.hariai_in_game)
self.check_game_hariai.grid(column=6, row=26,sticky='ew')
self.game_hariai = tkinter.Button(parent,text=self.tr["Open"],command=lambda: self.chara_selection(parent,self.box_hariai,2))
self.game_hariai.grid(column=7, row=26,sticky="w",columnspan=1)
#Output folder
self.tag_output = tkinter.Label(parent, text=self.tr["Output folder"])
self.tag_output.grid(column=5, row=26,sticky="W",pady = 2)
self.tag_output.grid(column=5, row=27,sticky="W",pady = 2)
self.box_output= tkinter.Entry(parent)
self.box_output.grid(column=6, row=26,sticky='ew')
self.box_output.grid(column=6, row=27,sticky='ew')
self.find_output = tkinter.Button(parent,text=self.tr["Open"],command=lambda: self.select_directory(self.box_output))
self.find_output.grid(column=7, row=26,sticky="W")
self.find_output.grid(column=7, row=27,sticky="W")
#Create Mod
self.create_mod = tkinter.Button(parent,text=self.tr["Create Mod"],command=lambda:self.generate_mod())
self.create_mod.grid(column=6, row=28,sticky="EW")
self.create_mod.grid(column=6, row=29,sticky="EW")
#Banner display
self.tag_image_banner=tkinter.Label(parent, text=self.tr["Banner"])
@ -455,6 +464,7 @@ class Application(tkinter.Frame):
self.box_to_param("--metadata-chara2",self.box_chara_2)
self.bool_to_param("--metadata-has-battle-hyper",self.has_battle_var)
self.bool_to_param("--metadata-hariai-is-jacket",self.is_jacket_var)
self.bool_to_param("--metadata-hariai-in-game",self.hariai_in_game)
self.box_to_param("--metadata-folder",self.value_inside_folder)
self.box_to_param("--lvl-bp",self.value_inside_bp_lv)
self.box_to_param("--lvl-ep",self.value_inside_ep_lv)
@ -557,6 +567,7 @@ class Application(tkinter.Frame):
return 0
widget.delete(0,"end")
widget.insert(0,filename)
self.hariai_in_game.set(False)
@ -727,6 +738,7 @@ class Application(tkinter.Frame):
data["New chart format"]=self.new_chart_format.get()
data["Background"]=self.box_background.get()
data["Hariai"]=self.box_hariai.get()
data["Hariai in game"]=self.hariai_in_game.get()
data["Output folder"]=self.box_output.get()
return(json.dumps(data))
@ -740,6 +752,15 @@ class Application(tkinter.Frame):
if type(val) != str:
return default
return val
def set_bool(self, data, name: str, default: bool = False) -> bool:
val = data.get(name)
if val is None:
return default
if type(val) != bool:
return default
return val
def p2b_to_fields(self,data,parent):
@ -798,8 +819,17 @@ class Application(tkinter.Frame):
self.insert_image(parent,data["Banner"],self.box_banner,"banner")
if(data["Background"]!=''):
self.insert_image(parent,data["Background"],self.box_background,"bg")
hariai_is_in_game = self.set_bool(data,"Hariai in game")
self.hariai_in_game.set(hariai_is_in_game)
if(data["Hariai"]!=''):
self.insert_image(parent,data["Hariai"],self.box_hariai,"hariai")
if hariai_is_in_game == False:
self.insert_image(parent,data["Hariai"],self.box_hariai,"hariai")
else:
self.box_hariai.delete(0,"end")
self.box_hariai.insert(0,data["Hariai"])
self.menu_file.entryconfig(2, state=ACTIVE)
def new_fields(self,parent):
@ -847,6 +877,7 @@ class Application(tkinter.Frame):
self.new_chart_format.set(False)
self.replace_value(self.box_background,"")
self.replace_value(self.box_hariai,"")
self.hariai_in_game.set(False)
self.replace_value(self.box_output,"")
#clean images
@ -933,7 +964,7 @@ class Application(tkinter.Frame):
elif save == False:
parent.destroy()
def chara_selection(self,parent,widget):
def chara_selection(self,parent,widget,pos):
# Toplevel object which will
# be treated as a new window
ctWin = Toplevel(parent)
@ -943,25 +974,47 @@ class Application(tkinter.Frame):
ctWin.geometry("200x200")
self.grid_columnconfigure(0, weight=0)
self.grid_columnconfigure(1, weight=0)
self.grid_columnconfigure(2, weight=0)
self.grid_columnconfigure(3, weight=0)
self.grid_rowconfigure(0, weight=0)
self.grid_rowconfigure(1, weight=0)
self.grid_rowconfigure(2, weight=0)
self.grid_rowconfigure(3, weight=0)
#creating text box
e = Entry(ctWin)
e.pack(side='top', fill='x', expand=True)
e.bind('<KeyRelease>', self.checkkey)
#buttons
btn_romaji = Button(ctWin,text="romaji",command=lambda: self.list_to_romaji())
btn_romaji.pack()
btn_katakana = Button(ctWin,text="katakana",command=lambda: self.list_to_katakana())
btn_katakana.pack()
#creating list box
self.lb = Listbox(ctWin)
self.lb.pack(side='top', fill='x', expand=True)
self.lb.bind('<<ListboxSelect>>', lambda eff: self.onselect(eff,widget))
self.lb.bind('<<ListboxSelect>>', lambda eff: self.onselect(eff,widget,pos))
self.update(self.l)
ctWin.transient(parent)
ctWin.grab_set()
parent.wait_window(ctWin)
def list_to_romaji(self):
new_list = []
katsu = cutlet.Cutlet()
for line in self.l:
new_list.append([line[0],katsu.romaji(line[1]),line[2]])
self.l = new_list
self.update(self.l)
def list_to_katakana(self):
self.l=self.chara_txt_to_data()
self.update(self.l)
# Function for checking the
# key pressed and updating
# the listbox
@ -975,7 +1028,7 @@ class Application(tkinter.Frame):
else:
data = []
for item in self.l:
if value.lower() in item.lower():
if value.lower() in ''.join(str(x) for x in item).lower():
data.append(item)
# update data in listbox
@ -990,12 +1043,15 @@ class Application(tkinter.Frame):
for item in data:
self.lb.insert('end', item)
def onselect(self,event,widget):
def onselect(self,event,widget,pos):
# Note here that Tkinter passes an event object to onselect()
w = event.widget
index = int(w.curselection()[0])
value = w.get(index)
self.replace_value(widget,value)
self.replace_value(widget,value[pos])
# Hariai in game
if pos == 2:
self.hariai_in_game.set(True)
def chara_txt_to_data(self):
# Using readlines()
@ -1004,7 +1060,10 @@ class Application(tkinter.Frame):
charas = []
# Strips the newline character
for line in Lines:
charas.append(line.split(',')[0].replace("'",'').strip())
chara_anim = line.split(',')[0].replace("'",'').strip()
ha = line.split(',')[15].replace("'",'').strip()
chara_name = line.split(',')[10].replace("'",'').strip()
charas.append([chara_anim,chara_name,ha])
return charas

View File

@ -2,4 +2,6 @@ ifstools==1.13
pydub==0.23.1
jaconv==0.3
lxml==4.9.1
Pillow==8.3.1
Pillow==8.3.1
cutlet
unidic-lite