Skip to content

Commit

Permalink
Misc fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
thezerothcat committed Jan 27, 2019
1 parent 5b7b815 commit b8fb7ad
Show file tree
Hide file tree
Showing 8 changed files with 255 additions and 179 deletions.
4 changes: 4 additions & 0 deletions README.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ Please see the wiki page on github for information on how to use the randomizer,
https://github.com/thezerothcat/LaMulanaRandomizer/wiki


2.11
-----------------------------
Added screen mash to supported glitches. Assorted bugfixes and logic updates.

2.10
-----------------------------
Generation performance improvements by N-eil. Progress dialog improvements by Worse Than You. Bugfix for random removed items when all subweapons are removed. Backside door plando added. Assorted logic adjustments.
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>lmr.randomizer</groupId>
<artifactId>randomizer</artifactId>
<version>2.10.0</version>
<version>2.11.0</version>
<name>La-Mulana Remake Randomizer</name>
<description>La-Mulana Remake Randomizer</description>
<packaging>jar</packaging>
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/lmr/randomizer/FileUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
* Created by thezerothcat on 7/10/2017.
*/
public class FileUtils {
public static final String VERSION = "2.10.0";
public static final String VERSION = "2.11.0";
private static final int CUSTOM_IMAGE_HEIGHT = 80;

private static BufferedWriter logWriter;
Expand Down
1 change: 1 addition & 0 deletions src/main/java/lmr/randomizer/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -1166,6 +1166,7 @@ public ProgressUpdate(long time, int attempt) {
FileUtils.logDetail("Placed pipe transitions", attempt);

moneyChecker = new MoneyChecker(itemRandomizer, shopRandomizer, transitionGateRandomizer);
moneyChecker.computeStartingLocationAccess(attempt);
for (String startingNode : startingNodes) {
moneyChecker.computeAccessibleNodes(startingNode, attempt);
}
Expand Down
115 changes: 79 additions & 36 deletions src/main/java/lmr/randomizer/node/MoneyChecker.java
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,12 @@ public List<String> getQueuedUpdates() {
return queuedUpdates;
}

public void computeStartingLocationAccess(Integer attemptNumber) {
computeAccessibleNodes("Location: Surface [Main]", attemptNumber);
computeAccessibleNodes("Exit: Surface [Main]", attemptNumber);
queuedUpdates.addAll(transitionGateRandomizer.getTransitionExits("Exit: Surface [Main]", attemptNumber));
}

public void computeAccessibleNodes(String newState, Integer attemptNumber) {
String stateToUpdate = newState;
FileUtils.logDetail("Checking progress for node " + newState, attemptNumber);
Expand Down Expand Up @@ -100,46 +106,83 @@ private String checkState(String stateToUpdate) {
}

public Integer getShopPrice(String itemName, String shopName) {
if(!accessedNodes.contains("State: Fairy") && availableShops.contains(shopName) && accessedAreas.size() <= 3) {
if(accessedMoney <= 80) {
if("Plane Model".equals(itemName)
&& accessedAreas.contains("Tower of the Goddess")) {
if(!accessedNodes.contains("State: Fairy") && !accessedNodes.contains("Location: Dimensional Corridor")
&& availableShops.contains(shopName) && accessedAreas.size() <= 3) {
if("Plane Model".equals(itemName)
&& accessedAreas.contains("Tower of the Goddess")) {
return accessedMoney < 50 ? accessedMoney : 50;
}
if("Ankh Jewel".equals(itemName) && accessedAreas.contains("Mausoleum of the Giants")) {
return accessedMoney < 40 ? accessedMoney : 40;
}
if("Bronze Mirror".equals(itemName)
&& (accessedAreas.contains("Gate of Guidance") || accessedAreas.contains("Mausoleum of the Giants"))
|| accessedAreas.contains("Temple of the Sun")) {
return accessedMoney < 50 ? accessedMoney : 50;
}
if("Helmet".equals(itemName) && accessedAreas.contains("Spring in the Sky")) {
return accessedMoney < 50 ? accessedMoney : 50;
}
if("Feather".equals(itemName)) {
if(accessedAreas.contains("Graveyard of the Giants")) {
return accessedMoney < 50 ? accessedMoney : 50;
}
if("Ankh Jewel".equals(itemName) && accessedAreas.contains("Mausoleum of the Giants")) {
return accessedMoney < 40 ? accessedMoney : 40;
}
if("Bronze Mirror".equals(itemName) && accessedAreas.contains("Mausoleum of the Giants")) {
if(accessedAreas.contains("Shrine of the Mother")) {
return accessedMoney < 50 ? accessedMoney : 50;
}
if("Feather".equals(itemName)) {
if(accessedAreas.contains("Graveyard of the Giants")) {
return accessedMoney < 50 ? accessedMoney : 50;
}
if(accessedAreas.contains("Tower of the Goddess")) {
return accessedMoney < 80 ? accessedMoney : 80;
}
if(accessedAreas.contains("Chamber of Birth")) {
return accessedMoney < 30 ? accessedMoney : 30;
}
if(accessedAreas.contains("Tower of the Goddess")) {
return accessedMoney < 80 ? accessedMoney : 80;
}
if("Bomb".equals(itemName) && accessedAreas.contains("Graveyard of the Giants")) {
return accessedMoney < 50 ? accessedMoney : 50;
if(accessedAreas.contains("Chamber of Birth")) {
return accessedMoney < 30 ? accessedMoney : 30;
}
if(accessedAreas.contains("Temple of Moonlight")
&& ("Shuriken".equals(itemName) || "Rolling Shuriken".equals(itemName)
|| "Caltrops".equals(itemName) || "Bomb".equals(itemName)
|| "Chakram".equals(itemName) || "Pistol".equals(itemName))) {
if(!accessedNodes.contains("Attack: Shuriken") && !accessedNodes.contains("Attack: Rolling Shuriken")
&& !accessedNodes.contains("Attack: Caltrops") && !accessedNodes.contains("Attack: Bomb")
&& !accessedNodes.contains("Attack: Chakram") && !accessedNodes.contains("Attack: Pistol")) {
return accessedMoney < 50 ? accessedMoney : 50;
}
if(accessedAreas.contains("Dimensional Corridor")) {
return accessedMoney < 80 ? accessedMoney : 80;
}
if(accessedAreas.contains("Tower of Ruin")) {
return accessedMoney < 80 ? accessedMoney : 80;
}
if("Flare Gun".equals(itemName) && accessedAreas.contains("Chamber of Extinction")) {
}
if("Fruit of Eden".equals(itemName) && accessedNodes.contains("Location: Gate of Illusion [Eden]")) {
return accessedMoney < 50 ? accessedMoney : 50;
}
if("Hand Scanner".equals(itemName) && accessedAreas.contains("Gate of Illusion")) {
return accessedMoney < 50 ? accessedMoney : 50;
}
if("Bomb".equals(itemName) && accessedAreas.contains("Graveyard of the Giants")) {
return accessedMoney < 50 ? accessedMoney : 50;
}
if("Bomb".equals(itemName) && accessedAreas.contains("Dimensional Corridor") && Settings.getEnabledDamageBoosts().contains("Item")) {
return accessedMoney < 20 ? accessedMoney : 20; // Extra cheap because ammo is also needed
}
if("Ring".equals(itemName) && accessedAreas.contains("Graveyard of the Giants")) {
return accessedMoney < 80 ? accessedMoney : 80;
}
if("Grapple Claw".equals(itemName)
&& ((accessedAreas.contains("Graveyard of the Giants") && Settings.getEnabledGlitches().contains("Ice Raindrop"))
|| (Settings.getEnabledGlitches().contains("Raindrop")))) {
return accessedMoney < 50 ? accessedMoney : 50;
}
if("Hermes' Boots".equals(itemName)
&& (Settings.getEnabledGlitches().contains("Raindrop") || Settings.getEnabledGlitches().contains("Object Zip"))) {
return accessedMoney < 80 ? accessedMoney : 80;
}
if(accessedAreas.contains("Temple of Moonlight")
&& ("Shuriken".equals(itemName) || "Rolling Shuriken".equals(itemName)
|| "Caltrops".equals(itemName) || "Bomb".equals(itemName)
|| "Chakram".equals(itemName) || "Pistol".equals(itemName))) {
if(!accessedNodes.contains("Attack: Shuriken") && !accessedNodes.contains("Attack: Rolling Shuriken")
&& !accessedNodes.contains("Attack: Caltrops") && !accessedNodes.contains("Attack: Bomb")
&& !accessedNodes.contains("Attack: Chakram") && !accessedNodes.contains("Attack: Pistol")) {
return accessedMoney < 50 ? accessedMoney : 50;
}
}
if("Flare Gun".equals(itemName) && accessedAreas.contains("Chamber of Extinction")) {
return accessedMoney < 50 ? accessedMoney : 50;
}
if("Key of Eternity".equals(itemName) && accessedAreas.contains("Endless Corridor")) {
return accessedMoney < 50 ? accessedMoney : 50;
}
}
return null;
}
Expand Down Expand Up @@ -186,17 +229,17 @@ private void handleNodeAccess(String nodeName, NodeType nodeType, Integer attemp
queuedUpdates.addAll(transitionGateRandomizer.getTransitionExits(nodeName, attemptNumber));
break;
case SHOP:
for (String shopItem : shopRandomizer.getShopItems(nodeName)) {
availableShops.add(nodeName);
if (shopItem == null) {
throw new RuntimeException("Unable to find item at " + nodeName + " location of type " + nodeType.toString());
}
availableShops.add(nodeName);
// for (String shopItem : shopRandomizer.getShopItems(nodeName)) {
// if (shopItem == null) {
// throw new RuntimeException("Unable to find item at " + nodeName + " location of type " + nodeType.toString());
// }
// if (!accessedNodes.contains(shopItem) && !queuedUpdates.contains(shopItem)
// && !Settings.getRemovedItems().contains(shopItem)
// && !Settings.getCurrentRemovedItems().contains(shopItem)) {
// availableShopItems.add(shopItem);
// }
}
// }
break;
case TRANSITION:
queuedUpdates.add(nodeName);
Expand Down
12 changes: 12 additions & 0 deletions src/main/java/lmr/randomizer/rcd/RcdReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,7 @@ else if(obj.getId() == 0x0e) {
Screen screen = (Screen)objectContainer;
if(screen.getZoneIndex() == 0 && screen.getRoomIndex() == 0 && screen.getScreenIndex() == 0) {
if(Settings.isRandomizeTransitionGates()) {
// Guidance to Surface escape blockage
for (TestByteOperation flagTest : obj.getTestByteOperations()) {
if(flagTest.getIndex() == 0x0fe && flagTest.getValue() == 3) {
keepObject = false;
Expand All @@ -250,6 +251,17 @@ else if(screen.getZoneIndex() == 3 && screen.getRoomIndex() == 0 && screen.getSc
testByteOperation.setValue((byte)0);
obj.getTestByteOperations().add(testByteOperation);
}
else if(screen.getZoneIndex() == 4 && screen.getRoomIndex() == 3 && screen.getScreenIndex() == 1) {
if(Settings.isRandomizeTransitionGates()) {
// Spring to Surface escape blockage
for (TestByteOperation flagTest : obj.getTestByteOperations()) {
if (flagTest.getIndex() == 0x0fe && flagTest.getValue() == 3) {
keepObject = false;
break;
}
}
}
}
else if(screen.getZoneIndex() == 6) {
if(screen.getRoomIndex() == 1 && screen.getScreenIndex() == 1) {
if (Settings.isRandomizeTransitionGates()) {
Expand Down
Loading

0 comments on commit b8fb7ad

Please sign in to comment.