def visit_If(self,node):
        find = False
        try:
            find = node.body[0].value.func.id == "_gotolabel"
        except:
            pass

        if isinstance(node.test,Name) and find:
            writeCommandByID(18,[node.body[0].value.args[0]]+decodeVar(node.test))
        elif isinstance(node.test,Name):
            #This is if(SLOT) we need to find out slot index and write it as param of if
            writeCommandByName("if",decodeVar(node.test))
            self.visit_body(node.body)
            writeCommandByName("endIf",[])
            if len(node.orelse) > 0:
                writeCommandByName("else",[])
                self.visit_body(node.orelse)
                writeCommandByName("endElse",[])
        elif isinstance(node.test,UnaryOp) and isinstance(node.test.operand,Name):
            #This is if(SLOT) we need to find out slot index and write it as param of if
            writeCommandByName("ifNot",decodeVar(node.test.operand))
            self.visit_body(node.body)
            writeCommandByName("endIfNot",[])
            if len(node.orelse) > 0:
                writeCommandByName("else",[])
                self.visit_body(node.orelse)
                writeCommandByName("endElse",[])
        elif (isinstance(node.test,Call) or isinstance(node.test,Compare)) and find:
            self.visit(node.test)
            writeCommandByID(18,[node.body[0].value.args[0],2,0])
        elif (isinstance(node.test,Call) or isinstance(node.test,Compare)):
            self.visit(node.test)
            writeCommandByName("if",[2,0])
            self.visit_body(node.body)
            writeCommandByName("endIf",[])
            if len(node.orelse) > 0:
                writeCommandByName("else",[])
                self.visit_body(node.orelse)
                writeCommandByName("endElse",[])
        elif isinstance(node.test,UnaryOp) and (isinstance(node.test.operand,Call) or isinstance(node.test.operand,Compare)):
            self.visit(node.test.operand)
            writeCommandByName("ifNot",[2,0])
            self.visit_body(node.body)
            writeCommandByName("endIfNot",[])
            if len(node.orelse) > 0:
                writeCommandByName("else",[])
                self.visit_body(node.orelse)
                writeCommandByName("endElse",[])
        else:
            print("UNHANDLED IF",astor.dump(node))
 def visit_Compare(self,node):
     params = []
     if isinstance(node.ops[0],Eq):
         params.append(9)
     elif isinstance(node.ops[0],Gt):
         params.append(10)
     elif isinstance(node.ops[0],Lt):
         params.append(11)
     elif isinstance(node.ops[0],GtE):
         params.append(12)
     elif isinstance(node.ops[0],LtE):
         params.append(13)
     else:
         print("UNIMPLEMENTED BINOP",astor.dump(node))
         raise Exception("Unknown Compare")
     writeCommandByName("op",params+decodeVar(node.left)+decodeVar(node.comparators[0]))
 def visit_Assign(self,node):
     if isinstance(node.value,BinOp):
         params = []
         if isinstance(node.value.op,Add):
             params.append(0)
         elif isinstance(node.value.op,Sub):
             params.append(1)
         elif isinstance(node.value.op,Mult):
             params.append(2)
         elif isinstance(node.value.op,Div):
             params.append(3)
         else:
             print("UNIMPLEMENTED BINOP",astor.dump(node))
             raise Exception("Unknown Operation!")
         writeCommandByName("ModifyVar_",params+decodeVar(node.targets[0])+decodeVar(node.value.right))
     else:
         writeCommandByName("StoreValue",decodeVar(node.targets[0])+decodeVar(node.value))
 def generic_visit(self, node):
     print(type(node).__name__)
 def visit_body(self,nodebody):
     try:
         for childNode in nodebody:
             self.visit(childNode)
     except AttributeError as e:
         print(e,astor.dump(childNode))
print()
 os, struct, json, pac,astor, fnmatch
print()
 sys
from ast print()
 *
from collections print()
 defaultdict, OrderedDict
print()
 bbcf_bbtag_script_parser
json_data=open("static_db/bbcf/commandsDB.json").read()
commandDB = json.loads(json_data)
json_data=open("static_db/bbcf/characters.json").read()
moveInputs = json.loads(open("static_db/bbcf/named_values/move_inputs.json").read())
normalInputs = json.loads(open("static_db/bbcf/named_values/normal_inputs.json").read())

commandDBLookup = {}
namedValueLookup = {}
namedButtonLookup = {}
namedDirectionLookup = {}
bbcf_bbtag_script_parser.commandDB = commandDB
for key,data in commandDB.items():
    data["id"] = int(key)
    if "name" in data:
        commandDBLookup[data["name"]] = data
    else:
        commandDBLookup["Unknown"+key] = data
uponLookup = {v: k for k, v in bbcf_bbtag_script_parser.uponLookup.items()}
slotLookup = {v: k for k, v in bbcf_bbtag_script_parser.slotLookup.items()}
for k,v in moveInputs.items():