mirror of
https://github.com/AxioDL/metaforce.git
synced 2025-12-09 04:27:42 +00:00
Collision flags and SFX type handling
This commit is contained in:
@@ -7,11 +7,17 @@ namespace DNAMP1
|
||||
|
||||
void DeafBabe::BlenderInit(hecl::BlenderConnection::PyOutStream& os)
|
||||
{
|
||||
os << "TYPE_COLORS = {'Ground':(1.0, 0.43, 0.15),\n"
|
||||
os << "TYPE_COLORS = {'NoSFX':(0.0, 0.0, 0.0),\n"
|
||||
" 'Ground':(1.0, 0.43, 0.15),\n"
|
||||
" 'Wood':(0.305, 0.159, 0.033),\n"
|
||||
" 'Stone':(0.28, 0.28, 0.28),\n"
|
||||
" 'Hard Stone':(0.1, 0.1, 0.1),\n"
|
||||
" 'Ice':(0.0, 0.1, 0.1),\n"
|
||||
" 'Metal':(0.5, 0.5, 0.5),\n"
|
||||
" 'Leaves':(0.61, 0.03, 0.05)}\n"
|
||||
" 'Grass':(0.0, 0.42, 0.01),"
|
||||
" 'Lava':(0.8, 0.15, 0.0),"
|
||||
" 'Mud':(0.119, 0.056, 0.023),"
|
||||
" 'Goo':(0.026, 0.467, 0.186),"
|
||||
" 'Sand':(0.539, 0.445, 0.216)}\n"
|
||||
"\n"
|
||||
"# Diffuse Color Maker\n"
|
||||
"def make_color(index, mat_type, name):\n"
|
||||
@@ -24,28 +30,88 @@ void DeafBabe::BlenderInit(hecl::BlenderConnection::PyOutStream& os)
|
||||
"\n"
|
||||
"bpy.types.Material.retro_collision_type = bpy.props.IntProperty(name='Retro: Collsion Type')\n"
|
||||
"bpy.types.Material.retro_projectile_passthrough = bpy.props.BoolProperty(name='Retro: Projectile Passthrough')\n"
|
||||
"bpy.types.Material.retro_ai_passthrough = bpy.props.BoolProperty(name='Retro: AI Passthrough')\n"
|
||||
"bpy.types.Material.retro_camera_passthrough = bpy.props.BoolProperty(name='Retro: Camera Passthrough')\n"
|
||||
"bpy.types.Material.retro_half_pipe = bpy.props.BoolProperty(name='Retro: Half Pipe')\n"
|
||||
"bpy.types.Material.retro_solid = bpy.props.BoolProperty(name='Retro: Solid')\n"
|
||||
"bpy.types.Material.retro_scan_passthrough = bpy.props.BoolProperty(name='Retro: Scan Passthrough')\n"
|
||||
"bpy.types.Material.retro_no_walk = bpy.props.BoolProperty(name='Retro: No Walk')\n"
|
||||
"\n"
|
||||
"material_dict = {}\n"
|
||||
"material_index = []\n"
|
||||
"def get_type_id(data):\n"
|
||||
"\n"
|
||||
" ret = 0\n"
|
||||
" for i in range(1, 24):\n"
|
||||
" if i == 5 or i == 13 or i in range(18, 22):\n"
|
||||
" continue\n"
|
||||
" if ((data >> i) & 1):\n"
|
||||
" ret = i\n"
|
||||
" return ret\n"
|
||||
"\n"
|
||||
"def select_material(data):\n"
|
||||
"\n"
|
||||
" type_id = data & 0xff\n"
|
||||
" type_id = get_type_id(data)\n"
|
||||
" mat_type = str(type_id)\n"
|
||||
" if type_id == 1:\n"
|
||||
" if type_id == 0:\n"
|
||||
" mat_type = 'NoSFX'\n"
|
||||
" if type_id == 1 or type_id == 14 or type_id == 22 or type_id == 23:\n"
|
||||
" mat_type = 'Ground'\n"
|
||||
" elif type_id == 3:\n"
|
||||
" mat_type = 'Stone'\n"
|
||||
" elif type_id == 4:\n"
|
||||
" mat_type = 'Hard Stone'\n"
|
||||
" elif type_id == 5:\n"
|
||||
" elif type_id == 2 or type_id == 6:\n"
|
||||
" mat_type = 'Metal'\n"
|
||||
" elif type_id == 9:\n"
|
||||
" mat_type = 'Leaves'\n"
|
||||
" elif type_id == 3 or type_id == 8:\n"
|
||||
" mat_type = 'Grass'\n"
|
||||
" elif type_id == 4 or type_id == 11:\n"
|
||||
" mat_type = 'Ice'\n"
|
||||
" elif type_id == 12:\n"
|
||||
" mat_type = 'Mud'\n"
|
||||
" elif type_id == 7:\n"
|
||||
" mat_type = 'Wood'\n"
|
||||
" elif type_id == 9 or type_id == 10:\n"
|
||||
" mat_type = 'Lava'\n"
|
||||
" elif type_id == 15 or type_id == 16:\n"
|
||||
" mat_type = 'Goo'\n"
|
||||
" elif type_id == 17:\n"
|
||||
" mat_type = 'Sand'\n"
|
||||
"\n"
|
||||
" mat_flags = ''\n"
|
||||
" if ((data >> 0) & 1):\n"
|
||||
" mat_flags += 'u0'\n"
|
||||
" if ((data >> 5) & 1):\n"
|
||||
" mat_flags += 'u5'\n"
|
||||
" if ((data >> 13) & 1):\n"
|
||||
" mat_flags += 'H'\n"
|
||||
" if ((data >> 18) & 1):\n"
|
||||
" mat_name = mat_type + ' Fire Through'\n"
|
||||
" else:\n"
|
||||
" mat_name = mat_type\n"
|
||||
" mat_flags += 'P'\n"
|
||||
" if ((data >> 19) & 1):\n"
|
||||
" mat_flags += 'K'\n"
|
||||
" if ((data >> 20) & 1):\n"
|
||||
" mat_flags += 'u20'\n"
|
||||
" if ((data >> 21) & 1):\n"
|
||||
" mat_flags += 'C'\n"
|
||||
" if ((data >> 22) & 1):\n"
|
||||
" mat_flags += 'u22'\n"
|
||||
" if ((data >> 23)& 1):\n"
|
||||
" mat_flags += 'u23'\n"
|
||||
" if ((data >> 24) & 1):\n"
|
||||
" mat_flags += 'A'\n"
|
||||
" if ((data >> 26) & 1):\n"
|
||||
" mat_flags += 'u26'\n"
|
||||
" if ((data >> 27) & 1):\n"
|
||||
" mat_flags += 'S'\n"
|
||||
" if ((data >> 28) & 1):\n"
|
||||
" mat_flags += 'u28'\n"
|
||||
" if ((data >> 29) & 1):\n"
|
||||
" mat_flags += 'u29'\n"
|
||||
" if ((data >> 30) & 1):\n"
|
||||
" mat_flags += 'N'\n"
|
||||
" if ((data >> 31) & 1):\n"
|
||||
" mat_flags += 'u31'\n"
|
||||
"\n"
|
||||
" if len(mat_flags) > 0:\n"
|
||||
" mat_flags = ' ' + mat_flags\n"
|
||||
"\n"
|
||||
" mat_name = mat_type + mat_flags\n"
|
||||
"\n"
|
||||
" if mat_name in material_index:\n"
|
||||
" return material_index.index(mat_name)\n"
|
||||
@@ -55,7 +121,13 @@ void DeafBabe::BlenderInit(hecl::BlenderConnection::PyOutStream& os)
|
||||
" else:\n"
|
||||
" mat = make_color(len(material_dict), mat_type, mat_name)\n"
|
||||
" mat.retro_collision_type = type_id\n"
|
||||
" mat.retro_half_pipe = ((data >> 13) & 1)\n"
|
||||
" mat.retro_projectile_passthrough = ((data >> 18) & 1)\n"
|
||||
" mat.retro_solid = ((data >> 19) & 1)\n"
|
||||
" mat.retro_camera_passthrough = ((data >> 21) & 1)\n"
|
||||
" mat.retro_ai_passthrough = ((data >> 24) & 1)\n"
|
||||
" mat.retro_scan_passthrough = ((data >> 27) & 1)\n"
|
||||
" mat.retro_no_walk = ((data >> 30) & 1)\n"
|
||||
" material_dict[mat_name] = mat\n"
|
||||
" material_index.append(mat_name)\n"
|
||||
" return len(material_index)-1\n"
|
||||
|
||||
Reference in New Issue
Block a user