#!/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)