packages = [ "urllib3==2.1.0", "param==1.13.0", "numpy", "pandas", "panel==0.13.1a2", "activejson", "./crcmod-1.7-py3-none-any.whl", "ndspy", "more_itertools", "ordered_set"] terminal = false [[fetch]] files = ["./randomizer_py.zip"] import asyncio import pyodide import panel as pn from panel.io.pyodide import show import os import zipfile import sys import shutil from js import document, console, window, Uint8Array, Event from pyodide import create_proxy, to_js import io fileInput = pn.widgets.FileInput(accept='.gba,.nds') uploadButton = pn.widgets.Button(name="Randomize", button_type = "primary") seedInput = pn.widgets.TextInput(placeholder='Enter custom seed here') downloadButton = pn.widgets.Button(name='Download', button_type='primary') content = "" with zipfile.ZipFile("/home/pyodide/randomizer_py.zip","r") as zip_ref: zip_ref.extractall() def process_file(event): sys.path.insert(0, '/home/pyodide/randomizer_py') from randomizer_py.WarpRandomizerMain import randomize file_base = "" for file in os.listdir("/home/pyodide/"): if file.endswith(".nds") or file.endswith(".gba"): print(os.path.join("/home/pyodide/", file)) file_base = file if os.path.exists("/home/pyodide/output"): shutil.rmtree("/home/pyodide/output") os.makedirs("/home/pyodide/output") if randomize(file_base, seedInput.value) == 0: shutil.make_archive("output", 'zip', "/home/pyodide/output") os.remove(f'/home/pyodide/{file_base}') shutil.rmtree("/home/pyodide/output") print(os.listdir("/home/pyodide")) document.dispatchEvent(pyscript_finished) else: os.remove(f'/home/pyodide/{file_base}') shutil.rmtree("/home/pyodide/output") downloadButton.visible = False uploadButton.on_click(process_file) print(os.listdir("/home/pyodide/")) async def upload_change_and_show(e): file_list = e.target.files first_item = file_list.item(0) array_buf = Uint8Array.new(await first_item.arrayBuffer()) print("hello from buffer") print("writing file to storage") with open(f'/home/pyodide/{first_item.name}', 'wb') as file: file.write(array_buf.to_py()) print(os.path.getsize(f'/home/pyodide/{first_item.name}')) array_buf = None async def show_elements(): await show(uploadButton, 'randomize') await show(seedInput, 'inputseed') await show (downloadButton, 'download') asyncio.ensure_future(show_elements()) downloadButton.visible = False upload_file = create_proxy(upload_change_and_show) document.getElementById("file-upload").addEventListener("change", upload_file) pyscript_finished = Event.new('pyscript_finished')

Universal warp randomizer

How to use

  • Click choose file and select your game
  • Click randomize, and wait
  • After a minute or two, your result will be automatically downloaded!

Compatible games

  • Pokemon Fire Red (1.0 and 1.1
  • Pokemon Leaf Green (1.0 and 1.1)
  • Pokemon Emerald
  • Pokemon Platinum
  • Pokemon White 2
  • Pokemon Heartgold
  • Pokemon Soulsilver

What is this ?

The Universal Warp Randomizer is a tool that will allow you to randomize the warp points in a Pokemon game, resulting in a fresh experience. Originally made for Twitch Streamer Pointcrow, this web version was made to fix issues with the standalone builds. This version is compatible with any computer and phone, as long as you have access to a web browser.

See it in action !

Who we are

XLuma

Atsign

Turtleisaac

Frequently asked questions

Why is it not working ?

Theres a couple reasons why. First of all, you tried to randomize a game that is not supported. Please check the compatibility list at the top for supported games. Please note that we only support USA games. Support for other regions is currently not planned. Also, Chromium based browsers will offer the best stability and performance. This means that browsers like Chrome and Opera will have tremendously better performance over browsers like Firefox.

I randomized Fire red, tried to randomize it again and nothing happens!

Currently, there is a specific bug that ONLY happens if you try to randomize specifically Pokemon Fire red twice in a row. We are investigating the bug. A current fix is to either refresh the page, or randomize a different game in between.