Core commit. Compile and run on the OpenPandora
[mupen64plus-pandora.git] / source / mupen64plus-core / tools / cheat_code_convert.py
diff --git a/source/mupen64plus-core/tools/cheat_code_convert.py b/source/mupen64plus-core/tools/cheat_code_convert.py
new file mode 100755 (executable)
index 0000000..28e6806
--- /dev/null
@@ -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)