[Scummvm-git-logs] scummvm master -> ae4833ce347d5fb88294440d5ff1b461c25c092e

aquadran noreply at scummvm.org
Sat Oct 26 21:45:20 UTC 2024


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
ae4833ce34 WINTERMUTE: Restore original code for 3ds keyframer


Commit: ae4833ce347d5fb88294440d5ff1b461c25c092e
    https://github.com/scummvm/scummvm/commit/ae4833ce347d5fb88294440d5ff1b461c25c092e
Author: Paweł Kołodziejski (aquadran at gmail.com)
Date: 2024-10-26T23:45:16+02:00

Commit Message:
WINTERMUTE: Restore original code for 3ds keyframer

Changed paths:
    engines/wintermute/base/gfx/3dloader_3ds.cpp


diff --git a/engines/wintermute/base/gfx/3dloader_3ds.cpp b/engines/wintermute/base/gfx/3dloader_3ds.cpp
index 6b4d3ac5903..6123b7a9ff6 100644
--- a/engines/wintermute/base/gfx/3dloader_3ds.cpp
+++ b/engines/wintermute/base/gfx/3dloader_3ds.cpp
@@ -28,18 +28,28 @@
 
 namespace Wintermute {
 
-#define MAIN3DS               0x4D4D // level 1
-#define EDIT3DS               0x3D3D // level 1
-#define NAMED_OBJECT          0x4000 // level 2
-#define TRIANGLE_MESH         0x4100 // level 3
-#define TRIANGLE_VERTEXLIST   0x4110 // level 4
-#define TRIANGLE_FACELIST     0x4120 // level 4
-#define CHUNK_CAMERA          0x4700 // level 3
-#define CHUNK_LIGHT           0x4600
-#define LIGHT_SPOTLIGHT       0x4610
-#define LIGHT_IS_OFF          0x4620
-#define RGB_FLOAT             0x0010
-#define RGB_BYTE              0x0011
+#define MAIN3DS                       0x4D4D // level 1
+#define EDIT3DS                       0x3D3D // level 1
+#define NAMED_OBJECT                  0x4000 // level 2
+#define TRIANGLE_MESH                 0x4100 // level 3
+#define TRIANGLE_VERTEXLIST           0x4110 // level 4
+#define TRIANGLE_FACELIST             0x4120 // level 4
+#define CHUNK_CAMERA                  0x4700 // level 3
+#define CHUNK_LIGHT                   0x4600
+#define LIGHT_SPOTLIGHT               0x4610
+#define LIGHT_IS_OFF                  0x4620
+#define RGB_FLOAT                     0x0010
+#define RGB_BYTE                      0x0011
+#define KEYFRAMER                     0xB000 // level 1
+#define KEYFRAMER_AMBIENT_INFO        0xB001
+#define KEYFRAMER_MESH_INFO           0xB002
+#define KEYFRAMER_CAMERA_INFO         0xB003
+#define KEYFRAMER_CAMERA_TARGET_INFO  0xB004
+#define KEYFRAMER_OMNI_INFO           0xB005
+#define KEYFRAMER_SPOT_TARGET_INFO    0xB006
+#define KEYFRAMER_SPOT_INFO           0xB007
+#define NODE_HDR                      0xB010
+#define ROLL_TRACK_TAG                0xB024
 
 
 //////////////////////////////////////////////////////////////////////////
@@ -91,6 +101,8 @@ bool Loader3DS::parseFile(const Common::String &filename) {
 	if (!buffer)
 		return false;
 
+	uint16 keyframerSection = 0;
+	Common::String keyframerObject;
 	FileObject3DS *obj = nullptr;
 	uint16 i;
 
@@ -241,6 +253,70 @@ bool Loader3DS::parseFile(const Common::String &filename) {
 					handled = false;
 			break;
 
+			// keyframer stuff
+			case KEYFRAMER:
+			break;
+
+			case KEYFRAMER_AMBIENT_INFO:
+			case KEYFRAMER_MESH_INFO:
+			case KEYFRAMER_CAMERA_INFO:
+			case KEYFRAMER_CAMERA_TARGET_INFO:
+			case KEYFRAMER_OMNI_INFO:
+			case KEYFRAMER_SPOT_TARGET_INFO:
+			case KEYFRAMER_SPOT_INFO:
+				keyframerSection = chunkId;
+			break;
+
+			case NODE_HDR:
+				// object name
+				keyframerObject.clear();
+				for (int8 current = fileStream.readByte(); current != 0; current = fileStream.readByte()) {
+					keyframerObject.insertChar(current, keyframerObject.size());
+				}
+				// flags1
+				fileStream.readUint16LE();
+				// flags2
+				fileStream.readUint16LE();
+				// hierarchy
+				fileStream.readUint16LE();
+			break;
+
+			case ROLL_TRACK_TAG:
+				if (keyframerSection == KEYFRAMER_CAMERA_INFO && !keyframerObject.empty()) {
+					// flags
+					fileStream.readUint16LE();
+					// unknown
+					fileStream.readUint16LE();
+					fileStream.readUint16LE();
+					fileStream.readUint16LE();
+					fileStream.readUint16LE();
+					// keys
+					uint16 keys = fileStream.readUint16LE();
+					// unknown
+					fileStream.readUint16LE();
+
+					for (uint16 key = 0; key < keys; key++) {
+						// frame number
+						fileStream.readUint16LE();
+						// unknown
+						fileStream.readUint32LE();
+						// camera roll
+						float cameraRoll = fileStream.readFloatLE();
+
+						// inject this roll value to the camera
+						if (key == 0) {
+							for (size_t index = 0; index < _objects.size(); index++) {
+								if (_objects[index]->_type == OBJ_3DS_CAMERA && _objects[index]->_name == keyframerObject) {
+									_objects[index]->_cameraBank = cameraRoll;
+									break;
+								}
+							}
+						}
+					}
+				} else
+					handled = false;
+				break;
+
 			default:
 				handled = false;
 		}




More information about the Scummvm-git-logs mailing list