summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorcoco875 <59367621+coco875@users.noreply.github.com>2024-09-17 17:32:50 +0200
committerGitHub <noreply@github.com>2024-09-17 09:32:50 -0600
commit203090e5913f79df01ee273e40dea03b294f061e (patch)
tree2ee78c50742b20238c07610b8ba9f7f93c3a80e1 /tools
parentd36d7dcd604d0f85b6b547a85e9b7a4fe3e59b5c (diff)
update with the decomp (#97)
* Update menus.c (#634) * Update common_data.yml (#635) * Renames for screenId and other changes (#636) * screenId renames * Rename surface map to collision mesh (#637) * Rename some stack vars (#638) * Fix syntax error (#639) * Rename some stack vars * Update collision.c * Collision Documentation (#640) * Collision related renames * update doxygen (#649) * change bool (#644) Co-authored-by: MegaMech <MegaMech@users.noreply.github.com> * Update (#642) * Delete trig_tables_bss.c (#650) * fix typo audio (#656) * fix typo src actor (#657) Co-authored-by: MegaMech <MegaMech@users.noreply.github.com> * fix typo include (#658) Co-authored-by: MegaMech <MegaMech@users.noreply.github.com> * fix course (#659) Co-authored-by: MegaMech <MegaMech@users.noreply.github.com> * fix typo debug (#660) Co-authored-by: MegaMech <MegaMech@users.noreply.github.com> * fix typo data (#661) Co-authored-by: MegaMech <MegaMech@users.noreply.github.com> * replace number with const (#665) * fix typo buffers (#655) * fix typo buffers * tweak ld file * rename to sMemoryPool * add a warning --------- Co-authored-by: MegaMech <MegaMech@users.noreply.github.com> * fix typo src (#654) * fix typo src * fix non matcing * Update code_80091750.c --------- Co-authored-by: MegaMech <MegaMech@users.noreply.github.com> * fix typo racing (#653) * fix typo racing * get it match * replace G_LINE3D to G_QUAD --------- Co-authored-by: MegaMech <MegaMech@users.noreply.github.com> * fix typo src (#652) Co-authored-by: MegaMech <MegaMech@users.noreply.github.com> * fix ending typo (#651) * Action more info when it doesn't match and fix first diff (#662) * Update linux-compile.yml * fix first-diff * Update first-diff.py --------- Co-authored-by: MegaMech <MegaMech@users.noreply.github.com> * document texture of kart (#663) * document texture of kart * change screenPlayerId to screenId * some documentation around object * Revert "some documentation around object" This reverts commit cbb39078e036bf2a417bed67359e910213acab28. * more rename --------- Co-authored-by: MegaMech <MegaMech@users.noreply.github.com> * Make evaluate_collision_players_palm_tree better (#667) This matches just the same as before, but using those two casts instead of shifts seems more likely to be accurate to the original source code Signed-off-by: Gabriel Ravier <gabravier@gmail.com> * add fedora instruciton (#666) Co-authored-by: MegaMech <MegaMech@users.noreply.github.com> * start documenting animation (#668) * start documenting animation * Update course_data.c * change comment * update libultra asm (#648) * update libultra asm * fix gcc __osThreadTail --------- Co-authored-by: MegaMech <MegaMech@users.noreply.github.com> * Document Vehicles (#641) * start doc collision * fix merge * finish rename fonction related to vehicle * document around waypoint of vehicle * make some modification * make some change and rename one * copy_ to oldPos * doc smoke ferry and train * some rename * fix some renaming * precise index * rename a funciton * simplify waypoint_vehicles * change some name * change some name * rename move_to_point_direction * fix some conflict * Update code_80005FD0.c * Update code_80005FD0.h --------- Co-authored-by: MegaMech <MegaMech@users.noreply.github.com> * Label a save info loop (#645) * save info * more gcc progress * fix a value and do a rename (#669) * update clang and add action (#664) * update clang and add action * try clang on course folder only * forget two file * Update course_displaylists.inc.c * forget few other file * Update course_vertices.inc.c * format all code while get it match * second pass * format other dir * disable clang format on bad ido code * fix some tabulation * revert format on tool dir * Update clang-format.yml * ignore gbi.h * add some read me instruction * fix error * format and fixing error * Update README.md --------- Co-authored-by: MegaMech <MegaMech@users.noreply.github.com> * Update linkonly_generator.py (#670) * some rename for torch (#588) * rename gBombKartSpawns, and fix cup ID * Update doxygen_syms.md * rename for gCourseIndexInCup and his constant * rename to gCupSelectedCourseIndex * forget a change in constant * fix compilation issue * Update Dockerfile to latest Ubuntu LTS + fixed missing cmake (#674) * Fix color font matrix function (#676) * Fix label variables used in menus (#675) * Fix label variables used in menus * split D_800F2BDC and clang format menu.c --------- Co-authored-by: coco875 <pereira.jannin@gmail.com> * Fix some libultra struct types (#677) * Uintptr (#671) * Update render_courses.c * Update math_util.c * Update math_util.c * Update math_util.h * Update render_courses.c * Clang suggest (#678) * add clang suggestion * Update clang-format-suggest.yml * Update clang-format-suggest.yml * simplify * switch to ubuntu * Update clang-format-suggest.yml * update ubuntu --------- Co-authored-by: MegaMech <MegaMech@users.noreply.github.com> * Clang pr (#679) * Create clang-pr.yml * Update clang-pr.yml * Update osCreateMesgQueue.c * Update osCreateMesgQueue.c * Update clang-pr.yml * Update clang-pr.yml * Update clang-format.yml * clang format (#680) Co-authored-by: MegaMech <7255464+MegaMech@users.noreply.github.com> * some rename in ceremony (#647) * rename ceremony * apply some suggestion * some rename --------- Co-authored-by: MegaMech <MegaMech@users.noreply.github.com> * clang format (#681) Co-authored-by: MegaMech <7255464+MegaMech@users.noreply.github.com> * Rename Object Timing Related Code (#673) * start making models extraction with blender * finishing extract model * Update fast64 * extract course * Update fast64 * Update fast64 * simplify import of course_displaylists and course_textures and remplace adress with texture * Update fast64 * change data format and simplify the thread queue * move in a blender folder * remove fast64 * re add fast64 * add model_extract and fast64_blender in makefile * multithread with make file split the models into multiple json and add course segment * Update fast64 * remove old model_extract * remove the error when he don't find blender * start rename around course section * rename around object * update submodule fast64 * fix compilation issue and add some model to extract * Update fast64 * remove fast64 * re add fast64 * update submodule * fix compilation issue * add other collision gfx and prepare reorganise file * re arrange json * Create README.MD * Update README.MD * Update README.MD * update fast64 * rename to initiate_next_state * Revert "Merge branch '3d-objects' into general-object" This reverts commit f5347b38cc75af4d10ee3726dc1524c1c71d6849, reversing changes made to a353c4d954fb5b50c8b48fe3f9d67c95ccaab299. * revert the revert... * revert 3d-models PR * finish some revert * Update code_80005FD0.c * fix code_80091750.c * Update code_80091750.c * rename isTimerRunning to isTimerActive and set_object_timer_running to set_object_timer_state * rename to initialize_next_state * rename to object_next_state --------- Co-authored-by: MegaMech <MegaMech@users.noreply.github.com> * extract models with blender (#577) * start making models extraction with blender * finishing extract model * Update fast64 * extract course * Update fast64 * Update fast64 * simplify import of course_displaylists and course_textures and remplace adress with texture * Update fast64 * change data format and simplify the thread queue * move in a blender folder * remove fast64 * re add fast64 * add model_extract and fast64_blender in makefile * multithread with make file split the models into multiple json and add course segment * Update fast64 * remove old model_extract * remove the error when he don't find blender * start rename around course section * update submodule fast64 * fix compilation issue and add some model to extract * Update fast64 * remove fast64 * re add fast64 * update submodule * fix compilation issue * add other collision gfx and prepare reorganise file * re arrange json * Create README.MD * Update README.MD * Update README.MD * update fast64 --------- Co-authored-by: MegaMech <MegaMech@users.noreply.github.com> * other * fix some error of compilation * finish fix all error --------- Signed-off-by: Gabriel Ravier <gabravier@gmail.com> Co-authored-by: MegaMech <MegaMech@users.noreply.github.com> Co-authored-by: Gabriel Ravier <gabravier@gmail.com> Co-authored-by: MisterSheeple <27652712+MisterSheeple@users.noreply.github.com> Co-authored-by: AloXado320 <38191089+AloXado320@users.noreply.github.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: MegaMech <7255464+MegaMech@users.noreply.github.com>
Diffstat (limited to 'tools')
-rw-r--r--tools/actualise_type/main.py147
-rw-r--r--tools/blender/blender_export.py48
-rw-r--r--tools/blender/clean_scene.py43
-rw-r--r--tools/blender/extract_models.py52
m---------tools/blender/fast640
-rw-r--r--tools/blender/fast64_run.py19
6 files changed, 162 insertions, 147 deletions
diff --git a/tools/actualise_type/main.py b/tools/actualise_type/main.py
deleted file mode 100644
index 9f1246a93..000000000
--- a/tools/actualise_type/main.py
+++ /dev/null
@@ -1,147 +0,0 @@
-import os
-import re
-import argparse
-
-parser = argparse.ArgumentParser(description='Actualise type in C code')
-parser.add_argument('-k', '--know_the_unknow', action='store_true', help='replace ? by type if is found somewhere')
-parser.add_argument('-cv', "--change_var_name", action='store_true', help='change var name')
-parser.add_argument("-cf", "--change_type_var", action='store_true', help="change type of var")
-
-arg = parser.parse_args()
-
-root = "."
-
-var:dict[str,str] = {}
-number_type_var = {}
-ban_type = [
- "extern",
- "struct",
- "static",
- "UNUSED",
- "?",
- "include",
- "const",
- "case",
- "ALIGNED8",
- "typedef"
-]
-static = {}
-
-def check_file_and_folder(path:str, name:str) -> bool:
- if not (name.endswith(".c") or name.endswith(".h")):
- return True
-
- if "tools" in path:
- return True
-
- return False
-
-def replace_type(var_name: str, var_type: str, chn: str) -> str:
- if var_name in chn:
- result = re.sub(rf"(?! )\w+ {var_name}", f"{var_type} {var_name}", chn)
- result = re.sub(rf"(?! )\? {var_name}", f"{var_type} {var_name}", chn)
- else:
- result = chn
- return result
-
-def find_type(prefix = ""):
- for path, subdirs, files in os.walk(root):
- for name in files:
- if check_file_and_folder(path, name):
- continue
-
- print(os.path.join(path, name))
-
- with open(os.path.join(path, name)) as f:
- data = f.read()
-
- if prefix=="":
- result = re.findall(r'\n(\w+) (\w+)', data)
- else:
- result = re.findall(r'\n'+prefix+r' (\w+) (\w+)', data)
-
- for i in result:
-
- if i[1] == "//" or (i[0] in ban_type) or len(i[1])<1:
- continue
-
- var[i[1]] = i[0]
-
- if i[0] in number_type_var:
- number_type_var[i[0]] += 1
- else:
- number_type_var[i[0]] = 1
-
-def know_the_unknow():
- find_type()
-
- find_type("static")
-
- find_type("const")
-
- find_type("struct")
-
- find_type("extern")
-
- print(var)
-
- for path, subdirs, files in os.walk(root):
- for name in files:
- if check_file_and_folder(path, name):
- continue
-
- print(os.path.join(path, name))
- with open(os.path.join(path, name), "r+") as f:
- data = f.read()
- for i in var:
- data = replace_type(i, var[i], data)
-
- f.seek(0)
- f.write(data)
-
-def change_var_name():
-
- old_name = input("Old name: ")
- new_name = input("New name: ")
-
- for path, subdirs, files in os.walk(root):
- for name in files:
- if check_file_and_folder(path, name):
- continue
-
- print(os.path.join(path, name))
- with open(os.path.join(path, name), "r+") as f:
- data = f.read()
- data = data.replace(old_name, new_name)
-
- f.seek(0)
- f.write(data)
-
-def change_type_var():
- name_var = input("Name var: ")
- new_type = input("New type: ")
-
- for path, subdirs, files in os.walk(root):
- for name in files:
- if check_file_and_folder(path, name):
- continue
-
- print(os.path.join(path, name))
- with open(os.path.join(path, name), "r+") as f:
- data = f.read()
- data = replace_type(name_var, new_type, data)
-
- f.seek(0)
- f.write(data)
-
-def main():
- if arg.know_the_unknow:
- print("actualise type")
- know_the_unknow()
- elif arg.change_var_name:
- change_var_name()
- elif arg.change_type_var:
- change_type_var()
-
-if __name__ == "__main__":
- main() \ No newline at end of file
diff --git a/tools/blender/blender_export.py b/tools/blender/blender_export.py
new file mode 100644
index 000000000..21995a87f
--- /dev/null
+++ b/tools/blender/blender_export.py
@@ -0,0 +1,48 @@
+import bpy
+import os
+import sys
+
+
+sys.path.append('tools/blender')
+import fast64
+from fast64.fast64_internal.f3d.f3d_gbi import get_F3D_GBI
+from fast64.fast64_internal.f3d.f3d_material import createF3DMat
+from fast64.fast64_internal.f3d.f3d_parser import F3DContext, getImportData, importMeshC
+from fast64.fast64_internal.mk64 import MK64_Properties
+from fast64.fast64_internal.mk64.f3d.operators import MK64_ImportCourseDL
+from fast64.fast64_internal.mk64.f3d.properties import MK64CourseDLImportSettings
+
+from clean_scene import clean_scene
+
+dir_path = os.path.dirname(os.path.realpath(__file__))
+dir_path = dir_path.replace("\\", "/")
+dir_path = os.path.dirname(dir_path)
+dir_path = os.path.dirname(dir_path)
+
+print(dir_path)
+
+fast64.register()
+
+class FakeOperator:
+ def __init__(self):
+ self.report = lambda x, y: print(y)
+
+argv = sys.argv
+argv = argv[argv.index("--") + 1:] # get all args after "--"
+
+bpy.context.scene.gameEditorMode = "MK64"
+mk64_settings: MK64_Properties = bpy.context.scene.fast64.mk64
+course_DL_import_settings: MK64CourseDLImportSettings = mk64_settings.course_DL_import_settings
+base_path = bpy.path.abspath(dir_path)
+
+file = argv[0]
+obj = argv[1]
+out_file = argv[2]
+
+course_DL_import_settings.name = obj
+course_DL_import_settings.path = file
+course_DL_import_settings.base_path = base_path
+
+clean_scene()
+MK64_ImportCourseDL.execute(FakeOperator(),bpy.context)
+bpy.ops.wm.save_as_mainfile(filepath=out_file) \ No newline at end of file
diff --git a/tools/blender/clean_scene.py b/tools/blender/clean_scene.py
new file mode 100644
index 000000000..2e054b6c0
--- /dev/null
+++ b/tools/blender/clean_scene.py
@@ -0,0 +1,43 @@
+import bpy
+
+def purge_orphans():
+ if bpy.app.version >= (3, 0, 0):
+ bpy.ops.outliner.orphans_purge(
+ do_local_ids=True, do_linked_ids=True, do_recursive=True
+ )
+ else:
+ # call purge_orphans() recursively until there are no more orphan data blocks to purge
+ result = bpy.ops.outliner.orphans_purge()
+ if result.pop() != "CANCELLED":
+ purge_orphans()
+
+
+def clean_scene():
+ """
+ Removing all of the objects, collection, materials, particles,
+ textures, images, curves, meshes, actions, nodes, and worlds from the scene
+ """
+ if bpy.context.active_object and bpy.context.active_object.mode == "EDIT":
+ bpy.ops.object.editmode_toggle()
+
+ for obj in bpy.data.objects:
+ obj.hide_set(False)
+ obj.hide_select = False
+ obj.hide_viewport = False
+
+ bpy.ops.object.select_all(action="SELECT")
+ bpy.ops.object.delete()
+
+ collection_names = [col.name for col in bpy.data.collections]
+ for name in collection_names:
+ bpy.data.collections.remove(bpy.data.collections[name])
+
+ # in the case when you modify the world shader
+ world_names = [world.name for world in bpy.data.worlds]
+ for name in world_names:
+ bpy.data.worlds.remove(bpy.data.worlds[name])
+ # create a new world data block
+ bpy.ops.world.new()
+ bpy.context.scene.world = bpy.data.worlds["World"]
+
+ purge_orphans() \ No newline at end of file
diff --git a/tools/blender/extract_models.py b/tools/blender/extract_models.py
new file mode 100644
index 000000000..14cd3a66d
--- /dev/null
+++ b/tools/blender/extract_models.py
@@ -0,0 +1,52 @@
+import json
+import subprocess
+import threading
+import os
+import argparse
+
+parser = argparse.ArgumentParser(description="Extract 3D models from .blend files")
+parser.add_argument("blender", type=str, help="Path to blender executable")
+parser.add_argument("json_file", type=str, help="Path to json file with models")
+parser.add_argument("-t", "--threads", type=int, default=1, help="Number of threads to use")
+args = parser.parse_args()
+
+if not os.path.exists("models"):
+ os.makedirs("models")
+
+models:list[dict[str, str|list[str]]] = json.load(open(args.json_file))
+
+blender = args.blender
+
+args_blender = [
+ "--background",
+ "--python",
+ "tools/blender/blender_export.py",
+ "--",
+]
+
+failed = []
+
+for model in models:
+ file = model["file"]
+ out_dir = "models/"+model["out_dir"] if "out_dir" in model else "models"
+ if not os.path.exists(out_dir):
+ os.makedirs(out_dir)
+ for obj in model["models"]:
+ out_file = out_dir+"/"+obj+".blend"
+ if os.path.exists(out_file):
+ continue
+ args_blender.append(file)
+ args_blender.append(obj)
+ args_blender.append(out_file)
+ result = subprocess.run([blender]+args_blender)
+ if result.returncode != 0:
+ failed.append(out_file)
+ args_blender.pop()
+ args_blender.pop()
+ args_blender.pop()
+
+if len(failed) == 0:
+ print("All models exported successfully")
+else:
+ print("Failed to export:")
+ print("\n".join(failed)) \ No newline at end of file
diff --git a/tools/blender/fast64 b/tools/blender/fast64
new file mode 160000
+Subproject d89593c8ccde9ef511e96ec1f0169988d60fc0a
diff --git a/tools/blender/fast64_run.py b/tools/blender/fast64_run.py
new file mode 100644
index 000000000..963d4caff
--- /dev/null
+++ b/tools/blender/fast64_run.py
@@ -0,0 +1,19 @@
+import sys
+import os
+import bpy
+sys.path.append('tools/blender')
+import fast64
+from fast64.fast64_internal.mk64 import MK64_Properties
+from fast64.fast64_internal.mk64.f3d.properties import MK64CourseDLImportSettings
+fast64.register()
+dir_path = os.path.dirname(os.path.realpath(__file__))
+dir_path = dir_path.replace("\\", "/")
+dir_path = os.path.dirname(dir_path)
+dir_path = os.path.dirname(dir_path)
+
+bpy.context.scene.gameEditorMode = "MK64"
+mk64_settings: MK64_Properties = bpy.context.scene.fast64.mk64
+import_settings: MK64CourseDLImportSettings = mk64_settings.course_DL_import_settings
+import_settings.name = "d_course_rainbow_road_dl_D8"
+import_settings.path = dir_path+"/courses/rainbow_road/course_data.c"
+import_settings.base_path = dir_path \ No newline at end of file