Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local display_solution = false
- local auto_solve = true
- --beware
- --lots of spaghetti code follows below this line
- local pic_data = {{}}
- local pic_size_x
- local pic_size_y
- local base_x = {[5] = 139, [10] = 121, [15] = 104, [20] = 87, [25] = 69}
- local base_y = {[5] = 123, [10] = 105, [15] = 88, [20] = 71, [25] = 71}
- local drop_nth_frame_per_level_id = {[105]=50, [108] = 150, [118] = 20, [119] = 220, [126] = 10, [130] = 200, [225] = 60, [255] = 33, [264]= 140, [279] = 255, [284] = 200}
- local box_size = 7
- local frame_delay = 1
- local x_pos = 0
- local y_pos = 0
- local status
- local pic_done
- local need_read = true
- local read_now = false
- local marked = false
- local prev_right = false
- local prev_left = false
- local prev_up = false
- local prev_down = false
- local prev_A = false
- local prev_Y = false
- local prev_A2 = false
- local prev_Y2 = false
- local course_corrected = false
- local sol_frame = 0
- local solve_done = false
- local moved = false
- local to_move_down = 2
- local level_id = -1
- gui.transparency(2)
- function draw_gui()
- if need_read == false and display_solution then
- for i=0,pic_size_x do
- for j=0,pic_size_y do
- if pic_data[i][j] % 2 == 1 then
- local x = base_x[pic_size_x]+box_size*i
- local y = base_y[pic_size_x]+box_size*j
- gui.drawbox(x,y,x+box_size,y+box_size,"#cccc00","#ffff00")
- end
- end
- end
- end
- end
- gui.register(draw_gui)
- while true do
- pic_done = memory.readbyte(0x7e0037) --done if 3, fade if 0
- status = memory.readbyte(0x7e119e)
- if status == 4 and need_read and pic_done ~= 0 then
- read_now = true
- else
- read_now = false
- end
- if status ~= 4 or pic_done == 0 then
- need_read = true
- end
- if need_read == true and read_now == true then
- pic_size_x = memory.readbyte(0x7e1110)
- pic_size_y = memory.readbyte(0x7e1112)
- level_id = memory.readword(0x7e0e46)
- for i=0,pic_size_x do
- for j=0,pic_size_y do
- if pic_data[i] == nil then
- pic_data[i] = {}
- end
- pic_data[i][j] = memory.readbyte(0x7e1234+i+j*0x20)
- end
- end
- need_read = false
- wait_frames = frame_delay
- sol_frame = 0
- x_pos = memory.readbyte(0x7e11d2)
- y_pos = memory.readbyte(0x7e11d6)
- --x_pos = 0
- --y_pos = 0
- prev_left = false
- prev_right = false
- prev_A = false
- prev_Y = false
- solve_done = false
- course_corrected = false
- to_move_down = 1
- end
- if need_read == false and solve_done == false and auto_solve == true then
- if wait_frames == frame_delay and (x_pos ~= 0 or y_pos ~=0) then
- local but = {}
- if x_pos ~= 0 then
- but["left"] = true
- x_pos = x_pos - 1
- end
- if y_pos ~= 0 then
- but["up"] = true
- y_pos = y_pos - 1
- end
- joypad.set(1,but)
- wait_frames = frame_delay + 2
- end
- if wait_frames == 1 then
- local buttons3 = {}
- buttons3["L"] = true
- joypad.set(2,buttons3)
- end
- if wait_frames <= 0 then
- local buttons = {}
- local buttons2 = {}
- if sol_frame == 0 then
- if pic_data[x_pos][y_pos] % 4 == 1 then
- buttons["A"] = true
- prev_A = true
- end
- if pic_data[pic_size_x-1-x_pos][pic_size_y-1-y_pos] % 4 == 1 then
- buttons2["A"] = true
- prev_A2 = true
- end
- elseif drop_nth_frame_per_level_id[level_id] ~= sol_frame then
- moved = true
- local dir = (math.floor(y_pos/2)%2-0.5)*(-2)
- if prev_left == false and prev_right == false then
- if x_pos == pic_size_x - 1 or x_pos == 0 then
- if y_pos < pic_size_y/2 then
- if prev_down == true then
- if to_move_down == -1 then
- if (y_pos == math.floor(pic_size_y/2) - 2 and pic_size_y == 10) or y_pos == math.floor(pic_size_y/2) - 1 then
- to_move_down = 1
- else
- to_move_down = 2
- end
- end
- if to_move_down == 0 then
- prev_down = false
- if dir > 0 then
- buttons["right"] = true
- prev_right = true
- prev_left = false
- else
- buttons["left"] = true
- prev_left = true
- prev_right = false
- end
- x_pos = x_pos + dir
- to_move_down = -1
- else
- moved = false
- prev_down = false
- end
- else
- buttons["down"] = true
- prev_down = true
- course_corrected = false
- y_pos = y_pos + 1
- to_move_down = to_move_down - 1
- end
- else
- solve_done = true
- end
- else
- if dir > 0 then
- buttons["right"] = true
- prev_right = true
- prev_left = false
- else
- buttons["left"] = true
- prev_left = true
- prev_right = false
- end
- if course_corrected == false and pic_size_x %2 == 0 and not (pic_size_y / 2 == y_pos + 1) then
- if prev_up == true then
- buttons["down"] = true
- prev_down = true
- prev_up = false
- y_pos = y_pos + 1
- else
- buttons["up"] = true
- prev_up = true
- prev_down = false
- y_pos = y_pos - 1
- end
- course_corrected = true
- else
- prev_up = false
- prev_down = false
- end
- x_pos = x_pos + dir
- end
- else
- prev_up = false
- prev_left = false
- prev_right = false
- prev_down = false
- if not (pic_size_y == 10 and y_pos + 1 == pic_size_y / 2) and not (pic_size_y == 5 and y_pos == math.floor(pic_size_y/2)) then
- if y_pos % 2 == 0 then
- buttons["down"] = true
- prev_down = true
- y_pos = y_pos + 1
- else
- buttons["up"] = true
- prev_up = true
- y_pos = y_pos - 1
- end
- else
- prev_up = true
- moved = false
- end
- end
- if buttons["left"] == true then
- buttons2["right"] = true
- end
- if buttons["right"] == true then
- buttons2["left"] = true
- end
- if buttons["up"] == true then
- buttons2["down"] = true
- end
- if buttons["down"] == true then
- buttons2["up"] = true
- end
- --print(x_pos,y_pos, " ",pic_size_x-1-x_pos,pic_size_y-1-y_pos)
- if moved == true and pic_data[x_pos][y_pos] % 4 == 1 then
- if prev_A then
- buttons["Y"] = true
- prev_Y = true
- prev_A = false
- else
- buttons["A"] = true
- prev_A = true
- prev_Y = false
- end
- else
- prev_A = false
- prev_Y = false
- end
- local spaghetti_code_y_pos = y_pos
- local spaghetti_code_moved = moved
- if (pic_size_y == 15 and y_pos + 2 > math.floor(pic_size_y/2)) then
- if (buttons["up"] == true or buttons["down"] == true) and to_move_down ~= 0 then
- buttons2["down"] = nil
- buttons2["up"] = nil
- spaghetti_code_moved = false
- end
- spaghetti_code_y_pos = 6
- end
- if spaghetti_code_moved == true and pic_data[pic_size_x-1-x_pos][pic_size_y-1-spaghetti_code_y_pos] % 4 == 1 then
- if prev_A2 then
- buttons2["Y"] = true
- prev_Y2 = true
- prev_A2 = false
- else
- buttons2["A"] = true
- prev_Y2 = false
- prev_A2 = true
- end
- else
- prev_A2 = false
- prev_Y2 = false
- end
- end
- sol_frame = sol_frame + 1
- joypad.set(1,buttons)
- joypad.set(2,buttons2)
- else
- wait_frames = wait_frames - 1
- end
- end
- snes9x.frameadvance()
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement