Skip to content

Instantly share code, notes, and snippets.

//код расжатия:
private void reloadMap()
{
int romAddr = 0x83FC;
while (Globals.romdata[romAddr] != 0xFF)
{
int videoAddr = Utils.readWord(Globals.romdata, romAddr) - 0x2000;
romAddr += 2;
int count = Globals.romdata[romAddr++];
for (int i = 0; i < count; i++)
@spiiin
spiiin / dt2-unpack-logging.lua
Created May 31, 2014 17:48
Логгирование архивов
require "binio"
local time, cnt
time = 0
cnt = 1
memory.registerexec(0xCFC2, function()
log = io.open ("data1.log", "a");
local pr = string.format("addr: %02X:%02X%02X to:%02X%02X\n", memory.readbyte(0x69), memory.readbyte(0x68),memory.readbyte(0x67), memory.readbyte(0x6B), memory.readbyte(0x6A))
log:write(pr)
#Суть алгоритма:
# 1. Находим для всех массивов, какой длины у него есть "торчащие" голова и хвост из одинаковых элементов. Получаем массив из туплов - голова, хвост, индекс элемента.
# 2. Выбираем самую лучшую пару для соединения - ищем, какие голова и хвост могут образовать самую длинную цепочку
# 3. Соединяем два элемента массива в один - склеиваем голову и хвост, получаем элемент с новыми концами. Запоминаем также, какая пара элементов была склеена - храним список того, какие именно элементы были соединены.
# 4. Повторяем шаг 2 до тех пор, пока это возможно - пока будут находится пары элементов, у которых значение головы первого элемента пары совпадает со значением хвоста второго элемента.
# 5. Когда таких пар не нашлось - список невозможно дальше склеивать, теперь проходим по нему слева направо и восстанавливаем все списки индексов элементов - это лучшая последовательность для сжатия её алгоритмом RLE.
#------------------------------------------------------------
def calcEnds(arr):
repeatBegin = 0
for
@spiiin
spiiin / find_longest_8.py
Created October 12, 2014 13:07
find longest sequence of 8-multiple values
import os
fn = os.path.expanduser("~/desktop/dump.bin")
with open(fn, "rb")as f:
d = f.read()
d = map(ord, d)
def repWord(d):
ans = []
for x in xrange(0,len(d),2):
ans.append(d[x]*256+d[x+1])
object james_bond_jr {
type State = Vector[Int]
val initialState: State = Vector(1,2,2,1, 3,4,4,3, 3,4,4,3, 2,4,4,2)
val endState: State = Vector(4,3,4,2, 3,1,2,4, 4,2,4,3, 2,4,3,1)
trait Move {
def act(state: State): State
}
case class MoveLeft(row: Int) extends Move {
import sys
import re
import urllib
import urllib2
import os.path
import md5
import threading
import time
import vk_param
@spiiin
spiiin / scala_vk_get_pictures.scala
Created March 23, 2015 23:57
Загрузка картинок из альбома Вконтакте
package scala_vk_get
import scala.sys.process._
import scala.concurrent._
import scala.concurrent.duration._
import scala.xml.XML
import scala.io.Source
import java.net.URL
import java.io.File
import java.util.concurrent.Executors
--загружаем библиотеку gd
require "gd"
--начальный адрес для коррапта (сразу от заголовка образа ROM)
START_ADDR = 0x10
--конечный адрес для коррапта (зависит от маппера, на котором сделан картридж, можно просто выставить размер файла)
END_ADDR = 0x20010
CUR_ADDR = START_ADDR
--конечный номер кадра, после которого нужно сделать скриншот (когда игровой экран уже отображается для игрока, номер замерен для созданного сохранения)
FRAME_FOR_SCREEN = 7035
BANK6:8C34 ; state (81 - patrol, 82 - attack dw)
BANK6:8C34
BANK6:8C34 enemy0_behaviour:
BANK6:8C34 LDA $4D0,X
BANK6:8C37 AND #$F ; state (81 - patrol, 82 - attack dw)
BANK6:8C39 BNE loc_50C51 ; present
BANK6:8C3B STA $530,X ; live state
BANK6:8C3E LDA #1
BANK6:8C40 STA $540,X ; pot.speed = 1
BANK6:8C43 INC $4D0,X ; init state "not viewing dw"
@spiiin
spiiin / adv_island_2_algo.asm
Created October 1, 2012 21:18
Adventure Island 2 [NES] Map movement algorithm
ROM:B676 ; =============== S U B R O U T I N E =======================================
ROM:B676
ROM:B676
ROM:B676 gen_next_level: ; CODE XREF: ROM:B45Ep
ROM:B676 LDA #0
ROM:B678 STA byte_DB ; счетчик переходов по пройденным этапам (до 4х раз)
ROM:B67A LDA byte_D1 ; текущее значение уровня
ROM:B67C STA byte_DA ; DA = текущее смещение в мапе
ROM:B67E
ROM:B67E generate_next: ; CODE XREF: gen_next_level+76j