From 2e3299514a52199f406c85b0d5930477ae2a797c Mon Sep 17 00:00:00 2001 From: Nes370 Date: Tue, 16 Jul 2024 19:41:23 -0700 Subject: [PATCH] Added Logo and User input functions. --- .classpath | 7 +- .../gitea/nes/AudioExtractor$1.class | Bin 820 -> 893 bytes .../gitea/nes/AudioExtractor$2.class | Bin 820 -> 816 bytes .../gitea/nes/AudioExtractor$3.class | Bin 0 -> 820 bytes .../gitea/nes/AudioExtractor$4.class | Bin 0 -> 820 bytes bin/goblincave/gitea/nes/AudioExtractor.class | Bin 8832 -> 39838 bytes src/goblincave/gitea/nes/AudioExtractor.java | 1076 ++++++++++++++++- 7 files changed, 1077 insertions(+), 6 deletions(-) create mode 100644 bin/goblincave/gitea/nes/AudioExtractor$3.class create mode 100644 bin/goblincave/gitea/nes/AudioExtractor$4.class diff --git a/.classpath b/.classpath index 5f705dd..95e5a7c 100644 --- a/.classpath +++ b/.classpath @@ -1,8 +1,13 @@ - + + + + + + diff --git a/bin/goblincave/gitea/nes/AudioExtractor$1.class b/bin/goblincave/gitea/nes/AudioExtractor$1.class index f007380b2d4f330e3df695ecfaf13ce8f9931261..b028e080105f29354c9d62ffade0a50aa3038859 100644 GIT binary patch delta 288 zcmXAj%Syvw5Ju1ZNka)~Yb!{ojj7gqFJ3_O9Yi-3TuNFC7Hugud-v`nD_!{j-3XF} zpby|XDNgEQX3jA4eKYUQkK=y-etZEZ9KN~d;^!t&|Mtpdk!6n>f#6Q#=sr$H5`=j| z!S3{i<7{EoV=Y_A560Ki%VB(zJjzkA(2dpMESg+Iy}Lp3DaUq8Xgn=6N**2d)F3+{ zgh|^3$*JiYSxR0__|V5-=_|EXN~PkbRG%r&c_pR(Le8F9Go4#_njHkhr=VQ_*HNUT qojTB9J)0|Su&KUV$`(?^W?Rv)!>(4FCT;eWT*@+6D084;X#N3ynJa$) delta 215 zcmey%wuO!B)W2Q(7#J8V7<4vr`7w&J=p|+5aWM!pNb@krFvv18aHQs?OfF!QoxFz8 zbn-_=Qx-Kw2IYwY%0fI08Vs6@4D6{DB}IwJC5#LTlVg}<8KWjwG6gd+WKBNDBwy;m zz{J1|G@VOl8-tLL#5M-0H9#H{0}qg7V_*c5ISjl&QURihfscV7$OEcpkYkVs%X0zc n6oEQe7?gnGObp5lDnOcrL6t$BK?|&s5v&f#WY7j;CI(diSgaj- diff --git a/bin/goblincave/gitea/nes/AudioExtractor$2.class b/bin/goblincave/gitea/nes/AudioExtractor$2.class index d5456f9e47a3f28d8c576645e3ac7f4029308726..a5bab2e1218ab3ed6945b4cd632fd27026a1178d 100644 GIT binary patch delta 38 ucmdnOwt;Pf5)%hYL1Jw6a)ajp$V)2 delta 43 zcmdnMwuNnj5)(IjYDGy=VsZ&1gTiDjCRxU)$?ifjN5PjZFH`_F{u>Ig07TTq|rD_gbkQRZes;Eez9Eyt6o0C|(u2Q>-y@eme zrI%LXzz^t;su(9hu!2J)jmKlpJimF9tLq;>0ldbhj|M|;q?25#l%I)cB(30)5+>T7 zWK!>bvjtDBF4kW8@EC3%^D`dhT#cen$+1YSj~2s9c`9}EUgkpa6G7gJf}!>9`+xBX~`iAvn;JB6T8D z#^Usxwp>05yQ|V%8*1>Quw$M1ctK*^K)w)t3>bV-4W6OKG?iKr*rQD557~>po-rJ+a*G`%Bm44A5ZYKL=A}AGpg|LysTWs8hH;r StYd?A0cAOQ?t4krK<^hANW94a literal 0 HcmV?d00001 diff --git a/bin/goblincave/gitea/nes/AudioExtractor$4.class b/bin/goblincave/gitea/nes/AudioExtractor$4.class new file mode 100644 index 0000000000000000000000000000000000000000..3c5f2fa002bd33dedf400615edae7147afc024f2 GIT binary patch literal 820 zcma)4O>fgc5Ph4taq60Wq#t}kpbbq*RbMzD1tFoTs7R(9S{13cjlD{?a(9t;llDI# z{t1^}T8RTcfFFgJwT&QxLoLnD&hE_HH*fso=eO?wUSiuvjiEEtgG{P~Pee47R`5s( z6TKOyQtw^ZoF`W28!vo#42!3H!lR6R6wPe3u)dxYF(Y z3)941>Tlp(#{qK1w@cSgn{$zfH=dl7yO{rb$pvMkmJ~!7IWH!J!`K zi4&PJmZ#^m5 z6wz?7M5`;_C$KvCVEYQK)}1Td`$|!bDt;q;DG=IaR)s+Mc!b9VYCzPUP=$x5Mddm+ W$b0Bu6I-+kD9h1v-*d7WI==vkS-p4w literal 0 HcmV?d00001 diff --git a/bin/goblincave/gitea/nes/AudioExtractor.class b/bin/goblincave/gitea/nes/AudioExtractor.class index a37d8fb6368fd1be35d85eb969f606f8e0e15868..fbc439e13a731423a42a51df90822baaea9e93c2 100644 GIT binary patch literal 39838 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 diff --git a/src/goblincave/gitea/nes/AudioExtractor.java b/src/goblincave/gitea/nes/AudioExtractor.java index 5bba95d..a64aada 100644 --- a/src/goblincave/gitea/nes/AudioExtractor.java +++ b/src/goblincave/gitea/nes/AudioExtractor.java @@ -1,11 +1,13 @@ package goblincave.gitea.nes; +import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FilenameFilter; import java.io.IOException; +import java.io.InputStreamReader; import java.io.RandomAccessFile; import java.net.URISyntaxException; import java.nio.file.Files; @@ -13,9 +15,12 @@ import java.nio.file.Path; import java.util.LinkedHashMap; import java.util.Set; +import javaFlacEncoder.FLAC_FileEncoder; + import org.apache.commons.io.FilenameUtils; -import javaFlacEncoder.*; +import com.diogonunes.jcolor.Ansi; +import com.diogonunes.jcolor.Attribute; /** * Ridge Racer 6 Audio Extractor @@ -24,6 +29,13 @@ import javaFlacEncoder.*; */ public class AudioExtractor { + /** + * ANSI code to go up one line, followed by a carriage return. + * Useful for overwriting user input + */ + private final static String RETURN_UP = "\033[F\r"; + private final static String PALE_YELLOW = "\u001B[93m"; + /** * BIN files must first be extracted from game disk to use this program. * By default uses program directory for I/O and saves audio as WAV.
@@ -40,6 +52,154 @@ public class AudioExtractor { */ public static void main(String[] args) throws URISyntaxException { + System.out.println(Ansi.colorize(logoFormat("Ridge Racer 6"), Attribute.BRIGHT_RED_TEXT())); + System.out.println(Ansi.colorize(logoFormat("Audio Extractor", true, 8), Attribute.YELLOW_TEXT())); + System.out.println("Program:\tRidge Racer 6 Audio Extractor " + Ansi.colorize("v1.0", Attribute.BRIGHT_GREEN_TEXT()) + " by " + Ansi.colorize("Nes", Attribute.TEXT_COLOR(252, 42, 124))); + System.out.println("Repository:\t" + Ansi.colorize("https://gitea.goblincave.synology.me/Nes/RR6AudioExtractor", Attribute.CYAN_TEXT())); + + if(args.length > 0) { + System.out.println("Arguments\t:"); + for(int i = 0; i < args.length; i++) + System.out.print(Ansi.colorize(args[i] + ' ', Attribute.BRIGHT_GREEN_TEXT())); + } + + if(args.length == 0) { // no arguments provided + + // determine which operation to execute + + BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); + String prompt = "\n" + Ansi.colorize("Operations", Attribute.BRIGHT_YELLOW_TEXT(), Attribute.BOLD()) + ":\n" + + "- " + Ansi.colorize("Extract", Attribute.BRIGHT_RED_TEXT()) + " audio tracks from package\n" + + "- " + Ansi.colorize("Package", Attribute.YELLOW_TEXT()) + " audio tracks into package\n" + + "- " + Ansi.colorize("Patch", Attribute.BRIGHT_GREEN_TEXT()) + " audio track to loop indefinitely\n" + + "- " + Ansi.colorize("Print", Attribute.BRIGHT_BLUE_TEXT()) + " Ridge Racer 6 logo style ASCII text\n" + + "- " + Ansi.colorize("Exit", Attribute.BRIGHT_MAGENTA_TEXT()) + " program\n" + + "\nPlease select an operation:" + PALE_YELLOW + " "; + String input; + { + String[] values = {"extract", "package", "patch", "print", "exit"}; + input = retrieveInput(reader, prompt, values); + } + + int operation = -1; + switch(input.toLowerCase()) { + case "extract": + operation = 0; + System.out.println(RETURN_UP + Ansi.colorize("Please select an operation: ") + Ansi.colorize(input, Attribute.BRIGHT_RED_TEXT())); + break; + case "pack": + case "package": + operation = 1; + System.out.println(RETURN_UP + Ansi.colorize("Please select an operation: ") + Ansi.colorize(input, Attribute.YELLOW_TEXT())); + break; + case "patch": + operation = 2; + System.out.println(RETURN_UP + Ansi.colorize("Please select an operation: ") + Ansi.colorize(input, Attribute.BRIGHT_GREEN_TEXT())); + break; + case "logo": + case "print": + operation = 3; + System.out.println(RETURN_UP + Ansi.colorize("Please select an operation: ") + Ansi.colorize(input, Attribute.BRIGHT_BLUE_TEXT())); + break; + case "quit": + case "exit": + operation = 4; + System.out.println(RETURN_UP + Ansi.colorize("Please select an operation: ") + Ansi.colorize(input, Attribute.BRIGHT_MAGENTA_TEXT())); + break; + } + + switch(operation) { + case 0: // extract + // Determine package directory + File currentDir = new File(new File(AudioExtractor.class.getProtectionDomain().getCodeSource().getLocation().toURI()).getParent()); + boolean packDirFound = false; + do { + System.out.println(Ansi.colorize("\nPackage Directory:", Attribute.BOLD(), Attribute.CYAN_TEXT())); + System.out.println("- " + Ansi.colorize("Current", Attribute.BRIGHT_RED_TEXT()) + " directory:\t" + Ansi.colorize(currentDir.getPath(), Attribute.BRIGHT_CYAN_TEXT())); + + } while(!packDirFound); + break; + case 1: // pack + break; + case 2: // patch + break; + case 3: // print + prompt = "\nCommand parameters: " + Ansi.colorize("Print", Attribute.BRIGHT_BLUE_TEXT()) + Ansi.colorize(" [color]", Attribute.BRIGHT_YELLOW_TEXT()) + Ansi.colorize(" [message]", Attribute.BRIGHT_RED_TEXT()) + + "\n" + + "\n" + Ansi.colorize("Colors", Attribute.BRIGHT_YELLOW_TEXT(), Attribute.BOLD()) + ":" + + "\n- " + Ansi.colorize("Default", Attribute.CLEAR()) + + "\n- " + Ansi.colorize("Black", Attribute.BLACK_TEXT()) + ", " + Ansi.colorize("Gray", Attribute.BRIGHT_BLACK_TEXT()) + ", " + Ansi.colorize("White", Attribute.BRIGHT_WHITE_TEXT()) + + "\n- " + Ansi.colorize("Indigo", Attribute.TEXT_COLOR(0x7D, 0x1A, 0xFF)) + ", " + Ansi.colorize("Purple", Attribute.BRIGHT_MAGENTA_TEXT()) + ", " + Ansi.colorize("Violet", Attribute.TEXT_COLOR(0xEE, 0x82, 0xEE)) + + "\n- " + Ansi.colorize("Red", Attribute.RED_TEXT()) + ", " + Ansi.colorize("Cinnabar", Attribute.BRIGHT_RED_TEXT()) + ", " + Ansi.colorize("Pink", Attribute.TEXT_COLOR(0xFF, 0xC0, 0xCB)) + + "\n- " + Ansi.colorize("Orange", Attribute.TEXT_COLOR(0xFF, 0x68, 0x1F)) + ", " + Ansi.colorize("Gold", Attribute.YELLOW_TEXT()) + ", " + Ansi.colorize("Yellow", Attribute.TEXT_COLOR(0xFF, 0xEA, 0x00)) + + "\n- " + Ansi.colorize("Green", Attribute.BRIGHT_GREEN_TEXT()) + ", " + Ansi.colorize("Chartreuse", Attribute.TEXT_COLOR(0xD1, 0xEB, 0x27)) + ", " + Ansi.colorize("Beige", Attribute.BRIGHT_YELLOW_TEXT()) + + "\n- " + Ansi.colorize("Blue", Attribute.BRIGHT_BLUE_TEXT()) + ", " + Ansi.colorize("Teal", Attribute.TEXT_COLOR(0x00, 0x93, 0xCF)) + ", " + Ansi.colorize("Cyan", Attribute.BRIGHT_CYAN_TEXT()) + + "\n" + + "\n" + Ansi.colorize("Please select a color:") + PALE_YELLOW + " "; + String[] values = {"Default", "Black", "Gray", "White", + "Indigo", "Purple", "Violet", "Red", "Cinnabar", "Pink", + "Orange", "Gold", "Yellow", "Green", "Chartreuse", "Beige", + "Blue", "Teal", "Cyan"}; + input = retrieveInput(reader, prompt, values); + Attribute color = null; + switch(input.toLowerCase()) { + case "default": color = Attribute.CLEAR(); break; + case "black": color = Attribute.BLACK_TEXT(); break; + case "gray": color = Attribute.BRIGHT_BLACK_TEXT(); break; + case "white": color = Attribute.BRIGHT_WHITE_TEXT(); break; + case "indigo": color = Attribute.TEXT_COLOR(0x7D, 0x1A, 0xFF); break; + case "purple": color = Attribute.BRIGHT_MAGENTA_TEXT(); break; + case "violet": color = Attribute.TEXT_COLOR(0xEE, 0x82, 0xEE); break; + case "red": color = Attribute.RED_TEXT(); break; + case "cinnabar": color = Attribute.BRIGHT_RED_TEXT(); break; + case "pink": color = Attribute.TEXT_COLOR(0xFF, 0xC0, 0xCB); break; + case "green": color = Attribute.BRIGHT_GREEN_TEXT(); break; + case "chartreuse": color = Attribute.TEXT_COLOR(0xD1, 0xEB, 0x27); break; + case "beige": color = Attribute.BRIGHT_YELLOW_TEXT(); break; + case "blue": color = Attribute.BRIGHT_BLUE_TEXT(); break; + case "teal": color = Attribute.TEXT_COLOR(0x00, 0x93, 0xCF); break; + case "cyan": color = Attribute.BRIGHT_CYAN_TEXT(); break; + } + System.out.println(RETURN_UP + Ansi.colorize("Please select a color: ") + Ansi.colorize(input, color)); + break; + case 4: // exit + System.out.println("Program closed."); + System.exit(0); + break; + } + + } + System.exit(0); + + if(args.length > 0) { + switch(args[0]) { + + case "help": + if(args.length > 1) + switch(args[1]) { + case "extract": + + break; + case "pack": + break; + case "print": + break; + } + System.out.println("java -jar RR6AudioExtractor.jar [operation] [package] [extract] [option]"); + break; + + case "extract": + // TODO + break; + + case "pack": + // TODO + break; + + } + + } + // Confirm input/output mode boolean packMode = false; if(args.length > 0) @@ -80,13 +240,66 @@ public class AudioExtractor { } + /** + * Prompts the user for input and validates that the input matches one of the provided values. + * + * @param reader + * @param prompt + * @param values + * @return input + */ + private static String retrieveInput(BufferedReader reader, String prompt, String[] values) { + + String input = null; + boolean valid = false; + do { + System.out.print(prompt); + try { + input = reader.readLine(); + for(int i = 0; i < values.length; i++) + if(input.equalsIgnoreCase(values[i])) { + valid = true; + break; + } + if(!valid) + System.out.println(Ansi.colorize("Invalid selection.")); + } catch (IOException e) { + System.out.println(Ansi.colorize("Invalid selection.")); + } + } while(!valid); + + return input; + + } + private static void pack(File packDirectory, File extractDirectory) { - // 1. Compile list of WAV files in extracted directories - // 2. Check if pack files already exist in package directory - // 3. If pack file already exists, insert WAV files into existing file. - // 4. If pack file doesn't exist, create new file then insert WAV files. + // Identify extracted folders + File[] packages = new File(extractDirectory.toString()).listFiles(new FilenameFilter() { + public boolean accept(File dir, String name) { + return name.toLowerCase().startsWith("pack_") && !name.toLowerCase().endsWith(".bin"); + } + }); + + for(int i = 0; i < packages.length; i++) + System.out.println(packages[i].getName()); + for(File packDir : packages) { + + // 1. Compile list of WAV files in extracted directories + File[] audioTracks = new File(packDir.toString()).listFiles(new FilenameFilter() { + public boolean accept(File dir, String name) { + return name.toLowerCase().endsWith(".wav"); + } + }); + + // 2. Check if pack files already exist in package directory + File pack = new File(packDir.getPath() + ".bin"); + if(pack.exists()); + + // 3. If pack file already exists, insert WAV files into existing file. + // 4. If pack file doesn't exist, create new file then insert WAV files. + } // Hypothesis 1: Does Ridge Racer 6 use a predetermined address list for reading tracks from package? // Test 1: Try changing the address of a track and see if the game can handle it successfully. @@ -264,5 +477,858 @@ public class AudioExtractor { return tracklist; } + + /** + * Creates an ASCII logo in RR6 style using the provided text. + * Supports alphanumeric text with spaces only. + * + * @param text + * @param italicize logo + * @return logo formatted text + */ + public static String logoFormat(String text) { + return logoFormat(text, true, 10); + } + + /** + * Creates an ASCII logo in RR6 style using the provided text. + * Supports alphanumeric text with spaces only. + * + * @param text + * @param height + * @param italicize logo + * @return logo formatted text + */ + public static String logoFormat(String text, boolean italic, int height) { + + // Initialize logo lines + String[] logo = new String[10]; + for(int i = 0; i < logo.length; i++) + logo[i] = new String(); + + boolean spaced = false; + for(int i = 0; i < text.length(); i++) { + char c = text.charAt(i); + // Add space from previous character + if(i > 0) { + if(c != ' ' && c!= ':' && !spaced) { + for(int line = 0; line < logo.length - 1; line++) + logo[line] += " "; + logo[9] += "███"; + } + spaced = false; + } + + // Add character to logo + switch(c) { + + // Space + case ':': + case ' ': + for(int line = 0; line < logo.length; line++) + logo[line] += " "; + spaced = true; + break; + + // Numbers + case '0': + if(logo[0].length() > 0) + for(int x = 0; x < logo.length; x++) + logo[x] = logo[x].substring(0, logo[x].length() - 1); + logo[0] += " ██████████████████████ "; + logo[1] += "████████████████████████ "; + logo[2] += "████████ ████████ "; + logo[3] += "████████ ████████ "; + logo[4] += "████████ ████████ "; + logo[5] += "████████ ████████ "; + logo[6] += "████████ ████████ "; + logo[7] += "████████ ████████ "; + logo[8] += "████████████████████████ "; + logo[9] += " ██████████████████████ "; + spaced = true; + break; + case '1': + logo[0] += " ███████████████ "; + logo[1] += "████████████████ "; + logo[2] += " ████████ "; + logo[3] += " ████████ "; + logo[4] += " ████████ "; + logo[5] += " ████████ "; + logo[6] += " ████████ "; + logo[7] += " ████████ "; + logo[8] += " ████████ "; + logo[9] += " ████████ "; + spaced = true; + break; + case '2': + logo[0] += " ███████████████████████ "; + logo[1] += "████████████████████████ "; + logo[2] += "████████ ████████ "; + logo[3] += " ████████ "; + logo[4] += " ██████████████████████ "; + logo[5] += "████████████████████████ "; + logo[6] += "████████ "; + logo[7] += "████████ "; + logo[8] += "████████████████████████ "; + logo[9] += "███████████████████████ "; + spaced = true; + break; + case '3': + logo[0] += " ██████████████████████ "; + logo[1] += "████████████████████████ "; + logo[2] += "████████ ████████ "; + logo[3] += " ████████ "; + logo[4] += " ███████████████ "; + logo[5] += " ██████████████ "; + logo[6] += " ████████ "; + logo[7] += "████████ ████████ "; + logo[8] += "████████████████████████ "; + logo[9] += " ██████████████████████ "; + spaced = true; + break; + case '4': + logo[0] += " █████████████ "; + logo[1] += " ███████████████ "; + logo[2] += " ████ ██████ "; + logo[3] += " ██████ ██████ "; + logo[4] += " ███████████████████████ "; + logo[5] += "████████████████████████ "; + logo[6] += " ██████ "; + logo[7] += " ██████ "; + logo[8] += " ██████ "; + logo[9] += " ██████ "; + spaced = true; + break; + case '5': + logo[0] += " ███████████████████████ "; + logo[1] += "████████████████████████ "; + logo[2] += "████████ "; + logo[3] += "████████ "; + logo[4] += "████████████████████████ "; + logo[5] += "████████████████████████ "; + logo[6] += " ████████ "; + logo[7] += " ████████ "; + logo[8] += "████████████████████████ "; + logo[9] += "███████████████████████ "; + spaced = true; + break; + case '6': + logo[0] += " ███████████████████████ "; + logo[1] += "████████████████████████ "; + logo[2] += "████████ "; + logo[3] += "████████ "; + logo[4] += "████████████████████████ "; + logo[5] += "████████████████████████ "; + logo[6] += "████████ ████████ "; + logo[7] += "████████ ████████ "; + logo[8] += "████████████████████████ "; + logo[9] += "███████████████████████ "; + spaced = true; + break; + case '7': + logo[0] += " ███████████████████████ "; + logo[1] += "████████████████████████ "; + logo[2] += "████████ ████████ "; + logo[3] += " ████████ "; + logo[4] += " ████████ "; + logo[5] += " ████████ "; + logo[6] += " ████████ "; + logo[7] += " ████████ "; + logo[8] += " ████████ "; + logo[9] += " ████████ "; + spaced = true; + break; + case '8': + logo[0] += " ██████████████████████ "; + logo[1] += "████████████████████████ "; + logo[2] += "████████ ████████ "; + logo[3] += "████████ ████████ "; + logo[4] += " █████████████████████ "; + logo[5] += " █████████████████████ "; + logo[6] += "████████ ████████ "; + logo[7] += "████████ ████████ "; + logo[8] += "████████████████████████ "; + logo[9] += " ██████████████████████ "; + spaced = true; + break; + case '9': + logo[0] += " ██████████████████████ "; + logo[1] += "████████████████████████ "; + logo[2] += "████████ ████████ "; + logo[3] += "████████ ████████ "; + logo[4] += " ███████████████████████ "; + logo[5] += " █████████████████████ "; + logo[6] += " ████████ "; + logo[7] += " ████████ "; + logo[8] += " ████████ "; + logo[9] += " ████████ "; + spaced = true; + break; + + // Capital letters + case 'A': + logo[0] += " "; + logo[1] += " "; + logo[2] += "████████████"; + logo[3] += "████ ████"; + logo[4] += "████ ████"; + logo[5] += "████ ████"; + logo[6] += "████████████"; + logo[7] += "████ ████"; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'B': + logo[0] += " "; + logo[1] += " "; + logo[2] += "████████████"; + logo[3] += "████ ████"; + logo[4] += "████ ████"; + logo[5] += "███████████ "; + logo[6] += "████ ████"; + logo[7] += "████████████"; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'C': + logo[0] += " "; + logo[1] += " "; + logo[2] += "████████████"; + logo[3] += "████ "; + logo[4] += "████ "; + logo[5] += "████ "; + logo[6] += "████ "; + logo[7] += "████████████"; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'D': + logo[0] += " "; + logo[1] += " "; + logo[2] += "████████████"; + logo[3] += "████ ████"; + logo[4] += "████ ████"; + logo[5] += "████ ████"; + logo[6] += "████ ████"; + logo[7] += "████████████"; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'E': + logo[0] += " "; + logo[1] += " "; + logo[2] += "████████████"; + logo[3] += "████ "; + logo[4] += "████ "; + logo[5] += "████████████"; + logo[6] += "████ "; + logo[7] += "████████████"; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'F': + logo[0] += " "; + logo[1] += " "; + logo[2] += "████████████"; + logo[3] += "████ "; + logo[4] += "████ "; + logo[5] += "████████████"; + logo[6] += "████ "; + logo[7] += "████ "; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'G': + logo[0] += " "; + logo[1] += " "; + logo[2] += "████████████"; + logo[3] += "████ "; + logo[4] += "████ "; + logo[5] += "████ ██████"; + logo[6] += "████ ████"; + logo[7] += "████████████"; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'H': + logo[0] += " "; + logo[1] += " "; + logo[2] += "████ ████"; + logo[3] += "████ ████"; + logo[4] += "████ ████"; + logo[5] += "████████████"; + logo[6] += "████ ████"; + logo[7] += "████ ████"; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'I': + logo[0] += " "; + logo[1] += " "; + logo[2] += "████"; + logo[3] += "████"; + logo[4] += "████"; + logo[5] += "████"; + logo[6] += "████"; + logo[7] += "████"; + logo[8] += " "; + logo[9] += "████"; + break; + case 'J': + logo[0] += " "; + logo[1] += " "; + logo[2] += " ██████"; + logo[3] += " ████"; + logo[4] += " ████"; + logo[5] += " ████"; + logo[6] += " ████"; + logo[7] += "████████"; + logo[8] += " "; + logo[9] += "████████"; + break; + case 'K': + logo[0] += " "; + logo[1] += " "; + logo[2] += "████ ████ "; + logo[3] += "████ ████ "; + logo[4] += "████ ████ "; + logo[5] += "████ ████ "; + logo[6] += "████████ "; + logo[7] += "████ █████ "; + logo[8] += " █████"; + logo[9] += "███████ ███"; + spaced = true; + break; + case 'L': + logo[0] += " "; + logo[1] += " "; + logo[2] += "████ "; + logo[3] += "████ "; + logo[4] += "████ "; + logo[5] += "████ "; + logo[6] += "████ "; + logo[7] += "████████████"; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'M': + logo[0] += " "; + logo[1] += " "; + logo[2] += "████ ████"; + logo[3] += "██████ ██████"; + logo[4] += "████ ████ ████"; + logo[5] += "████ ████"; + logo[6] += "████ ████"; + logo[7] += "████ ████"; + logo[8] += " "; + logo[9] += "██████████████"; + break; + case 'N': + logo[0] += " "; + logo[1] += " "; + logo[2] += "████ ████"; + logo[3] += "██████ ████"; + logo[4] += "███████ ████"; + logo[5] += "████ ███████"; + logo[6] += "████ ██████"; + logo[7] += "████ ████"; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'O': + if(logo[0].length() > 0) + for(int x = 0; x < logo.length; x++) + logo[x] = logo[x].substring(0, logo[x].length() - 1); + logo[0] += " "; + logo[1] += " "; + logo[2] += " ██████████ "; + logo[3] += "████ ████"; + logo[4] += "████ ████"; + logo[5] += "████ ████"; + logo[6] += "████ ████"; + logo[7] += " ██████████ "; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'P': + logo[0] += " "; + logo[1] += " "; + logo[2] += "████████████"; + logo[3] += "████ ████"; + logo[4] += "████ ████"; + logo[5] += "████ ████"; + logo[6] += "████████████"; + logo[7] += "████ "; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'Q': + logo[0] += " "; + logo[1] += " "; + logo[2] += " ███████████ "; + logo[3] += "████ ████ "; + logo[4] += "████ ████ "; + logo[5] += "████ ████ "; + logo[6] += "████ ████ "; + logo[7] += "████████████ "; + logo[8] += " ████ "; + logo[9] += "█████████ ███"; + spaced = true; + break; + case 'R': + logo[0] += " "; + logo[1] += " "; + logo[2] += "████████████ "; + logo[3] += "████ ████ "; + logo[4] += "████ ████ "; + logo[5] += "████ ████ "; + logo[6] += "███████████ "; + logo[7] += "█████ █████ "; + logo[8] += " █████"; + logo[9] += "█████████ ███"; + spaced = true; + break; + case 'S': + logo[0] += " "; + logo[1] += " "; + logo[2] += "████████████"; + logo[3] += "████ ████"; + logo[4] += " ████ "; + logo[5] += " ████ "; + logo[6] += "████ ████"; + logo[7] += "████████████"; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'T': + logo[0] += " "; + logo[1] += " "; + logo[2] += "████████████"; + logo[3] += " ████ "; + logo[4] += " ████ "; + logo[5] += " ████ "; + logo[6] += " ████ "; + logo[7] += " ████ "; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'U': + logo[0] += " "; + logo[1] += " "; + logo[2] += "████ ████"; + logo[3] += "████ ████"; + logo[4] += "████ ████"; + logo[5] += "████ ████"; + logo[6] += "████ ████"; + logo[7] += "████████████"; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'V': + logo[0] += " "; + logo[1] += " "; + logo[2] += "████ ████"; + logo[3] += "████ ████"; + logo[4] += "████ ████"; + logo[5] += "████ ████"; + logo[6] += " ████████ "; + logo[7] += " ████ "; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'W': + logo[0] += " "; + logo[1] += " "; + logo[2] += "████ ████"; + logo[3] += "████ ████"; + logo[4] += "████ ████"; + logo[5] += "████ ████ ████"; + logo[6] += "██████ ██████"; + logo[7] += "████ ████"; + logo[8] += " "; + logo[9] += "██████████████"; + break; + case 'X': + logo[0] += " "; + logo[1] += " "; + logo[2] += "████ ████"; + logo[3] += "████ ████"; + logo[4] += " ████ ████ "; + logo[5] += " ████ "; + logo[6] += " ████ ████ "; + logo[7] += "████ ████"; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'Y': + logo[0] += " "; + logo[1] += " "; + logo[2] += "████ ████"; + logo[3] += "████ ████"; + logo[4] += " ████ ████ "; + logo[5] += " ████ "; + logo[6] += " ████ "; + logo[7] += " ████ "; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'Z': + logo[0] += " "; + logo[1] += " "; + logo[2] += "████████████"; + logo[3] += " ████"; + logo[4] += " ████ "; + logo[5] += " ████ "; + logo[6] += "████ "; + logo[7] += "████████████"; + logo[8] += " "; + logo[9] += "████████████"; + break; + + // Lowercase letters + case 'a': + logo[0] += " "; + logo[1] += " "; + logo[2] += " "; + logo[3] += " ███████████"; + logo[4] += "████ ████"; + logo[5] += "████ ████"; + logo[6] += "████████████"; + logo[7] += "████ ████"; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'b': + logo[0] += " "; + logo[1] += " "; + logo[2] += " "; + logo[3] += "████████████"; + logo[4] += "████ ████"; + logo[5] += "██████████ "; + logo[6] += "████ ████"; + logo[7] += "███████████ "; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'c': + logo[0] += " "; + logo[1] += " "; + logo[2] += " "; + logo[3] += " ███████████"; + logo[4] += "████ "; + logo[5] += "████ "; + logo[6] += "████ "; + logo[7] += "████████████"; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'd': + logo[0] += " "; + logo[1] += " "; + logo[2] += " "; + logo[3] += "████████████"; + logo[4] += "████ ████"; + logo[5] += "████ ████"; + logo[6] += "████ ████"; + logo[7] += "███████████ "; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'e': + logo[0] += " "; + logo[1] += " "; + logo[2] += " "; + logo[3] += " ███████████"; + logo[4] += "████ "; + logo[5] += "████████████"; + logo[6] += "████ "; + logo[7] += "████████████"; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'f': + logo[0] += " "; + logo[1] += " "; + logo[2] += " "; + logo[3] += " ███████████"; + logo[4] += "████ "; + logo[5] += "████████████"; + logo[6] += "████ "; + logo[7] += "████ "; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'g': + logo[0] += " "; + logo[1] += " "; + logo[2] += " "; + logo[3] += " ███████████"; + logo[4] += "████ "; + logo[5] += "████ ████"; + logo[6] += "████ ████"; + logo[7] += "███████████ "; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'h': + logo[0] += " "; + logo[1] += " "; + logo[2] += " "; + logo[3] += "████ ████"; + logo[4] += "████ ████"; + logo[5] += "████ ████"; + logo[6] += "████████████"; + logo[7] += "████ ████"; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'i': + logo[0] += " "; + logo[1] += " "; + logo[2] += " "; + logo[3] += "████"; + logo[4] += "████"; + logo[5] += "████"; + logo[6] += "████"; + logo[7] += "████"; + logo[8] += " "; + logo[9] += "████"; + break; + case 'j': + logo[0] += " "; + logo[1] += " "; + logo[2] += " "; + logo[3] += " ██████"; + logo[4] += " ████"; + logo[5] += " ████"; + logo[6] += " ████"; + logo[7] += "████████"; + logo[8] += " "; + logo[9] += "████████"; + break; + case 'k': + logo[0] += " "; + logo[1] += " "; + logo[2] += " "; + logo[3] += "████ ████"; + logo[4] += "████ ████ "; + logo[5] += "████████ "; + logo[6] += "████ ████ "; + logo[7] += "████ ████"; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'l': + logo[0] += " "; + logo[1] += " "; + logo[2] += " "; + logo[3] += "████ "; + logo[4] += "████ "; + logo[5] += "████ "; + logo[6] += "████ "; + logo[7] += "████████████"; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'm': + logo[0] += " "; + logo[1] += " "; + logo[2] += " "; + logo[3] += "████ █████"; + logo[4] += "█████ ██████"; + logo[5] += "████ ██ ████"; + logo[6] += "████ ████"; + logo[7] += "████ ████"; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'n': + logo[0] += " "; + logo[1] += " "; + logo[2] += " "; + logo[3] += "████ ████"; + logo[4] += "█████ ████"; + logo[5] += "████ ██ ████"; + logo[6] += "████ █████"; + logo[7] += "████ ████"; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'o': + if(logo[0].length() > 0) + for(int x = 0; x < logo.length; x++) + logo[x] = logo[x].substring(0, logo[x].length() - 1); + logo[0] += " "; + logo[1] += " "; + logo[2] += " "; + logo[3] += " ██████████ "; + logo[4] += "████ ████"; + logo[5] += "████ ████"; + logo[6] += "████ ████"; + logo[7] += " ██████████ "; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'p': + logo[0] += " "; + logo[1] += " "; + logo[2] += " "; + logo[3] += "████████████"; + logo[4] += "████ ████"; + logo[5] += "████ ████"; + logo[6] += "██████████ "; + logo[7] += "████ "; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'q': + logo[0] += " "; + logo[1] += " "; + logo[2] += " "; + logo[3] += " ███████████"; + logo[4] += "████ ████"; + logo[5] += "████ ████"; + logo[6] += " ██████████"; + logo[7] += " ████"; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'r': + logo[0] += " "; + logo[1] += " "; + logo[2] += " "; + logo[3] += "████████████"; + logo[4] += "████ ████"; + logo[5] += "████ ████"; + logo[6] += "██████████ "; + logo[7] += "████ ████"; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 's': + logo[0] += " "; + logo[1] += " "; + logo[2] += " "; + logo[3] += "████████████"; + logo[4] += "████ "; + logo[5] += " ████ "; + logo[6] += " ████"; + logo[7] += "████████████"; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 't': + if(logo[0].length() > 0) + for(int x = 0; x < logo.length; x++) + logo[x] = logo[x].substring(0, logo[x].length() - 1); + logo[0] += " "; + logo[1] += " "; + logo[2] += " "; + logo[3] += "████████████"; + logo[4] += " ████ "; + logo[5] += " ████ "; + logo[6] += " ████ "; + logo[7] += " ████ "; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'u': + logo[0] += " "; + logo[1] += " "; + logo[2] += " "; + logo[3] += "████ ████"; + logo[4] += "████ ████"; + logo[5] += "████ ████"; + logo[6] += "████ ████"; + logo[7] += "████████████"; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'v': + logo[0] += " "; + logo[1] += " "; + logo[2] += " "; + logo[3] += "████ ████"; + logo[4] += "████ ████"; + logo[5] += "████ ████"; + logo[6] += " ████ ████"; + logo[7] += " █████ "; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'w': + logo[0] += " "; + logo[1] += " "; + logo[2] += " "; + logo[3] += "███ ███ ███"; + logo[4] += "███ ███ ███"; + logo[5] += "███ ███ ███"; + logo[6] += " ██ ████ ███"; + logo[7] += " ████ ████ "; + logo[8] += " "; + logo[9] += "███████████████"; + break; + case 'x': + logo[0] += " "; + logo[1] += " "; + logo[2] += " "; + logo[3] += "████ ████"; + logo[4] += " ████ ████ "; + logo[5] += " ████ "; + logo[6] += " ████ ████ "; + logo[7] += "████ ████"; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'y': + logo[0] += " "; + logo[1] += " "; + logo[2] += " "; + logo[3] += "████ ████"; + logo[4] += " ████ ████ "; + logo[5] += " ████ "; + logo[6] += " ████ "; + logo[7] += " ████ "; + logo[8] += " "; + logo[9] += "████████████"; + break; + case 'z': + logo[0] += " "; + logo[1] += " "; + logo[2] += " "; + logo[3] += "████████████"; + logo[4] += " ████ "; + logo[5] += " ████ "; + logo[6] += " ████ "; + logo[7] += "████████████"; + logo[8] += " "; + logo[9] += "████████████"; + break; + default: + System.out.println("Unable to convert character '" + c + "'"); + break; + } + } + + // Italicize logo + if(italic) { + for(int i = 0; i < logo.length; i++) { + // i = 0 -> 9 + for(int x = logo.length - (i + 1); x > 0; x--) + // x = 10 - (i + 1) + logo[i] = " " + logo[i]; // line 0 gets 10 spaces, line 1 gets 9 spaces... line 9 gets 0 spaces + } + } + + // Compile logo into single text element + StringBuilder logoText = new StringBuilder(); + for(int i = logo.length - height; i < logo.length; i++) { + logoText.append(logo[i] + "\n"); + } + + return logoText.toString(); + + } + }