Remove dma writing feature from OoT (#53)

This commit is contained in:
Zelllll
2021-12-09 16:56:12 -06:00
committed by GitHub
parent 846e868393
commit dbea1cef4b
4 changed files with 0 additions and 126 deletions
-2
View File
@@ -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)
-4
View File
@@ -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)