Esempio n. 1
0
def analyse_event_list(analyser, input, address, name, reference = InsReference(FE6_ELIST_INS_REFERENCE_ADDR)):
	"""
	Analysis handler for event lists ("main codes").
	"""

	ea = EvListAnalyser(reference, analyser, input, address, name)

	while not ea.ended:
		ea.analyse_next()

	return anal.AnalysedObject(
		address, ea.address - address, ANAL_KEY_EVLIST, anal.read_data_at(input, address, ea.address - address), name)
Esempio n. 2
0
def analyse_scene(analyser, input, address, name, reference = InsReference(FE6_SCENE_INS_REFERENCE_ADDR)):
	"""
	Analysis handler for scenes.
	Encapsulates a SceneAnalyser doing its thing.
	"""

	sa = SceneAnalyser(reference, analyser, input, address, name)

	while not sa.ended:
		sa.analyse_next()

	return anal.AnalysedObject(
		address, sa.address - address, ANAL_KEY_SCENE, anal.read_data_at(input, address, sa.address - address), name)
Esempio n. 3
0
def analyse_items(analyser, input, address, name):
	"""
	Analysis handler for shop item lists.
	"""

	input.seek(anal.addr_to_offset(address))
	start = address

	while True:
		item = anal.read_int(input, 2)
		address = address + 2

		if item == 0:
			break

	return anal.AnalysedObject(
		start, address - start, ANAL_KEY_ITEMS, anal.read_data_at(input, start, address - start), name)
Esempio n. 4
0
def analyse_units(analyser, input, address, name):
	"""
	Analysis handler for unit groups.
	"""

	start = address

	while True:
		input.seek(anal.addr_to_offset(address))
		charId = anal.read_int(input, 1)

		address = address + 0x10

		if charId == 0:
			break

	return anal.AnalysedObject(
		start, address - start, ANAL_KEY_UNITS, anal.read_data_at(input, start, address - start), name)
Esempio n. 5
0
def analyse_chapter_events(analyser, input, address, name):
	"""
	Analysis handler for chapter events root ("pointer arrays").
	"""

	input.seek(anal.addr_to_offset(address))

	analyser.enqueue_analysis(anal.read_int(input, 4), ANAL_KEY_EVLIST, name + ".turn") # turn events
	analyser.enqueue_analysis(anal.read_int(input, 4), ANAL_KEY_EVLIST, name + ".char") # character events
	analyser.enqueue_analysis(anal.read_int(input, 4), ANAL_KEY_EVLIST, name + ".loca") # location events
	analyser.enqueue_analysis(anal.read_int(input, 4), ANAL_KEY_EVLIST, name + ".action") # misc events

	analyser.enqueue_analysis(anal.read_int(input, 4), ANAL_KEY_UNITS, name + ".blue") # initial blue units
	analyser.enqueue_analysis(anal.read_int(input, 4), ANAL_KEY_UNITS, name + ".red") # initial red units

	analyser.enqueue_analysis(anal.read_int(input, 4), ANAL_KEY_SCENE, name + ".ending") # ending scene

	return anal.AnalysedObject(
		address, 0x1C, ANAL_KEY_PTRLIST, anal.read_data_at(input, address, 0x1C), name)
Esempio n. 6
0
def analyse_moma(analyser, input, address, name):
	"""
	Analysis handler for movement scripts ("MOMAs").
	"""

	input.seek(anal.addr_to_offset(address))
	start = address

	while True:
		cmd = anal.read_int(input, 1, True)
		address = address + 1

		if (cmd == 12):
			anal.read_int(input, 1) # void speed
			address = address + 1

		elif (cmd == -1) | (cmd == 4):
			break

	return anal.AnalysedObject(
		start, address - start, ANAL_KEY_MOMA, anal.read_data_at(input, start, address - start), name)