Generate and output list of prerequisites per node

Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
main
sigonasr2, Sig, Sigo 3 years ago committed by GitHub
parent b1c0e75bc5
commit 3221815162
  1. 106
      src/sig/MultiRando.java
  2. 43
      src/sig/Node.java
  3. 58
      src/sig/Restrictions.java

@ -1,7 +1,6 @@
package sig;
import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;
public class MultiRando {
private static int bitwiseCounter=0;
@ -58,19 +57,22 @@ public class MultiRando {
final static Long SPEED3 = DefineBitwiseConstant();
final static Long PIKO_HAMMER_LEVELED = DefineBitwiseConstant();
final static Long BACKTRACK_3 = DefineBitwiseConstant();
final static Long ONE_WAY = DefineBitwiseConstant(); //This constant will never be available to the player, so setting this will effectively make a node only one-way, since whatever this is used on will be inaccessible.
static Node[] SW = new Node[22];
static Node[] WC = new Node[23];
static Node[] IC = new Node[20];
static Node[] NT = new Node[23];
static Node[] EH = new Node[25];
static Node[] RRT = new Node[1];
static Node[] P = new Node[1];
static Node[] SA = new Node[2];
static Node[] SI = new Node[1];
private static long DefineBitwiseConstant() {/*System.out.println("Restrictions reach a bit-wise value of "+Long.toBinaryString((long)Math.pow(2,i)));*/return (long)Math.pow(2,bitwiseCounter++);}
private static void createNodes() {
Node[] SW = new Node[22];
Node[] WC = new Node[23];
Node[] IC = new Node[20];
Node[] NT = new Node[23];
Node[] EH = new Node[25];
Node[] RRT = new Node[1];
Node[] P = new Node[1];
Node[] SA = new Node[2];
Node[] SI = new Node[1];
InitializeNodes(SW,WC,IC,NT,EH,RRT,P,SA,SI);
SW[0].add(SW[1],NULL);
SW[0].add(SW[7],NULL);
@ -83,17 +85,97 @@ public class MultiRando {
DARKNESS|EXPLOSIVES|SLIDING_POWDER|PROLOGUE_TRIGGER,
DARKNESS|EXPLOSIVES|HAMMER_ROLL_ZIP|PROLOGUE_TRIGGER,
DARKNESS|ADVANCED_VERYHARD|EXPLOSIVES_ENEMY|SLIDE_ZIP});
SW[2].add(SW[6],
new Long[]{EXPLOSIVES_ENEMY},
new Long[]{
EXPLOSIVES_ENEMY|ADVANCED_VERYHARD,
EXPLOSIVES_ENEMY|INTERMEDIATE_HARD|AMULET_FOOD,
EXPLOSIVES_ENEMY|WHIRL_BONK,
EXPLOSIVES_ENEMY|RABI_SLIPPERS,
EXPLOSIVES_ENEMY|BUNNY_STRIKE,
EXPLOSIVES_ENEMY|AIR_JUMP,
EXPLOSIVES_ENEMY|AIR_DASH,
SLIDE_ZIP|ADVANCED_VERYHARD,
SLIDE_ZIP|INTERMEDIATE_HARD|AMULET_FOOD,
SLIDE_ZIP|WHIRL_BONK,
SLIDE_ZIP|RABI_SLIPPERS,
SLIDE_ZIP|BUNNY_STRIKE,
SLIDE_ZIP|AIR_JUMP,
SLIDE_ZIP|AIR_DASH,
}
);
SW[5].add(SW[6],
new Long[]{
DARKNESS|EXPLOSIVES|SLIDING_POWDER|PROLOGUE_TRIGGER,
DARKNESS|EXPLOSIVES|HAMMER_ROLL_ZIP|PROLOGUE_TRIGGER,
ADVANCED_VERYHARD|SLIDE_ZIP
},
new Long[]{
EXPLOSIVES_ENEMY|SLIDING_POWDER|PROLOGUE_TRIGGER|ADVANCED_VERYHARD,
EXPLOSIVES_ENEMY|SLIDING_POWDER|PROLOGUE_TRIGGER|INTERMEDIATE_HARD|AMULET_FOOD,
EXPLOSIVES_ENEMY|SLIDING_POWDER|PROLOGUE_TRIGGER|INTERMEDIATE_HARD|RABI_SLIPPERS,
EXPLOSIVES_ENEMY|SLIDING_POWDER|PROLOGUE_TRIGGER|WHIRL_BONK,
EXPLOSIVES_ENEMY|SLIDING_POWDER|PROLOGUE_TRIGGER|BUNNY_STRIKE,
EXPLOSIVES_ENEMY|SLIDING_POWDER|PROLOGUE_TRIGGER|AIR_JUMP,
EXPLOSIVES_ENEMY|SLIDING_POWDER|PROLOGUE_TRIGGER|AIR_DASH,
}
);
SW[1].add(SW[6],
new Long[]{
WALL_JUMP_LV2|AIR_JUMP,
WALL_JUMP_LV2|WHIRL_BONK_CANCEL,
ADVANCED_VERYHARD|HAMMER_ROLL|AIR_JUMP,
ADVANCED_VERYHARD|HAMMER_ROLL|WALL_JUMP_LV2|AIR_DASH
},
NULL
);
SW[8].add(SW[5],
new Long[]{
EXPLOSIVES_ENEMY|SLIDING_POWDER|PROLOGUE_TRIGGER,
EXPLOSIVES_ENEMY|HAMMER_ROLL_ZIP|PROLOGUE_TRIGGER,
ADVANCED_VERYHARD|SLIDE_ZIP
},
new Long[]{
DARKNESS|EXPLOSIVES|SLIDING_POWDER|PROLOGUE_TRIGGER
}
);
SW[8].add(SW[0],
new Long[]{NULL},
new Long[]{
RABI_SLIPPERS|SLIDING_POWDER,
RABI_SLIPPERS|HAMMER_ROLL_ZIP,
AIR_JUMP|SLIDING_POWDER,
AIR_JUMP|HAMMER_ROLL_ZIP,
ADVANCED_STUPID|SLIDING_POWDER,
BUNNY_STRIKE|SLIDING_POWDER,
BUNNY_STRIKE|HAMMER_ROLL_ZIP,
AIR_DASH|SLIDING_POWDER,
AIR_DASH|HAMMER_ROLL_ZIP,
WHIRL_BONK|SLIDING_POWDER,
WHIRL_BONK|HAMMER_ROLL_ZIP,
}
);
SW[1].add(SW[3],PROLOGUE_TRIGGER);
SW[0].add(SW[4],
new Long[]{SLIDE_ZIP},
new Long[]{ONE_WAY}
);
SW[1].add(SW[4],
new Long[]{DOWNDRILL_SEMISOLID_CLIP},
NULL
);
}
private static void InitializeNodes(Node[]...sF) {
for (int i=0;i<sF.length;i++) {
for (int j=0;j<sF[i].length;j++) {
sF[i][j]=new Node();
sF[i][j]=new Node(j);
}
}
}
public static void main(String[] args) {
createNodes();
System.out.println(Arrays.toString(SW));
}
}

@ -1,10 +1,13 @@
package sig;
import java.util.Arrays;
import java.util.HashMap;
import java.lang.StringBuilder;
public class Node{
HashMap<Node,Long[]> connections = new HashMap<>();
public Node() {};
int id;
public Node(int id) {this.id=id;};
public void add(Node n,Long...requirements) {
if (!connections.containsKey(n)) {
connections.put(n,requirements);
@ -22,4 +25,42 @@ public class Node{
n.add(this,outrequirements);
}
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder("\nNode");
sb.append("(");
boolean first=true;
for (Node n : connections.keySet()) {
if (!first) {
sb.append(";");
} else {
first=false;
}
sb.append(" ").append(id);
sb.append("->");
sb.append(n.id);
sb.append(":(");
for (int i=0;i<connections.get(n).length;i++) {
if (i!=0) {
sb.append(")|(");
}
boolean f=true;
for (int j=0;j<Restrictions.values().length;j++) {
if ((connections.get(n)[i]&(((long)1)<<(Restrictions.values()[j].ordinal()-1)))>0) {
if (!f) {
sb.append("&");
} else {
f=false;
}
sb.append(Restrictions.values()[j]);
}
}
}
sb.append(")");
}
sb.append(")");
return sb.toString();
}
}

@ -0,0 +1,58 @@
package sig;
public enum Restrictions {
NULL,
INTERMEDIATE_HARD,
INTERMEDIATE,
SPEED1,
AIR_DASH,
AIR_JUMP,
EXPLOSIVES_ENEMY,
SLIDING_POWDER,
PROLOGUE_TRIGGER,
EXPLOSIVES,
HAMMER_ROLL_ZIP,
ADVANCED_VHARD,
SLIDE_ZIP,
AMULET_FOOD,
WHIRL_BONK,
RABI_SLIPPERS,
BUNNY_STRIKE,
DARKNESS,
WALL_JUMP_LV2,
WHIRL_BONK_CANCEL,
HAMMER_ROLL,
ADVANCED_STUPID,
DOWNDRILL_SEMISOLID_CLIP,
HARD,
SLIDE_JUMP_BUNSTRIKE_CANCEL,
BUNNY_AMULET,
IMPOSSIBLE,
CARROT_SHOOTER,
CARROT_BOMB,
BACKTRACK_1,
ADVANCED_HARD,
SPEED5,
KOTRI_1,
COCOA_1,
CHAPTER_1,
WALL_JUMP,
AIR_DASH_LV3,
SLIDE_JUMP_BUNSTRIKE,
INTERMEDIATE_VERYHARD,
TM_PANDORA,
HALLOWEEN,
BOOST,
BOOST_MANY,
EIGHT_TILE_WALLJUMP,
TM_CHOCOLATE,
WATER_ORB,
ADVANCED,
BUNNY_AMULET_LV2,
TWO_AMULET_FOOD,
UNDERWATER,
SPEED3,
PIKO_HAMMER_LEVELED,
BACKTRACK_3,
ONE_WAY;
}
Loading…
Cancel
Save