From 6df16a9a6807732e45883a92f37bb97b2e28ad1b Mon Sep 17 00:00:00 2001 From: musilto9 Date: Thu, 16 Apr 2020 00:54:19 +0200 Subject: [PATCH] fixed boss and added tutorial --- .../java/ruscz/game/gameOfProd/Cells/Npc.java | 4 +- .../ruscz/game/gameOfProd/Cells/Person.java | 62 ++++++------ .../game/gameOfProd/Save/LoadManager.java | 3 +- src/main/resources/characters/boss.txt | 2 +- src/main/resources/characters/boy1.txt | 2 +- src/main/resources/characters/boy2.txt | 2 +- src/main/resources/characters/boy3.txt | 2 +- src/main/resources/characters/boy4.txt | 2 +- src/main/resources/characters/boy5.txt | 2 +- src/main/resources/characters/girl1.txt | 2 +- src/main/resources/characters/girl2.txt | 2 +- .../resources/characters/tutorialpers.txt | 2 + src/main/resources/maps/m1.txt | 2 +- src/main/resources/maps/m5-objectset.txt | 10 -- src/main/resources/maps/m5-tileset.txt | 12 --- src/main/resources/maps/m5.txt | 11 --- .../{m5-cellmap.txt => tutorial-cellmap.txt} | 0 .../resources/maps/tutorial-objectset.txt | 13 +++ src/main/resources/maps/tutorial-tileset.txt | 16 ++++ src/main/resources/maps/tutorial.txt | 14 +++ src/main/resources/save/newGame/maps.txt | 2 +- src/main/resources/save/savedGame/events.txt | 90 ++++++++++++++++++ src/main/resources/save/savedGame/person.txt | 6 ++ src/main/resources/save/savedGame/village.txt | 1 + src/main/resources/tutorialtiles.png | Bin 0 -> 12331 bytes 25 files changed, 191 insertions(+), 73 deletions(-) create mode 100644 src/main/resources/characters/tutorialpers.txt delete mode 100644 src/main/resources/maps/m5-objectset.txt delete mode 100644 src/main/resources/maps/m5-tileset.txt delete mode 100644 src/main/resources/maps/m5.txt rename src/main/resources/maps/{m5-cellmap.txt => tutorial-cellmap.txt} (100%) create mode 100644 src/main/resources/maps/tutorial-objectset.txt create mode 100644 src/main/resources/maps/tutorial-tileset.txt create mode 100644 src/main/resources/maps/tutorial.txt create mode 100644 src/main/resources/tutorialtiles.png diff --git a/src/main/java/ruscz/game/gameOfProd/Cells/Npc.java b/src/main/java/ruscz/game/gameOfProd/Cells/Npc.java index 966b0b2..140d147 100644 --- a/src/main/java/ruscz/game/gameOfProd/Cells/Npc.java +++ b/src/main/java/ruscz/game/gameOfProd/Cells/Npc.java @@ -78,9 +78,11 @@ public class Npc extends Person { int direction = Integer.parseInt(imageInfo[2]); int offsetX = Integer.parseInt(imageInfo[3]); int offsetY = Integer.parseInt(imageInfo[4]); + int widthCoef = Integer.parseInt(imageInfo[5]); + int heightCoef = Integer.parseInt(imageInfo[6]); image = ImageIO.read(new File("src/main/resources/characters/" + scanner.nextLine())).getSubimage(width * direction, 0, width, height); g.drawImage(image, getX() * getSize() + (getSize() / 5) + offsetX, - getY() * getSize() - (getSize() * 3/5) + offsetY, getSize() * 3/5, getSize() * 3/2, null); + getY() * getSize() - (getSize() * 3/5) + offsetY, getSize() * widthCoef/5, getSize() * heightCoef/2, null); } catch (IOException e) { e.printStackTrace(); } diff --git a/src/main/java/ruscz/game/gameOfProd/Cells/Person.java b/src/main/java/ruscz/game/gameOfProd/Cells/Person.java index 0e3aabb..490281e 100644 --- a/src/main/java/ruscz/game/gameOfProd/Cells/Person.java +++ b/src/main/java/ruscz/game/gameOfProd/Cells/Person.java @@ -216,9 +216,11 @@ public class Person extends Cell { } } else { distanceOfAnimation = getSize(); -// g.drawImage(imagePerson.getImagesOfDirection()[directionSight + 4], getX() * getSize(), -// getY() * getSize(), getSize(), getSize(), null); - g.drawImage(imagePerson.getImagesOfDirection()[directionSight + 4], getX() * getSize(), + if (map.getName().equals("tutorial")) + g.drawImage(imagePerson.getImagesOfDirection()[directionSight + 4], getX() * getSize() + (getSize() / 10), + getY() * getSize(), getSize() * 8/10, getSize(), null); + else + g.drawImage(imagePerson.getImagesOfDirection()[directionSight + 4], getX() * getSize(), getY() * getSize() - (getSize() * 3/5), getSize(), getSize() * 3/2, null); } } @@ -240,31 +242,35 @@ public class Person extends Cell { Xsize -= distanceOfAnimation; break; } -// if (distanceOfAnimation > getSize() * 3 / 4) { -// g.drawImage(imagePerson.getImagesOfDirection()[direction], getX() * getSize() + Xsize, -// getY() * getSize() + Ysize, getSize(), getSize(), null); -// } else if (distanceOfAnimation > getSize() / 2) { -// g.drawImage(imagePerson.getImagesOfDirection()[direction + 4], getX() * getSize() + Xsize, -// getY() * getSize() + Ysize, getSize(), getSize(), null); -// } else if (distanceOfAnimation > getSize() / 4) { -// g.drawImage(imagePerson.getImagesOfDirection()[direction + 8], getX() * getSize() + Xsize, -// getY() * getSize() + Ysize, getSize(), getSize(), null); -// } else{ -// g.drawImage(imagePerson.getImagesOfDirection()[direction + 4], getX() * getSize() + Xsize, -// getY() * getSize() + Ysize, getSize(), getSize(), null); -// } - if (distanceOfAnimation > getSize() * 3 / 4) { - g.drawImage(imagePerson.getImagesOfDirection()[direction], getX() * getSize() + Xsize, - getY() * getSize() + Ysize - (getSize() * 3/5), getSize(), getSize() * 3/2, null); - } else if (distanceOfAnimation > getSize() / 2) { - g.drawImage(imagePerson.getImagesOfDirection()[direction + 4], getX() * getSize() + Xsize, - getY() * getSize() + Ysize - (getSize() * 3/5), getSize(), getSize() * 3/2, null); - } else if (distanceOfAnimation > getSize() / 4) { - g.drawImage(imagePerson.getImagesOfDirection()[direction + 8], getX() * getSize() + Xsize, - getY() * getSize() + Ysize - (getSize() * 3/5), getSize(), getSize() * 3/2, null); - } else{ - g.drawImage(imagePerson.getImagesOfDirection()[direction + 4], getX() * getSize() + Xsize, - getY() * getSize() + Ysize - (getSize() * 3/5), getSize(), getSize() * 3/2, null); + if (map.getName().equals("tutorial")) { + if (distanceOfAnimation > getSize() * 3 / 4) { + g.drawImage(imagePerson.getImagesOfDirection()[direction], getX() * getSize() + (getSize() / 10), + getY() * getSize(), getSize() * 8/10, getSize(), null); + } else if (distanceOfAnimation > getSize() / 2) { + g.drawImage(imagePerson.getImagesOfDirection()[direction + 4], getX() * getSize() + (getSize() / 10), + getY() * getSize(), getSize() * 8/10, getSize(), null); + } else if (distanceOfAnimation > getSize() / 4) { + g.drawImage(imagePerson.getImagesOfDirection()[direction + 8], getX() * getSize() + (getSize() / 10), + getY() * getSize(), getSize() * 8/10, getSize(), null); + } else { + g.drawImage(imagePerson.getImagesOfDirection()[direction + 4], getX() * getSize() + (getSize() / 10), + getY() * getSize(), getSize() * 8/10, getSize(), null); + } + } + else { + if (distanceOfAnimation > getSize() * 3 / 4) { + g.drawImage(imagePerson.getImagesOfDirection()[direction], getX() * getSize() + Xsize, + getY() * getSize() + Ysize - (getSize() * 3 / 5), getSize(), getSize() * 3 / 2, null); + } else if (distanceOfAnimation > getSize() / 2) { + g.drawImage(imagePerson.getImagesOfDirection()[direction + 4], getX() * getSize() + Xsize, + getY() * getSize() + Ysize - (getSize() * 3 / 5), getSize(), getSize() * 3 / 2, null); + } else if (distanceOfAnimation > getSize() / 4) { + g.drawImage(imagePerson.getImagesOfDirection()[direction + 8], getX() * getSize() + Xsize, + getY() * getSize() + Ysize - (getSize() * 3 / 5), getSize(), getSize() * 3 / 2, null); + } else { + g.drawImage(imagePerson.getImagesOfDirection()[direction + 4], getX() * getSize() + Xsize, + getY() * getSize() + Ysize - (getSize() * 3 / 5), getSize(), getSize() * 3 / 2, null); + } } } diff --git a/src/main/java/ruscz/game/gameOfProd/Save/LoadManager.java b/src/main/java/ruscz/game/gameOfProd/Save/LoadManager.java index 21ddcd8..5618a9d 100644 --- a/src/main/java/ruscz/game/gameOfProd/Save/LoadManager.java +++ b/src/main/java/ruscz/game/gameOfProd/Save/LoadManager.java @@ -74,7 +74,8 @@ public class LoadManager { while (scanner.hasNextLine()) { String mapName = scanner.nextLine(); Map map = Map.loadMapFromFile(mapName, window); - map.getPerson().setImagePerson("main", rec); + if (mapName.equals("tutorial")) map.getPerson().setImagePerson("tutorialpers", rec); + else map.getPerson().setImagePerson("main", rec); map.setName(mapName); mapLinkedList.add(map); } diff --git a/src/main/resources/characters/boss.txt b/src/main/resources/characters/boss.txt index 95d5ae3..00a841a 100644 --- a/src/main/resources/characters/boss.txt +++ b/src/main/resources/characters/boss.txt @@ -1,3 +1,3 @@ 4 2 boss -50 91 0 0 30 +50 91 0 -10 30 5 3 boss.png \ No newline at end of file diff --git a/src/main/resources/characters/boy1.txt b/src/main/resources/characters/boy1.txt index 2faba78..e7a9746 100644 --- a/src/main/resources/characters/boy1.txt +++ b/src/main/resources/characters/boy1.txt @@ -1,3 +1,3 @@ 17 20 openspace -35 86 1 0 30 +35 86 1 0 30 3 3 boy1.png \ No newline at end of file diff --git a/src/main/resources/characters/boy2.txt b/src/main/resources/characters/boy2.txt index 68b2bdf..451165d 100644 --- a/src/main/resources/characters/boy2.txt +++ b/src/main/resources/characters/boy2.txt @@ -1,3 +1,3 @@ 5 1 openspace -35 86 0 0 0 +35 86 0 0 0 3 3 boy2.png \ No newline at end of file diff --git a/src/main/resources/characters/boy3.txt b/src/main/resources/characters/boy3.txt index 152e1bb..e9efef9 100644 --- a/src/main/resources/characters/boy3.txt +++ b/src/main/resources/characters/boy3.txt @@ -1,3 +1,3 @@ 4 12 openspace -35 84 0 0 0 +35 84 0 0 0 3 3 boy3.png \ No newline at end of file diff --git a/src/main/resources/characters/boy4.txt b/src/main/resources/characters/boy4.txt index fe9a0fb..65636ab 100644 --- a/src/main/resources/characters/boy4.txt +++ b/src/main/resources/characters/boy4.txt @@ -1,3 +1,3 @@ 2 20 openspace -35 84 1 0 30 +35 84 1 0 30 3 3 boy4.png \ No newline at end of file diff --git a/src/main/resources/characters/boy5.txt b/src/main/resources/characters/boy5.txt index c3728ac..b676333 100644 --- a/src/main/resources/characters/boy5.txt +++ b/src/main/resources/characters/boy5.txt @@ -1,3 +1,3 @@ 12 20 openspace -35 86 1 0 30 +35 86 1 0 30 3 3 boy5.png \ No newline at end of file diff --git a/src/main/resources/characters/girl1.txt b/src/main/resources/characters/girl1.txt index 6041400..5ede4ed 100644 --- a/src/main/resources/characters/girl1.txt +++ b/src/main/resources/characters/girl1.txt @@ -1,3 +1,3 @@ 6 1 openspace -35 86 2 0 0 +35 86 2 0 0 3 3 girl1.png \ No newline at end of file diff --git a/src/main/resources/characters/girl2.txt b/src/main/resources/characters/girl2.txt index de7e771..5888aa7 100644 --- a/src/main/resources/characters/girl2.txt +++ b/src/main/resources/characters/girl2.txt @@ -1,3 +1,3 @@ 7 24 openspace -35 86 1 0 30 +35 86 1 0 30 3 3 girl2.png \ No newline at end of file diff --git a/src/main/resources/characters/tutorialpers.txt b/src/main/resources/characters/tutorialpers.txt new file mode 100644 index 0000000..03c151b --- /dev/null +++ b/src/main/resources/characters/tutorialpers.txt @@ -0,0 +1,2 @@ +40 40 +mainpng.png \ No newline at end of file diff --git a/src/main/resources/maps/m1.txt b/src/main/resources/maps/m1.txt index a8acfed..3b1f405 100644 --- a/src/main/resources/maps/m1.txt +++ b/src/main/resources/maps/m1.txt @@ -7,5 +7,5 @@ BLOCK EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY MOVETO,7,4,openspace BLOCK EMPTY EMPTY INTER,first-dialog EMPTY INTER,dialog-test EMPTY EMPTY EMPTY BLOCK BLOCK EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY BLOCK BLOCK EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY BLOCK -BLOCK MOVETO,5,1,m5 EMPTY MOVETO,6,1,m6 EMPTY EMPTY EMPTY EMPTY MOVETO,1,1,m2 BLOCK +BLOCK MOVETO,5,1,tutorial EMPTY MOVETO,6,1,m6 EMPTY EMPTY EMPTY EMPTY MOVETO,1,1,m2 BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK \ No newline at end of file diff --git a/src/main/resources/maps/m5-objectset.txt b/src/main/resources/maps/m5-objectset.txt deleted file mode 100644 index ca48cd3..0000000 --- a/src/main/resources/maps/m5-objectset.txt +++ /dev/null @@ -1,10 +0,0 @@ -0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 -0 0 0 0 0 0 0 0 0 0 \ No newline at end of file diff --git a/src/main/resources/maps/m5-tileset.txt b/src/main/resources/maps/m5-tileset.txt deleted file mode 100644 index c8ff195..0000000 --- a/src/main/resources/maps/m5-tileset.txt +++ /dev/null @@ -1,12 +0,0 @@ - A2_Ground.png 512 384 32 - D_OutDoor.png 512 512 32 -1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 -1 1 82 94 1 1 82 94 1 1 -1 1 83 95 1 1 83 95 1 1 -1 1 1 1 1 1 1 1 1 1 -1 1 153 1 1 1 1 153 1 1 -1 1 153 153 153 153 153 1 1 1 -1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 -1 1 1 1 1 1 1 1 1 1 diff --git a/src/main/resources/maps/m5.txt b/src/main/resources/maps/m5.txt deleted file mode 100644 index 8e17f5d..0000000 --- a/src/main/resources/maps/m5.txt +++ /dev/null @@ -1,11 +0,0 @@ -10 10 -EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY -EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY -EMPTY EMPTY EMPTY BLOCK MOVETO,5,3,m1 BLOCK EMPTY EMPTY EMPTY EMPTY -EMPTY EMPTY EMPTY BLOCK SPAWN BLOCK EMPTY EMPTY EMPTY EMPTY -EMPTY EMPTY EMPTY BLOCK BLOCK BLOCK EMPTY EMPTY EMPTY EMPTY -EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY -BLOCK EMPTY EMPTY BLOCK BLOCK BLOCK EMPTY BLOCK EMPTY EMPTY -BLOCK EMPTY EMPTY BLOCK EMPTY BLOCK EMPTY BLOCK EMPTY EMPTY -BLOCK BLOCK EMPTY BLOCK BLOCK BLOCK EMPTY BLOCK BLOCK EMPTY -EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY \ No newline at end of file diff --git a/src/main/resources/maps/m5-cellmap.txt b/src/main/resources/maps/tutorial-cellmap.txt similarity index 100% rename from src/main/resources/maps/m5-cellmap.txt rename to src/main/resources/maps/tutorial-cellmap.txt diff --git a/src/main/resources/maps/tutorial-objectset.txt b/src/main/resources/maps/tutorial-objectset.txt new file mode 100644 index 0000000..17be624 --- /dev/null +++ b/src/main/resources/maps/tutorial-objectset.txt @@ -0,0 +1,13 @@ +0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 +0 0 0 0 0 0 0 0 0 0 0 0 0 \ No newline at end of file diff --git a/src/main/resources/maps/tutorial-tileset.txt b/src/main/resources/maps/tutorial-tileset.txt new file mode 100644 index 0000000..9434c54 --- /dev/null +++ b/src/main/resources/maps/tutorial-tileset.txt @@ -0,0 +1,16 @@ + A2_Ground.png 512 384 32 192 + D_OutDoor.png 512 512 32 256 + tutorialtiles.png 288 96 32 448 +1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 448 451 454 457 460 463 466 469 472 1 1 +1 1 449 452 455 458 461 464 467 470 473 1 1 +1 1 450 453 456 459 462 465 468 471 474 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 +1 1 1 1 1 1 1 1 1 1 1 1 1 diff --git a/src/main/resources/maps/tutorial.txt b/src/main/resources/maps/tutorial.txt new file mode 100644 index 0000000..5e14033 --- /dev/null +++ b/src/main/resources/maps/tutorial.txt @@ -0,0 +1,14 @@ +13 13 +BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK +BLOCK EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY BLOCK +BLOCK EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY BLOCK +BLOCK EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY BLOCK +BLOCK EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY BLOCK +BLOCK EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY BLOCK +BLOCK EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY MOVETO,5,4,m1 BLOCK +BLOCK EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY BLOCK +BLOCK EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY BLOCK +BLOCK EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY BLOCK +BLOCK EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY BLOCK +BLOCK EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY EMPTY BLOCK +BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK BLOCK \ No newline at end of file diff --git a/src/main/resources/save/newGame/maps.txt b/src/main/resources/save/newGame/maps.txt index fd103b4..d26d6de 100644 --- a/src/main/resources/save/newGame/maps.txt +++ b/src/main/resources/save/newGame/maps.txt @@ -2,8 +2,8 @@ m1 m2 m3 m4 -m5 m6 +tutorial openspace office boss diff --git a/src/main/resources/save/savedGame/events.txt b/src/main/resources/save/savedGame/events.txt index e69de29..0dd4360 100644 --- a/src/main/resources/save/savedGame/events.txt +++ b/src/main/resources/save/savedGame/events.txt @@ -0,0 +1,90 @@ + + m1 + + + + + m2 + + + 7 + 2 + true + + + + + m3 + + + 2 + 5 + true + + + + + m4 + + + 3 + 3 + true + + + + + m6 + + + 11 + 11 + true + + + + + tutorial + + + + + openspace + + + 7 + 4 + true + + + 15 + 7 + true + + + + + office + + + 1 + 9 + true + + + + + boss + + + 4 + 18 + true + + + + + treasure + + + diff --git a/src/main/resources/save/savedGame/person.txt b/src/main/resources/save/savedGame/person.txt index e69de29..da4d904 100644 --- a/src/main/resources/save/savedGame/person.txt +++ b/src/main/resources/save/savedGame/person.txt @@ -0,0 +1,6 @@ + + openspace + 8 + 16 + 3 + \ No newline at end of file diff --git a/src/main/resources/save/savedGame/village.txt b/src/main/resources/save/savedGame/village.txt index e69de29..1b4bc7b 100644 --- a/src/main/resources/save/savedGame/village.txt +++ b/src/main/resources/save/savedGame/village.txt @@ -0,0 +1 @@ +TODO: Village \ No newline at end of file diff --git a/src/main/resources/tutorialtiles.png b/src/main/resources/tutorialtiles.png new file mode 100644 index 0000000000000000000000000000000000000000..a023dfd2900d536c5b52789fce03b4d3031e94d3 GIT binary patch literal 12331 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 u