diff options
| author | coco875 <59367621+coco875@users.noreply.github.com> | 2024-09-17 17:32:50 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-09-17 09:32:50 -0600 |
| commit | 203090e5913f79df01ee273e40dea03b294f061e (patch) | |
| tree | 2ee78c50742b20238c07610b8ba9f7f93c3a80e1 /tools | |
| parent | d36d7dcd604d0f85b6b547a85e9b7a4fe3e59b5c (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.py | 147 | ||||
| -rw-r--r-- | tools/blender/blender_export.py | 48 | ||||
| -rw-r--r-- | tools/blender/clean_scene.py | 43 | ||||
| -rw-r--r-- | tools/blender/extract_models.py | 52 | ||||
| m--------- | tools/blender/fast64 | 0 | ||||
| -rw-r--r-- | tools/blender/fast64_run.py | 19 |
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 |
