pkpawn

Turn a compiled .amx script into readable assembly you can edit — and back into a file the game loads.

973 native game functions, named and documented. Nothing else reads these scripts.

What it does

A compiled script is a wall of bytes. pkpawn turns it into something you can read, change, and put back — recomputing every jump offset, table offset and header size from scratch, so inserting or deleting an instruction is safe.

What you have
6305 0000 e0f1 0a0a
1c00 0800 2001 0000
c809 0000 080a 0000
081a 0000 2c05 0000
3c00 0000 4400 0000
f400 0000 fc00 0000
1401 0000 1c01 0000
542d f063 0000 0000
89a3 130b 0000 0000
What pkpawn gives you
L000000b8:
        proc
        push.p.s 16
        push.p.s 12
        sysreq.n screen_fade_in_raw 8
        stack.p 4
        zero.pri
        retn

; edit freely — every
; address is recomputed
What you install
out/1b6e129e.amx
2560 bytes
code 2216, data 64
1 public, 22 natives
6656 bytes of VM memory

→ sdmc:/pkpawn/

loads on the console,
unchanged.

The part nobody else has

The engine's own names are internal shorthand — WorkGet, MdlAcmdSet, TalkMdlMsg_Seq. They assume you know that "work" means a saved variable, "Mdl" means an overworld character and "Acmd" means a queued movement. Every one of them has been given a readable name and, for the ones that carry real traffic, a written-up description of what each argument selects.

Engine shorthand → readable

WorkGet(0x407c)get_event_var(0x407c)

FlagSet(0x21)set_event_flag(0x21)

TalkMdlSetEyeToEye(2)npc_look_at_player(2)

MdlAcmdSetEnd()npc_movement_commit()

FadeRequestOut(0, 0, 6)screen_fade_out(0, 0, 6)

Both spellings assemble to identical bytes, so older listings keep working.

Every argument, explained

screen_fade_out(style, screens, frames)
  Fades the picture away. Note the
  effect comes first, before the
  screen.

  style    0 black, 1 white, then the
           shaped wipes: circle-shrink,
           ball, up/down/left/right,
           diamond
  screens  0 top, 1 bottom, 2 both
  frames   how long it takes; 2 is the
           engine default

  engine name: FadeRequestOut

126 functions written up by hand — they cover 91% of the 36 389 native calls across 789 retail scripts.

973

native functions, every one with a readable name

660 / 660

symbols resolved across the retail corpus

0

engine shorthand left in a listing

Using it

One binary, four commands. Real output from a real script below — nothing here is mocked up.

  1. Download and sign in

    No installer. Put the binary anywhere on your PATH, then paste the key you were given.

    > pkpawn login pk_live_0000000000000000000000000000dead
    signed in as you@example.com (hobby plan)
    200 credit(s) available
    key stored in C:\Users\you\AppData\Roaming\pkpawn\config.json
  2. Open a script

    This is the step that spends a credit. You get the editable listing and, on a paid plan, a pseudo-Pawn reconstruction that turns 395 instructions into something you can read in a minute.

    > pkpawn open c02r0101.amx
    uploading c02r0101.amx (1380 bytes)...
    wrote c02r0101.pasm
    wrote c02r0101.p (reading aid, not an input)
      script 0x1b6e129e — 395 instruction(s), 1 public(s), 22 native(s)
      build it with `pkpawn build c02r0101.pasm`; installs as 1b6e129e.amx
      199 credit(s) left
  3. Edit it in any text editor

    The .pasm names every branch target instead of printing raw addresses, so you can insert and delete instructions freely. The .p beside it is there to tell you what the script actually does.

    // from the .p — what the script is really doing
    main()
    {
        switch (g_mode)
        {
            case 0:  sub_0000b8();
            case 1:  sub_0000c4();
            default: do_nothing();
        }
    }
    
    native show_dialogue(message_id, window_id, npc_id, ...);
      // Opens a speech bubble and prints a message, optionally
      // tailed to an NPC. The workhorse of every conversation.
  4. Build it back

    Free, and repeatable for 30 days. A listing that does not assemble costs nothing but the time to fix it — and the error tells you the line.

    > pkpawn build c02r0101.pasm
    wrote out\1b6e129e.amx (2560 bytes)
      code 2216 bytes, data 64 bytes, 1 public(s), 22 native(s), 6656 bytes of VM memory
      install as sdmc:/pkpawn/1b6e129e.amx to replace the original script
    > pkpawn build c02r0101.pasm
    error: bad hex '0xZZ': invalid digit found in string (line 76)

Or do all of it in one command

> pkpawn edit c02r0101.amx

Opens the script, launches $EDITOR, builds when you save, and reopens your editor at the offending line if it does not assemble. Loops until it builds.

> pkpawn balance
account   you@example.com
plan      hobby
credits   199
jobs      1 opened so far
limits    scripts up to 256 KB, listings up to 8 MB, 200 builds per job, jobs live 30 days

Credits

One credit opens one script. Rebuilding it is free and unlimited for 30 days. A file that fails to parse is never charged, and opening the same file twice is recognised rather than billed again — so a dropped connection, or coming back to a script next week, costs nothing.

Free
€0
15 credits / month

Everything except the .p decompilation. Permanent, not a trial.

Hobby
€5 / month
200 credits / month

Decompilation included. For one or two scripts an evening.

Project
€15 / month
1 000 credits / month

For a full hack, or a team. Priority support.

Top-up
€7 once
100 credits

No subscription. Valid for 12 months.

Get a key

Message me on Discord. Tell me which plan you want; I will send the key back in the same conversation.

@zettad13_31566

Keys are shown once. Lost one? Message me and I will issue a new one and revoke the old.

Questions worth answering up front

What happens to the files I upload?

Nothing is stored. The service reads your script, answers, and forgets it. All that is kept is its size and a hash — enough to recognise a retry, and not enough to reconstruct anything.

Why is there a server at all?

Because the knowledge is the product: the disassembler, the assembler, the decompiler and the table of 973 documented functions. The client you download is a few hundred lines that move files around — it carries none of it, and you can verify that.

What is supported?

Compiled Pawn, file format version 10, 32-bit cells (AMX_MAGIC 0xF1E0) — the format used by the 3DS-era Pokémon titles. 16-bit and 64-bit cell variants are not supported.

Does a failed build cost me?

No. Credits are spent when a script opens successfully, and never again for that script. Building is free, up to 200 attempts per job.