diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b4fa7952..1b895ab0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -41,6 +41,8 @@ Metaforce is a non-matching decompilation, and often uses modern C++ features th ### Converting types +The python script at `tool/metaforce_renames.py` automates many simple renames listed next, but not everything works perfectly. + Metaforce -> decomp - `s8` -> `char` - `u8` -> `uchar` diff --git a/tools/metaforce_renames.py b/tools/metaforce_renames.py new file mode 100644 index 00000000..92339632 --- /dev/null +++ b/tools/metaforce_renames.py @@ -0,0 +1,79 @@ +import re +import argparse +from pathlib import Path + +_LITERAL_REPLACEMENTS = [ + ("std::string_view", "const rstl::string&"), + ("std::vector", "rstl::vector"), + ("std::list", "rstl::list"), + ("std::pair", "rstl::pair"), + ("std::optional", "rstl::optional_object"), + ("std::nullopt", "rstl::optional_object_null()"), + + ("zeus::CTransform", "CTransform4f"), + ("zeus::skZero2f", "CVector2f(0.f, 0.f)"), + ("zeus::skZero3f", "CVector3f::Zero()"), + ("zeus::skPurple", "CColor::Purple()"), + ("zeus::skWhite", "CColor::White()"), + ("zeus::CFrustum", "CFrustumPlanes"), + ("zeus::lookAt", "CTransform4f::LookAt"), + ("zeus::", ""), + ("u32 ", "uint "), + ("s32 ", "int "), + ("std::min(", "rstl::min_val("), + ("std::max(", "rstl::max_val("), + + ("DEFINE_ENTITY", ""), + ("visitor.Visit(this)", "visitor.Visit(*this)"), + + ("g_SimplePool", "gpSimplePool"), + ("g_Renderer", "gpRender"), + + # Vector + (".magnitude()", ".Magnitude()"), + (".normalized()", ".AsNormalized()"), + # Transform + (".frontVector()", ".GetForward()"), + + # Enums + ("EMaterialTypes::", "kMT_"), + ("CPlayer::EPlayerOrbitState::", "CPlayer::kOS_"), + ("CPlayer::ESurfaceRestraints::", "CPlayer::kSR_"), + ("CPlayer::EPlayerCameraState::", "CPlayer::kCS_"), + ("CPlayer::EPlayerMorphBallState::", "CPlayer::kMS_"), + ("CPlayer::EPlayerOrbitType::", "CPlayer::kOT_"), + ("CPlayer::EPlayerOrbitRequest::", "CPlayer::kOR_"), + ("CPlayer::EPlayerZoneInfo::", "CPlayer::kZI_"), + ("CPlayer::EPlayerZoneType::", "CPlayer::kZT_"), + ("CPlayer::EPlayerScanState::", "CPlayer::kSS_"), + ("CPlayer::EGrappleState::", "CPlayer::kGS_"), + ("CPlayer::EFootstepSfx::", "CPlayer::kFS_"), + ("CPlayer::EGunHolsterState::", "CPlayer::kGH_"), + ("CPlayerState::EPlayerVisor::", "CPlayerState::kPV_"), + ("CPlayerState::EPlayerSuit::", "CPlayerState::kPS_"), + ("CPlayerState::EBeamId::", "CPlayerState::kBI_"), + ("CPlayerState::EItemType::", "CPlayerState::kIT_"), +] +_RE_REPLACEMENTS = [ + (re.compile(r"SObjectTag{FOURCC\('(.*)'\),\s*(.*)}"), r"SObjectTag('\1', \2)"), +] + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("file", type=Path) + args = parser.parse_args() + + contents: str = args.file.read_text() + + for sub, replacement in _LITERAL_REPLACEMENTS: + contents = contents.replace(sub, replacement) + + for re_obj, replacement in _RE_REPLACEMENTS: + contents = re_obj.sub(replacement, contents) + + args.file.write_text(contents) + + +if __name__ == "__main__": + main() diff --git a/tools/metaforce_renames.sh b/tools/metaforce_renames.sh deleted file mode 100644 index a449d1a4..00000000 --- a/tools/metaforce_renames.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash - -set -e -path=$1 - -sed -i "s/std::string_view/const rstl::string\&/g" "$path" -sed -i "s/std::optional/rstl::optional_object/g" "$path" -sed -i "s/std::nullopt/rstl::optional_object_null()/g" "$path" -sed -i "s/zeus::CTransform/CTransform4f/g" "$path" -sed -i "s/zeus::skZero2f/CVector2f(0.f, 0.f)/g" "$path" -sed -i "s/zeus::skZero3f/CVector3f::Zero()/g" "$path" -sed -i "s/zeus::skPurple/CColor::Purple()/g" "$path" -sed -i "s/zeus::skWhite/CColor::White()/g" "$path" -sed -i "s/zeus::CFrustum/CFrustumPlanes/g" "$path" -sed -i "s/zeus:://g" "$path" -sed -i "s/DEFINE_ENTITY//g" "$path" -sed -i "s/visitor.Visit(this)/visitor.Visit(*this)/g" "$path"