Chara search by name, get hariai from game files
This commit is contained in:
parent
72293be29b
commit
e27e4949b7
@ -45,6 +45,7 @@
|
|||||||
"New chart format": "New chart format",
|
"New chart format": "New chart format",
|
||||||
"Background": "Background",
|
"Background": "Background",
|
||||||
"Hariai": "Hariai",
|
"Hariai": "Hariai",
|
||||||
|
"From game files": "From game files",
|
||||||
"Output folder": "Output folder",
|
"Output folder": "Output folder",
|
||||||
"Create Mod": "Create Mod",
|
"Create Mod": "Create Mod",
|
||||||
"Fw error": "FW fields can't be Hiragana, kanji or have symbols",
|
"Fw error": "FW fields can't be Hiragana, kanji or have symbols",
|
||||||
|
@ -766,6 +766,7 @@ if __name__ == "__main__":
|
|||||||
requiredNamed.add_argument('--banner', help='Banner image (must be 244x58)', default=None, required=True)
|
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('--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('--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-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-artist', help='Fullwidth music artist for database', default=None)
|
||||||
parser.add_argument('--metadata-fw-genre', help='Fullwidth music genre 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
|
# Chart level
|
||||||
level = args_vars['lvl_%s' % difficulty]
|
level = args_vars['lvl_%s' % difficulty]
|
||||||
level = level if level != None else 1
|
level = level if level != None else 1
|
||||||
|
|
||||||
chart = E.chart(
|
chart = E.chart(
|
||||||
E.folder("custom", __type="str"),
|
E.folder("custom", __type="str"),
|
||||||
E.filename(args.name, __type="str"),
|
E.filename(args.name, __type="str"),
|
||||||
@ -899,9 +899,14 @@ if __name__ == "__main__":
|
|||||||
# Create banner folder
|
# Create banner folder
|
||||||
tex_files['kc_diff_ifs'] = create_banner(output_path, args.musicid, args.banner)
|
tex_files['kc_diff_ifs'] = create_banner(output_path, args.musicid, args.banner)
|
||||||
|
|
||||||
|
hariai = ""
|
||||||
if args.hariai:
|
if args.hariai:
|
||||||
# Create hariai folder
|
# 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)
|
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
|
mask |= 0x00800000 # Required for songs that show a hariai image on the music selection screen
|
||||||
|
|
||||||
if args.bg:
|
if args.bg:
|
||||||
@ -925,7 +930,7 @@ if __name__ == "__main__":
|
|||||||
E.cs_version(str(args.metadata_cs_version), __type="u32"),
|
E.cs_version(str(args.metadata_cs_version), __type="u32"),
|
||||||
E.categories(str(args.metadata_categories), __type="u32"),
|
E.categories(str(args.metadata_categories), __type="u32"),
|
||||||
E.charts(*charts_xml),
|
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_x(str(args.metadata_chara_x), __type="u32"),
|
||||||
E.chara_y(str(args.metadata_chara_y), __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"),
|
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"),
|
||||||
|
@ -5,6 +5,7 @@ import os
|
|||||||
import jaconv
|
import jaconv
|
||||||
import subprocess
|
import subprocess
|
||||||
import re
|
import re
|
||||||
|
import cutlet
|
||||||
from tkinter import filedialog as fd
|
from tkinter import filedialog as fd
|
||||||
from tkinter import messagebox
|
from tkinter import messagebox
|
||||||
from tkinter.messagebox import showinfo,askyesno
|
from tkinter.messagebox import showinfo,askyesno
|
||||||
@ -65,7 +66,7 @@ class Application(tkinter.Frame):
|
|||||||
self.has_battle_var = BooleanVar()
|
self.has_battle_var = BooleanVar()
|
||||||
self.is_jacket_var = BooleanVar()
|
self.is_jacket_var = BooleanVar()
|
||||||
self.new_chart_format = BooleanVar()
|
self.new_chart_format = BooleanVar()
|
||||||
|
self.hariai_in_game = BooleanVar()
|
||||||
# first menu
|
# first menu
|
||||||
self.menu_bar= tkinter.Menu(parent)
|
self.menu_bar= tkinter.Menu(parent)
|
||||||
self.menu_file = tkinter.Menu(self.menu_bar, tearoff=False)
|
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.tag_chara_1.grid(column=0, row=18,sticky="W",pady = 2)
|
||||||
self.box_chara_1 = tkinter.Entry(parent)
|
self.box_chara_1 = tkinter.Entry(parent)
|
||||||
self.box_chara_1.grid(column=1, row=18,sticky='ew')
|
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")
|
self.sel_chara_1.grid(column=2, row=18,sticky="W")
|
||||||
#Chara 2
|
#Chara 2
|
||||||
self.tag_chara_2 = tkinter.Label(parent, text=self.tr["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.tag_chara_2.grid(column=0, row=19,sticky="W",pady = 2)
|
||||||
self.box_chara_2 = tkinter.Entry(parent)
|
self.box_chara_2 = tkinter.Entry(parent)
|
||||||
self.box_chara_2.grid(column=1, row=19,sticky='ew')
|
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")
|
self.sel_chara_2.grid(column=2, row=19,sticky="W")
|
||||||
#Has battle hyper
|
#Has battle hyper
|
||||||
self.tag_battle_hyper = tkinter.Label(parent, text=self.tr["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.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 = 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)
|
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
|
#Output folder
|
||||||
self.tag_output = tkinter.Label(parent, text=self.tr["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= 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 = 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
|
#Create Mod
|
||||||
self.create_mod = tkinter.Button(parent,text=self.tr["Create Mod"],command=lambda:self.generate_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
|
#Banner display
|
||||||
self.tag_image_banner=tkinter.Label(parent, text=self.tr["Banner"])
|
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.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-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-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("--metadata-folder",self.value_inside_folder)
|
||||||
self.box_to_param("--lvl-bp",self.value_inside_bp_lv)
|
self.box_to_param("--lvl-bp",self.value_inside_bp_lv)
|
||||||
self.box_to_param("--lvl-ep",self.value_inside_ep_lv)
|
self.box_to_param("--lvl-ep",self.value_inside_ep_lv)
|
||||||
@ -557,6 +567,7 @@ class Application(tkinter.Frame):
|
|||||||
return 0
|
return 0
|
||||||
widget.delete(0,"end")
|
widget.delete(0,"end")
|
||||||
widget.insert(0,filename)
|
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["New chart format"]=self.new_chart_format.get()
|
||||||
data["Background"]=self.box_background.get()
|
data["Background"]=self.box_background.get()
|
||||||
data["Hariai"]=self.box_hariai.get()
|
data["Hariai"]=self.box_hariai.get()
|
||||||
|
data["Hariai in game"]=self.hariai_in_game.get()
|
||||||
data["Output folder"]=self.box_output.get()
|
data["Output folder"]=self.box_output.get()
|
||||||
|
|
||||||
return(json.dumps(data))
|
return(json.dumps(data))
|
||||||
@ -741,6 +753,15 @@ class Application(tkinter.Frame):
|
|||||||
return default
|
return default
|
||||||
return val
|
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):
|
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")
|
self.insert_image(parent,data["Banner"],self.box_banner,"banner")
|
||||||
if(data["Background"]!=''):
|
if(data["Background"]!=''):
|
||||||
self.insert_image(parent,data["Background"],self.box_background,"bg")
|
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"]!=''):
|
if(data["Hariai"]!=''):
|
||||||
|
if hariai_is_in_game == False:
|
||||||
self.insert_image(parent,data["Hariai"],self.box_hariai,"hariai")
|
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)
|
self.menu_file.entryconfig(2, state=ACTIVE)
|
||||||
|
|
||||||
def new_fields(self,parent):
|
def new_fields(self,parent):
|
||||||
@ -847,6 +877,7 @@ class Application(tkinter.Frame):
|
|||||||
self.new_chart_format.set(False)
|
self.new_chart_format.set(False)
|
||||||
self.replace_value(self.box_background,"")
|
self.replace_value(self.box_background,"")
|
||||||
self.replace_value(self.box_hariai,"")
|
self.replace_value(self.box_hariai,"")
|
||||||
|
self.hariai_in_game.set(False)
|
||||||
self.replace_value(self.box_output,"")
|
self.replace_value(self.box_output,"")
|
||||||
|
|
||||||
#clean images
|
#clean images
|
||||||
@ -933,7 +964,7 @@ class Application(tkinter.Frame):
|
|||||||
elif save == False:
|
elif save == False:
|
||||||
parent.destroy()
|
parent.destroy()
|
||||||
|
|
||||||
def chara_selection(self,parent,widget):
|
def chara_selection(self,parent,widget,pos):
|
||||||
# Toplevel object which will
|
# Toplevel object which will
|
||||||
# be treated as a new window
|
# be treated as a new window
|
||||||
ctWin = Toplevel(parent)
|
ctWin = Toplevel(parent)
|
||||||
@ -943,18 +974,28 @@ class Application(tkinter.Frame):
|
|||||||
ctWin.geometry("200x200")
|
ctWin.geometry("200x200")
|
||||||
self.grid_columnconfigure(0, weight=0)
|
self.grid_columnconfigure(0, weight=0)
|
||||||
self.grid_columnconfigure(1, 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(0, weight=0)
|
||||||
self.grid_rowconfigure(1, weight=0)
|
self.grid_rowconfigure(1, weight=0)
|
||||||
|
self.grid_rowconfigure(2, weight=0)
|
||||||
|
self.grid_rowconfigure(3, weight=0)
|
||||||
|
|
||||||
#creating text box
|
#creating text box
|
||||||
e = Entry(ctWin)
|
e = Entry(ctWin)
|
||||||
e.pack(side='top', fill='x', expand=True)
|
e.pack(side='top', fill='x', expand=True)
|
||||||
e.bind('<KeyRelease>', self.checkkey)
|
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
|
#creating list box
|
||||||
self.lb = Listbox(ctWin)
|
self.lb = Listbox(ctWin)
|
||||||
self.lb.pack(side='top', fill='x', expand=True)
|
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)
|
self.update(self.l)
|
||||||
|
|
||||||
|
|
||||||
@ -962,6 +1003,18 @@ class Application(tkinter.Frame):
|
|||||||
ctWin.grab_set()
|
ctWin.grab_set()
|
||||||
parent.wait_window(ctWin)
|
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
|
# Function for checking the
|
||||||
# key pressed and updating
|
# key pressed and updating
|
||||||
# the listbox
|
# the listbox
|
||||||
@ -975,7 +1028,7 @@ class Application(tkinter.Frame):
|
|||||||
else:
|
else:
|
||||||
data = []
|
data = []
|
||||||
for item in self.l:
|
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)
|
data.append(item)
|
||||||
|
|
||||||
# update data in listbox
|
# update data in listbox
|
||||||
@ -990,12 +1043,15 @@ class Application(tkinter.Frame):
|
|||||||
for item in data:
|
for item in data:
|
||||||
self.lb.insert('end', item)
|
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()
|
# Note here that Tkinter passes an event object to onselect()
|
||||||
w = event.widget
|
w = event.widget
|
||||||
index = int(w.curselection()[0])
|
index = int(w.curselection()[0])
|
||||||
value = w.get(index)
|
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):
|
def chara_txt_to_data(self):
|
||||||
# Using readlines()
|
# Using readlines()
|
||||||
@ -1004,7 +1060,10 @@ class Application(tkinter.Frame):
|
|||||||
charas = []
|
charas = []
|
||||||
# Strips the newline character
|
# Strips the newline character
|
||||||
for line in Lines:
|
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
|
return charas
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,3 +3,5 @@ pydub==0.23.1
|
|||||||
jaconv==0.3
|
jaconv==0.3
|
||||||
lxml==4.9.1
|
lxml==4.9.1
|
||||||
Pillow==8.3.1
|
Pillow==8.3.1
|
||||||
|
cutlet
|
||||||
|
unidic-lite
|
Loading…
Reference in New Issue
Block a user