diff --git a/src/sig/MultiRando.java b/src/sig/MultiRando.java index 1c51657..b00f163 100644 --- a/src/sig/MultiRando.java +++ b/src/sig/MultiRando.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 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;i0) { + if (!f) { + sb.append("&"); + } else { + f=false; + } + sb.append(Restrictions.values()[j]); + } + } + } + sb.append(")"); + } + sb.append(")"); + return sb.toString(); + } + } \ No newline at end of file diff --git a/src/sig/Restrictions.java b/src/sig/Restrictions.java new file mode 100644 index 0000000..be57811 --- /dev/null +++ b/src/sig/Restrictions.java @@ -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; +}