RAINBOW ISLANDS

par davidnurdin · Remakes
pas encore noté
▶ Jouer Sources Éditer GitHub
games/rainbow-island / tools / extract / mapbuild.py · commit d529485
# Rebuild an absolute round map from the emulator's "write" log.# The game keeps the map in a ring of 64 rows x 32 tiles at #0800; #FEFB is the camera (top row, 8 bits).import sys, redef build(lines, start_frame):    ring=bytearray(2048); cam=-1; first=None; started=False; going_up=True    rows={}; bottom=None    for l in lines:        m=re.match(r'write (\w+)=(\w+) pc=(\w+) f=(\d+)',l)        if not m or int(m[4])<start_frame: continue        a=int(m[1],16); v=int(m[2],16)        if a==0xfefb:            c=v if v<128 else v-256            c=cam+((c-cam+128)%256-128)            if first is None: first=c            if started and c>cam: going_up=False            if cam-c==1: started=True            cam=c            if not going_up and c==first and bottom is None: bottom=bytes(ring)            continue        ring[a-0x800]=v        if not going_up: continue        r=(a-0x800)//32; x=(a-0x800)%32        k=(r-cam)%64        if k>=40: k-=64        rows.setdefault(cam+k,[0]*32)[x]=v    if bottom:        for y in range(first-6,0):            r=y&63; rows[y]=list(bottom[r*32:r*32+32])    return rows