diff --git a/pms2bemani/README.md b/pms2bemani/README.md index aca0413..fa7c38d 100644 --- a/pms2bemani/README.md +++ b/pms2bemani/README.md @@ -20,6 +20,11 @@ optional arguments: --input-np INPUT_NP Input file (NP) --input-hp INPUT_HP Input file (HP) --input-op INPUT_OP Input file (OP) + --lvl-bp LVL_BP Chart level (BP) + --lvl-ep LVL_EP Chart level (EP) + --lvl-np LVL_NP Chart level (NP) + --lvl-hp LVL_HP Chart level (HP) + --lvl-op LVL_OP Chart level (OP) --output OUTPUT Output folder --preview PREVIEW Input preview file (overrides preview generation code) --new New chart format which supports hold notes diff --git a/pms2bemani/pms2bemani/gui_assets/gui_translation.json b/pms2bemani/pms2bemani/gui_assets/gui_translation.json index dec07cb..a784e05 100644 --- a/pms2bemani/pms2bemani/gui_assets/gui_translation.json +++ b/pms2bemani/pms2bemani/gui_assets/gui_translation.json @@ -13,6 +13,7 @@ "Keysounds folder": "Keysounds folder", "Banner": "Banner", "Charts": "Charts", + "Level": "Level", "Battle Mode File": "Battle Mode File", "Easy Chart File": "Easy pms File", "Normal Chart File": "Normal pms File", diff --git a/pms2bemani/pms2bemani/pms2bemani.py b/pms2bemani/pms2bemani/pms2bemani.py index 9fbb526..16fbdca 100644 --- a/pms2bemani/pms2bemani/pms2bemani.py +++ b/pms2bemani/pms2bemani/pms2bemani.py @@ -752,6 +752,7 @@ if __name__ == "__main__": for difficulty in difficulties: parser.add_argument('--input-%s' % difficulty, help='Input file (%s)' % difficulty.upper(), default=None) + parser.add_argument('--lvl-%s' % difficulty, help='level difficulty (%s)' % difficulty.upper(), default=None, type=int) #Display required arguments on help requiredNamed = parser.add_argument_group('required arguments') @@ -824,7 +825,11 @@ if __name__ == "__main__": ) args.new = True # In case the song has long notes and the user forgot to set the new flag, upgrade it automatically - + + # 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"), @@ -834,7 +839,7 @@ if __name__ == "__main__": E.audio_param4("0", __type="s32"), E.file_type("0", __type="u32"), E.used_keys("0", __type="u16"), - E.diff("1", __type="u8"), + E.diff(str(level), __type="u8"), E.hold_flag("1" if has_hold_notes else "0", __type="u8"), idx=str(difficulty), *optional diff --git a/pms2bemani/pms2bemani/pms2bemaniGUI.py b/pms2bemani/pms2bemani/pms2bemaniGUI.py index fd34ccb..fd59a70 100644 --- a/pms2bemani/pms2bemani/pms2bemaniGUI.py +++ b/pms2bemani/pms2bemani/pms2bemaniGUI.py @@ -106,9 +106,29 @@ class Application(tkinter.Frame): self.find_keysounds.grid(column=2, row=3,sticky="W") + # Create the list of pop'n music levels + self.levels = [] + [self.levels.append(x+1) for x in range(50)] + # Variable to keep track of the option + # selected in OptionMenu + self.value_inside_bp_lv = tkinter.StringVar(parent) + self.value_inside_ep_lv = tkinter.StringVar(parent) + self.value_inside_np_lv = tkinter.StringVar(parent) + self.value_inside_hp_lv = tkinter.StringVar(parent) + self.value_inside_op_lv = tkinter.StringVar(parent) + # Set the default value of the variable + self.value_inside_bp_lv.set("1") + self.value_inside_ep_lv.set("1") + self.value_inside_np_lv.set("1") + self.value_inside_hp_lv.set("1") + self.value_inside_op_lv.set("1") + + #Charts title self.tag_charts_title = tkinter.Label(parent, text=self.tr["Charts"]) self.tag_charts_title.grid(column=0, row=5,pady = 2,sticky='ew') + self.tag_charts_title = tkinter.Label(parent, text=self.tr["Level"]) + self.tag_charts_title.grid(column=3, row=5,pady = 2,sticky='ew') #battle mode stuff self.tag_input_bp = tkinter.Label(parent, text=self.tr["Battle Mode File"]) self.tag_input_bp.grid(column=0, row=6,sticky="W",pady = 2) @@ -116,13 +136,19 @@ class Application(tkinter.Frame): self.box_input_bp.grid(column=1, row=6,sticky='ew') self.find_input_bp = tkinter.Button(parent,text=self.tr["Open"],command=lambda: self.select_file_pms(self.box_input_bp)) self.find_input_bp.grid(column=2, row=6,sticky="W") + #battle mode level objects + self.question_menu_bp_lv = tkinter.OptionMenu(parent, self.value_inside_bp_lv, *self.levels) + self.question_menu_bp_lv.grid(column=3, row=6,sticky="EW") #Easy difficulty self.tag_input_ep = tkinter.Label(parent, text=self.tr["Easy Chart File"]) self.tag_input_ep.grid(column=0, row=7,sticky="W",pady = 2) self.box_input_ep = tkinter.Entry(parent) self.box_input_ep.grid(column=1, row=7,sticky='ew') self.find_input_ep = tkinter.Button(parent,text=self.tr["Open"],command=lambda: self.select_file_pms(self.box_input_ep)) - self.find_input_ep.grid(column=2, row=7,sticky="W") + self.find_input_ep.grid(column=2, row=7,sticky="W") + #Easy difficulty level objects + self.question_menu_ep_lv = tkinter.OptionMenu(parent, self.value_inside_ep_lv, *self.levels) + self.question_menu_ep_lv.grid(column=3, row=7,sticky="EW") #Normal difficulty self.tag_input_np = tkinter.Label(parent, text=self.tr["Normal Chart File"]) self.tag_input_np.grid(column=0, row=8,sticky="W",pady = 2) @@ -130,6 +156,9 @@ class Application(tkinter.Frame): self.box_input_np.grid(column=1, row=8,sticky='ew') self.find_input_np = tkinter.Button(parent,text=self.tr["Open"],command=lambda: self.select_file_pms(self.box_input_np)) self.find_input_np.grid(column=2, row=8,sticky="W") + #Normal difficulty level objects + self.question_menu_np_lv = tkinter.OptionMenu(parent, self.value_inside_np_lv, *self.levels) + self.question_menu_np_lv.grid(column=3, row=8,sticky="EW") #Hyper difficulty self.tag_input_hp = tkinter.Label(parent, text=self.tr["Hyper Chart File"]) self.tag_input_hp.grid(column=0, row=9,sticky="W",pady = 2) @@ -137,6 +166,9 @@ class Application(tkinter.Frame): self.box_input_hp.grid(column=1, row=9,sticky='ew') self.find_input_hp = tkinter.Button(parent,text=self.tr["Open"],command=lambda: self.select_file_pms(self.box_input_hp)) self.find_input_hp.grid(column=2, row=9,sticky="W") + #Hyper difficulty level objects + self.question_menu_hp_lv = tkinter.OptionMenu(parent, self.value_inside_hp_lv, *self.levels) + self.question_menu_hp_lv.grid(column=3, row=9,sticky="EW") #Ex difficulty self.tag_input_op = tkinter.Label(parent, text=self.tr["Ex Chart File"]) self.tag_input_op.grid(column=0, row=10,sticky="W",pady = 2) @@ -144,6 +176,9 @@ class Application(tkinter.Frame): self.box_input_op.grid(column=1, row=10,sticky='ew') self.find_input_op = tkinter.Button(parent,text=self.tr["Open"],command=lambda: self.select_file_pms(self.box_input_op)) self.find_input_op.grid(column=2, row=10,sticky="W") + #Ex difficulty level objects + self.question_menu_op_lv = tkinter.OptionMenu(parent, self.value_inside_op_lv, *self.levels) + self.question_menu_op_lv.grid(column=3, row=10,sticky="EW") #Metadata self.tag_metadata = tkinter.Label(parent, text=self.tr["Metadata"]) self.tag_metadata.grid(column=0, row=11,pady = 2,sticky='ew') @@ -421,6 +456,11 @@ class Application(tkinter.Frame): 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.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) + self.box_to_param("--lvl-np",self.value_inside_np_lv) + self.box_to_param("--lvl-hp",self.value_inside_hp_lv) + self.box_to_param("--lvl-op",self.value_inside_op_lv) self.bitfields_to_param("--metadata-categories",self.vars_category) self.box_to_param("--metadata-cs-version",self.value_inside_cs) self.bitfields_to_param("--metadata-mask",self.vars_mask) @@ -661,6 +701,11 @@ class Application(tkinter.Frame): data["Has battle hyper"]=self.has_battle_var.get() data["Hariai is jacket"]=self.is_jacket_var.get() data["Folder"]=self.value_inside_folder.get() + data["Lvl bp"]=self.value_inside_bp_lv.get() + data["Lvl ep"]=self.value_inside_ep_lv.get() + data["Lvl np"]=self.value_inside_np_lv.get() + data["Lvl hp"]=self.value_inside_hp_lv.get() + data["Lvl op"]=self.value_inside_op_lv.get() category_data = {} for label, value in zip(self.category_des, self.vars_category): @@ -685,6 +730,17 @@ class Application(tkinter.Frame): data["Output folder"]=self.box_output.get() return(json.dumps(data)) + + + def set_val(self, data, name: str, default: str = "") -> str: + val = data.get(name) + + if val is None: + return default + if type(val) != str: + return default + return val + def p2b_to_fields(self,data,parent): @@ -708,6 +764,11 @@ class Application(tkinter.Frame): self.has_battle_var.set(data["Has battle hyper"]) self.is_jacket_var.set(data["Hariai is jacket"]) self.value_inside_folder.set(data["Folder"]) + self.value_inside_bp_lv.set(self.set_val(data,"Lvl bp","1")) + self.value_inside_ep_lv.set(self.set_val(data,"Lvl ep","1")) + self.value_inside_np_lv.set(self.set_val(data,"Lvl np","1")) + self.value_inside_hp_lv.set(self.set_val(data,"Lvl hp","1")) + self.value_inside_op_lv.set(self.set_val(data,"Lvl op","1")) for label, value in zip(self.category_des, self.vars_category): value.set(data["Categories"][label]) @@ -763,6 +824,11 @@ class Application(tkinter.Frame): self.has_battle_var.set(False) self.is_jacket_var.set(False) self.value_inside_folder.set(None) + self.value_inside_bp_lv.set(1) + self.value_inside_ep_lv.set(1) + self.value_inside_np_lv.set(1) + self.value_inside_hp_lv.set(1) + self.value_inside_op_lv.set(1) for label, value in zip(self.category_des, self.vars_category): value.set(0)