mirror of
https://github.com/ApfelTeeSaft/lightspeed64.git
synced 2026-09-02 19:26:03 +00:00
Remove dma writing feature from OoT (#53)
This commit is contained in:
@@ -1,8 +1,6 @@
|
||||
from .oot_level_c import *
|
||||
from .oot_dma_manager_c import *
|
||||
from .oot_scene_id_c import *
|
||||
from .oot_scene_table_c import *
|
||||
from .oot_segment_symbols_c import *
|
||||
from .oot_dmadata_s import *
|
||||
from .oot_spec import *
|
||||
from .oot_scene_folder import *
|
||||
@@ -1,61 +0,0 @@
|
||||
import os, re
|
||||
from ...utility import *
|
||||
|
||||
def getDmaMgrFileNameEntriesBySceneName(dmaMgrFileNames, sceneName):
|
||||
return [entry for entry in dmaMgrFileNames if \
|
||||
re.match(sceneName + "\_scene", entry) or re.match(sceneName + "\_room\_(\d)+", entry)]
|
||||
|
||||
def readDmaMgrFileNames(exportPath):
|
||||
fileData = readFile(os.path.join(exportPath, 'src/boot/z_std_dma.c'))
|
||||
|
||||
matchResult = re.search('sDmaMgrFileNames\s*\[[^\]]*\]\s*=\s*{([^\}]*)\}', fileData, re.DOTALL)
|
||||
if matchResult is None:
|
||||
raise PluginError("z_std_dma.c does not have sDmaMgrFileNames in it.")
|
||||
dmaMgrFileNames = parseDmaMgrFileNames(matchResult.group(1))
|
||||
|
||||
return dmaMgrFileNames, fileData, matchResult.start(0), matchResult.end(0)
|
||||
|
||||
def parseDmaMgrFileNames(data):
|
||||
dmaMgrFileNames = []
|
||||
for match in re.finditer('"([^"]*)",', data):
|
||||
name = match.group(1).strip()
|
||||
|
||||
dmaMgrFileNames.append(name)
|
||||
|
||||
return dmaMgrFileNames
|
||||
|
||||
def dmaMgrFileNamesToString(dmaMgrFileNames):
|
||||
data = ''
|
||||
for entry in dmaMgrFileNames:
|
||||
data += '\t"' + entry + '",\n'
|
||||
return data
|
||||
|
||||
def writeDmaMgrFileNames(dmaMgrFileNames, fileData, start, end, exportPath):
|
||||
dmaMgrFileNamesData = "sDmaMgrFileNames[" + format(len(dmaMgrFileNames), "#05x") + "] = {\n" +\
|
||||
dmaMgrFileNamesToString(dmaMgrFileNames) + '}'
|
||||
newFileData = fileData[:start] + dmaMgrFileNamesData + fileData[end:]
|
||||
|
||||
if newFileData != fileData:
|
||||
writeFile(os.path.join(exportPath, 'src/boot/z_std_dma.c'), newFileData)
|
||||
|
||||
def modifyDmaMgrFileNames(scene, exportInfo):
|
||||
exportPath = exportInfo.exportPath
|
||||
dmaMgrFileNames, fileData, start, end = readDmaMgrFileNames(exportPath)
|
||||
entries = getDmaMgrFileNameEntriesBySceneName(dmaMgrFileNames, scene.name if scene is not None else exportInfo.name)
|
||||
|
||||
if len(entries) > 0:
|
||||
firstIndex = dmaMgrFileNames.index(entries[0])
|
||||
for entry in entries:
|
||||
dmaMgrFileNames.remove(entry)
|
||||
else:
|
||||
firstIndex = len(dmaMgrFileNames)
|
||||
|
||||
if scene is not None:
|
||||
dmaMgrFileNames.insert(firstIndex, scene.name + "_scene")
|
||||
firstIndex += 1
|
||||
|
||||
for i in range(len(scene.rooms)):
|
||||
dmaMgrFileNames.insert(firstIndex, scene.name + "_room_" + str(i))
|
||||
firstIndex += 1
|
||||
|
||||
writeDmaMgrFileNames(dmaMgrFileNames, fileData, start, end, exportPath)
|
||||
@@ -1,59 +0,0 @@
|
||||
import os, re
|
||||
from ...utility import *
|
||||
|
||||
def getDmaTableEntryEntriesBySceneName(dmaTableEntries, sceneName):
|
||||
return [entry for entry in dmaTableEntries if \
|
||||
re.match(sceneName + "\_scene", entry) or re.match(sceneName + "\_room\_(\d)+", entry)]
|
||||
|
||||
def readDmaTableEntries(exportPath):
|
||||
fileData = readFile(os.path.join(exportPath, 'asm/dmadata.s'))
|
||||
|
||||
matchResult = re.search('glabel\s*gDmaDataTable\s*(.*)\.space\s*0x100', fileData, re.DOTALL)
|
||||
if matchResult is None:
|
||||
raise PluginError("dmadata.s does not have gDmaDataTable in it.")
|
||||
dmaTableEntries = parseDmaTableEntries(matchResult.group(1))
|
||||
|
||||
return dmaTableEntries, fileData, matchResult.start(1), matchResult.end(1)
|
||||
|
||||
def parseDmaTableEntries(data):
|
||||
dmaTableEntries = []
|
||||
for match in re.finditer('DMA_TABLE_ENTRY\s*([^\s]*)', data):
|
||||
name = match.group(1).strip()
|
||||
dmaTableEntries.append(name)
|
||||
|
||||
return dmaTableEntries
|
||||
|
||||
def dmaTableEntriesToString(dmaTableEntries):
|
||||
data = ''
|
||||
for entry in dmaTableEntries:
|
||||
data += 'DMA_TABLE_ENTRY ' + entry + '\n'
|
||||
return data
|
||||
|
||||
def writeDmaTableEntries(dmaTableEntries, fileData, start, end, exportPath):
|
||||
dmaTableEntriesData = dmaTableEntriesToString(dmaTableEntries)
|
||||
newFileData = fileData[:start] + dmaTableEntriesData + fileData[end:]
|
||||
|
||||
if newFileData != fileData:
|
||||
writeFile(os.path.join(exportPath, 'asm/dmadata.s'), newFileData)
|
||||
|
||||
def modifyDmaTableEntries(scene, exportInfo):
|
||||
exportPath = exportInfo.exportPath
|
||||
dmaTableEntries, fileData, start, end = readDmaTableEntries(exportPath)
|
||||
entries = getDmaTableEntryEntriesBySceneName(dmaTableEntries, scene.name if scene is not None else exportInfo.name)
|
||||
|
||||
if len(entries) > 0:
|
||||
firstIndex = dmaTableEntries.index(entries[0])
|
||||
for entry in entries:
|
||||
dmaTableEntries.remove(entry)
|
||||
else:
|
||||
firstIndex = len(dmaTableEntries)
|
||||
|
||||
if scene is not None:
|
||||
dmaTableEntries.insert(firstIndex, scene.name + "_scene")
|
||||
firstIndex += 1
|
||||
|
||||
for i in range(len(scene.rooms)):
|
||||
dmaTableEntries.insert(firstIndex, scene.name + "_room_" + str(i))
|
||||
firstIndex += 1
|
||||
|
||||
writeDmaTableEntries(dmaTableEntries, fileData, start, end, exportPath)
|
||||
@@ -130,8 +130,6 @@ def writeOtherSceneProperties(scene, exportInfo):
|
||||
modifySceneTable(scene, exportInfo)
|
||||
modifySegmentSymbols(scene, exportInfo)
|
||||
modifySceneIDs(scene, exportInfo)
|
||||
modifyDmaMgrFileNames(scene, exportInfo)
|
||||
modifyDmaTableEntries(scene, exportInfo)
|
||||
modifySegmentDefinition(scene, exportInfo)
|
||||
modifySceneFiles(scene, exportInfo)
|
||||
|
||||
@@ -581,8 +579,6 @@ def ootRemoveSceneC(exportInfo):
|
||||
modifySceneTable(None, exportInfo)
|
||||
modifySegmentSymbols(None, exportInfo)
|
||||
modifySceneIDs(None, exportInfo)
|
||||
modifyDmaMgrFileNames(None, exportInfo)
|
||||
modifyDmaTableEntries(None, exportInfo)
|
||||
modifySegmentDefinition(None, exportInfo)
|
||||
deleteSceneFiles(exportInfo)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user