Raptorkillz xyz If you wanted to know I was debugging the outcome by adding a label that said cheat successfully entered when the cheat was successful but the text didn't output anything
xyz Raptorkillz Use a trivial test example. use actions you know 100% are defined and map 1:1 to physical input, because you might have messed up something with your action definitions use trivial sequence to speed up your testing, because you're testing how the parts of your code are communicating so the actual sequence is not important print immediately at the start of the signal handler print the sequence as it builds up double check your signal connections be sure to catch and understand all error messages the engine might be reporting If you can't use print() on your dev platform - use a different platform or set things up in a way so you can see your prints. Developing without printing is not a very wise thing to do. It just makes tracking the flow of your code needlessly more difficult. class_name CheatCodeCapture extends Node signal cheat_code_entered(name: String) var s: String var cheats: Dictionary = {"ui_left ui_right" : "cheat1"} func _input(e): for a in InputMap.get_actions().filter(func(aa): return e.is_action_pressed(aa)).slice(0,1): s += a if not s else " " + a print("current sequence: ", s) # debug for k in cheats.keys(): if s.contains(k): cheat_code_entered.emit(cheats[k]); s = "" func _ready(): cheat_code_entered.connect(on_cheat) func on_cheat(name): print(name) # debug
xyz kuligs2 Here's an "educational" version for easier understanding: class_name CheatCodeCapture extends Node signal cheat_code_entered(name: String) var action_sequence: String var cheatcodes: Dictionary = {"ui_left ui_right" : "cheat1"} func _input(event): # iterate through actions defined in input map for action in InputMap.get_actions(): if event.is_action_pressed(action): # accumulate actions if not action_sequence.is_empty(): action_sequence += " " # insert space between actions action_sequence += action # check if the current action sequence is present in any of cheatcodes for code in cheatcodes.keys(): if action_sequence.contains(code): # action sequence found, emit the signal and clear the accumulated sequence cheat_code_entered.emit(cheatcodes[code]) action_sequence = "" break
Raptorkillz xyz But now how would I make it work with the sonic 3 level select cheat {"gm_up gm_up gm_down gm_down gm_up gm_up gm_up gm_up" : "sonic 3 level select"}
xyz Raptorkillz Well, just add that sequence to the dictionary. But as I said you need to check that your actions are properly set up. To which input events do you have those gm_* actions mapped?
Raptorkillz xyz Okay and they are named correctly here's the input maps [["gm_left","gm_right"],["gm_up","gm_down"],"gm_action","gm_action2","gm_action3","gm_super","gm_pause"]
Raptorkillz xyz Okay This inputs gm_left","gm_right moves the character left or right And this inputs allows the character to crouch and look up "gm_up","gm_down" And this inputs allow the character to jump "gm_action","gm_action2","gm_action3" This Input turns sonic to super sonic gm_super and this input pause/starts the game "gm_pause"
xyz Raptorkillz Yes but they need to be mapped to some physical input events in order to work. Can you show a screenshot of your input map tab in the projects settings?
xyz Raptorkillz As I said the built in actions may be "overriding" your defined actions if both are mapped to same input events. What gets printed as "current sequence" when you press left/righ/up/down actions? You can try with this input function instead. It prioritizes last added actions: func _input(e): var actions = InputMap.get_actions().filter(func(aa): return e.is_action_pressed(aa)) if actions: var a = actions[-1] s += a if not s else " " + a print("current sequence: ", s) for k in cheats.keys(): if s.contains(k): cheat_code_entered.emit(cheats[k]); s = ""
xyz Raptorkillz Umm, the last code snippet I posted was just the _input() function, not the whole script. It's meant to replace the previous _input() function. The rest of the stuff still needs to be there. I thought that was self evident. If not, you should really attempt a much simpler project.