diff --git a/JavaFX.iml b/JavaFX.iml index ec5c9ee..e9d74f2 100644 --- a/JavaFX.iml +++ b/JavaFX.iml @@ -32,26 +32,5 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/README.md b/README.md index 4a9a485..c337eb0 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,11 @@ # Leendert Het spectaculaire tuinavontuur + +## Gemaakt door +* Mette Lejeune (afbeeldingen) +* Julius de Jeu (programmeren) +* Jelle Miltenburg (muziek) +* Marleen Peeters (afbeeldingen) +* Jesper de Wilde (programmeren en afbeeldingen) +* Nathan van der Kamp (programmeren) + diff --git a/pom.xml b/pom.xml index 2745552..672faeb 100644 --- a/pom.xml +++ b/pom.xml @@ -1,6 +1,6 @@ - 4.0.0 @@ -13,12 +13,41 @@ org.apache.maven.plugins maven-compiler-plugin - RELEASE + 3.6.1 1.8 1.8 + + org.apache.maven.plugins + maven-assembly-plugin + 2.4.1 + + + + jar-with-dependencies + + + + + nl.minkema.leendert.Main + + + + + + + make-assembly + + package + + single + + + + + diff --git a/src/main/java/nl/minkema/leendert/Dice.java b/src/main/java/nl/minkema/leendert/Dice.java index 436e5af..1a1171b 100644 --- a/src/main/java/nl/minkema/leendert/Dice.java +++ b/src/main/java/nl/minkema/leendert/Dice.java @@ -25,11 +25,19 @@ public class Dice extends Group { private Group dotPattern6 = new Group(); private Group klaver = new Group(); + /** + * Dit is de constructor van onze dobbelsteen + * De dobbelsteen is helemaal gemaakt met basisvormen door Nathan, daarna een beetje aangepast door Julius + * + * @param x de x-coördinaat van de dobbelsteen + * @param y de y-coördinaat van de dobbelsteen + */ public Dice(int x, int y) { this.r = new Random(System.currentTimeMillis()); this.setTranslateX(x); this.setTranslateY(y); + Ellipse mainEll = new Ellipse(50, 50, 40, 50); mainEll.setFill(Color.DARKRED); Ellipse headEll1 = new Ellipse(34, 11, 6, 4); @@ -136,13 +144,21 @@ public class Dice extends Group { roll(); } + /** + * @return Dit is de functie die het rollen van de dobbelsteen op zich neemt. + */ public int roll() { + //We willen een getal tussen 0 en 6 int roll = r.nextInt(6); + //We maken eerst de groep leeg this.getChildren().clear(); + //Als er 3 uit de roll komt, en we dus 4 zeggen, willen we een klavertje 4 laten zien if (roll == 3) { this.getChildren().add(klaver); } else { + //Maar anders gaan we voor een lieveheersbeestje this.getChildren().add(ladybah); + //Dit zijn alle afzonderlijke patronen switch (roll) { case 0: this.getChildren().add(dotPattern1); @@ -159,10 +175,12 @@ public class Dice extends Group { case 5: this.getChildren().add(dotPattern6); break; + //Dit zou wel heel bijzonder zijn default: System.out.println("Error drawing die"); } } + //En aan het eind nemen we de roll en tellen we er één bij op. return roll + 1; } diff --git a/src/main/java/nl/minkema/leendert/Game.java b/src/main/java/nl/minkema/leendert/Game.java index ab137cd..318eb72 100644 --- a/src/main/java/nl/minkema/leendert/Game.java +++ b/src/main/java/nl/minkema/leendert/Game.java @@ -5,11 +5,12 @@ import javafx.scene.control.Label; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.input.MouseEvent; +import javafx.scene.layout.Background; +import javafx.scene.layout.BackgroundFill; import javafx.scene.layout.Pane; import javafx.scene.media.Media; import javafx.scene.media.MediaPlayer; import javafx.scene.paint.Color; -import javafx.scene.shape.Circle; import javafx.scene.text.Text; import java.util.ArrayList; @@ -27,23 +28,31 @@ public class Game extends Pane { public static int[][] locations; public static ArrayList players = new ArrayList<>(); + /** + * De constructor voor de game + */ public Game() { + //We willen dat de volgorde van de spelers willekeurig is. Collections.shuffle(players); - Image bord = new Image("/images/KLAAR.png"); + //Dit is de achtergrond met het bord er op. + Image bord = new Image("/images/bord.png"); ImageView view = new ImageView(bord); - view.setPreserveRatio(true); view.setFitHeight(800); view.setX(0); view.setY(0); this.getChildren().add(view); + //Dit zorgt voor de nummers in de vakjes for (int i = 0, locationsLength = locations.length; i < locationsLength; i++) { int[] k = locations[i]; - getChildren().add(new Circle(k[0], k[1], 5, Color.RED)); - getChildren().add(new Text(k[0], k[1], String.valueOf(i))); + //getChildren().add(new Circle(k[0], k[1], 5, Color.RED)); + Text text = new Text(k[0] - 5, k[1] - 10, String.valueOf(i)); + text.setFill(Color.GREENYELLOW); + getChildren().add(text); } + //Dit was om de locaties van de vakjes te bepalen. this.setOnMouseClicked(new EventHandler() { int i = 0; @@ -52,12 +61,14 @@ public class Game extends Pane { //System.out.printf("%d: %d,%d%n", i++, (int) event.getSceneX(), (int) event.getSceneY()); } }); + //Dit is de afbeelding van de speler die mag gooien ImageView playerTurn = new ImageView(); playerTurn.setX(1000); playerTurn.setY(50); playerTurn.setPreserveRatio(true); playerTurn.setFitHeight(400); + //Hier staat de naam van het karaker in. Label l = new Label(); l.setTranslateX(965); l.setTranslateY(370); @@ -66,19 +77,31 @@ public class Game extends Pane { this.getChildren().add(playerTurn); this.getChildren().addAll(l); + //Dit is onze dobbelsteen Dice dice = new Dice(1100, 700); this.getChildren().add(dice); + //Dit is de knop van de dobbelsteen. this.getChildren().add(Menu.createButton("Gooi", 1100, 650, e -> { + //We kijken wie de volgende speler is Player p = players.get(Player.getNextActive()); + //En rollen een dobbelsteen int roll = dice.roll(); + //Dan verplaatsen we de speler p.move(roll); + //Als de speler 4 gooit mag hij/zij nog een keer if (roll == 4) Player.four(); + //We zoeken uit wie er hier na mag int next = players.get(Player.getNextActive()).getCh(); + //Zetten die afbeelding als de speler die mag gooien playerTurn.setImage(Menu.images[next]); + //En doen hetzelfde met de naam van de speler l.setText(Menu.names[next] + " is aan de beurt!"); + //En zetten het weer terug naar de vorige speler Player.four(); })); - //this.setBackground(new Background(new BackgroundFill(Color.RED, null, null))); + //Dit is de achtergrond + this.setBackground(new Background(new BackgroundFill(Color.GREENYELLOW, null, null))); + //Dit zijn alle spelers for (Player p : players) { this.getChildren().add(p.getImageView()); } @@ -86,6 +109,7 @@ public class Game extends Pane { playerTurn.setImage(Menu.images[players.get(1).getCh()]); l.setText(Menu.names[players.get(1).getCh()] + " is aan de beurt!"); + //En hier is de achtergrondmuziek, die het soms wel en soms niet doet... String loc = this.getClass().getResource("/music/game.mp3").toString(); Media music = new Media(loc); MediaPlayer menuplayer = new MediaPlayer(music); diff --git a/src/main/java/nl/minkema/leendert/Main.java b/src/main/java/nl/minkema/leendert/Main.java index c3594b9..0deb89d 100644 --- a/src/main/java/nl/minkema/leendert/Main.java +++ b/src/main/java/nl/minkema/leendert/Main.java @@ -14,13 +14,10 @@ import java.util.Properties; public class Main extends Application { public static Scene scene; - public static boolean memes = false; public static void main(String[] args) throws Exception { - for (String s : args) { - if (s.equals("-memes")) memes = true; - } + //Je kan properties best goed gebruiken om simpele lijsten in te laden Properties properties = new Properties(); properties.load(Main.class.getResourceAsStream("/text/locations.properties")); Game.locations = new int[properties.size()][2]; diff --git a/src/main/java/nl/minkema/leendert/Menu.java b/src/main/java/nl/minkema/leendert/Menu.java index beb955b..a283a2d 100644 --- a/src/main/java/nl/minkema/leendert/Menu.java +++ b/src/main/java/nl/minkema/leendert/Menu.java @@ -37,32 +37,42 @@ public class Menu extends Group { private ArrayList chosen = new ArrayList<>(); + + /** + * De constructor voor het menu + * + * @throws URISyntaxException als de achtergrondmuziek niet gevonden kan worden. + * @throws MalformedURLException gebeurt hopelijk niet... + */ public Menu() throws URISyntaxException, MalformedURLException { ArrayList nodes = new ArrayList<>(); - Image bg = new Image(ModLoader.getFile("/images/background.png")); + //achtergrondafbeelding + Image bg = new Image("/images/background.png"); ImageView view = new ImageView(bg); - + //zet de x en y naar de linker bovenhoek view.setX(0); view.setY(0); + //dit is om te zorgen dat de afbeelding past view.setFitHeight(850); view.setPreserveRatio(false); view.setFitWidth(1250); + nodes.add(view); + + //De achtergrondmuziek String loc = this.getClass().getResource("/music/menu.mp4").toString(); - //loc = new File("menu.mp4").toURI().toURL().toString(); - //loc = ModLoader.getFile("/music/menu.mp4"); Media music = new Media(loc); MediaPlayer menuplayer = new MediaPlayer(music); menuplayer.setCycleCount(Integer.MAX_VALUE); menuplayer.setVolume(0.6f); + //Dit deel is om te garanderen dat de muziek start, hoewel het soms toch niet werkt, iets met codecs enzo menuplayer.setAutoPlay(true); menuplayer.play(); menuplayer.play(); - nodes.add(view); - - + //De breedte van de afbeelding int imagewidth = 100; + //Een array met speler afbeeldingen images = new Image[]{ new Image("/svg/p1.svg", imagewidth, 0, true, false), new Image("/svg/p2.svg", imagewidth, 0, true, false), @@ -70,36 +80,50 @@ public class Menu extends Group { new Image("/svg/p4.svg", imagewidth, 0, true, false), new Image("/svg/p5.svg", imagewidth, 0, true, false)}; + //De namen van de karakters names = new String[]{"Paulus", "Pinkeltje", "Petunia", "Kwebbel", "Stuart"}; int x = 0, y = 0; + //Voor elke afbeelding wordt dit uitgevoerd for (int i1 = 0; i1 < images.length; i1++) { + //We maken van de afbeelding een ImageView, zodat het zichtbaar gemaakt kan worden Image i = images[i1]; ImageView iv = new ImageView(i); iv.setX(750 + x); iv.setY(400 + y); + //En geven het een tooltip met de naam van de Kabouter Tooltip.install(iv, new Tooltip(names[i1])); x += i.getRequestedWidth(); + //Als we te ver gaan op de x as, gaan we door op een volgende regel if (x > 200) { y += 150; x = -70; } final int ch = i1; + //Wat er gebeurt als je op een kabouter klikt iv.setOnMouseClicked(e -> { + //Eerst controleren of het karakter al is gekozen. if (chosen.contains(ch)) { new Alert(Alert.AlertType.ERROR, "Sorry, dit karakter is al door iemand anders gekozen...").show(); return; } + //Als er nog geen hoeveelheid is gekozen kan dat ook best een probleempje opleveren. if (hoeveel < 0) { Alert alert = new Alert(Alert.AlertType.ERROR, "Je moet eerst kiezen hoe veel spelers je wilt!\nDruk links op de juiste hoeveelheid kaboutertjes!", ButtonType.OK); alert.show(); } else { + //Maar verder kunnen we gewoon de karakters vinden Image image = new Image(i.impl_getUrl(), 0, 50, true, false); + //Toevoegen aan de lijst van spelers Game.players.add(new Player(image, ch)); + //De hoeveelheid benodigde spelers met één verlagen hoeveel--; + //En controleren of iedereen er een gekozen heeft if (hoeveel == 0) { + //Zo ja: we stoppen het muziekje en starten het spel! menuplayer.stop(); Main.scene.setRoot(new Game()); } else { + //Maar anders laten we mensen nog kiezen. String een = "Er moet nog 1 persoon kiezen!"; String meer = String.format("Er moeten nog %d mensen kiezen!", hoeveel); Alert alert = new Alert(Alert.AlertType.NONE, hoeveel > 1 ? meer : een, ButtonType.OK); @@ -110,22 +134,24 @@ public class Menu extends Group { } }); + //Maar we moeten wel het karakter zichtbaar maken. nodes.add(iv); } int x2 = 30, y2 = 50; + //Dit zijn de knoppen voor de hoeveelheid spelers for (int i = 0; i < 4; i++) { if (i == 0) continue; int number = 1 + i; - int locy = y2 + 150 * i + 10; + int locy = y2 + 155 * i + 10; for (int e = 0; e < number; e++) { ImageView view1 = new ImageView(new Image("/svg/p1.svg", 75, 0, true, false)); view1.setX(x2 + 85 * e + 10 * e); view1.setY(locy); nodes.add(view1); } - Rectangle clickable = new Rectangle(x2 - 10, locy + 125, 95 + i * 95, 150); + Rectangle clickable = new Rectangle(x2 - 10, locy + 125, 95 + i * 95, 152); clickable.setFill(Color.TRANSPARENT); clickable.setStroke(Color.BLACK); clickable.setArcHeight(50); @@ -143,6 +169,14 @@ public class Menu extends Group { getChildren().addAll(nodes); } + /** + * Maakt een knop op een plek, met een willekeurige kleur. + * @param string de tekst van de knop + * @param x de x coördinaat van de knop + * @param y de y coördinaat van de knop + * @param onClick een {@link EventHandler} die wordt uitgevoerd als de knop is ingedrukt + * @return een stackpane met daarin een knop + */ public static StackPane createButton(String string, double x, double y, EventHandler onClick) { Text text = createText(string); Rectangle rectangle = rectangulate(text); @@ -153,6 +187,11 @@ public class Menu extends Group { return pane; } + /** + * Maakt een text object + * @param string de tekst van het object + * @return een object met de tekst + */ private static Text createText(String string) { Text text = new Text(string); text.setBoundsType(TextBoundsType.VISUAL); @@ -165,6 +204,11 @@ public class Menu extends Group { return text; } + /** + * Maakt een rechthoek precies passend om de tekst heen. + * @param text een {@link Text} object + * @return een rechthoek met daar in de tekst + */ private static Rectangle rectangulate(Text text) { Rectangle rectangle = new Rectangle(); rectangle.setFill(getRandomColor()); @@ -176,6 +220,11 @@ public class Menu extends Group { return rectangle; } + /** + * methode die de breedte van een {@link Text} object opvraagt + * @param text het object + * @return de breedte van het object + */ private static double getWidth(Text text) { new Scene(new Group(text)); text.applyCss(); @@ -183,6 +232,11 @@ public class Menu extends Group { return text.getLayoutBounds().getWidth(); } + /** + * methode die de hoogte van een {@link Text} object opvraagt + * @param text het object + * @return de hoogte van het object + */ private static double getHeight(Text text) { new Scene(new Group(text)); text.applyCss(); @@ -190,6 +244,10 @@ public class Menu extends Group { return text.getLayoutBounds().getHeight(); } + /** + * maakt een willekeurige kleur + * @return een willekeurige kleur. + */ public static Color getRandomColor() { return Color.hsb(random.nextInt(360), 0.8, 0.8); diff --git a/src/main/java/nl/minkema/leendert/ModLoader.java b/src/main/java/nl/minkema/leendert/ModLoader.java index c373c49..ea3ace4 100644 --- a/src/main/java/nl/minkema/leendert/ModLoader.java +++ b/src/main/java/nl/minkema/leendert/ModLoader.java @@ -8,6 +8,12 @@ import java.io.File; */ public class ModLoader { + /** + * Dit was een leuk idee, maar het werkte 9/10 keer niet goed + * + * @param file de naam van het bestand + * @return het pad, danwel in het .jar bestand of als absoluut bestand + */ public static String getFile(String file) { File f = new File("mods" + file); if (f.exists()) { diff --git a/src/main/java/nl/minkema/leendert/Player.java b/src/main/java/nl/minkema/leendert/Player.java index 2dc824d..bf8591c 100644 --- a/src/main/java/nl/minkema/leendert/Player.java +++ b/src/main/java/nl/minkema/leendert/Player.java @@ -23,18 +23,28 @@ public class Player { private int plaats = 0; private int[] coords = Game.locations[plaats]; - + /** + * De constructor voor een speler + * + * @param image de afbeelding die bij de speler hoort + * @param ch het hoeveelste karakter de speler is. + */ public Player(Image image, int ch) { this.ch = ch; Random r = new Random(System.currentTimeMillis()); this.image = image; this.view = new ImageView(this.image); + //Elke speler staat niet precies op het zelfde punt, ziet er wat leuker uit this.add = new int[]{r.nextInt(10) - 5 - image.widthProperty().intValue() / 2, r.nextInt(10) - 5 - image.heightProperty().intValue() / 2};// new int[]{r.nextInt(10) - 5, r.nextInt(10) - 5}; coords = new int[]{coords[0] + add[0], coords[1] + add[1]}; getImageView().setTranslateX(coords[0]); getImageView().setTranslateY(coords[1]); } + /** + * Een methode om de volgende speler te verkrijgen + * @return het nummer van de volgende speler, niet verwarren met het character id. + */ public static int getNextActive() { who++; if (who >= Game.players.size()) { @@ -44,10 +54,12 @@ public class Player { return who; } + //Dit zorgt dat de vorige speler geselecteerd wordt public static void four() { who -= 1; } + //Dit is de afbeelding die bij de speler hoort public ImageView getImageView() { return view; } @@ -56,20 +68,27 @@ public class Player { return ch; } + /** + * Dit is de methode die wordt gebruikt om de speler te verplaatsen + * @param roll de hoeveelheid die is gegeooid. + */ public void move(int roll) { + //De standaard tekst Alert alert = new Alert(Alert.AlertType.NONE, "Je hebt " + roll + " gegooid!", ButtonType.OK); + //Als er 4 is gegooid mag je nog een keer, dus passen we de tekst aan if (roll == 4) alert.contentTextProperty().setValue("Je hebt " + roll + " gegooid!\nKlavertje 4! Je mag dus nog een keer!"); + //We willen geen titel alert.titleProperty().setValue(""); - if (plaats + roll == 69 && Main.memes) { - alert.contentTextProperty().setValue("heheheh 69 icksdie\n" + alert.getContentText()); - } + //Zolang er geen waterval of klimop is laten we het zien if (!Game.specials.containsKey(plaats + roll)) alert.show(); + //We gaan alleen niet over 100 heen... if (roll + plaats > 100) { return; } + //We gebruiken een TranslateTransition om de speler te verplaatsen TranslateTransition tt = new TranslateTransition(Duration.millis(200), getImageView()); tt.setFromX(coords[0]); tt.setFromY(coords[1]); @@ -77,16 +96,19 @@ public class Player { tt.setToY(coords[1] = Game.locations[plaats + 1][1] + add[1]); TranslateTransition last = tt; + //Dit is voor alles hoger dan 1 for (int i = plaats + 2; i < roll + plaats + 1; i++) { TranslateTransition tl = new TranslateTransition(Duration.millis(200), getImageView()); tl.setFromX(coords[0]); tl.setFromY(coords[1]); tl.setToX(coords[0] = Game.locations[i][0] + add[0]); tl.setToY(coords[1] = Game.locations[i][1] + add[1]); + //Als we meer dan 1 beweging willen moet dat er na afgespeeld worden, anders gaan ze tegelijk last.setOnFinished(e -> tl.play()); last = tl; } plaats += roll; + //Als er een waterval of klimop is if (Game.specials.containsKey(plaats)) { TranslateTransition tl = new TranslateTransition(Duration.millis(200), getImageView()); tl.setFromX(coords[0]); @@ -96,21 +118,23 @@ public class Player { last.setOnFinished(e -> tl.play()); String text; + //We passen de tekst aan if (plaats < Game.specials.get(plaats)) { - text = alert.getContentText() + "\n\nRoltrappen!\nJe mag " + (Game.specials.get(plaats) - plaats) + " plaatsen vooruit!"; + text = alert.getContentText() + "\n\nKlimop!\nJe mag " + (Game.specials.get(plaats) - plaats) + " plaatsen vooruit!"; } else { - text = alert.getContentText() + "\n\nSlangen!\nJe moet " + (plaats - Game.specials.get(plaats)) + " plaatsen terug!"; + text = alert.getContentText() + "\n\nWaterval!\nJe moet " + (plaats - Game.specials.get(plaats)) + " plaatsen terug!"; } Alert alert1 = new Alert(Alert.AlertType.NONE, text, ButtonType.OK); alert1.show(); + //Laten we de plaats van de speler ook even aanpassen plaats = Game.specials.get(plaats); } tt.play(); - + //Bij 100 heeft er iemand gewonnen! if (plaats == 100) { System.out.println("Een speler heeft gewonnen!"); Alert alert2 = new Alert(Alert.AlertType.WARNING, "Speler " + Menu.names[getCh()], ButtonType.OK); diff --git a/src/main/resources/images/bord.png b/src/main/resources/images/bord.png new file mode 100644 index 0000000..10dcd5f Binary files /dev/null and b/src/main/resources/images/bord.png differ diff --git a/src/main/resources/text/locations.properties b/src/main/resources/text/locations.properties index 6ae0c99..7ba3bc2 100644 --- a/src/main/resources/text/locations.properties +++ b/src/main/resources/text/locations.properties @@ -1,102 +1,101 @@ -#format: nummer:x,y -0:438,52 -1:496,53 -2:548,53 -3:609,52 -4:664,53 -5:704,111 -6:639,109 -7:583,110 -8:529,110 -9:472,107 -10:418,105 -11:381,166 -12:446,173 -13:499,168 -14:554,169 -15:605,168 -16:670,167 -17:721,168 -18:758,220 -19:704,228 -20:635,226 -21:578,223 -22:521,223 -23:451,222 -24:413,222 -25:346,224 -26:323,281 -27:379,281 -28:434,281 -29:490,281 -30:545,281 -31:603,280 -32:665,281 -33:720,280 -34:782,280 -35:809,330 -36:755,335 -37:703,336 -38:646,337 -39:588,337 -40:527,338 -41:470,339 -42:408,336 -43:361,336 -44:289,339 -45:265,399 -46:322,397 -47:372,395 -48:439,395 -49:500,393 -50:554,393 -51:606,396 -52:675,396 -53:721,396 -54:792,396 -55:835,397 -56:817,452 -57:755,455 -58:695,457 -59:648,457 -60:581,455 -61:528,454 -62:467,454 -63:401,454 -64:358,452 -65:302,453 -66:320,511 -67:378,515 -68:442,513 -69:486,512 -70:551,513 -71:607,514 -72:671,515 -73:732,515 -74:782,514 -75:758,572 -76:687,573 -77:633,572 -78:575,573 -79:533,574 -80:471,572 -81:407,570 -82:357,570 -83:382,639 -84:437,636 -85:503,633 -86:548,631 -87:605,630 -88:660,627 -89:733,628 -90:695,681 -91:648,681 -92:582,682 -93:526,682 -94:479,682 -95:411,683 -96:444,736 -97:497,751 -98:549,749 -99:607,748 -100:674,746 \ No newline at end of file +0=711,718 +1=658,716 +2=602,713 +3=555,713 +4=506,711 +5=475,656 +6=528,663 +7=577,663 +8=627,665 +9=677,666 +10=737,661 +11=762,619 +12=707,614 +13=653,608 +14=610,608 +15=561,608 +16=499,607 +17=444,606 +18=428,558 +19=474,557 +20=522,557 +21=582,559 +22=632,562 +23=682,558 +24=730,557 +25=786,559 +26=812,505 +27=751,505 +28=705,508 +29=655,508 +30=607,508 +31=554,509 +32=499,508 +33=453,506 +34=402,508 +35=376,460 +36=424,457 +37=477,459 +38=529,457 +39=581,458 +40=628,458 +41=678,458 +42=730,455 +43=784,456 +44=831,457 +45=859,410 +46=807,409 +47=756,408 +48=706,407 +49=655,406 +50=601,406 +51=554,406 +52=503,406 +53=452,406 +54=400,406 +55=345,406 +56=373,351 +57=424,349 +58=474,352 +59=525,356 +60=577,357 +61=629,356 +62=684,357 +63=733,358 +64=781,359 +65=835,355 +66=809,307 +67=758,304 +68=709,304 +69=656,303 +70=606,303 +71=551,303 +72=507,301 +73=454,303 +74=401,303 +75=427,253 +76=478,253 +77=528,254 +78=580,252 +79=630,252 +80=680,255 +81=731,255 +82=781,255 +83=757,204 +84=706,204 +85=655,204 +86=604,203 +87=553,202 +88=503,202 +89=451,203 +90=477,152 +91=529,151 +92=581,151 +93=630,152 +94=678,153 +95=732,154 +96=709,99 +97=657,99 +98=604,102 +99=552,102 +100=500,102 \ No newline at end of file diff --git a/src/main/resources/text/specials.properties b/src/main/resources/text/specials.properties index cb6d268..6a80baa 100644 --- a/src/main/resources/text/specials.properties +++ b/src/main/resources/text/specials.properties @@ -1,14 +1,12 @@ -5=10 -7=4 -18=13 -20=27 -30=24 -42=88 -50=43 -57=65 -63=52 -71=62 -80=82 -88=87 -92=97 -98=90 +1=27 +17=32 +21=4 +22=30 +47=68 +52=59 +61=39 +70=79 +74=53 +76=91 +81=64 +92=71 \ No newline at end of file