X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=source%2Fmupen64plus-core%2Ftools%2Fcheat_code_convert.py;fp=source%2Fmupen64plus-core%2Ftools%2Fcheat_code_convert.py;h=28e6806928bf782db46e6de9cb4a285c6636d571;hb=451ab91e3827a6384981b3300e2a7000d2eaba58;hp=0000000000000000000000000000000000000000;hpb=a2ab25365b5b0dddbee476d695d8a31151407581;p=mupen64plus-pandora.git diff --git a/source/mupen64plus-core/tools/cheat_code_convert.py b/source/mupen64plus-core/tools/cheat_code_convert.py new file mode 100755 index 0000000..28e6806 --- /dev/null +++ b/source/mupen64plus-core/tools/cheat_code_convert.py @@ -0,0 +1,118 @@ +#!/usr/bin/python +'''* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Mupen64plus - code_convert.c * + * Mupen64Plus homepage: http://code.google.com/p/mupen64plus/ * + * Copyright (C) 2010 Rhett Osborne * + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program; if not, write to the * + * Free Software Foundation, Inc., * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * + * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + +Usage: + +python code_convert.py > ../data/mupencheat.txt < ../data/mupen64plus.cht + +''' + +from sys import stdin + +class cheat: + def __init__(self): + self.n="" + self.d="" + self.c=[] + self.v=0 + self.hb='00' + def add(self, l): + if(self.n == ""): + return + l.append(" cn %s"%(self.n)) + if(self.d != ""): l.append(" cd %s"%(self.d)) + for code in self.c: + l.append(" "+code) + def clear(self): + self.n="" + self.d="" + self.c=[] + self.v=0 + + +l=[] +cCount=0 +_cs = [] +for i in range(225): + _cs.append(cheat()) +cs = _cs[:] + +def print_l(): + global l, cs + for cheat in cs: + cheat.add(l) + for line in l: + print line.replace("\x00", "") + l=[] + cCount=0 + for i in range(225): + cs[i].clear() + +lines = stdin.read().split("\n") + +for line in lines: + if len(line) < 2: continue + elif(line[:2] == "//" and line != "//----" and line != "//---" ): + l.append(line) + elif len(line) < 4: continue + elif(line[0] == '[' and line[-1] == ']' and len(line) > 23): + print_l() + l.append("\ncrc %s" % line[1:-1]) + elif(line[:5] == "Name="): + l.append("gn %s" % (line[5:])) + elif(line[:5] == "Cheat"): + t = line[5:].split('=')[0] + if (len(t)>1 and t[-2] == '_'): + n = int(t[:-2]) + if(t[-1] == 'N'): + cs[n].d = line.split("=")[1] + else: + for option in line.split("=")[1].split("$")[1:]: + if(len(option) < 4): + break; + if(option[-1]==','): end =-1 + else: end = None + if(option[2] == " "): + cs[n].c[cs[n].v] += "%s%s:\"%s\""%(cs[n].hb,option[:2],option[3:end].replace("\"", "\\\"")) + else: + cs[n].c[cs[n].v] += "%s:\"%s\""%(option[:4],option[5:end].replace("\"", "\\\"")) + cs[n].c[cs[n].v]+=',' + cs[n].c[cs[n].v] = cs[n].c[cs[n].v][:-1] + else: + n = int(t) + cn = line.split('"') + cs[n].c = cn[2][1:].split(',') + cs[n].n = cn[1]; + i=0 + for cheat in cs[n].c: + if(cheat[-1] == '?'): + if(cheat[-2:] == '??' and cheat[-4:-2] != '??'): + cs[n].hb = cheat[-4:-2] + else: + cs[n].hb = '00' + cs[n].c[i] = cheat[:9] + "???? "; + cs[n].v=i + i+=1 + if(n > cCount): + cCount = n + elif(line != "//----" and line != "//---" ): + l.append("//%s" %line)