§ Программный код

Undertale?
Программа может загружать INES файл и редактировать его, но сохраняет в BIN-формат.
Команды управления редактором:
  • TAB — Переключиться в режим выбора или редактирования тайлов
  • F2 — Загрузить с диска .nes или .bin файл
  • F3 — Сохранить на диск .bin файл с сохранением палитры
  • F4 — Переключить палитру (4 цвета по 4 палитры)
  • F5 — Копировать тайл в другой тайл (дважды нажать F5)
  • F6 — Обмен тайла с другим тайлом (дважды нажать F6)
При активном окне выбора тайла нажатие на 0-3 выбирает цвет в текущей палитре, надо ввести номер цвета от 0 до 255. При активном окне редактора тайлов выбирает цвет, которым будет происходить рисование и тут же рисует этим цветом. Нажимая на пробел, рисуется последним использованным цветом.
SCREEN 13 DIM SHARED T AS STRING * 4096 DIM SHARED PLT(0 TO 15) AS INTEGER DIM SHARED cpal AS INTEGER DIM SHARED cp AS INTEGER DIM SHARED mv AS INTEGER DIM SHARED EMode AS INTEGER DIM SHARED LFile AS STRING FOR i = 0 TO 15 IF i AND 3 THEN PLT(i) = i NEXT TitleName Controls cp = 0: mv = 0 xs = 0: ys = 0 xp = 0: yp = 0 DO SelectBox xs, ys, xp, yp DO: i$ = INKEY$: LOOP WHILE i$ = "" ' Clear OLD id = xs + ys * 16 DrawSP id, 0 ' Controls IF EMode THEN IF i$ = CHR$(0) + "H" THEN yp = yp - 1 IF i$ = CHR$(0) + "P" THEN yp = yp + 1 IF i$ = CHR$(0) + "K" THEN xp = xp - 1 IF i$ = CHR$(0) + "M" THEN xp = xp + 1 IF xp < 0 THEN xp = 7 IF yp < 0 THEN yp = 7 IF xp > 7 THEN xp = 0 IF yp > 7 THEN yp = 0 IF i$ >= "0" AND i$ <= "3" THEN lcl = VAL(i$): SetPix xs, ys, xp, yp, lcl IF i$ = " " THEN SetPix xs, ys, xp, yp, lcl ELSE IF i$ = CHR$(0) + "H" THEN ys = ys - 1 IF i$ = CHR$(0) + "P" THEN ys = ys + 1 IF i$ = CHR$(0) + "K" THEN xs = xs - 1 IF i$ = CHR$(0) + "M" THEN xs = xs + 1 IF xs < 0 THEN xs = 15 IF ys < 0 THEN ys = 15 IF xs > 15 THEN xs = 0 IF ys > 15 THEN ys = 0 IF i$ >= "0" AND i$ <= "3" THEN COLOR 15: PLT(cpal * 4 + VAL(i$)) = VAL(Inp$("ColorID")): Refresh END IF IF i$ = CHR$(0) + "<" THEN LoadData: EMode = 0: Refresh IF i$ = CHR$(0) + "=" THEN SaveData IF i$ = CHR$(0) + ">" THEN cpal = (cpal + 1) AND 3: Refresh IF i$ = CHR$(9) THEN EMode = 1 - EMode: Controls ' COPY IF i$ = CHR$(0) + "?" THEN cp = 1 - cp: IF cp THEN cpsrc = id ELSE DoCopy cpsrc, id Controls END IF ' SWAP IF i$ = CHR$(0) + "@" THEN mv = 1 - mv: IF mv THEN cpsrc = id ELSE DoMove cpsrc, id Controls END IF ' LOCATE 1, 1: PRINT i$ LOOP WHILE i$ <> CHR$(27)