sm64ex-coop/build-windows-visual-studio/behavior_table/generate.py

43 lines
1.4 KiB
Python

behaviors = []
with open('behavior_data.c', 'r') as f:
lines = f.readlines()
with open('../../data/behavior_data.c', 'w+') as f:
line_number = -1
current_behavior = None
for line in lines:
f.write(line)
if current_behavior is not None:
f.write(' ID(id_' + current_behavior + '),\n')
current_behavior = None
line_number += 1
if not line.startswith('const BehaviorScript'):
continue
if 'BEGIN(' not in lines[line_number + 1]:
continue
behavior_name = line.split('const BehaviorScript ')[1].split('[]')[0]
current_behavior = behavior_name
behaviors.append(behavior_name)
with open('../../include/behavior_table.h', 'w+') as f:
f.write('#ifndef BEHAVIOR_TABLE_H\n')
f.write('#define BEHAVIOR_TABLE_H\n\n')
f.write('extern BehaviorScript* gBehaviorTable;\n\n')
f.write('enum BehaviorId {\n')
for behavior in behaviors:
f.write(' id_' + behavior + ',\n')
f.write(' id_bhv_max_count // must be the last in the list\n')
f.write('};\n')
f.write('#endif\n')
with open('../../data/behavior_table.c', 'w+') as f:
f.write('#include "behavior_table.h"\n\n')
f.write('BehaviorScript* gBehaviorTable[id_bhv_max_count] = {\n')
for behavior in behaviors:
f.write(' [id_' + behavior + '] = &' + behavior + ',\n')
f.write('};\n')
print(str(behaviors))