├── clean.bat ├── rom ├── .gitignore └── no.SNA ├── Atlas.exe ├── armips.exe ├── font_insert.exe ├── script ├── guru.tbl ├── guru2.tbl ├── gurulogic_script_000.txt ├── gurulogic_script_001.txt ├── gurulogic_script_002.txt └── ntsc.uk translation │ ├── NTSC-uk Features Guru Logic Champ Translation_files │ ├── graph.jsp │ ├── blueroom.gif │ ├── image003.jpg │ ├── image004.gif │ ├── image005.jpg │ ├── image007.jpg │ ├── image009.jpg │ ├── wm_tb_nxt_off.png │ ├── wm_tb_prv_on.png │ ├── ntscblendindex.png │ ├── transp-red-pixel.png │ ├── transp-yellow-pixel.png │ ├── wayback-toolbar-logo.png │ ├── disclaim-element.js │ ├── graph-calc.js │ ├── image001.jpg │ ├── image002.jpg │ ├── image006.jpg │ ├── image008.jpg │ ├── mainStyle.css │ └── urchin.js │ └── NTSC-uk Features Guru Logic Champ Translation.htm ├── cartographer ├── dump.bat ├── guru.tbl ├── guru2.tbl ├── Cartographer.exe └── gurulogic_commands.txt ├── notes ├── name entry.txt ├── to hack.txt └── intro cutscene.txt ├── gfx ├── cutscene_font.PAL ├── cutscene_font.gba ├── cutscene_font.png ├── name_entry_bg.PAL ├── name_entry_bg.gba ├── name_entry_obj.PAL ├── name_entry_obj.gba ├── cutscene_font_eng.gba ├── cutscene_font_eng.png ├── name_entry_bg_eng.gba ├── name_entry_title.png ├── name_entry_obj_eng.gba ├── name_entry_title_eng.PNG ├── name_entry_start_bubble.png ├── name_entry_title_ordered.PNG ├── name_entry_start_bubble_eng.PNG └── name_entry_title_ordered_eng.PNG ├── asm ├── bin │ ├── name_entry_bg.lz77 │ └── name_entry_obj.lz77 ├── cutscene_font.asm ├── name_entry_screen.asm └── HWF.asm ├── README ├── tools └── font dumper │ ├── rhythm_tengoku_font_dumper.hs │ ├── font_dumper.hs │ └── font_insert.hs └── armips-Readme.txt /clean.bat: -------------------------------------------------------------------------------- 1 | cd rom 2 | copy input.gba output.gba /Y 3 | pause -------------------------------------------------------------------------------- /rom/.gitignore: -------------------------------------------------------------------------------- 1 | /*.gba 2 | /*.sav 3 | /*.sgm 4 | /*.lnk 5 | /*.sna -------------------------------------------------------------------------------- /Atlas.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/Atlas.exe -------------------------------------------------------------------------------- /armips.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/armips.exe -------------------------------------------------------------------------------- /rom/no.SNA: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/rom/no.SNA -------------------------------------------------------------------------------- /font_insert.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/font_insert.exe -------------------------------------------------------------------------------- /script/guru.tbl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/script/guru.tbl -------------------------------------------------------------------------------- /script/guru2.tbl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/script/guru2.tbl -------------------------------------------------------------------------------- /cartographer/dump.bat: -------------------------------------------------------------------------------- 1 | cartographer ../rom/input.gba gurulogic_commands.txt ../script/gurulogic_script -m 2 | 3 | pause -------------------------------------------------------------------------------- /notes/name entry.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/notes/name entry.txt -------------------------------------------------------------------------------- /cartographer/guru.tbl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/cartographer/guru.tbl -------------------------------------------------------------------------------- /cartographer/guru2.tbl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/cartographer/guru2.tbl -------------------------------------------------------------------------------- /gfx/cutscene_font.PAL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/gfx/cutscene_font.PAL -------------------------------------------------------------------------------- /gfx/cutscene_font.gba: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/gfx/cutscene_font.gba -------------------------------------------------------------------------------- /gfx/cutscene_font.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/gfx/cutscene_font.png -------------------------------------------------------------------------------- /gfx/name_entry_bg.PAL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/gfx/name_entry_bg.PAL -------------------------------------------------------------------------------- /gfx/name_entry_bg.gba: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/gfx/name_entry_bg.gba -------------------------------------------------------------------------------- /gfx/name_entry_obj.PAL: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/gfx/name_entry_obj.PAL -------------------------------------------------------------------------------- /gfx/name_entry_obj.gba: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/gfx/name_entry_obj.gba -------------------------------------------------------------------------------- /gfx/cutscene_font_eng.gba: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/gfx/cutscene_font_eng.gba -------------------------------------------------------------------------------- /gfx/cutscene_font_eng.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/gfx/cutscene_font_eng.png -------------------------------------------------------------------------------- /gfx/name_entry_bg_eng.gba: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/gfx/name_entry_bg_eng.gba -------------------------------------------------------------------------------- /gfx/name_entry_title.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/gfx/name_entry_title.png -------------------------------------------------------------------------------- /asm/bin/name_entry_bg.lz77: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/asm/bin/name_entry_bg.lz77 -------------------------------------------------------------------------------- /asm/bin/name_entry_obj.lz77: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/asm/bin/name_entry_obj.lz77 -------------------------------------------------------------------------------- /gfx/name_entry_obj_eng.gba: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/gfx/name_entry_obj_eng.gba -------------------------------------------------------------------------------- /gfx/name_entry_title_eng.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/gfx/name_entry_title_eng.PNG -------------------------------------------------------------------------------- /cartographer/Cartographer.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/cartographer/Cartographer.exe -------------------------------------------------------------------------------- /gfx/name_entry_start_bubble.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/gfx/name_entry_start_bubble.png -------------------------------------------------------------------------------- /gfx/name_entry_title_ordered.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/gfx/name_entry_title_ordered.PNG -------------------------------------------------------------------------------- /script/gurulogic_script_000.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/script/gurulogic_script_000.txt -------------------------------------------------------------------------------- /script/gurulogic_script_001.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/script/gurulogic_script_001.txt -------------------------------------------------------------------------------- /script/gurulogic_script_002.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/script/gurulogic_script_002.txt -------------------------------------------------------------------------------- /gfx/name_entry_start_bubble_eng.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/gfx/name_entry_start_bubble_eng.PNG -------------------------------------------------------------------------------- /gfx/name_entry_title_ordered_eng.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/gfx/name_entry_title_ordered_eng.PNG -------------------------------------------------------------------------------- /script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/graph.jsp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/graph.jsp -------------------------------------------------------------------------------- /script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/blueroom.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/blueroom.gif -------------------------------------------------------------------------------- /script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/image003.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/image003.jpg -------------------------------------------------------------------------------- /script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/image004.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/image004.gif -------------------------------------------------------------------------------- /script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/image005.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/image005.jpg -------------------------------------------------------------------------------- /script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/image007.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/image007.jpg -------------------------------------------------------------------------------- /script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/image009.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/image009.jpg -------------------------------------------------------------------------------- /script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/wm_tb_nxt_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/wm_tb_nxt_off.png -------------------------------------------------------------------------------- /script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/wm_tb_prv_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/wm_tb_prv_on.png -------------------------------------------------------------------------------- /script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/ntscblendindex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/ntscblendindex.png -------------------------------------------------------------------------------- /script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/transp-red-pixel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/transp-red-pixel.png -------------------------------------------------------------------------------- /script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/transp-yellow-pixel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/transp-yellow-pixel.png -------------------------------------------------------------------------------- /script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/wayback-toolbar-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Normmatt/Guru-Logic-Champ-GBA-Translation/HEAD/script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/wayback-toolbar-logo.png -------------------------------------------------------------------------------- /README: -------------------------------------------------------------------------------- 1 | Guru Logic Champ - English Translation 2 | -------------------------------------- 3 | 4 | Credits 5 | ------- 6 | 7 | Normmatt - Hacking 8 | Spikeman - Hacking, translation and script editing 9 | Paul Jensen - Translation 10 | 11 | Instructions 12 | ------------ 13 | 14 | 1. Place Japanese ROM in rom directory and rename it to input.gba 15 | 2. Run build.bat, output.gba is the assembled translation 16 | 17 | Use clean.bat to copy input.gba to output.gba (always use output.gba for playing/testing) -------------------------------------------------------------------------------- /asm/cutscene_font.asm: -------------------------------------------------------------------------------- 1 | ; Guru Logic Champ - cutscene font tweaks 2 | ; by Spikeman 3 | 4 | .gba 5 | .open "rom/output.gba",0x08000000 6 | .thumb 7 | 8 | ; replace lookup table with english characters (maybe make ATLAS do this) 9 | 10 | .org 0x08069F80 11 | .dcw 0x6082, 0x6182, 0x6282, 0x6382, 0x6482, 0x6582, 0x6682, 0x6782 12 | .dcw 0x6882, 0x6982, 0x6A82, 0x6B82, 0x6C82, 0x6D82, 0x6E82, 0x6F82 13 | .dcw 0x7082, 0x7182, 0x7282, 0x7382, 0x7482, 0x7582, 0x7682, 0x7782 14 | .dcw 0x7882, 0x7982 15 | 16 | .close 17 | 18 | ; make sure to leave an empty line at the end -------------------------------------------------------------------------------- /cartographer/gurulogic_commands.txt: -------------------------------------------------------------------------------- 1 | #GAME NAME: Guru Guru Logic Champ (GBA) 2 | 3 | #BLOCK NAME: Wakase's Lab (POINTER) 4 | #TYPE: NORMAL 5 | #METHOD: POINTER_RELATIVE 6 | #POINTER ENDIAN: LITTLE 7 | #POINTER TABLE START: $DDC 8 | #POINTER TABLE STOP: $E04 9 | #POINTER SIZE: $04 10 | #POINTER SPACE: $00 11 | #ATLAS PTRS: Yes 12 | #BASE POINTER: $F8000000 13 | #TABLE: guru2.tbl //the string address 14 | #COMMENTS: No 15 | #END BLOCK 16 | 17 | #BLOCK NAME: Rules Explanation (POINTER) 18 | #TYPE: NORMAL 19 | #METHOD: POINTER_RELATIVE 20 | #POINTER ENDIAN: LITTLE 21 | #POINTER TABLE START: $250 22 | #POINTER TABLE STOP: $2C4 23 | #POINTER SIZE: $04 24 | #POINTER SPACE: $00 25 | #ATLAS PTRS: Yes 26 | #BASE POINTER: $F8000000 27 | #TABLE: guru2.tbl //the string address 28 | #COMMENTS: No 29 | #END BLOCK 30 | 31 | #BLOCK NAME: Intro Cutscene (POINTER) 32 | #TYPE: NORMAL 33 | #METHOD: POINTER_RELATIVE 34 | #POINTER ENDIAN: LITTLE 35 | #POINTER TABLE START: $6B410 36 | #POINTER TABLE STOP: $6B460 37 | #POINTER SIZE: $04 38 | #POINTER SPACE: $00 39 | #ATLAS PTRS: Yes 40 | #BASE POINTER: $F8000000 41 | #TABLE: guru2.tbl //the string address 42 | #COMMENTS: No 43 | #END BLOCK -------------------------------------------------------------------------------- /script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/disclaim-element.js: -------------------------------------------------------------------------------- 1 | function getFrameArea(frame) { 2 | if(frame.innerWidth) return frame.innerWidth * frame.innerHeight; 3 | if(frame.document.documentElement && frame.document.documentElement.clientHeight) return frame.document.documentElement.clientWidth * frame.document.documentElement.clientHeight; 4 | if(frame.document.body) return frame.document.body.clientWidth * frame.document.body.clientHeight; 5 | return 0; 6 | } 7 | 8 | function isLargestFrame() { 9 | if(top == self) { 10 | return true; 11 | } 12 | if(top.document.body.tagName == "BODY") { 13 | return false; 14 | } 15 | largestArea = 0; 16 | largestFrame = null; 17 | for(i=0;i largestArea) { 21 | largestFrame = frame; 22 | largestArea = area; 23 | } 24 | } 25 | return (self == largestFrame); 26 | } 27 | 28 | function disclaimElement(element) { 29 | if(isLargestFrame()) { 30 | element.style.display="block"; 31 | document.body.insertBefore(element,document.body.firstChild); 32 | } 33 | } 34 | 35 | function disclaimToggle(largest, nonLargest) { 36 | if(isLargestFrame()) { 37 | largest.style.display="block"; 38 | nonLargest.style.display="none"; 39 | } else { 40 | largest.style.display="none"; 41 | nonLargest.style.display="block"; 42 | } 43 | } 44 | 45 | -------------------------------------------------------------------------------- /script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/graph-calc.js: -------------------------------------------------------------------------------- 1 | function getEventX(event) { 2 | var posx = 0; 3 | if (event.pageX || event.pageY) { 4 | posx = event.pageX; 5 | } 6 | else if (event.clientX || event.clientY) { 7 | posx = event.clientX + document.body.scrollLeft 8 | + document.documentElement.scrollLeft; 9 | } 10 | return posx; 11 | } 12 | function getElementX(obj) { 13 | var x = 0; 14 | if (obj.offsetParent) { 15 | do { 16 | x += obj.offsetLeft; 17 | } while (obj = obj.offsetParent); 18 | } 19 | return x; 20 | } 21 | function zeroPad(str,len) { 22 | var i; 23 | var pad = ""; 24 | var s = str.toString(); 25 | for(i=s.length; i < len; i++) { 26 | pad = "0".toString() + pad.toString(); 27 | } 28 | return pad.toString() + s.toString(); 29 | } 30 | 31 | function dateToTimestamp(date) { 32 | return date.getFullYear() + 33 | zeroPad(date.getMonth()+1,2) + 34 | zeroPad(date.getDay()+1,2) + 35 | zeroPad(date.getHours(),2) + 36 | zeroPad(date.getMinutes(),2) + 37 | zeroPad(date.getSeconds(),2); 38 | } 39 | 40 | function calcTimestamp(event,element,firstMS,lastMS) { 41 | var eventX = getEventX(event); 42 | var elementX = getElementX(element); 43 | var elementWidth = element.width; 44 | var msWidth = lastMS - firstMS; 45 | var x = eventX - elementX; 46 | var pct = x / elementWidth; 47 | var pctDate = pct * msWidth; 48 | var date = pctDate + firstMS; 49 | return dateToTimestamp(new Date(date)); 50 | } 51 | -------------------------------------------------------------------------------- /asm/name_entry_screen.asm: -------------------------------------------------------------------------------- 1 | ; Guru Logic Champ - Name Entry Screen tweaks 2 | ; by Spikeman 3 | 4 | .gba 5 | .open "rom/output.gba",0x08000000 6 | .thumb 7 | 8 | ; first, load the graphics for ABC input instead of kana: 9 | 10 | ; load ABC tiles instead of hirigana tiles 11 | .org 0x08017AD4 12 | .dcd 0x082779C4 ; change ldr at 80178E0 13 | 14 | ; load ABC tilemap instead of hirigana tilemap 15 | .org 0x08017B04 16 | .dcd 0x083848FC ; change ldr at 801793A 17 | 18 | ; make it so game thinks we're always on ABC screen 19 | .org 0x0801814C ; this runs when entering a character 20 | mov r2, 2 ; hirigana = 0, katakana = 1, ABC = 2; was a ldrh 21 | 22 | .org 0x08018338 ; this runs when selecting characters 23 | mov r0, 2 24 | 25 | ; disable changing of pages 26 | .org 0x08017FDC 27 | b 0x080180C4 ; was beq if r5 = 0 (r5 = 1 or -1 if changing page) 28 | 29 | ; don't display L and R arrows - same routine set both arrows, so only need to change one 30 | .org 0x08017A9A 31 | nop ;was bl 0x08001148 - create sprite 32 | nop 33 | 34 | ; change default name to CHAMP (original was chanpu in katakana) 35 | .org 0x080695A0 36 | .dh 0x6282, 0x6782, 0x6082, 0x6C82, 0x6F82 37 | 38 | ; change KASUMI cheat to "RHDN*" (* = heart) 39 | .org 0x080695B4 40 | .dh 0x7182, 0x6782, 0x6382, 0x6D82, 0x9C81 ; RHDN* - perhaps this should be in a script file somewhere 41 | 42 | ; import new graphics 43 | .org 0x08278540 44 | .incbin asm/bin/name_entry_obj.lz77 ; rough, image will be finalized 45 | .org 0x082759C8 46 | .incbin asm/bin/name_entry_bg.lz77 ; very rough image, just POC 47 | 48 | 49 | .close 50 | 51 | ; make sure to leave an empty line at the end -------------------------------------------------------------------------------- /notes/to hack.txt: -------------------------------------------------------------------------------- 1 | Things that need to be hacked: (list in progress) 2 | ------------------------------------------------- 3 | 4 | * Title screen 5 | * Logo graphics 6 | 7 | * Battle screen 8 | * Multiple things (need to do multiplayer testing) 9 | 10 | * File select 11 | * Title graphic 12 | * File selection 13 | * Delete 14 | * quicksave 15 | 16 | * Name entry screen 17 | * Remove japanese and add lowercase 18 | * No lowercase font 19 | * Just disable japanese pages 20 | * change cheat: All 12 levels open with 335 puzzles available. "ka heart su heart mi" is stored at 080695b4 21 | * Title graphic 22 | * Floating text (press start?) 23 | * confirm message box 24 | 25 | * Saving screen 26 | * just the "saving" graphic 27 | 28 | * Wakase's Labo 29 | * text (in atlas?) 30 | * menu items 31 | * title - change to Wakase's Lab? 32 | * Rule -> Rules 33 | * secret minigame (!) - champ ninja? 34 | 35 | * Champ ninja minigame 36 | * logo 37 | * instructions/text for all stages 38 | 39 | * Rescue select 40 | * nothing? 41 | 42 | * Stage select 43 | * puzzle name display 44 | * scrolling text (when L/R pressed) 45 | * not there when rescue complete 46 | 47 | * During puzzle 48 | * Menu 49 | * confirm submenus 50 | 51 | * Puzzle clear 52 | * puzzle name 53 | 54 | * Cutscenes 55 | * opening cutscene (when starting game) 56 | * printed text 57 | * (can be seen in wakase's lab/gallery) 58 | * rescue cutscenes 59 | * screen where it tells you what to do (text = graphics) 60 | * misc. graphics in some cutscenes 61 | * rescue 4 complete - "jam" label on jar 62 | * sign in rescue 10 ending (is it even readable?) 63 | * several in rescue 12 intro 64 | * lots in 12 end 65 | * spoken text in cutscenes 5intro, 8intro, 10end, 12intro, 12end 66 | * rescue complete cutscene 67 | * doesn't appear to be any text 68 | * "champs rescued" = engrish? 69 | 70 | * Credits/end game 71 | * part of rescue 12 ending cutscene 72 | * add us for hacking, we need portrait graphics too 73 | 74 | --- 75 | 76 | Where instructions appear: 77 | 78 | * When first starting game he says "Now it's time to use that pot" 79 | * Starting rescue 4 "hi there, nice to see you again" then holes and 80 | rubber walls explanation 81 | * Note: think I might have seen a small font glitch here (but not when replayed from rules screen) - the font was right on the window edge instead of spaced over 2 -------------------------------------------------------------------------------- /tools/font dumper/rhythm_tengoku_font_dumper.hs: -------------------------------------------------------------------------------- 1 | import System.IO 2 | import qualified Data.ByteString.Lazy as B 3 | import Data.Binary 4 | import Data.Binary.Get 5 | import Data.Binary.Put 6 | --import Data.Bits 7 | import Data.Int 8 | 9 | main :: IO () 10 | main = do 11 | inh <- openBinaryFile "test.gba" ReadMode 12 | outh <- openBinaryFile "dump.gba" WriteMode 13 | doStuff inh outh 14 | hClose inh 15 | hClose outh 16 | 17 | doStuff :: Handle -> Handle -> IO () 18 | doStuff inh outh = do 19 | hSeek inh AbsoluteSeek offset 20 | bs <- B.hGetContents inh 21 | --B.hPut outh $ runPut (putFontChar (runGet getFontChar bs)) 22 | B.hPut outh $ runPut (putFontChars (runGet (getFontChars 0x1FFF) bs)) 23 | where char = 0--0x00DC 24 | offset = 0x938264 + (char * 0x18) -- 0x18 = [9380AC+8] 25 | 26 | getTile = do 27 | pack <- getWord32le 28 | return (regs pack) 29 | where 30 | mask x shift = 0x11111111 .&. x `shiftR` shift 31 | regs x = mask x 0 : mask x 1 : mask x 2 : mask x 3 : [] --(mask x 0, mask x 1, mask x 2, mask x 3) 32 | 33 | getFontChar = do 34 | topLeft <- getTile 35 | topRight <- getTile 36 | midLeft <- getTile 37 | midRight <- getTile 38 | btmLeft <- getTile 39 | btmRight <- getTile 40 | return (topLeft, topRight, midLeft, midRight, btmLeft, btmRight) 41 | -- where blank = [0,0,0,0] :: [Word32] 42 | 43 | --getFontChars :: Int -> Get [([Word32], [Word32], [Word32], [Word32], [Word32], [Word32])] 44 | getFontChars 0 = return [] 45 | getFontChars x = do 46 | a <- getFontChar 47 | xs <- getFontChars (x-1) 48 | return (a : xs) 49 | 50 | putFontChars [] = return () 51 | putFontChars (x:xs) = do 52 | putFontChar x 53 | putFontChars xs 54 | 55 | putFontChar (b1, b2, c1, c2, d1, d2) = do 56 | putTile blank 57 | putTile b1 -- top left tile complete 58 | putTile blank 59 | putTile b2 -- top right tile complete 60 | putTile c1 61 | putTile d1 62 | putTile c2 63 | putTile d2 64 | where blank = [0,0,0,0] :: [Word32] 65 | 66 | putTile (x:xs) = do 67 | putWord32le x 68 | putTile xs 69 | putTile [] = return () 70 | 71 | 72 | -- chars loaded in chunks of 4 lines, 1st chunk is bottom half of first tile, 2 and 3 are top and bottom of 2nd tile 73 | -- main unpack called twice because 2 tiles wide 74 | 75 | -- skips down 0x10 at the beginning (4 words) 76 | -- stores 4 unpacked words, skips 0x20 (to get to bottom chunk of next tile over) -------------------------------------------------------------------------------- /script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/image001.jpg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | Internet Archive Wayback Machine 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 |
45 |
46 | 49 |
50 |
51 |
52 |
53 | 54 | 55 | 56 |
57 |
58 |
59 |
60 |
61 | 62 |

Sorry.

63 |

We can't retrieve all the files we need to display that page. Please try again later.

64 | 65 | 66 |
67 |
68 |
69 | 70 | 71 | 72 | 73 | 74 | 75 |
82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/image002.jpg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | Internet Archive Wayback Machine 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 |
45 |
46 | 49 |
50 |
51 |
52 |
53 | 54 | 55 | 56 |
57 |
58 |
59 |
60 |
61 | 62 |

Sorry.

63 |

We can't retrieve all the files we need to display that page. Please try again later.

64 | 65 | 66 |
67 |
68 |
69 | 70 | 71 | 72 | 73 | 74 | 75 |
82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/image006.jpg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | Internet Archive Wayback Machine 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 |
45 |
46 | 49 |
50 |
51 |
52 |
53 | 54 | 55 | 56 |
57 |
58 |
59 |
60 |
61 | 62 |

Sorry.

63 |

We can't retrieve all the files we need to display that page. Please try again later.

64 | 65 | 66 |
67 |
68 |
69 | 70 | 71 | 72 | 73 | 74 | 75 |
82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/image008.jpg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | Internet Archive Wayback Machine 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 |
45 |
46 | 49 |
50 |
51 |
52 |
53 | 54 | 55 | 56 |
57 |
58 |
59 |
60 |
61 | 62 |

Sorry.

63 |

We can't retrieve all the files we need to display that page. Please try again later.

64 | 65 | 66 |
67 |
68 |
69 | 70 | 71 | 72 | 73 | 74 | 75 |
82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /tools/font dumper/font_dumper.hs: -------------------------------------------------------------------------------- 1 | -- Font Dumper for Guru Logic Champ cutscenes 2 | -- code by Spikeman, based on Rhythm Tengoku font dumper 3 | -- create 2/29/2012 4 | 5 | -- Font is RL compressed, and decompressed by RLUncompVram BIOS function 6 | -- possible font values range from 0x00-FF, pointer table to compressed data at 0x082F0A44 7 | 8 | import System.IO 9 | import qualified Data.ByteString.Lazy as B 10 | import Data.Binary 11 | import Data.Binary.Get as G 12 | import Data.Binary.Put 13 | import Data.Bits 14 | import Numeric -- for showHex 15 | 16 | ptrTableAddr = 0x2F0A44 17 | fileIn = "../../rom/input.gba" 18 | fileOut = "../../gfx/cutscene_font.gba" 19 | 20 | main :: IO () 21 | main = do 22 | inh <- openBinaryFile fileIn ReadMode 23 | outh <- openBinaryFile fileOut WriteMode 24 | processFiles inh outh 25 | hClose inh 26 | hClose outh 27 | 28 | processFiles :: Handle -> Handle -> IO () 29 | processFiles inh outh = do 30 | bs <- dumpFont 0 B.empty 31 | B.hPut outh $ runPut (putLazyByteString bs) 32 | putStrLn "Done." 33 | where 34 | dumpFont 0x100 bs = return bs -- dumped all characters, so return 35 | dumpFont x bs = do 36 | addr <- getAddr x inh 37 | hSeek inh AbsoluteSeek (fromIntegral $ addr .&. 0xFFFFFF) 38 | --filebs <- B.hGetContents inh 39 | filebs <- B.hGet inh 0x80 -- this is really hacky, but assume that compressed char won't be bigger than 0x80 40 | dumpFont (x+1) (B.append bs $ runGet doRLUncomp filebs) 41 | 42 | 43 | getAddr char h = do 44 | hSeek h AbsoluteSeek (ptrTableAddr + (char * 4)) 45 | bs <- B.hGet h 4 -- read pointer into bytestring 46 | return $ runGet (getWord32le) bs 47 | 48 | doRLUncomp = do 49 | (_, comp_type, decomp_size) <- getHeader 50 | -- error if comp_type != 0x03 51 | bs <- getAllChunks (fromIntegral decomp_size) B.empty 52 | return bs 53 | 54 | getHeader = do 55 | flags <- getWord8 56 | let reserved = flags .&. 0xF -- reserved (not used) 57 | let comp_type = shiftR (flags .&. 0xF0) 4 -- compression type, should be 0x03 for RL compression 58 | decomp_size <- getWord24le -- size of decompressed data 59 | return $ (reserved, comp_type, decomp_size) 60 | where 61 | getWord24le = do -- get a 24 bit little-endian integer 62 | b1 <- getWord8 63 | b2 <- getWord8 64 | b3 <- getWord8 65 | return $ (shiftL b3 16) .|. (shiftL b2 8) .|. b1 66 | 67 | getChunk = do 68 | ctrl <- getWord8 69 | getChunk_ ctrl ((ctrl .&. 0x80) == 0x80) -- if bit 7 = 1, incoming data is compressed, else decompressed 70 | where 71 | --getChunk_ :: Word8 -> Bool -> Get B.ByteString 72 | getChunk_ ctrl True = do 73 | b <- getWord8 74 | let count = fromIntegral $ (ctrl .&. 0x7F) + 3 75 | return (B.take count (B.repeat b)) -- return count copies of the read byte (eg. 82 00 -> 00 00 00 00 00) 76 | getChunk_ ctrl False = do 77 | let count = fromIntegral $ (ctrl .&. 0x7F) + 1 78 | getLazyByteString count 79 | 80 | getAllChunks len bs = do 81 | --empty <- isEmpty 82 | --if empty 83 | if (B.length bs) == len 84 | then return bs 85 | else do 86 | chunk <- getChunk 87 | getAllChunks len (B.append bs chunk) 88 | -------------------------------------------------------------------------------- /notes/intro cutscene.txt: -------------------------------------------------------------------------------- 1 | text is in OAM sprites: 2 | 3 | 6015800 4 | from 82EB052 (probably font), RLUnComp 5 | at 80244C8 6 | 7 | 80244B4, r0 is character being printed 8 | call right before this converts r0 from SJS to simple char code 9 | 10 | 802451A, r1 is char, loaded from r0 11 | 12 | first txt at 806B0A4 13 | 14 | --- 15 | 16 | figuring out control codes: 17 | 18 | <$65><$65>: 19 | 20 | occurs at 806B0C0 21 | 22 | 6565 seems like a long pause 23 | 6C6C seems like a short pause 24 | 25 | 6565 is always followed by 0000, 0000 is never read by the game... 26 | 27 | pointer in 20019B4 28 | 29 | call checks if 6565 or 6c6c 30 | then 4081 31 | 32 | --- 33 | 34 | finding why no english font: 35 | 36 | 80244B0 is where it converts the SJIS character to the font number 37 | every english character returns F3 38 | which is the dot 39 | 40 | char<<10>>0e = char*4 41 | added to 82F0A44 = ptr table of RL compressed character data 42 | F3 ptr at 82F0E10 43 | ptr table only goes up to FF 44 | 45 | 00 = a 46 | 01 = i 47 | etc. 48 | (spaces aren't printed) 49 | 50 | note: all BG maps are used (bg1 in front), would probably be easier to just do OAM vwf, if it comes to that 51 | 52 | --- notes for font dumping --- 53 | RLUncompVram 54 | 55 | r0 Source Address, pointing to data as such: 56 | Data header (32bit) 57 | Bit 0-3 Reserved 58 | Bit 4-7 Compressed type (must be 3 for run-length) 59 | Bit 8-31 Size of decompressed data 60 | Repeat below. Each Flag Byte followed by one or more Data Bytes. 61 | Flag data (8bit) 62 | Bit 0-6 Expanded Data Length (uncompressed N-1, compressed N-3) 63 | Bit 7 Flag (0=uncompressed, 1=compressed) 64 | Data Byte(s) - N uncompressed bytes, or 1 byte repeated N times 65 | 66 | good explanation of decompression: http://d.hatena.ne.jp/loveemu/20091002/nds_formats 67 | 68 | a character: 082EACC4, ends at: 82EAD2A 69 | 70 | --- font design notes --- 71 | 72 | characters are generally 12x12, one pixel of space at the top 73 | some are smaller, none seem to be wider, some kanji are 13 high 74 | 75 | font insert notes: 76 | 77 | 82F0A44 - ptr tbl 78 | 2eacc4, 2ead2c,2ead90,2eade4 79 | last char: 2f0a3c, ends at 2f0a43, right before ptr table 80 | (and there does appear to be data directly after ptr table, so new font must fit in old font's space, or be relocated) 81 | 82 | 54,64,68 bytes appart (read: not regular) 83 | looks like there's a 00 00 after each 84 | or just one 00 (before 2ead90) - maybe to make 4 byte aligned 85 | yep, definitely 4 byte alignment, sometimes there is no padding 86 | 87 | total font size: 5D80 88 | 89 | confirmed: inserting old font is exactly the same data (same size) 90 | 91 | eng font size: 5D93 - will need to erase some japanese chars 92 | with chars erased: 4163, perfect 93 | 94 | --- 95 | 96 | font is inserted, now need to adjust lookup table 97 | from above: 80244B0 is where it converts the SJIS character to the font number 98 | 802438E: r0=8069F80 99 | 100 | 8069F80 = lookup table (SJIS values of font in order) 101 | 102 | A=6082 103 | B=6182, etc. 104 | 105 | need to figure out what x-value each line is initiated to: 106 | most are spaced so 16 characters max fit 107 | filling the whole screen = 20 characters? -------------------------------------------------------------------------------- /asm/HWF.asm: -------------------------------------------------------------------------------- 1 | ; Guru Logic Champ HWF 2 | ; by Spikeman 3 | 4 | .gba ; Set the architecture to GBA 5 | .open "rom/output.gba",0x08000000 ; Open input.gba for output. 6 | ; 0x08000000 will be used as the 7 | ; header size 8 | 9 | .macro adr,destReg,Address 10 | here: 11 | .if (here & 2) != 0 12 | add destReg, r15, (Address-here)-2 13 | .else 14 | add destReg, r15, (Address-here) 15 | .endif 16 | .endmacro 17 | 18 | .thumb 19 | 20 | ; note this replaces it bitmasking off the end, presumably to set shape to 0 so that it sets it to verticle 21 | .org 0x08003E30 22 | mov r0, #0x80 23 | orr r0, r1 24 | nop 25 | 26 | .org 0x08003E98 27 | mov r0, #0x40 28 | mul r0, r2 29 | add r0, r0, r1 30 | ldrh r1, [r3] 31 | ldr r2, =HWF_Main+1 32 | mov r3, pc 33 | bx r2 34 | b 0x08003EF4 35 | 36 | .pool 37 | 38 | .org 0x08003EFE 39 | ;add r1, #1 40 | add r1, #2 41 | 42 | .org 0x08003F2E 43 | ;adds r0, r2, #0 44 | ;adds r0, #0x2c 45 | ;ldrb r0, [r0] 46 | 47 | bl getWidth 48 | nop 49 | 50 | ;8010D7A stores 01 to 3000DBA when intro screen starts 51 | ;1 is hardcoded but used twice, store r4,r6 instead (they are 0) 52 | .org 0x08010D7A 53 | ;strb r1, [r0] 54 | ;add r0, #2 55 | ;mov r2, #0x10 56 | ;strb r2, [r0] 57 | ;add r0, #1 58 | 59 | strb r6, [r0] 60 | mov r2, #8 61 | strb r2, [r0,#2] 62 | mov r2, #0x10 63 | add r0, #3 64 | 65 | .org 0x08010DC4 66 | ;.dcd 0x08274078 67 | .dcd 0x08243190 68 | 69 | ;hardcoded 58 change to 5b 70 | .org 0x0801100E 71 | .db 0x5B 72 | .org 0x08011034 73 | .db 0x5B 74 | .org 0x8011724 75 | .db 0x5B 76 | .org 0x8011D08 77 | .db 0x5B 78 | 79 | ;80115D6 stores 01 to 3000DBA when 2nd rule dialogue loads 80 | ;1 is hardcoded but used twice, store r4 (it's 0) 81 | .org 0x080115D6 82 | ;strb r1, [r0] 83 | ;add r0, #2 84 | ;mov r2, #0x10 85 | ;strb r2, [r0] 86 | ;add r0, #1 87 | ;strb r2, [r0] 88 | 89 | strb r4, [r0] 90 | add r0, #2 91 | mov r2, #8 92 | strb r2, [r0] 93 | mov r2, #0x10 94 | strb r2, [r0,#1] 95 | 96 | .org 0x08011624 97 | ;.dcd 0x08274078 98 | .dcd 0x08243190 99 | 100 | .org 0x08011BBA 101 | ;strb r1, [r0] 102 | ;add r0, #2 103 | ;mov r2, #0x10 104 | ;strb r2, [r0] 105 | ;add r0, #1 106 | ;strb r2, [r0] 107 | 108 | strb r4, [r0] 109 | add r0, #2 110 | mov r2, #8 111 | strb r2, [r0] 112 | mov r2, #0x10 113 | strb r2, [r0,#1] 114 | 115 | .org 0x08011C08 116 | ;.dcd 0x08274078 117 | .dcd 0x08243190 118 | 119 | .pool 120 | 121 | .org 0x083D6000 122 | getWidth: 123 | ;r0 and r1 are free 124 | ldr r0, [sp] 125 | 126 | getWidth_CheckSpace: 127 | ldr r1, [space] 128 | cmp r0, r1 129 | bne getWidth_CheckApostrophe 130 | 131 | mov r0, #5 132 | b getWidth_Exit 133 | 134 | getWidth_CheckApostrophe: 135 | ldr r1, [apostrophe] 136 | cmp r0, r1 137 | bne getWidth_Return 138 | 139 | mov r0, #5 140 | b getWidth_Exit 141 | 142 | getWidth_Return: 143 | mov r0, #8 144 | 145 | getWidth_Exit: 146 | bx lr 147 | 148 | .align 4 149 | space: .dw 0x4081 150 | apostrophe: .dw 0x6681 151 | 152 | HWF_Main: 153 | lsl r1,r1,0x16 ;original routine 154 | lsr r1,r1,0x11 155 | ldr r2,=0x6010000 156 | add r1,r1,r2 157 | 158 | ldr r2,=0x40000D4 ;DMA3 159 | str r0,[r2] ;source in r0 160 | str r1,[r2,0x4] ;tiledata addr 161 | ldr r0,=0x80000040 ;enable DMA 40bytes 162 | str r0,[r2,0x8] 163 | 164 | mov r15,r3 ;return 165 | 166 | .pool 167 | .close 168 | 169 | ; make sure to leave an empty line at the end -------------------------------------------------------------------------------- /tools/font dumper/font_insert.hs: -------------------------------------------------------------------------------- 1 | -- Font Dumper for Guru Logic Champ cutscenes 2 | -- code by Spikeman, created 2/29/2012 3 | module Main where 4 | 5 | import System.IO 6 | import qualified Data.ByteString.Lazy as B 7 | import Data.Binary 8 | import Data.Binary.Get as G 9 | import Data.Binary.Put 10 | import Data.Bits 11 | import Numeric 12 | import Data.List 13 | import System (getArgs) 14 | import Control.Monad (when) 15 | 16 | gfxStartAddr = 0x2EACC4 17 | ptrTableAddr = 0x2F0A44 18 | --fileOut = "../../rom/output.gba" 19 | --fileIn = "../../gfx/cutscene_font_eng.gba" 20 | debug = False 21 | 22 | --hex :: B.ByteString -> String 23 | hex bs = '0':'x':(intercalate ", 0x" $ map (\x -> showHex x "") $ B.unpack bs) 24 | 25 | main = do 26 | args <- getArgs 27 | if (length args) /= 2 28 | then putStrLn "Usage: font_insert font_graphics.bin output_rom.gba" 29 | else do 30 | let fileIn = head args 31 | let fileOut = head . tail $ args -- get second argument 32 | inh <- openBinaryFile fileIn ReadMode 33 | outh <- openBinaryFile fileOut ReadWriteMode --WriteMode deletes file before writing 34 | processFiles inh outh 35 | hClose inh 36 | hClose outh 37 | 38 | processFiles inh outh = do 39 | bs <- B.hGetContents inh 40 | insertFont 0 bs gfxStartAddr 41 | putStrLn "Done." 42 | where 43 | insertFont 0x100 _ _ = return () -- dumped all characters, so return 44 | insertFont x bs ptr = do 45 | hSeek outh AbsoluteSeek (tblAddr x) 46 | B.hPut outh $ runPut $ putPointer ptr -- write pointer 47 | hSeek outh AbsoluteSeek (fromIntegral ptr) 48 | let (char, nextbs, _) = runGetState getFontChar bs 0 49 | let rldata = runGet (rlCompress B.empty) char 50 | 51 | size <- putAndGetSize rldata 52 | 53 | when debug $ do 54 | putStr $ showString "Wrote char " $ hex (B.pack [(fromIntegral x)]) 55 | putStr $ showString " at " $ showHex ptr "" 56 | putStrLn $ showString " size: " $ hex (B.pack [(fromIntegral $ adjustSize size)]) 57 | 58 | --insertFont 0x100 bs ptr 59 | insertFont (x+1) nextbs (ptr + (fromIntegral $ adjustSize size)) 60 | tblAddr x = ptrTableAddr + (x * 4) 61 | adjustSize x = x + (4 - mod x 4) + 4 -- adjust size for 4 byte alignment, and add 4 bytes for header 62 | putAndGetSize bs = do 63 | B.hPut outh $ runPut $ putRLData bs -- write compressed character 64 | return $ B.length bs 65 | 66 | rlCompress bs = do 67 | empty <- isEmpty 68 | if empty 69 | then return bs 70 | else do 71 | chunk <- getChunk 72 | rlCompress (B.append bs chunk) 73 | 74 | getChunk = do 75 | try <- lookAhead $ tryGet3 76 | if try 77 | then do 78 | x <- getWord8 79 | count <- getWhileEqual 0 x 80 | return $ B.pack [(count - 2) .|. 0x80, x] -- generate compressed data (0x80 is flag bit) 81 | else do -- copy, dont compress 82 | (count, bs) <- getWhileNotEqual 0 (B.empty) 83 | return $ B.cons (count) bs 84 | 85 | getWhileEqual count x = do 86 | empty <- isEmpty -- note: empty checking should be in a monad? 87 | if empty 88 | then return count 89 | else do 90 | y <- lookAhead $ getWord8 91 | if (x == y) 92 | then do 93 | getWord8 94 | getWhileEqual (count+1) x 95 | else return count 96 | 97 | getWhileNotEqual count bs = do 98 | empty <- isEmpty 99 | if empty 100 | then return (count, bs) -- not sure if this is correct 101 | else do 102 | y <- getWord8 103 | try <- lookAhead $ tryGet2 y 104 | if not try 105 | then do 106 | try2 <- lookAhead $ tryGet3 107 | if try2 108 | then return (count, B.snoc bs y) 109 | else getWhileNotEqual (count+1) (B.snoc bs y) 110 | else return (count, B.snoc bs y) 111 | 112 | tryGet2 x = do 113 | a <- getWord8 114 | b <- getWord8 115 | return (a == x && b == x) 116 | 117 | tryGet3 = do 118 | x <- getWord8 119 | tryGet2 x 120 | 121 | getFontChar = do 122 | getLazyByteString 0x80 -- size of a character 123 | 124 | putPointer addr = do 125 | putWord32le (addr .|. 0x08000000) 126 | 127 | putHeader = do 128 | putWord8 0x30 -- bit 0-3 = 0 - reserved, bit 4-7 = 3 - RL compression 129 | putWord8 0x80 -- decompressed size 130 | putWord8 0 131 | putWord8 0 -- this is 0x000080 in little endian, because there's no putWord24le 132 | 133 | putRLData bs = do 134 | putHeader 135 | putLazyByteString $ pad bs -- make sure data is 4 byte aligned 136 | 137 | -- for aligning data to 4 bytes 138 | pad bs | len > 0 = B.append bs $ B.replicate (4 - len) 0x00 139 | where len = (mod . B.length) bs 4 140 | pad bs = bs -------------------------------------------------------------------------------- /script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/mainStyle.css: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | /* 7 | FILE ARCHIVED ON 16:00:02 Nov 17, 2007 AND RETRIEVED FROM THE 8 | INTERNET ARCHIVE ON 2:04:43 Feb 29, 2012. 9 | JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE. 10 | 11 | ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C. 12 | SECTION 108(a)(3)). 13 | */ 14 | body { 15 | background-color: #EEEEEE; 16 | background-image: url(http://web.archive.org/web/20071117160002/http://www.ntsc-uk.com/newgfx/vert.png); 17 | background-repeat: no-repeat; 18 | background-position: right top; 19 | background-attachment: fixed 20 | } 21 | 22 | .mojo { 23 | /* 24 | background-image: url(http://web.archive.org/web/20071117160002/http://www.ntsc-uk.com/newgfx/dcweek.png); 25 | background-repeat: no-repeat; 26 | background-position: right top; 27 | */ 28 | border-top: 2px #000000 solid; 29 | border-left: 2px #000000 solid; 30 | border-right: 2px #000000 solid; 31 | border-bottom: 2px #000000 solid; 32 | background-color: #FFFFFF; 33 | } 34 | 35 | .minimojo { 36 | background-image: url(http://web.archive.org/web/20071117160002/http://www.ntsc-uk.com/newgfx/ntscmini.png); 37 | background-position: right bottom; 38 | background-repeat: no-repeat; 39 | border-top: 2px #000000 solid; 40 | border-left: 0px #000000 solid; 41 | border-right: 0px #000000 solid; 42 | border-bottom: 1px #000000 solid; 43 | background-color: #EEEEEE; 44 | padding: 4px; 45 | } 46 | 47 | .minimojonbg { 48 | border-top: 2px #000000 solid; 49 | border-left: 0px #000000 solid; 50 | border-right: 0px #000000 solid; 51 | border-bottom: 1px #000000 solid; 52 | background-color: #EEEEEE; 53 | } 54 | 55 | .panelheading { font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #000000} 56 | 57 | .minititle { font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #000000; font-weight: bold} 58 | 59 | 60 | .paneltext { line-height: 20px; font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #000000} 61 | a.paneltext { text-decoration: none } 62 | a.paneltext:hover { text-decoration: underline } 63 | 64 | .MainText { font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #000000} 65 | a.MainText { font-style: italic; text-decoration: none } 66 | a.MainText:hover { text-decoration: underline } 67 | 68 | .ReviewText { font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #000000; text-align: justify} 69 | .Links { font-family: Arial, Helvetica, sans-serif; font-size: 10px; color: #333333; font-weight: bold} 70 | .ConsoleSm { font-family: Geneva, Arial, Helvetica, san-serif; font-size: 11px; color: #333333; font-weight: bold} 71 | .FAQLinks { font-family: Arial, Helvetica, sans-serif; font-size: 13px; color: #333333; font-weight: normal} 72 | 73 | 74 | a { color: #000000; text-decoration: none} 75 | a:hover { color: #000000; text-decoration: underline} 76 | a:visited { color: #000000;} 77 | 78 | .ImportHeadings { color: #000000; font-family: Arial, Helvetica, sans-serif; font-size: 12px; font-weight: bold} 79 | .ImportHeadingsBig { color: #000000; font-family: Arial, Helvetica, sans-serif; font-size: 18px; font-weight: bold} 80 | 81 | .ReviewHeadings { font-family: Arial, Helvetica, sans-serif; font-size: 12px; color: #000000} 82 | .FirstPlayBig { color: #000000; font-family: Arial, Helvetica, sans-serif; font-size: 18px; font-weight: bold} 83 | 84 | .mainmenu{ font-family: Arial, Helvetica, sans-serif; font-size : 12px; font-weight: bold; color : #000000;} 85 | a.mainmenu{ text-decoration: none; color : #000000; } 86 | a.mainmenu:hover{ color : #FFFFFF; background-color: #000000} 87 | 88 | .mainmenusdc{ font-family: Arial, Helvetica, sans-serif; font-size : 12px; font-weight: bold; color : #000000; } 89 | a.mainmenusdc{ text-decoration: none; color : #000000; } 90 | a.mainmenusdc:hover{ color : #FFFFFF; background-color: #ff8200} 91 | 92 | .mainmenugba{ font-family: Arial, Helvetica, sans-serif; font-size : 12px; font-weight: bold; color : #000000; } 93 | a.mainmenugba{ text-decoration: none; color : #000000; } 94 | a.mainmenugba:hover{ color : #FFFFFF; background-color: #666666} 95 | 96 | .mainmenungc{ font-family: Arial, Helvetica, sans-serif; font-size : 12px; font-weight: bold; color : #000000; } 97 | a.mainmenungc{ text-decoration: none; color : #000000; } 98 | a.mainmenungc:hover{ color : #FFFFFF; background-color: #7561a3} 99 | 100 | .mainmenups2{ font-family: Arial, Helvetica, sans-serif; font-size : 12px; font-weight: bold; color : #000000; } 101 | a.mainmenups2{ text-decoration: none; color : #000000; } 102 | a.mainmenups2:hover{ color : #FFFFFF; background-color: #0018c9} 103 | 104 | .mainmenuxbo{ font-family: Arial, Helvetica, sans-serif; font-size : 12px; font-weight: bold; color : #000000; } 105 | a.mainmenuxbo{ text-decoration: none; color : #000000; } 106 | a.mainmenuxbo:hover{ color : #FFFFFF; background-color: #006600} 107 | 108 | .mainmenunds{ font-family: Arial, Helvetica, sans-serif; font-size : 12px; font-weight: bold; color : #FF408D; } 109 | a.mainmenunds{ text-decoration: none; color : #FF408D; } 110 | a.mainmenunds:hover{ color : #FFFFFF; background-color: #e5e5e5} 111 | -------------------------------------------------------------------------------- /armips-Readme.txt: -------------------------------------------------------------------------------- 1 | ARMIPS assembler v0.7c, released 11th December 2010 2 | by Kingcom 3 | 4 | ################################# 5 | # 0. TABLE OF CONTENTS # 6 | ################################# 7 | 8 | 1. Introduction 9 | 1.1 Motivation 10 | 1.2 Usage 11 | 1.3 Change log 12 | 2. General Information 13 | 3. Features 14 | 3.1 Files 15 | 3.2 Comments 16 | 3.3 Labels 17 | 3.4 equ 18 | 3.5 Math Parser 19 | 3.6 Load delay detection 20 | 3.7 Strings 21 | 3.8 Areas 22 | 4. Assembler Directives 23 | 4.1 General Directives 24 | 4.2 MIPS Directives 25 | 4.3 ARM Directives 26 | 5. Macros 27 | 5.1 Assembler defined MIPS macros 28 | 5.2 User defined macros 29 | 6. Known issues 30 | 31 | 32 | ################################# 33 | # 1. INTRODUCTION # 34 | ################################# 35 | 36 | 1.1 Motivation 37 | 38 | I started writing this assembler when I got into PSX hacking, 39 | as the only available assemblers were less than user friendly. 40 | This assembler is an attempt to fix of all of the problems 41 | with currently available assemblers and to allow working with 42 | several different code binaries in the same game. It won't 43 | erase any code, it will just overwrite what the user wants 44 | to overwrite. 45 | In this second version, ARM/THUMB support is finally finished. 46 | It can be used for both GBA and NDS and includes both 47 | instruction sets. ARM has been implemented according to GBATEK 48 | by Martin Korth, and most pseudo opcodes and aliases are 49 | included (for example, mov for mcr/mrc and mrs/msr). 50 | PS2 support is also planned. You can contact me on the 51 | RomHacking.net forums. My nickname there is KC. 52 | Thanks to Gemini for testing it and providing the initial idea. 53 | He also wrote the sample assembly file. 54 | 55 | 56 | 1.2 Usage 57 | 58 | The assembler is called from the command line, and the 59 | arguments are as follows: 60 | 61 | armips.exe code.asm [-temp tempfile.txt] [-sym symfile.sym] 62 | 63 | Code.asm is the main file of your assembly code. It can 64 | open and include other files, and basically do everything 65 | you want. The optional -temp parameter specifies a 66 | text file where all the temporary assembly data will be 67 | written to for debugging purposes. It will look like this: 68 | 69 | ; 1 file included 70 | ; test.asm 71 | 72 | 00000000 .open "SLPM_870.50",0x8000F800 ; test.asm line 1 73 | 8000F800 .org 0x800362DC ; test.asm line 5 74 | 800362DC jal 0x801EBA3C ; test.asm line 7 75 | 800362E0 .Close ; test.asm line 9 76 | 77 | The other optional parameter, -sym, allows you to specify 78 | a file to output all the labels to. This can be used with 79 | no$gba for easier debugging. 80 | 81 | 82 | 1.3 Change log 83 | 84 | 0.7c -Macros can now contain unique local labels 85 | -area and no$gba debug message directives added 86 | -sym output enhanced 87 | -countless bugfixes 88 | -no$gba debug message support 89 | -full no$gba sym support 90 | 0.7b -ARM/THUMB support 91 | -fixed break/syscall MIPS opcodes 92 | -added check if a MIPS instruction is valid inside 93 | a delay slot 94 | -fixed and extended base detection 95 | -added "." dummy label to the math parser to get the 96 | current memory address 97 | -added dcb/dcw/dcd directives 98 | 99 | 0.5b -Initial release 100 | 101 | 102 | ################################# 103 | # 2. GENERAL INFORMATION # 104 | ################################# 105 | 106 | The assembler includes the whole MIPS R3000 instruction 107 | set, as well as the complete ARM7/ARM9 instruction set 108 | used by GBA and NDS, both THUMB and ARM mode. There are 109 | also several other features. Among these features are: 110 | 111 | -a full fledged C-like math parser. It should behave 112 | exactly like in any C/C++ code, including all the 113 | weirdness. All immediate values can be specified by 114 | an expression, though some directives can't use 115 | variable addresses including labels 116 | -you can open several files in a row, but only one 117 | output file can be open at any time. You can specify 118 | its address in memory to allow overlay support. Any 119 | file can cross-reference any other included file 120 | -labels and local labels (see 3.3) 121 | -table support for user defined text encodings (see 3.7) 122 | -several MIPS macros to make writing code easier and 123 | faster (see 4.1) 124 | -user defined macros (see 4.2) 125 | -built-in checks for possible load delay problems (see 3.6) 126 | -optional automatic fix for said problems by inserting 127 | a nop between the instructions 128 | -output of the assembled code to a textfile, with RAM 129 | addresses and origin (see 1.2) 130 | -a directive to ensure that data is not bigger than a 131 | user defined size (see 3.8) 132 | 133 | 134 | ################################# 135 | # 3. FEATURES # 136 | ################################# 137 | 138 | 3.1 Files 139 | 140 | Unlike other assemblers, you don't specify the input/output 141 | file as a command line argument. You have to open the file 142 | in the source code, and also close it yourself. This was 143 | done in order to support overlays, which are very common 144 | in PSX and NDS games. Instead of only having one output file, 145 | you can have as many as you need - each with its own address 146 | in memory. The files can cross-reference each other without 147 | any problems, so you can call code from other, currently 148 | not opened files as well. 149 | 150 | .Open "SLPS_035.71", 0x8000F800 151 | ; ... 152 | .Close 153 | .Open "System\0007.dat", 0x800CC000 154 | ; ... 155 | .Close 156 | 157 | 158 | 3.2 Comments 159 | 160 | Both ; and // are supported for comments. 161 | 162 | 163 | 3.3 Labels 164 | 165 | There is support for both local and global labels. Local 166 | labels are only valid in the area between the previous 167 | and the next global label. Specific directives, like .org, 168 | will also terminate the area. A label is defined by writing 169 | a colon after its name. All labels can be used before they 170 | are defined. 171 | 172 | GlobalLabel: ; This is a global label 173 | @@LocalLabel: ; This is a local label, it is only 174 | ; valid until the next global one 175 | OtherGlobalLabel: ; this will terminate the area where 176 | ; @@LocalLabel can be used 177 | b @@LocalLabel ; as a result, this will cause an error 178 | 179 | 180 | A label name can contain all characters from A-Z and numbers. 181 | However, it cannot start with a digit. All label names are 182 | case insensitive. 183 | 184 | 185 | 3.4 equ 186 | 187 | This works as a text replacement and is defined as follows: 188 | 189 | @@StringPointer equ 0x20(r29) 190 | 191 | 192 | There has to be a space before and after equ. The assembler 193 | will replace any occurance of @@StringPointer with "0x20(r29)". 194 | As it is a local equ, it will only do so in the current 195 | section, which is terminated by any global label or specific 196 | directives. This code: 197 | 198 | @@StringPointer equ 0x20(r29) 199 | 200 | lw a0,@@StringPointer 201 | nop 202 | sw a1,@@StringPointer 203 | 204 | will assemble to this: 205 | 206 | lw a0,0x20(r29) 207 | nop 208 | sw a1,0x20(r29) 209 | 210 | There can be both global and local equs, but unlike normal 211 | labels, they have to be defined before they are used. 212 | 213 | 214 | 3.5 Math Parser 215 | 216 | A standard math parser with operator precedence and bracket 217 | support has been implemented. It is intended to behave exactly 218 | like any C/C++ parser and supports all unary, binary and 219 | tertiary operators of the C language. Every numeral argument 220 | can be given as an expression, including label names. 221 | However, some directives do not support variable addresses, 222 | so labels can not be used in expressions for them. 223 | The following bases are supported: 224 | 225 | $A, 0xA and 0Ah for hexadecimal numbers 226 | 0o12 and 12o for octal numbers 227 | 1010b for binary numbers 228 | 229 | Everything else is interpreted as a decimal numbers, so a 230 | leading zero does not indicate an octal number. Be aware that 231 | every number has to actually start with a digit, unless you 232 | use $ for hexadecimal numbers. For example, as FFh is a 233 | perfectly valid label name, you have to write 0FFh in this case. 234 | Labels, on the other hand, can not start with a digit. 235 | 236 | A few examples: 237 | 238 | mov r0,10+0xA+$A+0Ah+0o12+12o+1010b 239 | ldr r1,=ThumbFunction+1 240 | li v0,Structure+(3*StructureSize) 241 | 242 | 243 | 3.6 Load delay detection 244 | 245 | This feature is still unfinished and experimental. It works 246 | in most cases, though. On MIPS platforms, any load is 247 | asynchronously delayed by one cycle. This means that the CPU 248 | won't stall if you attempt to use it before - and instead 249 | returns the old value on real hardware (emulators do not emulate 250 | this, which makes spotting these mistakes even more difficult). 251 | Therefore, the assembler will attempt to detect when such a 252 | case happens. The following code would result in a warning: 253 | 254 | lw a0,0x10(r29) 255 | lbu a1,(a0) 256 | 257 | This code doesn't take the load delay into account and will 258 | therefore only work on emulators. The assembler detects it 259 | and warns the user. In order to work correctly, the code should 260 | look like this: 261 | 262 | lw a0,0x10(r29) 263 | nop 264 | lbu a1,(a0) 265 | 266 | Here, one cycle is wasted with the nop and there will be no 267 | problems. 268 | However, the detection doesn't work in all cases. It can't 269 | check if the instruction at a branch destination uses a 270 | register that was loaded in the branch's delay slot, and it 271 | will give it a false alarm in the following example: 272 | 273 | bnez a0,@@branch1 274 | nop 275 | j @@branch2 276 | lw a0,(a1) 277 | @@branch1: 278 | lbu a2,(a0) 279 | 280 | You can fix the false warning by using the .resetdelay 281 | directive before the last instruction. 282 | 283 | bnez a0,@@branch1 284 | nop 285 | j @@branch2 286 | lw a0,(a1) 287 | .resetdelay 288 | @@branch1: 289 | lbu a2,(a0) 290 | 291 | This behavior may be fixed in a future revision. 292 | 293 | 294 | 3.7 Strings 295 | 296 | You can write ASCII text by simple using the .db/.ascii 297 | directive. However, you can also write text with custom 298 | encodings. In order to do that, you first have to load a table, 299 | and then use the .string directive to write the text. 300 | It behaves exactly like the .db instruction (so you can also 301 | specify immediate values as arguments), with the exception 302 | that it uses the table to encode the text, and appends a 303 | termination sequence after the last argument. This has to 304 | be specified inside the table, otherwise 0 is used. 305 | 306 | .loadtable "custom.tbl" 307 | .string "Custom text",0xA,"and more." 308 | 309 | The first and third argument are encoded according to the 310 | table, while the second one is written as-is. 311 | 312 | 313 | 314 | 3.8 Areas 315 | 316 | If you overwrite existing data, it is critical that you 317 | don't overwrite too much. The area directive will take care 318 | of checking if all the data is within a given space. In order 319 | to do that, you just have to give it the maximum size allowed. 320 | 321 | .area 10h 322 | .word 1,2,3,4,5 323 | .endarea 324 | 325 | This would cause an error on assembling, because the word 326 | directive takes up 20 bytes instead of the 16 that the 327 | area is allowed to have. This, on the other hand, would 328 | assemble without problems: 329 | 330 | .org 8000000h 331 | .area 8000020h-. 332 | .word 1,2,3,4,5 333 | .endarea 334 | 335 | Here, the area is 32 bytes, which is sufficient for the 20 336 | bytes used by .word. 337 | 338 | 339 | ################################# 340 | # 4. ASSEMBLER DIRECTIVES # 341 | ################################# 342 | 343 | These commands tell the assembler to do various things 344 | like opening the output file or opening another source 345 | file. 346 | 347 | 348 | 4.1 General Directives 349 | 350 | 351 | .psx 352 | 353 | Sets the architecture to PSX. 354 | 355 | 356 | .gba 357 | 358 | Sets the architecture to GBA. It will default to THUMB 359 | mode, but it can switch to ARM at any time. ARM9 specific 360 | opcodes are disabled, so it is also usable for NDS ARM7 361 | code. 362 | 363 | 364 | .nds 365 | 366 | Sets the architecture to NDS. It will default to ARM mode, 367 | but it can switch to THUMB at any time. 368 | 369 | 370 | .open FileName,RamAddress 371 | .open OldFileName,NewFileName,RamAddress 372 | 373 | Opens the specified file for output. If two file names 374 | are specified, then the assembler will copy the first 375 | file to the second path. All paths are relative to the 376 | current working directory, so from where the assembler 377 | was called. RamAddress specifies the difference between 378 | the first byte of the file and its position in RAM. 379 | So if file position 0x800 is at position 0x80010000 in 380 | RAM, the header size is 0x80010000-0x800=0x8000F800. 381 | Only the changes specified by the assembly code will 382 | be inserted, the rest of the file remains untouched. 383 | 384 | 385 | .create FileName,RamAddress 386 | .createfile FileName,RamAddress 387 | 388 | Creates the specified file for output. If the file already 389 | exists, it will be erased. All paths are relative to the 390 | current working directory, so from where the assembler was 391 | called. RamAddress specifies the difference between the 392 | first byte of the file and its position in RAM. So if file 393 | position 0x800 is at position 0x80010000 in RAM, the header 394 | size is 0x80010000-0x800=0x8000F800. 395 | 396 | 397 | .close 398 | .closefile 399 | 400 | Closes the currently opened output file. 401 | 402 | 403 | .headersize RamAddress 404 | 405 | Sets the header size to the given size. It will be 406 | used to calculate all addresses from that point on. 407 | 408 | 409 | .org RamAddress 410 | 411 | Sets the output pointer to the specified address. The file 412 | address is computed by subtracting the header size from 413 | the given address. 414 | 415 | 416 | .orga FileAddress 417 | 418 | Sets the output pointer to the specified address. The 419 | absolute file address is given. 420 | 421 | 422 | .include FileName 423 | 424 | Opens the file called FileName to assemble it. All paths 425 | are relative to the current working directory, so from 426 | where the assembler was called. You can include other 427 | files up to a depth level of 64. This limit was added 428 | to prevent the assembler from crashing due to two files 429 | including each other over and over again. 430 | 431 | 432 | .incbin FileName 433 | .import FileName 434 | 435 | Inserts the file specified by FileName into the currently 436 | opened output file. All paths are relative to the current 437 | working directory, so from where the assembler was called. 438 | 439 | 440 | .align [num] 441 | 442 | Writes zeroes into the output file until the output 443 | position is divisible by num. If num is not given, 444 | 4 will be used by default. num has to be a power of two. 445 | 446 | 447 | .fill length[,value] 448 | defs length[,value] 449 | 450 | Inserts length amount of bytes of value. If value isn't 451 | specified, inserts zeros. Only the lowest 8 bits of 452 | value are inserted. 453 | 454 | 455 | .byte value[,...] 456 | .db value[,...] 457 | .ascii value[,...] 458 | dcb value[,...] 459 | 460 | Inserts up to 128 bytes specified by the arguments. Value 461 | can be any equation, but only the lowest 8 bits are inserted. 462 | Value can also be a string in quotation marks. 463 | 464 | 465 | .halfword value[,...] 466 | .dh value[,...] 467 | dcw value[,...] 468 | 469 | Inserts up to 128 halfwords specified by the arguments. Value 470 | can be any equation, but only the lowest 16 bits are inserted. 471 | Value can also be a string in quotation marks, in that case, 472 | every letter is inserted as a halfword. 473 | 474 | 475 | .word value[,...] 476 | .dw value[,...] 477 | dcd value[,...] 478 | 479 | Inserts up to 128 words specified by the arguments. Value can 480 | be any equation. Value can also be a string in quotation marks, 481 | in that case, every letter is inserted as a word. 482 | 483 | 484 | .if equation 485 | 486 | Assembles the next block only if equation is nonzero. Can be 487 | inverted by .else or .elseif and has to be terminated by 488 | .endif. The code is still verified even if the condition is 489 | not met. 490 | 491 | 492 | .else 493 | 494 | Inverts previous .if or .elseif statement. 495 | 496 | 497 | .elseif equation 498 | 499 | Equation will only be checked if previous .if or .elseif 500 | statement was not met. Assembles the next block only if 501 | equation is nonzero. Can be inverted by .else or .elseif 502 | and has to be terminated by .endif. The code is still 503 | verified even if the condition is not met. 504 | 505 | 506 | .ifdef label 507 | 508 | Assembles the next block only if label is defined. Can be 509 | inverted by .else or .elseif and has to be terminated by 510 | .endif. The code is still verified even if the condition is 511 | not met. 512 | 513 | 514 | .ifndef label 515 | 516 | Assembles the next block only if label is not defined. Can 517 | be inverted by .else or .elseif and has to be terminated by 518 | .endif. The code is still verified even if the condition 519 | is not met. 520 | 521 | 522 | .loadtable TableName 523 | .table TableName 524 | 525 | Loads TableName for using it with the .string directive. 526 | The encoding has to be same as the assembly file's, 527 | as a simple binary comparison is used. All paths are relative 528 | to the current working directory, so from where the assembler 529 | was called. You can specify one or several termination bytes 530 | like this: 531 | 02=a 532 | /FF 533 | FF will be inserted at the end of the string. If it is not 534 | given, zero is used instead. 535 | 536 | 537 | .string "String" 538 | .str "String" 539 | 540 | Inserts the given string using the previously opened table. 541 | 542 | 543 | .definelabel Label,value 544 | 545 | Defines Label with the given value. This may seem similar to equ, 546 | but you don't have to use this before using the label. It will also 547 | be added to the sym output. 548 | 549 | 550 | .area SizeEquation 551 | 552 | Opens a new area with the maximum size of SizeEquation. If the 553 | data inside the area is bigger than the maximum, the assembler 554 | will output an error and refuse to assemble the code. It has to 555 | be closed by a .endarea directive. 556 | 557 | 558 | .endarea 559 | 560 | Closes a previously opened area. If the difference between the 561 | current ram address and that of the previous .area directive is 562 | bigger than the given size, an error will prevent successful 563 | assembling. 564 | 565 | 566 | 4.2 MIPS Directives 567 | 568 | .resetdelay 569 | 570 | Resets the current load delay status. This can be useful if 571 | the instruction after a delay slot access the delayed register, 572 | as the assembler can't detect that yet. 573 | 574 | 575 | .fixloaddelay 576 | 577 | Automatically fixes any load delay problems by inserting a 578 | nop between the instructions. Best used in combination with 579 | .resetdelay. 580 | 581 | 582 | 4.3 ARM Directives 583 | 584 | .arm 585 | 586 | This tells the assembler to use the full 32 bit ARM instruction 587 | set. It can be switched to THUMB at any time. NDS will default 588 | to this instruction set. 589 | 590 | 591 | .thumb 592 | 593 | This tells the assembler to use the cut-down 16bit THUMB 594 | instruction set. It can be switched to ARM at any time. GBA will 595 | default to this instruction set. 596 | 597 | 598 | .pool 599 | 600 | This directive works together with a pseudo opcode. In the code, 601 | you can use an ldr instruction to load a full 32 bit immediate. 602 | This immediate will be saved inside one of these pools. 603 | Example: 604 | 605 | ldr r0,=0xFFEEDDCC 606 | ; ... 607 | .pool 608 | 609 | Here, the ldr instruction will be assembled as a PC-relative 610 | load and the value will be written into the pool. The range is 611 | limited, so you may have to define several pools. 612 | .pool will automatically align the position to a multiple of 4. 613 | 614 | .msg 615 | 616 | Adds a no$gba debug message as described by GBATEK. 617 | 618 | 619 | ################################# 620 | # 5. MACROS # 621 | ################################# 622 | 623 | 5.1 Assembler defined MIPS macros. 624 | 625 | There are various macros built into the assembler for ease 626 | of use. They are intended to make using some of the assembly 627 | simpler and faster. 628 | At the moment, these are all the MIPS macros included: 629 | 630 | li reg,Immediate 631 | la reg,Immediate 632 | 633 | Loads Immediate into the specified register by using a 634 | combination of lui/ori, a simple addiu or a simple ori. 635 | 636 | 637 | lb reg,Address 638 | lbu reg,Address 639 | lh reg,Address 640 | lhu reg,Address 641 | lw reg,Address 642 | 643 | Loads a byte/halfword/word from the given address into 644 | the specified register by using a combination of lui 645 | and lb/lbu/lh/lhu/lw. 646 | 647 | 648 | ulh destreg,imm(sourcereg) 649 | ulh destreg,(sourcereg) 650 | ulhu destreg,imm(sourcereg) 651 | ulhu destreg,(sourcereg) 652 | 653 | Loads an unaligned halfword from the address in sourcereg. 654 | It uses a combination of several lb/lbus and oris. 655 | 656 | 657 | ulw destreg,imm(sourcereg) 658 | ulw destreg,(sourcereg) 659 | 660 | Loads an unaligned word from the address in sourcereg. 661 | It uses a combination of lwl/lwr. 662 | 663 | 664 | sb reg,Address 665 | sh reg,Address 666 | sw reg,Address 667 | 668 | Writes a byte/halfword/word to the given address by 669 | using a combination of lui and sb/sh/sw. 670 | 671 | 672 | ush destreg,imm(sourcereg) 673 | ush destreg,(sourcereg) 674 | 675 | Loads an unaligned halfword to the address in sourcereg. 676 | It uses a combination of several sb/sbus and shifts. 677 | 678 | 679 | usw destreg,imm(sourcereg) 680 | usw destreg,(sourcereg) 681 | 682 | Loads an unaligned word to the address in sourcereg. 683 | It uses a combination of swl/swr. 684 | 685 | 686 | blt reg1,reg2,Dest 687 | bge reg1,reg2,Dest 688 | 689 | If reg1 is lower than/greate or equal than reg2, branches 690 | to the given address. A combination of sltu and beq/bne 691 | is used. 692 | 693 | 694 | blt reg,Imm,Dest 695 | bge reg,Imm,Dest 696 | 697 | If reg is lower than/greater or equal than Imm, branches 698 | to the given address. A combination of li, sltu and beq/bne 699 | is used. 700 | 701 | 702 | bne reg,Imm,Dest 703 | beq reg,Imm,Dest 704 | 705 | If reg is not the same/the same as Imm, branches to the 706 | given address. A combination of li and beq/bne is used. 707 | 708 | 709 | rol reg1,reg2,reg3 710 | ror reg1,reg2,reg3 711 | 712 | Rotates reg2 left/right by the value of the lower 5 bits 713 | of reg3 and stores the result in reg1. A combination of 714 | sll, srl and ori is used. 715 | 716 | 717 | rol reg1,reg2,Imm 718 | ror reg1,reg2,Imm 719 | 720 | Rotates reg2 left/right by Imm and stores the result in 721 | reg1. A combination of sll, srl and ori is used. 722 | 723 | 724 | 5.2 User defined macros 725 | 726 | The assembler allows the user to create his own macros. 727 | This is an example macro, a recreation of the builtin 728 | macro for li: 729 | 730 | .macro myli,dest,value 731 | .if value < 0x10000 732 | ori dest,r0,value 733 | .elseif (value & 0xFFFF8000) == 0xFFFF8000 734 | addiu dest,r0,value & 0xFFFF 735 | .elseif (value & 0xFFFF) == 0 736 | lui dest,value >> 16 737 | .else 738 | lui dest,value >> 16 + (value & 0x8000 != 0) 739 | addiu dest,dest,value & 0xFFFF 740 | .endif 741 | .endmacro 742 | 743 | The macro has to be initiated by a .macro directive. The 744 | first argument is the macro name, followed by a variable 745 | amount of arguments. The code inside the macro can be 746 | anything, and it can even call other macros (up to a nesting 747 | level of 128 calls). The macro is terminated by a .endmacro 748 | directive. It is not assembled when it is defined, but other 749 | code can call it from now on. All arguments are simple text 750 | replacements, so they can be anything from a number to a 751 | whole instruction parameter list. 752 | The macro is then called like this: 753 | 754 | myli a0,0xFFEEDDCC 755 | 756 | This code will, in this case, assemble to the following: 757 | 758 | lui a0,0xFFEF 759 | addiu a0,a0,0xDDCC 760 | 761 | The user can define a theoretically infinite amount of 762 | macros. Like all the other code, any equs are inserted 763 | before they are resolved. 764 | 765 | With the latest revision, macros can also contain local 766 | labels that are changed to an unique name. Global labels, 767 | however, are uneffected by this. The label name is prefixed 768 | by the macro name and a counter id. This label: 769 | 770 | .macro test 771 | @@MainLoop: 772 | .endmacro 773 | 774 | will therefore be changed to: 775 | 776 | @@test_00000000_mainloop 777 | 778 | Each call of the macro will increase the counter. 779 | 780 | 781 | ################################# 782 | # 6. KNOWN ISSUES # 783 | ################################# 784 | 785 | -the last line of any file has to be empty, otherwise 786 | it is ignored due to limitations in the code 787 | -the load delay check can't detect if an opcode is inside 788 | a delay slot, and if it will be used by the first 789 | instruction of the branch destination 790 | 791 | -------------------------------------------------------------------------------- /script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation_files/urchin.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | /* 7 | FILE ARCHIVED ON 5:37:04 Dec 21, 2008 AND RETRIEVED FROM THE 8 | INTERNET ARCHIVE ON 2:04:43 Feb 29, 2012. 9 | JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE. 10 | 11 | ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C. 12 | SECTION 108(a)(3)). 13 | */ 14 | //-- Google Analytics Urchin Module 15 | //-- Copyright 2007 Google, All Rights Reserved. 16 | 17 | //-- Urchin On Demand Settings ONLY 18 | var _uacct=""; // set up the Urchin Account 19 | var _userv=1; // service mode (0=local,1=remote,2=both) 20 | 21 | //-- UTM User Settings 22 | var _ufsc=1; // set client info flag (1=on|0=off) 23 | var _udn="auto"; // (auto|none|domain) set the domain name for cookies 24 | var _uhash="on"; // (on|off) unique domain hash for cookies 25 | var _utimeout="1800"; // set the inactive session timeout in seconds 26 | var _ugifpath="/__utm.gif"; // set the web path to the __utm.gif file 27 | var _utsp="|"; // transaction field separator 28 | var _uflash=1; // set flash version detect option (1=on|0=off) 29 | var _utitle=1; // set the document title detect option (1=on|0=off) 30 | var _ulink=0; // enable linker functionality (1=on|0=off) 31 | var _uanchor=0; // enable use of anchors for campaign (1=on|0=off) 32 | var _utcp="/"; // the cookie path for tracking 33 | var _usample=100; // The sampling % of visitors to track (1-100). 34 | 35 | //-- UTM Campaign Tracking Settings 36 | var _uctm=1; // set campaign tracking module (1=on|0=off) 37 | var _ucto="15768000"; // set timeout in seconds (6 month default) 38 | var _uccn="utm_campaign"; // name 39 | var _ucmd="utm_medium"; // medium (cpc|cpm|link|email|organic) 40 | var _ucsr="utm_source"; // source 41 | var _uctr="utm_term"; // term/keyword 42 | var _ucct="utm_content"; // content 43 | var _ucid="utm_id"; // id number 44 | var _ucno="utm_nooverride"; // don't override 45 | 46 | //-- Auto/Organic Sources and Keywords 47 | var _uOsr=new Array(); 48 | var _uOkw=new Array(); 49 | _uOsr[0]="google"; _uOkw[0]="q"; 50 | _uOsr[1]="yahoo"; _uOkw[1]="p"; 51 | _uOsr[2]="msn"; _uOkw[2]="q"; 52 | _uOsr[3]="aol"; _uOkw[3]="query"; 53 | _uOsr[4]="aol"; _uOkw[4]="encquery"; 54 | _uOsr[5]="lycos"; _uOkw[5]="query"; 55 | _uOsr[6]="ask"; _uOkw[6]="q"; 56 | _uOsr[7]="altavista"; _uOkw[7]="q"; 57 | _uOsr[8]="netscape"; _uOkw[8]="query"; 58 | _uOsr[9]="cnn"; _uOkw[9]="query"; 59 | _uOsr[10]="looksmart"; _uOkw[10]="qt"; 60 | _uOsr[11]="about"; _uOkw[11]="terms"; 61 | _uOsr[12]="mamma"; _uOkw[12]="query"; 62 | _uOsr[13]="alltheweb"; _uOkw[13]="q"; 63 | _uOsr[14]="gigablast"; _uOkw[14]="q"; 64 | _uOsr[15]="voila"; _uOkw[15]="rdata"; 65 | _uOsr[16]="virgilio"; _uOkw[16]="qs"; 66 | _uOsr[17]="live"; _uOkw[17]="q"; 67 | _uOsr[18]="baidu"; _uOkw[18]="wd"; 68 | _uOsr[19]="alice"; _uOkw[19]="qs"; 69 | _uOsr[20]="yandex"; _uOkw[20]="text"; 70 | _uOsr[21]="najdi"; _uOkw[21]="q"; 71 | _uOsr[22]="aol"; _uOkw[22]="q"; 72 | _uOsr[23]="club-internet"; _uOkw[23]="query"; 73 | _uOsr[24]="mama"; _uOkw[24]="query"; 74 | _uOsr[25]="seznam"; _uOkw[25]="q"; 75 | _uOsr[26]="search"; _uOkw[26]="q"; 76 | _uOsr[27]="wp"; _uOkw[27]="szukaj"; 77 | _uOsr[28]="onet"; _uOkw[28]="qt"; 78 | _uOsr[29]="netsprint"; _uOkw[29]="q"; 79 | _uOsr[30]="google.interia"; _uOkw[30]="q"; 80 | _uOsr[31]="szukacz"; _uOkw[31]="q"; 81 | _uOsr[32]="yam"; _uOkw[32]="k"; 82 | _uOsr[33]="pchome"; _uOkw[33]="q"; 83 | _uOsr[34]="kvasir"; _uOkw[34]="searchExpr"; 84 | _uOsr[35]="sesam"; _uOkw[35]="q"; 85 | _uOsr[36]="ozu"; _uOkw[36]="q"; 86 | _uOsr[37]="terra"; _uOkw[37]="query"; 87 | _uOsr[38]="nostrum"; _uOkw[38]="query"; 88 | _uOsr[39]="mynet"; _uOkw[39]="q"; 89 | _uOsr[40]="ekolay"; _uOkw[40]="q"; 90 | _uOsr[41]="search.ilse"; _uOkw[41]="search_for"; 91 | 92 | //-- Auto/Organic Keywords to Ignore 93 | var _uOno=new Array(); 94 | //_uOno[0]="urchin"; 95 | //_uOno[1]="urchin.com"; 96 | //_uOno[2]="www.urchin.com"; 97 | 98 | //-- Referral domains to Ignore 99 | var _uRno=new Array(); 100 | //_uRno[0]=".urchin.com"; 101 | 102 | //-- **** Don't modify below this point *** 103 | var _uff,_udh,_udt,_ubl=0,_udo="",_uu,_ufns=0,_uns=0,_ur="-",_ufno=0,_ust=0,_ubd=document,_udl=_ubd.location,_udlh="",_uwv="1.3"; 104 | var _ugifpath2="http://web.archive.org/web/20081221053704/http://www.google-analytics.com/__utm.gif"; 105 | if (_udl.hash) _udlh=_udl.href.substring(_udl.href.indexOf('#')); 106 | if (_udl.protocol=="https:") _ugifpath2="https://ssl.google-analytics.com/__utm.gif"; 107 | if (!_utcp || _utcp=="") _utcp="/"; 108 | function urchinTracker(page) { 109 | if (_udl.protocol=="file:") return; 110 | if (_uff && (!page || page=="")) return; 111 | var a,b,c,xx,v,z,k,x="",s="",f=0,nv=0; 112 | var nx=" expires="+_uNx()+";"; 113 | var dc=_ubd.cookie; 114 | _udh=_uDomain(); 115 | if (!_uVG()) return; 116 | _uu=Math.round(Math.random()*2147483647); 117 | _udt=new Date(); 118 | _ust=Math.round(_udt.getTime()/1000); 119 | a=dc.indexOf("__utma="+_udh+"."); 120 | b=dc.indexOf("__utmb="+_udh); 121 | c=dc.indexOf("__utmc="+_udh); 122 | if (_udn && _udn!="") { _udo=" domain="+_udn+";"; } 123 | if (_utimeout && _utimeout!="") { 124 | x=new Date(_udt.getTime()+(_utimeout*1000)); 125 | x=" expires="+x.toGMTString()+";"; 126 | } 127 | if (_ulink) { 128 | if (_uanchor && _udlh && _udlh!="") s=_udlh+"&"; 129 | s+=_udl.search; 130 | if(s && s!="" && s.indexOf("__utma=")>=0) { 131 | if (!(_uIN(a=_uGC(s,"__utma=","&")))) a="-"; 132 | if (!(_uIN(b=_uGC(s,"__utmb=","&")))) b="-"; 133 | if (!(_uIN(c=_uGC(s,"__utmc=","&")))) c="-"; 134 | v=_uGC(s,"__utmv=","&"); 135 | z=_uGC(s,"__utmz=","&"); 136 | k=_uGC(s,"__utmk=","&"); 137 | xx=_uGC(s,"__utmx=","&"); 138 | if ((k*1) != ((_uHash(a+b+c+xx+z+v)*1)+(_udh*1))) {_ubl=1;a="-";b="-";c="-";xx="-";z="-";v="-";} 139 | if (a!="-" && b!="-" && c!="-") f=1; 140 | else if(a!="-") f=2; 141 | } 142 | } 143 | if(f==1) { 144 | _ubd.cookie="__utma="+a+"; path="+_utcp+";"+nx+_udo; 145 | _ubd.cookie="__utmb="+b+"; path="+_utcp+";"+x+_udo; 146 | _ubd.cookie="__utmc="+c+"; path="+_utcp+";"+_udo; 147 | } else if (f==2) { 148 | a=_uFixA(s,"&",_ust); 149 | _ubd.cookie="__utma="+a+"; path="+_utcp+";"+nx+_udo; 150 | _ubd.cookie="__utmb="+_udh+"; path="+_utcp+";"+x+_udo; 151 | _ubd.cookie="__utmc="+_udh+"; path="+_utcp+";"+_udo; 152 | _ufns=1; 153 | } else if (a>=0 && b>=0 && c>=0) { 154 | b = _uGC(dc,"__utmb="+_udh,";"); 155 | b = ("-" == b) ? _udh : b; 156 | _ubd.cookie="__utmb="+b+"; path="+_utcp+";"+x+_udo; 157 | } else { 158 | if (a>=0) a=_uFixA(_ubd.cookie,";",_ust); 159 | else { 160 | a=_udh+"."+_uu+"."+_ust+"."+_ust+"."+_ust+".1"; 161 | nv=1; 162 | } 163 | _ubd.cookie="__utma="+a+"; path="+_utcp+";"+nx+_udo; 164 | _ubd.cookie="__utmb="+_udh+"; path="+_utcp+";"+x+_udo; 165 | _ubd.cookie="__utmc="+_udh+"; path="+_utcp+";"+_udo; 166 | _ufns=1; 167 | } 168 | if (_ulink && xx && xx!="" && xx!="-") { 169 | xx=_uUES(xx); 170 | if (xx.indexOf(";")==-1) _ubd.cookie="__utmx="+xx+"; path="+_utcp+";"+nx+_udo; 171 | } 172 | if (_ulink && v && v!="" && v!="-") { 173 | v=_uUES(v); 174 | if (v.indexOf(";")==-1) _ubd.cookie="__utmv="+v+"; path="+_utcp+";"+nx+_udo; 175 | } 176 | var wc=window; 177 | var c=_ubd.cookie; 178 | if(wc && wc.gaGlobal && wc.gaGlobal.dh==_udh){ 179 | var g=wc.gaGlobal; 180 | var ua=c.split("__utma="+_udh+".")[1].split(";")[0].split("."); 181 | if(g.sid)ua[3]=g.sid; 182 | if(nv>0){ 183 | ua[2]=ua[3]; 184 | if(g.vid){ 185 | var v=g.vid.split("."); 186 | ua[0]=v[0]; 187 | ua[1]=v[1]; 188 | } 189 | } 190 | _ubd.cookie="__utma="+_udh+"."+ua.join(".")+"; path="+_utcp+";"+nx+_udo; 191 | } 192 | _uInfo(page); 193 | _ufns=0; 194 | _ufno=0; 195 | if (!page || page=="") _uff=1; 196 | } 197 | function _uGH() { 198 | var hid; 199 | var wc=window; 200 | if (wc && wc.gaGlobal && wc.gaGlobal.hid) { 201 | hid=wc.gaGlobal.hid; 202 | } else { 203 | hid=Math.round(Math.random()*0x7fffffff); 204 | if (!wc.gaGlobal) wc.gaGlobal={}; 205 | wc.gaGlobal.hid=hid; 206 | } 207 | return hid; 208 | } 209 | function _uInfo(page) { 210 | var p,s="",dm="",pg=_udl.pathname+_udl.search; 211 | if (page && page!="") pg=_uES(page,1); 212 | _ur=_ubd.referrer; 213 | if (!_ur || _ur=="") { _ur="-"; } 214 | else { 215 | dm=_ubd.domain; 216 | if(_utcp && _utcp!="/") dm+=_utcp; 217 | p=_ur.indexOf(dm); 218 | if ((p>=0) && (p<=8)) { _ur="0"; } 219 | if (_ur.indexOf("[")==0 && _ur.lastIndexOf("]")==(_ur.length-1)) { _ur="-"; } 220 | } 221 | s+="&utmn="+_uu; 222 | if (_ufsc) s+=_uBInfo(); 223 | if (_uctm) s+=_uCInfo(); 224 | if (_utitle && _ubd.title && _ubd.title!="") s+="&utmdt="+_uES(_ubd.title); 225 | if (_udl.hostname && _udl.hostname!="") s+="&utmhn="+_uES(_udl.hostname); 226 | if (_usample && _usample != 100) s+="&utmsp="+_uES(_usample); 227 | s+="&utmhid="+_uGH(); 228 | s+="&utmr="+_ur; 229 | s+="&utmp="+pg; 230 | if ((_userv==0 || _userv==2) && _uSP()) { 231 | var i=new Image(1,1); 232 | i.src=_ugifpath+"?"+"utmwv="+_uwv+s; 233 | i.onload=function() { _uVoid(); } 234 | } 235 | if ((_userv==1 || _userv==2) && _uSP()) { 236 | var i2=new Image(1,1); 237 | i2.src=_ugifpath2+"?"+"utmwv="+_uwv+s+"&utmac="+_uacct+"&utmcc="+_uGCS(); 238 | i2.onload=function() { _uVoid(); } 239 | } 240 | return; 241 | } 242 | function _uVoid() { return; } 243 | function _uCInfo() { 244 | if (!_ucto || _ucto=="") { _ucto="15768000"; } 245 | if (!_uVG()) return; 246 | var c="",t="-",t2="-",t3="-",o=0,cs=0,cn=0,i=0,z="-",s=""; 247 | if (_uanchor && _udlh && _udlh!="") s=_udlh+"&"; 248 | s+=_udl.search; 249 | var x=new Date(_udt.getTime()+(_ucto*1000)); 250 | var dc=_ubd.cookie; 251 | x=" expires="+x.toGMTString()+";"; 252 | if (_ulink && !_ubl) { 253 | z=_uUES(_uGC(s,"__utmz=","&")); 254 | if (z!="-" && z.indexOf(";")==-1) { _ubd.cookie="__utmz="+z+"; path="+_utcp+";"+x+_udo; return ""; } 255 | } 256 | z=dc.indexOf("__utmz="+_udh+"."); 257 | if (z>-1) { z=_uGC(dc,"__utmz="+_udh+".",";"); } 258 | else { z="-"; } 259 | t=_uGC(s,_ucid+"=","&"); 260 | t2=_uGC(s,_ucsr+"=","&"); 261 | t3=_uGC(s,"gclid=","&"); 262 | if ((t!="-" && t!="") || (t2!="-" && t2!="") || (t3!="-" && t3!="")) { 263 | if (t!="-" && t!="") c+="utmcid="+_uEC(t); 264 | if (t2!="-" && t2!="") { if (c != "") c+="|"; c+="utmcsr="+_uEC(t2); } 265 | if (t3!="-" && t3!="") { if (c != "") c+="|"; c+="utmgclid="+_uEC(t3); } 266 | t=_uGC(s,_uccn+"=","&"); 267 | if (t!="-" && t!="") c+="|utmccn="+_uEC(t); 268 | else c+="|utmccn=(not+set)"; 269 | t=_uGC(s,_ucmd+"=","&"); 270 | if (t!="-" && t!="") c+="|utmcmd="+_uEC(t); 271 | else c+="|utmcmd=(not+set)"; 272 | t=_uGC(s,_uctr+"=","&"); 273 | if (t!="-" && t!="") c+="|utmctr="+_uEC(t); 274 | else { t=_uOrg(1); if (t!="-" && t!="") c+="|utmctr="+_uEC(t); } 275 | t=_uGC(s,_ucct+"=","&"); 276 | if (t!="-" && t!="") c+="|utmcct="+_uEC(t); 277 | t=_uGC(s,_ucno+"=","&"); 278 | if (t=="1") o=1; 279 | if (z!="-" && o==1) return ""; 280 | } 281 | if (c=="-" || c=="") { c=_uOrg(); if (z!="-" && _ufno==1) return ""; } 282 | if (c=="-" || c=="") { if (_ufns==1) c=_uRef(); if (z!="-" && _ufno==1) return ""; } 283 | if (c=="-" || c=="") { 284 | if (z=="-" && _ufns==1) { c="utmccn=(direct)|utmcsr=(direct)|utmcmd=(none)"; } 285 | if (c=="-" || c=="") return ""; 286 | } 287 | if (z!="-") { 288 | i=z.indexOf("."); 289 | if (i>-1) i=z.indexOf(".",i+1); 290 | if (i>-1) i=z.indexOf(".",i+1); 291 | if (i>-1) i=z.indexOf(".",i+1); 292 | t=z.substring(i+1,z.length); 293 | if (t.toLowerCase()==c.toLowerCase()) cs=1; 294 | t=z.substring(0,i); 295 | if ((i=t.lastIndexOf(".")) > -1) { 296 | t=t.substring(i+1,t.length); 297 | cn=(t*1); 298 | } 299 | } 300 | if (cs==0 || _ufns==1) { 301 | t=_uGC(dc,"__utma="+_udh+".",";"); 302 | if ((i=t.lastIndexOf(".")) > 9) { 303 | _uns=t.substring(i+1,t.length); 304 | _uns=(_uns*1); 305 | } 306 | cn++; 307 | if (_uns==0) _uns=1; 308 | _ubd.cookie="__utmz="+_udh+"."+_ust+"."+_uns+"."+cn+"."+c+"; path="+_utcp+"; "+x+_udo; 309 | } 310 | if (cs==0 || _ufns==1) return "&utmcn=1"; 311 | else return "&utmcr=1"; 312 | } 313 | function _uRef() { 314 | if (_ur=="0" || _ur=="" || _ur=="-") return ""; 315 | var i=0,h,k,n; 316 | if ((i=_ur.indexOf("://"))<0 || _uGCse()) return ""; 317 | h=_ur.substring(i+3,_ur.length); 318 | if (h.indexOf("/") > -1) { 319 | k=h.substring(h.indexOf("/"),h.length); 320 | if (k.indexOf("?") > -1) k=k.substring(0,k.indexOf("?")); 321 | h=h.substring(0,h.indexOf("/")); 322 | } 323 | h=h.toLowerCase(); 324 | n=h; 325 | if ((i=n.indexOf(":")) > -1) n=n.substring(0,i); 326 | for (var ii=0;ii<_uRno.length;ii++) { 327 | if ((i=n.indexOf(_uRno[ii].toLowerCase())) > -1 && n.length==(i+_uRno[ii].length)) { _ufno=1; break; } 328 | } 329 | if (h.indexOf("www.")==0) h=h.substring(4,h.length); 330 | return "utmccn=(referral)|utmcsr="+_uEC(h)+"|"+"utmcct="+_uEC(k)+"|utmcmd=referral"; 331 | } 332 | function _uOrg(t) { 333 | if (_ur=="0" || _ur=="" || _ur=="-") return ""; 334 | var i=0,h,k; 335 | if ((i=_ur.indexOf("://"))<0 || _uGCse()) return ""; 336 | h=_ur.substring(i+3,_ur.length); 337 | if (h.indexOf("/") > -1) { 338 | h=h.substring(0,h.indexOf("/")); 339 | } 340 | for (var ii=0;ii<_uOsr.length;ii++) { 341 | if (h.toLowerCase().indexOf(_uOsr[ii].toLowerCase()) > -1) { 342 | if ((i=_ur.indexOf("?"+_uOkw[ii]+"=")) > -1 || (i=_ur.indexOf("&"+_uOkw[ii]+"=")) > -1) { 343 | k=_ur.substring(i+_uOkw[ii].length+2,_ur.length); 344 | if ((i=k.indexOf("&")) > -1) k=k.substring(0,i); 345 | for (var yy=0;yy<_uOno.length;yy++) { 346 | if (_uOno[yy].toLowerCase()==k.toLowerCase()) { _ufno=1; break; } 347 | } 348 | if (t) return _uEC(k); 349 | else return "utmccn=(organic)|utmcsr="+_uEC(_uOsr[ii])+"|"+"utmctr="+_uEC(k)+"|utmcmd=organic"; 350 | } 351 | } 352 | } 353 | return ""; 354 | } 355 | function _uGCse() { 356 | var h,p; 357 | h=p=_ur.split("://")[1]; 358 | if(h.indexOf("/")>-1) { 359 | h=h.split("/")[0]; 360 | p=p.substring(p.indexOf("/")+1,p.length); 361 | } 362 | if(p.indexOf("?")>-1) { 363 | p=p.split("?")[0]; 364 | } 365 | if(h.toLowerCase().indexOf("google")>-1) { 366 | if(_ur.indexOf("?q=")>-1 || _ur.indexOf("&q=")>-1) { 367 | if (p.toLowerCase().indexOf("cse")>-1) { 368 | return true; 369 | } 370 | } 371 | } 372 | } 373 | function _uBInfo() { 374 | var sr="-",sc="-",ul="-",fl="-",cs="-",je=1; 375 | var n=navigator; 376 | if (self.screen) { 377 | sr=screen.width+"x"+screen.height; 378 | sc=screen.colorDepth+"-bit"; 379 | } else if (self.java) { 380 | var j=java.awt.Toolkit.getDefaultToolkit(); 381 | var s=j.getScreenSize(); 382 | sr=s.width+"x"+s.height; 383 | } 384 | if (n.language) { ul=n.language.toLowerCase(); } 385 | else if (n.browserLanguage) { ul=n.browserLanguage.toLowerCase(); } 386 | je=n.javaEnabled()?1:0; 387 | if (_uflash) fl=_uFlash(); 388 | if (_ubd.characterSet) cs=_uES(_ubd.characterSet); 389 | else if (_ubd.charset) cs=_uES(_ubd.charset); 390 | return "&utmcs="+cs+"&utmsr="+sr+"&utmsc="+sc+"&utmul="+ul+"&utmje="+je+"&utmfl="+fl; 391 | } 392 | function __utmSetTrans() { 393 | var e; 394 | if (_ubd.getElementById) e=_ubd.getElementById("utmtrans"); 395 | else if (_ubd.utmform && _ubd.utmform.utmtrans) e=_ubd.utmform.utmtrans; 396 | if (!e) return; 397 | var l=e.value.split("UTM:"); 398 | var i,i2,c; 399 | if (_userv==0 || _userv==2) i=new Array(); 400 | if (_userv==1 || _userv==2) { i2=new Array(); c=_uGCS(); } 401 | 402 | for (var ii=0;ii -1) { 553 | i2=l.indexOf(s,i); if (i2 < 0) { i2=l.length; } 554 | c=l.substring((i+i3),i2); 555 | } 556 | return c; 557 | } 558 | function _uDomain() { 559 | if (!_udn || _udn=="" || _udn=="none") { _udn=""; return 1; } 560 | if (_udn=="auto") { 561 | var d=_ubd.domain; 562 | if (d.substring(0,4)=="www.") { 563 | d=d.substring(4,d.length); 564 | } 565 | _udn=d; 566 | } 567 | _udn = _udn.toLowerCase(); 568 | if (_uhash=="off") return 1; 569 | return _uHash(_udn); 570 | } 571 | function _uHash(d) { 572 | if (!d || d=="") return 1; 573 | var h=0,g=0; 574 | for (var i=d.length-1;i>=0;i--) { 575 | var c=parseInt(d.charCodeAt(i)); 576 | h=((h << 6) & 0xfffffff) + c + (c << 14); 577 | if ((g=h & 0xfe00000)!=0) h=(h ^ (g >> 21)); 578 | } 579 | return h; 580 | } 581 | function _uFixA(c,s,t) { 582 | if (!c || c=="" || !s || s=="" || !t || t=="") return "-"; 583 | var a=_uGC(c,"__utma="+_udh+".",s); 584 | var lt=0,i=0; 585 | if ((i=a.lastIndexOf(".")) > 9) { 586 | _uns=a.substring(i+1,a.length); 587 | _uns=(_uns*1)+1; 588 | a=a.substring(0,i); 589 | if ((i=a.lastIndexOf(".")) > 7) { 590 | lt=a.substring(i+1,a.length); 591 | a=a.substring(0,i); 592 | } 593 | if ((i=a.lastIndexOf(".")) > 5) { 594 | a=a.substring(0,i); 595 | } 596 | a+="."+lt+"."+t+"."+_uns; 597 | } 598 | return a; 599 | } 600 | function _uTrim(s) { 601 | if (!s || s=="") return ""; 602 | while ((s.charAt(0)==' ') || (s.charAt(0)=='\n') || (s.charAt(0,1)=='\r')) s=s.substring(1,s.length); 603 | while ((s.charAt(s.length-1)==' ') || (s.charAt(s.length-1)=='\n') || (s.charAt(s.length-1)=='\r')) s=s.substring(0,s.length-1); 604 | return s; 605 | } 606 | function _uEC(s) { 607 | var n=""; 608 | if (!s || s=="") return ""; 609 | for (var i=0;i0) r=a.substring(i+1,i2); else return ""; 617 | if ((i=a.indexOf(".",i2+1))>0) t=a.substring(i2+1,i); else return ""; 618 | if (f) { 619 | return r; 620 | } else { 621 | var c=new Array('A','B','C','D','E','F','G','H','J','K','L','M','N','P','R','S','T','U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9'); 622 | return c[r>>28&m]+c[r>>23&m]+c[r>>18&m]+c[r>>13&m]+"-"+c[r>>8&m]+c[r>>3&m]+c[((r&7)<<2)+(t>>30&3)]+c[t>>25&m]+c[t>>20&m]+"-"+c[t>>15&m]+c[t>>10&m]+c[t>>5&m]+c[t&m]; 623 | } 624 | } 625 | function _uIN(n) { 626 | if (!n) return false; 627 | for (var i=0;i"9") && (c!=".")) return false; 630 | } 631 | return true; 632 | } 633 | function _uES(s,u) { 634 | if (typeof(encodeURIComponent) == 'function') { 635 | if (u) return encodeURI(s); 636 | else return encodeURIComponent(s); 637 | } else { 638 | return escape(s); 639 | } 640 | } 641 | function _uUES(s) { 642 | if (typeof(decodeURIComponent) == 'function') { 643 | return decodeURIComponent(s); 644 | } else { 645 | return unescape(s); 646 | } 647 | } 648 | function _uVG() { 649 | if((_udn.indexOf("www.google.") == 0 || _udn.indexOf(".google.") == 0 || _udn.indexOf("google.") == 0) && _utcp=='/' && _udn.indexOf("google.org")==-1) { 650 | return false; 651 | } 652 | return true; 653 | } 654 | function _uSP() { 655 | var s=100; 656 | if (_usample) s=_usample; 657 | if(s>=100 || s<=0) return true; 658 | return ((__utmVisitorCode(1)%10000)<(s*100)); 659 | } 660 | function urchinPathCopy(p){ 661 | var d=document,nx,tx,sx,i,c,cs,t,h,o; 662 | cs=new Array("a","b","c","v","x","z"); 663 | h=_uDomain(); if (_udn && _udn!="") o=" domain="+_udn+";"; 664 | nx=_uNx()+";"; 665 | tx=new Date(); tx.setTime(tx.getTime()+(_utimeout*1000)); 666 | tx=tx.toGMTString()+";"; 667 | sx=new Date(); sx.setTime(sx.getTime()+(_ucto*1000)); 668 | sx=sx.toGMTString()+";"; 669 | for (i=0;i<6;i++){ 670 | t=" expires="; 671 | if (i==1) t+=tx; else if (i==2) t=""; else if (i==5) t+=sx; else t+=nx; 672 | c=_uGC(d.cookie,"__utm"+cs[i]+"="+h,";"); 673 | if (c!="-") d.cookie="__utm"+cs[i]+"="+c+"; path="+p+";"+t+o; 674 | } 675 | } 676 | function _uCO() { 677 | if (!_utk || _utk=="" || _utk.length<10) return; 678 | var d='www.google.com'; 679 | if (_utk.charAt(0)=='!') d='analytics.corp.google.com'; 680 | _ubd.cookie="GASO="+_utk+"; path="+_utcp+";"+_udo; 681 | var sc=document.createElement('script'); 682 | sc.type='text/javascript'; 683 | sc.id="_gasojs"; 684 | sc.src='https://'+d+'/analytics/reporting/overlay_js?gaso='+_utk+'&'+Math.random(); 685 | document.getElementsByTagName('head')[0].appendChild(sc); 686 | } 687 | function _uGT() { 688 | var h=location.hash, a; 689 | if (h && h!="" && h.indexOf("#gaso=")==0) { 690 | a=_uGC(h,"gaso=","&"); 691 | } else { 692 | a=_uGC(_ubd.cookie,"GASO=",";"); 693 | } 694 | return a; 695 | } 696 | var _utk=_uGT(); 697 | if (_utk && _utk!="" && _utk.length>10 && _utk.indexOf("=")==-1) { 698 | if (window.addEventListener) { 699 | window.addEventListener('load', _uCO, false); 700 | } else if (window.attachEvent) { 701 | window.attachEvent('onload', _uCO); 702 | } 703 | } 704 | 705 | function _uNx() { 706 | return (new Date((new Date()).getTime()+63072000000)).toGMTString(); 707 | } 708 | -------------------------------------------------------------------------------- /script/ntsc.uk translation/NTSC-uk Features Guru Logic Champ Translation.htm: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | NTSC-uk Features > Guru Logic Champ Translation 5 | 6 | 7 | 8 | 96 | 97 | 98 | 99 | 100 | 101 | 136 | 137 | 138 | 140 | 141 | 142 | 143 | 1866 | 1867 | 1868 |
102 | 103 | 104 | 105 | 108 | 109 |
106 | ntsc-uk montage 107 |
110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 |
Home·AboutUs·Forum·Features·Import/Tech·Portables·Misc·Microsoft·Nintendo·PC·Sony
135 |
139 | Blueroom
144 | 145 | 146 | 1836 | 1837 | 1862 | 1863 |
147 | 148 | 149 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 1825 | 1826 | 1827 | 1828 | 1829 | 1830 | 1833 | 1834 |
Guru Logic Champ Translation 150 | - by Sorrel Tilley
158 |
Guru Logic Champ 159 | 160 |
Translated from the Japanese by Sorrel 161 | Tilley 162 | 163 |
  164 | 165 |
Original Japanese title is guru roji 166 | champu, where guru is onomatopoeia for rotation, roji is 167 | short for ‘logic’, and champu is the name of the beaked blobs that 168 | populate the game. 169 | 170 |
  171 | 172 |
Back cover of the box 173 | 174 |
  175 | 176 |
Shoot, Suck, Turn, Complete the picture! 177 | 178 |
  179 | 180 |
Suddenly, a great disaster occurs! 181 | 182 |
“It’s terrible! Throughout the city, 183 | things are refusing to turn!” 184 | 185 |
The Champ Brothers “Champ 1 and 2” have 186 | risen to solve this problem, but what will be their fate… 187 | 188 |
  189 | 190 |
The game 191 | 192 |
  193 | 194 |
After pressing Start and choosing the story 195 | mode you will see the file screen: 196 | 197 | 198 | 199 |
Choose the file to play! 200 | 201 |
  202 | 203 |
FILE 1 204 | 205 |
Not yet played 206 | 207 |
  208 | 209 |
FILE 2 210 | 211 |
Not yet played 212 | 213 |
  214 | 215 |
Delete File 216 | 217 |
  218 | 219 |
If you have already created a file, 220 | selecting it will take you to the main game, otherwise you will see the name 221 | creation screen: 222 | 223 | 224 | 225 |
Create a name! 226 | 227 |
_ _ _ _ _  Confirm with Start Button 228 | 229 |
  230 | 231 |
a i u e o               ma mi mu me mo 232 | 233 |
ka ki ku ke ko      ya       yu        234 | yo 235 | 236 |
sa shi su se so    ra ri ru re ro 237 | 238 |
ta chi tsu te to    wa wo n  239 | 240 |
na ni nu ne no   small characters; tsu 241 | ya yu yo 242 | 243 |
ha hi fu he ho   small characters; a i u 244 | e o 245 | 246 |
  247 | 248 |
L 249 | AB                                                    KANA R 250 | 251 |
  252 | 253 |
Characters will first appear in hiragana, 254 | then in katakana if R is pressed, or the Roman alphabet if L is pressed. If you 255 | wish to spell your name using Japanese characters, katakana is traditional for 256 | foreign words. Press Start and you will see a confirmation message: 257 | 258 | 259 | 260 |
Is this alright? 261 | 262 |
Yeah 263 | 264 |
No way! 265 | 266 |
  267 | 268 |
Answering in the affirmative will return 269 | you to the file screen. If you leave the name field blank and press Start, your 270 | name will be set as ‘Champ’.The black screen with a Champ in the bottom right 271 | corner that pops up is a saving screen (the message simply says saving…). 272 | 273 | 274 | 275 |
Selecting Delete File and then choosing a 276 | file will present you with the following screen: 277 | 278 | 279 | 280 |
Is it alright to delete File ½? 281 | 282 |
Yeah 283 | 284 |
No way! 285 | 286 |
  287 | 288 |
A new game begins with the following 289 | cinematic: 290 | 291 |
  292 | 293 |
This is the city where the Champs live 294 | 295 |
Every day was peaceful and just like 296 | always, life was uneventful… 297 | 298 |
But then, one day… 299 | 300 |
Something appeared that would threaten 301 | the peace of this city 302 | 303 |
  304 | 305 |
“Something must be done! 306 | 307 |
It makes me sick just to see something 308 | that turns! 309 | 310 |
That’s why I’ve stuck to it and made all 311 | manner of inventions! 312 | 313 |
I changed TV channel controls and phone 314 | dials to push buttons! 315 | 316 |
When it came to planes, I switched from 317 | propellors to jets! 318 | 319 |
However, this city is surely still 320 | packed with turning things. 321 | 322 |
We are going to make a big crash! Now 323 | get out of here!” 324 | 325 |
  326 | 327 |
“It’s terrible! All through the city 328 | various things have stopped turning!” 329 | 330 |
  331 | 332 |
“Calm down, lad, leave it to them!” 333 | 334 |
  335 | 336 |
Th-That’s… 337 | 338 |
Controlling the sensational jar with 339 | overflowing friendship power… 340 | 341 |
The Champ Brothers! 342 | 343 |
  344 | 345 |
You will then see the rescue select screen. 346 | The building in the bottom left corner is labeled ‘Hakase’s Labo’, which means 347 | ‘Professor’s Lab’ and this functions as the options menu: 348 | 349 | 350 | 351 |
“You rang?” 352 | 353 |
Explanation of the Rules 354 | 355 |
“I will conduct an explanation of the 356 | rules” 357 | 358 |
Gallery 359 | 360 |
“You can view the cinematics you have 361 | seen up to now” 362 | 363 |
???? 364 | 365 |
“If you meet the requirements, you can 366 | choose this” 367 | 368 |
After completing all 335 puzzles the ???? 369 | option will change to 370 | 371 |
  372 | 373 |
Champ’s Bodyguard 374 | 375 |
“You can play the Champ’s Bodyguard!” 376 | 377 |
  378 | 379 |
Choosing ‘Explanation of the Rules” will 380 | take you to the next screen: 381 | 382 | 383 | 384 |
Explanation of the Operation 385 | 386 |
“I will teach the method of operation” 387 | 388 |
  389 | 390 |
Choose this option and you will be given 391 | the following explanation: 392 | 393 |
  394 | 395 |
“Well then, let’s explain the game, 396 | shall we? 397 | 398 |
With the D-pad you can move left and 399 | right 400 | 401 |
The L and R buttons rotate 402 | 403 |
The A button launches a block! 404 | 405 |
The B button sucks them back up 406 | 407 |
You can’t fire to places when there is 408 | nothing there, nor to a space right in front of you 409 | 410 |
The number of blocks is predetermined by 411 | the stage 412 | 413 |
It’s a shame, but if you have no blocks, 414 | you can’t fire 415 | 416 |
Send the blocks to the correct place… 417 | 418 |
…and create a picture the same as the 419 | one on the left 420 | 421 |
Oops! I forgot to mention… 422 | 423 |
If you place a block in the correct 424 | location, it will turn blue 425 | 426 |
If you place a block in the wrong 427 | location, it will turn red 428 | 429 |
The block’s colour can change 430 | 431 |
You remember it well, right? 432 | 433 |
That’s all for the game explanation 434 | 435 |
From here, let’s remember through 436 | practice” 437 | 438 |
  439 | 440 |
Holes and Rubber Walls 441 | 442 |
“I will teach you about holes and rubber 443 | walls” 444 | 445 |
  446 | 447 |
Choose this option and you will be given 448 | the following explanation: 449 | 450 |
  451 | 452 |
“This time I will explain about 453 | 454 |
“holes” and “rubber walls” 455 | 456 |
Please listen carefully 457 | 458 |
First, look here 459 | 460 |
Some holes have appeared here 461 | 462 |
Therefore you can’t place blocks on top 463 | of them 464 | 465 |
But blocks can pass over the top of the 466 | holes 467 | 468 |
Next is this wall 469 | 470 |
This wall is made of rubber 471 | 472 |
Therefore blocks will bounce right back 473 | 474 |
How was that? 475 | 476 |
Did you catch it all? 477 | 478 |
Well, if you try it, I’m sure you’ll 479 | understand 480 | 481 |
Anyway, take it easy!” 482 | 483 |
  484 | 485 |
Pushable Walls 486 | 487 |
“I will teach you about pushable walls” 488 | 489 |
  490 | 491 |
Choose this option and you will be given 492 | the following explanation: 493 | 494 |
  495 | 496 |
“Well then, let’s explain the final 497 | “pushable wall”, shall we? 498 | 499 |
Take a look at this 500 | 501 |
This is a pushable wall 502 | 503 |
If you throw a block at it, you can push 504 | it 505 | 506 |
If you throw a block when the pushable 507 | walls are lined up 508 | 509 |
The last wall in the row will move 510 | 511 |
If you throw a block when the pushable 512 | wall cannot move anymore 513 | 514 |
The block will come bouncing back 515 | 516 |
If you move a pushable wall into a 517 | corner 518 | 519 |
There will be nowhere else to push it 520 | 521 |
So be careful 522 | 523 |
That’s all for the pushable wall 524 | explanation 525 | 526 |
Well then, I wish you good luck 527 | 528 |
  529 | 530 |
Choosing the ‘Gallery’ option will take you 531 | to the following screen (cinematics appear in this menu after you first see 532 | them in the main game): 533 | 534 | 535 | 536 |
Opening 537 | 538 |
Rescue 01 Beginning 539 | 540 |
Rescue 01 Ending 541 | 542 |
Rescue 02 Beginning 543 | 544 |
Rescue 02 Ending 545 | 546 |
and so on until 547 | 548 |
Rescue 12 Ending 549 | 550 |
  551 | 552 |
Choosing the ‘Champ’s Bodyguard’ option 553 | will begin the mini-game which has the following explanatory screens between 554 | each round: 555 | 556 |
  557 | 558 |
Stage 1 559 | 560 |
Ninjas are trying to kill pretty little 561 | me. 562 | 563 |
Push “Up, down, left, right, and A” to 564 | cut down the ninjas that appear! 565 | 566 |
  567 | 568 |
Stage 2 569 | 570 |
You can’t see their forms, but ninjas 571 | are hidden inside the castle, 572 | 573 |
I’ll use my ESP, cut where I point! 574 | 575 |
  576 | 577 |
Stage 3 578 | 579 |
There are still ninjas hiding, 580 | 581 |
Chop them all down! 582 | 583 |
  584 | 585 |
Stage 4 586 | 587 |
What the!? 588 | 589 |
The smell of sweat is stinging my eyes! 590 | 591 |
Now there are armoured ninjas, you can’t 592 | knock them down with just one hit! 593 | 594 |
Stage 5 595 | 596 |
This boss ninja is tough! He keeps 597 | moving around! 598 | 599 |
You’ll have to cut him down with perfect 600 | timing! 601 | 602 |
  603 | 604 |
Playing the Main Game 605 | 606 |
  607 | 608 |
The In-game Pause Menu 609 | 610 | 611 | 612 |
Continue 613 | 614 |
Returns you to the game 615 | 616 |
  617 | 618 |
Interrupt 619 | 620 |
Selecting this will bring up a second menu; 621 | 622 |
Interrupt? 623 | 624 |
Yes 625 | 626 |
No 627 | 628 |
If you choose to interrupt the game, it 629 | will save the puzzle in its current state and you will be able to turn off the 630 | system and return to it next time you play. 631 | 632 |
  633 | 634 |
Undo 635 | 636 |
This option will undo your last move 637 | 638 |
  639 | 640 |
Retry 641 | 642 |
This option will reset the current puzzle 643 | and time counter 644 | 645 |
  646 | 647 |
Stage Select 648 | 649 |
This option will return you to the stage 650 | select screen 651 | 652 |
  653 | 654 |
Rescue 1 655 | 656 |
  657 | 658 |
Opening cinematic 659 | 660 |
  661 | 662 |
It’s terrible! The tap has no handle and 663 | won’t turn! 664 | 665 |
How am I going to quench my thirst now? 666 | Champs! 667 | 668 |
  669 | 670 |
1 Spinning Top 671 | 672 |
2 Seedling 673 | 674 |
3 Wineglass 675 | 676 |
4 Mandarin Orange 677 | 678 |
5 Baseball 679 | 680 |
6 Caterpillar 681 | 682 |
7 Pudding 683 | 684 |
8 Shuriken (throwing star) 685 | 686 |
9 Crow 687 | 688 |
10 Tap/Faucet Handle 689 | 690 |
  691 | 692 |
Rescue 2 693 | 694 |
  695 | 696 |
Opening cinematic 697 | 698 |
  699 | 700 |
It’s terrible! The toilet doorknob won’t 701 | turn! 702 | 703 |
I’m in a real bind now! Champs! 704 | 705 |
  706 | 707 |
1 Kitchen Knife 708 | 709 |
2 White Flower 710 | 711 |
3 CD 712 | 713 |
4 Person wearing glasses 714 | 715 |
5 Snail 716 | 717 |
6 Onsen (hot spring) Sign 718 | 719 |
7 Golf Green 720 | 721 |
8 Luxury Bag 722 | 723 |
9 Teatime 724 | 725 |
10 Mama’s in a rush 726 | 727 |
11 Cheesecake 728 | 729 |
12 Laughing person 730 | 731 |
13 Pinwheel 732 | 733 |
14 Clown 734 | 735 |
15 Toilet Key 736 | 737 |
  738 | 739 |
Rescue 3 740 | 741 |
  742 | 743 |
Opening cinematic 744 | 745 |
  746 | 747 |
It’s terrible! The extractor fan won’t 748 | turn! 749 | 750 |
Mama’s covered in smoke! Champs! 751 | 752 |
  753 | 754 |
1 Bone 755 | 756 |
2 Eek! The cheese is over here! 757 | 758 |
3 Holstein Cow 759 | 760 |
4 Tiger 761 | 762 |
5 Rabbit 763 | 764 |
6 Sea Horse 765 | 766 |
7 Snake 767 | 768 |
8 Horse Race 769 | 770 |
9 Ram 771 | 772 |
10 Grooming Monkey 773 | 774 |
11 Chicken 775 | 776 |
12 Frisbee – nice catch! 777 | 778 |
13 Wild Boar 779 | 780 |
14 Office Chair 781 | 782 |
15 Red nosed man 783 | 784 |
16 Alarm Clock 785 | 786 |
17 Spot-billed Duck 787 | 788 |
18 Plaster/Band-Aid 789 | 790 |
19 Vase on top of a table 791 | 792 |
20 Power Lead 793 | 794 |
  795 | 796 |
Rescue 4 797 | 798 |
  799 | 800 |
Opening cinematic 801 | 802 |
  803 | 804 |
It’s terrible! The jamjar’s lid won’t 805 | turn! 806 | 807 |
Skipping breakfast is bad for your 808 | health! Champs! 809 | 810 |
  811 | 812 |
1 Blood Test 813 | 814 |
2 Love Letter 815 | 816 |
3 Headlights 817 | 818 |
4 Park Streetlamp 819 | 820 |
5 Hot Tea 821 | 822 |
6 Hawk targeting its prey 823 | 824 |
7 Western 825 | 826 |
8 Drawing Pin/Thumbtack 827 | 828 |
9 Floppy Disk 829 | 830 |
10 Chequered Flag 831 | 832 |
11 Handcuffs 833 | 834 |
12 Strongman 835 | 836 |
13 Exclamation Mark 837 | 838 |
14 Wall Clock 839 | 840 |
15 Iron Dumbbell 841 | 842 |
  843 | 844 |
Rescue 5 845 | 846 |
  847 | 848 |
Opening cinematic 849 | 850 |
  851 | 852 |
“Rust! Rust! 853 | 854 |
I’m sticking rust to the steering 855 | wheels! RUST!” 856 | 857 |
  858 | 859 |
It’s terrible! Rust is sticking to the 860 | steering wheels and they won’t turn! 861 | 862 |
The cars can’t turn at the crossing like 863 | this! Champs! 864 | 865 |
  866 | 867 |
1 Road Sign 868 | 869 |
2 Tissue Paper 870 | 871 |
3 Norwegian Flag 872 | 873 |
4 Daimonji Bonfire (hillside bonfires to 874 | mark the end of the Bon festival) 875 | 876 |
5 Hero’s Sword 877 | 878 |
6 Red Lipstick 879 | 880 |
7 New Year’s Day Sunrise 881 | 882 |
8 Olympics 883 | 884 |
9 Headphones 885 | 886 |
10 Beginner Drivers’ Sign (Japanese 887 | L-plate) 888 | 889 |
11 Maple Leaf Sign (orange car sticker 890 | denoting that the driver is over the age of 75) 891 | 892 |
12 Korean Peninsula 893 | 894 |
13 Belt Buckle 895 | 896 |
14 Cactus 897 | 898 |
15 Silk Hat 899 | 900 |
16 Paperclip 901 | 902 |
17 Lemon 903 | 904 |
18 Hot Water Dispenser 905 | 906 |
19 Panda eating bamboo grass 907 | 908 |
20 File 909 | 910 |
  911 | 912 |
Rescue 6 913 | 914 |
  915 | 916 |
Opening cinematic 917 | 918 |
  919 | 920 |
It’s terrible! My hamster man can no 921 | longer spin in his wheel! 922 | 923 |
Do something! Champs! 924 | 925 |
  926 | 927 |
1 Doughnut 928 | 929 |
2 Tank 930 | 931 |
3 Dragonfly 932 | 933 |
4 Wind Chime 934 | 935 |
5 Haniwa (ancient Japanese terra-cotta 936 | figures) 937 | 938 |
6 Summer Tangerine 939 | 940 |
7 Skull 941 | 942 |
8 Strike! 943 | 944 |
9 Koala 945 | 946 |
10 Ladle 947 | 948 |
11 Valentine’s Day 949 | 950 |
12 Home Plate 951 | 952 |
13 Hot Air Balloon 953 | 954 |
14 I get the feeling this is a big tree 955 | 956 |
15 Wasp 957 | 958 |
16 Western clothes button 959 | 960 |
17 Make tomorrow a sunny day (from a 961 | Japanese nursery rhyme and game in which children make a tissue paper ghost and 962 | hang it from a window and ask it to bring good weather) 963 | 964 |
18 Shirt 965 | 966 |
19 Elephant enjoying his walk 967 | 968 |
20 Gourd 969 | 970 |
21 Kokeshi Doll (traditional folkcraft 971 | product) 972 | 973 |
22 Post Box 974 | 975 |
23 Arabian Camel 976 | 977 |
24 Red haired boy 978 | 979 |
25 Ice Cream 980 | 981 |
26 Scissors 982 | 983 |
27 Shrimp Tempura (battered shrimp) 984 | 985 |
28 Stainless Steel Flask 986 | 987 |
29 Brandy Glass 988 | 989 |
30 Spanner 990 | 991 |
  992 | 993 |
Rescue 7 994 | 995 |
  996 | 997 |
Opening cinematic 998 | 999 |
  1000 | 1001 |
It’s terrible! Not a single plate of 1002 | sushi is rolling over to us! 1003 | 1004 |
We’re wasting away! Champs! 1005 | 1006 |
  1007 | 1008 |
1 Aluminium Can 1009 | 1010 |
2 Collar with a bell 1011 | 1012 |
3 Lighthouse 1013 | 1014 |
4 Children crossing a bridge 1015 | 1016 |
5 Screw 1017 | 1018 |
6 Dropping 1019 | 1020 |
7 Hawfinch 1021 | 1022 |
8 Crocodile 1023 | 1024 |
9 Businessman who overslept 1025 | 1026 |
10 Dried Persimmon 1027 | 1028 |
11 Nappy/Diaper 1029 | 1030 |
12 Pencil 1031 | 1032 |
13 Surfing 1033 | 1034 |
14 Comb 1035 | 1036 |
15 Bomb 1037 | 1038 |
  1039 | 1040 |
Rescue 8 1041 | 1042 |
  1043 | 1044 |
Opening cinematic 1045 | 1046 |
  1047 | 1048 |
“Preparations are complete!” 1049 | 1050 |
  1051 | 1052 |
“Great! It’s time to stop the water 1053 | wheel! 1054 | 1055 |
This time, failure will not be forgiven!” 1056 | 1057 |
  1058 | 1059 |
It’s terrible! The city’s lights have 1060 | been cut off! 1061 | 1062 |
Turn the water wheel and bring back the 1063 | electricity! Champs! 1064 | 1065 |
  1066 | 1067 |
1 Penguin 1068 | 1069 |
2 Toy Hammer 1070 | 1071 |
3 Bowling Pin 1072 | 1073 |
4 Grapes 1074 | 1075 |
5 Ice Lolly 1076 | 1077 |
6 Dolphin 1078 | 1079 |
7 Fusuma (sliding paper door) 1080 | 1081 |
8 Firefly Light 1082 | 1083 |
9 One Yen Coin 1084 | 1085 |
10 Chestnut 1086 | 1087 |
11 Girl wearing blue clothes 1088 | 1089 |
12 Pre-stamped Postcard (issued by Japanese 1090 | post office) 1091 | 1092 |
13 Fish Bone 1093 | 1094 |
14 Soccer Ball 1095 | 1096 |
15 Diving Board 1097 | 1098 |
16 Persimmon 1099 | 1100 |
17 Hourglass 1101 | 1102 |
18 Widescreen TV 1103 | 1104 |
19 Saturn 1105 | 1106 |
20 Chest of drawers made of paulownia wood 1107 | 1108 |
21 Die 1109 | 1110 |
22 Watermelon Bust 1111 | 1112 |
23 Graded Scale 1113 | 1114 |
24 Guitar 1115 | 1116 |
25 Tabasco 1117 | 1118 |
  1119 | 1120 |
Rescue 9 1121 | 1122 |
  1123 | 1124 |
Opening cinematic 1125 | 1126 |
  1127 | 1128 |
It’s terrible! The space slug has 1129 | appeared! 1130 | 1131 |
My favourite ferris wheel won’t turn! 1132 | Champs! 1133 | 1134 |
  1135 | 1136 |
1 Pig 1137 | 1138 |
2 Yin and Yang 1139 | 1140 |
3 Traffic Signal 1141 | 1142 |
4 Laptop 1143 | 1144 |
5 Single Bed 1145 | 1146 |
6 Nigirizushi (sushi 1147 | made with toppings laid on hand-formed clumps of rice) 1148 | 1149 |
7 Basketball 1150 | 1151 |
8 Hundred Yen Coin 1152 | 1153 |
9 Mobile Phone Strap 1154 | 1155 |
10 Sofa 1156 | 1157 |
11 Sunfish 1158 | 1159 |
12 Apple 1160 | 1161 |
13 Coffee Cup 1162 | 1163 |
14 Leather Shoes 1164 | 1165 |
15 Red Flower 1166 | 1167 |
16 Vacuum Cleaner 1168 | 1169 |
17 Frying Pan 1170 | 1171 |
18 Cannon 1172 | 1173 |
19 Dustpan 1174 | 1175 |
20 Answer Phone 1176 | 1177 |
21 Stove 1178 | 1179 |
22 Canoe 1180 | 1181 |
23 Playing on a Super Famicom (Japanese 1182 | SNES) 1183 | 1184 |
24 Toothpaste 1185 | 1186 |
25 Tulip 1187 | 1188 |
26 Noumiso konekone Compile (Compile’s 1189 | company slogan, meaning roughly ‘Compile; Moulding Minds’) 1190 | 1191 |
27 Skydiving 1192 | 1193 |
28 Slot Machine 1194 | 1195 |
29 Dangling person 1196 | 1197 |
30 Salt 1198 | 1199 |
  1200 | 1201 |
Rescue 10 1202 | 1203 |
  1204 | 1205 |
Opening cinematic 1206 | 1207 |
  1208 | 1209 |
It’s terrible! My robot has frozen! 1210 | 1211 |
My pride and joy – my drill – will not 1212 | turn! Champs! 1213 | 1214 |
  1215 | 1216 |
1 Green Apple 1217 | 1218 |
2 Morning Glory 1219 | 1220 |
3 Sparkler 1221 | 1222 |
4 Earth 1223 | 1224 |
5 Key 1225 | 1226 |
6 Classic Rotary Telephone 1227 | 1228 |
7 Calculator 1229 | 1230 |
8 Standout person in the company 1231 | 1232 |
9 Pizza 1233 | 1234 |
10 Hair Dryer 1235 | 1236 |
11 Baby Bottle 1237 | 1238 |
12 Family Computer (Famicom, the Japanese 1239 | NES) 1240 | 1241 |
13 Rhinoceros Beetle 1242 | 1243 |
14 Paper Airplane 1244 | 1245 |
15 Dictionary 1246 | 1247 |
16 Ballboy 1248 | 1249 |
17 Electric Power Plant Sign 1250 | 1251 |
18 Coat Hanger 1252 | 1253 |
19 Green Chili Pepper 1254 | 1255 |
20 Sewing Machine 1256 | 1257 |
21 Horseshoe Crab 1258 | 1259 |
22 Duck 1260 | 1261 |
23 Spare Key 1262 | 1263 |
24 Teru Teru Bouzu (‘Shiny, shiny Buddhist 1264 | priest’ from the Japanese nursery rhyme ‘Make Tomorrow a Sunny Day’) 1265 | 1266 |
25 Darts 1267 | 1268 |
26 2 Hearts 1269 | 1270 |
27 Toast 1271 | 1272 |
28 Empty Can 1273 | 1274 |
29 Young Girl 1275 | 1276 |
30 Cumulonimbus Cloud 1277 | 1278 |
31 Soy Sauce 1279 | 1280 |
32 Milk 1281 | 1282 |
33 Bag 1283 | 1284 |
34 Black Pig 1285 | 1286 |
35 Little Brother 1287 | 1288 |
36 Noughts and Crosses 1289 | 1290 |
37 Camera 1291 | 1292 |
38 Tennis Ball 1293 | 1294 |
39 Strawberry 1295 | 1296 |
40 Match 1297 | 1298 |
  1299 | 1300 |
Closing cinematic 1301 | 1302 |
  1303 | 1304 |
Full marks for thrills, Robot Dentist! 1305 | 1306 |
  1307 | 1308 |
Rescue 11 1309 | 1310 |
  1311 | 1312 |
Opening cinematic 1313 | 1314 |
  1315 | 1316 |
It’s terrible! The clock isn’t moving! 1317 | 1318 |
There’ll be no 3 o’clock snack like 1319 | this! Champs! 1320 | 1321 |
  1322 | 1323 |
1 Corkscrew 1324 | 1325 |
2 Save me! 1326 | 1327 |
3 Billiard 1328 | 1329 |
4 Disposable Chopsticks 1330 | 1331 |
5 Oden (vegetables, fish dumplings, tofu 1332 | etc. stewed in soy soup) 1333 | 1334 |
6 Domestic Duck 1335 | 1336 |
7 Lunchbox made lovingly by one’s wife 1337 | 1338 |
8 Fork 1339 | 1340 |
9 Goldfish 1341 | 1342 |
10 Stoat 1343 | 1344 |
11 Bean 1345 | 1346 |
12 Shiitake Mushroom 1347 | 1348 |
13 Red dragonfly at sunset 1349 | 1350 |
14 Hungry Elephant 1351 | 1352 |
15 Telescope 1353 | 1354 |
16 Eel 1355 | 1356 |
17 Daruma Otoshi (traditional Japanese game 1357 | involving a doll in five pieces and a hammer) 1358 | 1359 |
18 Banana 1360 | 1361 |
19 Moon 1362 | 1363 |
20 Gyouza (Chinese dumpling) 1364 | 1365 |
21 Tin Can Phone 1366 | 1367 |
22 Stealth 1368 | 1369 |
23 Ear Pick 1370 | 1371 |
24 New Famicom (AV Famicom/Nes 2) 1372 | 1373 |
25 Strawberry Shortcake 1374 | 1375 |
26 Mackerel 1376 | 1377 |
27 Shinkansen (the bullet train) 1378 | 1379 |
28 Captured Alien 1380 | 1381 |
29 Gateball 1382 | 1383 |
30 Do 1384 | 1385 |
31 Ink Bottle 1386 | 1387 |
32 Butterfly 1388 | 1389 |
33 Judo 1390 | 1391 |
34 Tower of the Sun (artwork located at the 1392 | Expo Memorial Park, Osaka) 1393 | 1394 |
35 Electric Fan 1395 | 1396 |
36 Bicycle 1397 | 1398 |
37 Palette 1399 | 1400 |
38 Tree Frog 1401 | 1402 |
39 Helicopter 1403 | 1404 |
40 Milk Carton 1405 | 1406 |
41 Japan 1407 | 1408 |
42 Long-nosed person 1409 | 1410 |
43 Videotape 1411 | 1412 |
44 Mouse 1413 | 1414 |
45 Battery 1415 | 1416 |
  1417 | 1418 |
Rescue 12 1419 | 1420 |
  1421 | 1422 |
Opening cinematic 1423 | 1424 |
  1425 | 1426 |
“What the! 1427 | 1428 |
I never noticed! 1429 | 1430 |
Something so huge has been spinning round and round the whole time! 1431 | 1432 |
Woah! 1433 | 1434 |
I don’t feel good… 1435 | 1436 |
I… I have to stop it revolving immediately!” 1437 | 1438 |
  1439 | 1440 |
(Emergency news flash) 1441 | 1442 |
“It… It’s awful!” 1443 | 1444 |
  1445 | 1446 |
Relay: Location of the  mysterious stake 1447 | 1448 |
“It seems that someone has connected the earth to the moon!!” 1449 | 1450 |
  1451 | 1452 |
Illustration 1453 | 1454 |
“The earth has thus become unable to turn 1455 | 1456 |
  1457 | 1458 |
Can we just sit back and watch this happen?” 1459 | 1460 |
  1461 | 1462 |
It’s terrible! The earth has become unable to turn! 1463 | 1464 |
Save the earth with love and bravery! Champs! 1465 | 1466 |
  1467 | 1468 |
1 Fried egg 1469 | 1470 |
2 Ring 1471 | 1472 |
3 Bus 1473 | 1474 |
4 Field Horsetail 1475 | 1476 |
5 Striped Umderwear 1477 | 1478 |
6 Crested Ibis 1479 | 1480 |
7 Gameboy Advance 1481 | 1482 |
8 Golfer 1483 | 1484 |
9 Axe 1485 | 1486 |
10 Walrus 1487 | 1488 |
11 Jumper 1489 | 1490 |
12 Africa 1491 | 1492 |
13 Carp Streamer (carp-shaped wind sock flown to celebrate 1493 | Children’s Day in Japan) 1494 | 1495 |
14 Ace of Spades 1496 | 1497 |
15 Japanese Macaque 1498 | 1499 |
16 Hero’s Shield 1500 | 1501 |
17 Tadpole 1502 | 1503 |
18 Moai 1504 | 1505 |
19 Lovey-dovey 1506 | 1507 |
20 Nintendo Gamecube 1508 | 1509 |
21 Mermaid 1510 | 1511 |
22 Dwarf Banana 1512 | 1513 |
23 Ceremony of entering the sumo ring 1514 | 1515 |
24 Gentleman with a fitting moustache 1516 | 1517 |
25 Seductive woman 1518 | 1519 |
26 Swallow-tailed Butterfly 1520 | 1521 |
27 Lightbulb 1522 | 1523 |
28 Oil Drum 1524 | 1525 |
29 Pyramid 1526 | 1527 |
30 Shoot! 1528 | 1529 |
31 Golden Pavilion Temple 1530 | 1531 |
32 Table Tennis 1532 | 1533 |
33 Laughing Madame 1534 | 1535 |
34 Tree 1536 | 1537 |
35 Kettle 1538 | 1539 |
36 Peace 1540 | 1541 |
37 Digital Camera 1542 | 1543 |
38 Gameboy 1544 | 1545 |
39 Paper Fan 1546 | 1547 |
40 Clenched Fist 1548 | 1549 |
41 Briefs 1550 | 1551 |
42 Big Brother 1552 | 1553 |
43 Kind-hearted man 1554 | 1555 |
44 Plug Socket 1556 | 1557 |
45 Palm 1558 | 1559 |
46 Aki-no-Miyajima (Shrine Island, Hiroshima) 1560 | 1561 |
47 Hamburger 1562 | 1563 |
48 Boxing 1564 | 1565 |
49 Mobile Phone 1566 | 1567 |
50 Nail Puller 1568 | 1569 |
  1570 | 1571 |
Closing cinematic 1572 | 1573 |
  1574 | 1575 |
Relay: Location of the  mysterious stake 1576 | 1577 |
“Take a look at this chain! 1578 | 1579 |
The earth has thus become unable to turn 1580 | 1581 |
Can we just sit back and watch this happen? 1582 | 1583 |
Hang on! Someone is aproaching the chain! 1584 | 1585 |
Wait, that’s… could it be? 1586 | 1587 |
It’s the Champ Brothers! 1588 | 1589 |
Look! 1590 | 1591 |
The Champ Brothers have come to save us all again!” 1592 | 1593 |
  1594 | 1595 |
“Bwahahaha! 1596 | 1597 |
Doing something like that is absolutely useless! 1598 | 1599 |
That stake is connected straight to the bones of the earth! 1600 | 1601 |
It’s become totally irremovable! Gahahaha! 1602 | 1603 |
Without revolving, like this, the earth is reborn into a nice place 1604 | to live!” 1605 | 1606 |
  1607 | 1608 |
“W-What’s going on?” / what does he mean by that 1609 | 1610 |
Like this, the earth will surely stop turning 1611 | 1612 |
But this energy will drag the moon into the earth! 1613 | 1614 |
If the moon crashes into the earth, the world will… 1615 | 1616 |
The world will be destroyed!” 1617 | 1618 |
  1619 | 1620 |
“W-WHAT!? 1621 | 1622 |
Then… We’ll die too!? 1623 | 1624 |
I- I’m Sorry… 1625 | 1626 |
There is one way to save the earth… 1627 | 1628 |
Me… 1629 | 1630 |
Launch me from that jar! 1631 | 1632 |
My horns are even harder than the moon, they can do it 1633 | 1634 |
It’s the only way! 1635 | 1636 |
Destroy the moon! 1637 | 1638 |
It’s my fault it turned out like this… 1639 | 1640 |
It’s for the good of this lovely planet, I beg you! 1641 | 1642 |
  1643 | 1644 |
Damn! 1645 | 1646 |
If I’d only dieted more!” 1647 | 1648 |
  1649 | 1650 |
“Use my mouth!” 1651 | 1652 |
  1653 | 1654 |
“Brother! 1655 | 1656 |
If you do that, you’ll…” 1657 | 1658 |
  1659 | 1660 |
“It’s ok, let me do it!” 1661 | 1662 |
  1663 | 1664 |
“Brother? Brother!? 1665 | 1666 |
Brotherrrrrrrr!” 1667 | 1668 |
  1669 | 1670 |
“This… 1671 | 1672 |
This is how the earth will be saved…” 1673 | 1674 |
  1675 | 1676 |
Guru Logic Champ Staff 1677 | 1678 |
  1679 | 1680 |
Producer, Design, Plan 1681 | 1682 |
Kubotchi 1683 | 1684 |
  1685 | 1686 |
Director, Design, Plan 1687 | 1688 |
Yangu 1689 | 1690 |
  1691 | 1692 |
Programmer, Plan 1693 | 1694 |
Utchi- 1695 | 1696 |
  1697 | 1698 |
Sound Effects 1699 | 1700 |
Rinkou (Motion Brain Studio) 1701 | 1702 |
Nagata Daisuke (Motion Brain Studio) 1703 | 1704 |
  1705 | 1706 |
Voices 1707 | 1708 |
Nishimura 1709 | 1710 |
Kashihira Kayo 1711 | 1712 |
  1713 | 1714 |
Promotion 1715 | 1716 |
Kimutaku 1717 | 1718 |
Nishimura 1719 | 1720 |
Sawa Naoyuki 1721 | 1722 |
  1723 | 1724 |
Editorial Design 1725 | 1726 |
Kanio 1727 | 1728 |
  1729 | 1730 |
Special Thanks 1731 | 1732 |
MSY 1733 | 1734 |
Nara 1735 | 1736 |
DPP404 1737 | 1738 |
NbiNeko 1739 | 1740 |
Yonezou 1741 | 1742 |
Lavie 1743 | 1744 |
Sasara 1745 | 1746 |
Shimakata Junko (Aoni Production) 1747 | 1748 |
Hatayama Fumihito (Motion Brain Studio) 1749 | 1750 |
Kobayashi Satoshi (Motion Brain Studio) 1751 | 1752 |
All Compile Staff 1753 | 1754 |
  1755 | 1756 |
Production Company 1757 | 1758 |
Motion Brain Studio 1759 | 1760 |
  1761 | 1762 |
Executive Producer 1763 | 1764 |
Moo Niitani 1765 | 1766 |
  1767 | 1768 |
Compile 2001 1769 | 1770 |
  1771 | 1772 |
The End 1773 | 1774 |
  1775 | 1776 |
Rescue EX 1777 | 1778 |
  1779 | 1780 |
1 Champ (little brother) 1781 | 1782 |
2  Cool Jar 1783 | 1784 |
3 Champ (big brother) 1785 | 1786 |
4 Jogging man 1787 | 1788 |
5 Pom 1789 | 1790 |
6 Helen 1791 | 1792 |
7 Unimposing man 1793 | 1794 |
8 Rusty man (before) 1795 | 1796 |
9 Rusty man (after) 1797 | 1798 |
10 Hamster man 1799 | 1800 |
11 Ucchari man (senior apprentice) (ucchari is a sumo wrestling move 1801 | involving leaning back at the edge of the ring and swinging one’s opponent 1802 | around and out) 1803 | 1804 |
12 Dam man 1805 | 1806 |
13 Space Slug 1807 | 1808 |
14 Everybody Loves Cocco Man 1809 | 1810 |
15 Robot Dentist 1811 | 1812 |
16 Top Breeder 1813 | 1814 |
17 Battle Man (red) 1815 | 1816 |
18 Underling 1817 | 1818 |
19 Boss 1819 | 1820 |
20 Professor 1821 | 1822 |
            1823 | 1824 |
1831 | discuss Guru Logic Champ Translation feature on the NTSC-uk forums 1832 |
1835 |
1838 | 1839 | 1840 | 1841 | 1859 | 1860 |
1842 | 1843 | 1844 | 1845 | 1855 | 1856 |
1846 | 1847 | 1848 | 1852 | 1853 |
1849 | 1850 | 1851 |
1854 |
1857 | 1858 |
1861 |
1864 | 1865 |
1869 | 1870 | 1871 | 1872 | 1880 | 1881 |
All content is the property 1873 | of www.ntsc-uk.com
1874 |
You may not reproduce. 1875 | or alter any text or pictorial content on the site for any purpose without the 1876 | direct permission of the site owners and the respective writers. If you require 1877 | such authorisation, then contact the site webmaster.
1878 |
Copyright www.ntsc-uk.com 1879 | 2002-2008,
1882 | 1883 | 1884 | 1886 | 1890 | 1891 | 1892 | 1893 | 1894 | 1895 | 1896 | 1897 | 1898 | 1906 | --------------------------------------------------------------------------------