Jump to content


  • Content count

  • Joined

  • Last visited

  • Medals

Community Reputation

46 Excellent

About t_d

  • Rank
    Gunnery Sergeant

Contact Methods

  • Website URL
  • Skype

Profile Information

  1. Another update: The MLOD file format was also added. It is the editable format of p3d files.
  2. The OPRW (binarized wrp) file format is now added in BIS.WRP package. Normal WRP is currently not implemented. It is not difficult though and maybe someone would like to "donate" code for that :)
  3. A few days ago I decided to put most of the code to public that I created in many years working with ArmA file formats. So I put it on GitHub here. While there are a lot of PBO libs already floating around it is quite rare for other files like PAA, RTM etc. My idealistic goal for this project would be that it evolves to an active open source project where contributors add useful and easy to use APIs and add more features. This would facilitate creative tool developers to create tools that are working with those files, which they could not before, because they did not know the file format or it was too much work to implement it. So don't be shy, make some Pull Requests and improve or extend the code. Or Post ideas how to improve/extend the API. I will also add more file formats like OPRW (binarized wrp) and probably MLOD (editable p3d). However, ODOL (binarized p3d) will be not included for certain reasons.
  4. TransformMatrix

    There are so many ways to create such transformations matrices: Most commonly you create a matrix for each operation you want to perform like rotating, scaling, translating, mirroring etc. and then you multiply those in order of the operations to get a single matrix that holds all those operations. Here you can see how those single operation matrices are built.
  5. .tv4l or .lbt files?

    Those are not documented. However, I know the basic structure of tv4l files. It is basically a list of name and value pairs with the possibilities of more complex values like lists or records. And a big chunk in the layer files is a quad tree containing object information.
  6. To calculate the values of 3DEN you should find out what they actually are, i.e. what unit and what kind of coordinate system, what kind of angles, value range etc. We know this for both commands you noted. getDir for example returns a value between 0 - 360 in degrees and it is working counterclockwise starting with the north direction at 0. If we assume X,Y and Z are Euler angles than one of those definately corresponds to the value of getDir. It might be that they use a different unit like radians instead of degrees or a different value range (-180°-180°) but it would be possible to calculate the 3DEN value from the getDir command. So, since I dont know what kind of values are used in 3DEN I cannot tell you exactly how to calculate them, but maybe someone knows that or you do some measurements to find out some hard facts. For example do you need a value of 90 or Pi/2 to rotate something by 90°? That would give a hint about the unit.
  7. I am very sorry for the long down time, but the service is back :) I want to thank Maverick Applications for hosting the site, so long down times should be a thing of the past. The new home is https://odolconverter.maverick-applications.com but http://odolconverter.t-db.de/ is still working too.
  8. Sry for the long delay, but the service is up again.
  9. Here is how BIS seems to simulate free falling bombs: https://pastebin.com/teQntUBp (already stripped down most of the unimportant code). Maybe you can deduce a formula from this. Let me know if something is unclear and I will try to explain. Vector3Val position = FutureVisualState().Position(); Vector3Val speed = FutureVisualState().ModelSpeed(); float mass = GetMass(); Vector3 force(VZero), torque(VZero); Vector3 friction(VZero), torqueFriction(VZero); Vector3 pForce(VZero), pCenter(VZero); // body air friction pForce[0] = speed[0] * speed[0] * speed[0] * 5e-4f + speed[0] * fabs(speed[0]) * 10.0f + speed[0] * 10.0f; pForce[1] = speed[1] * speed[1] * speed[1] * 5e-4f + speed[1] * fabs(speed[1]) * 10.0f + speed[1] * 10.0f; pForce[2] = speed[2] * speed[2] * speed[2] * 1e-5f + speed[2] * fabs(speed[2]) * 0.01f + speed[2] * 2.0f; pForce[0] *= ammoType->sideAirFriction; pForce[1] *= ammoType->sideAirFriction; pForce[2] *= ammoType->_airFriction; pForce *= mass * (1.0f / 10.0f); friction += pForce; // aerodynamic non-stability makes direction aligned with speed pForce[0] *= 0.1f; pForce[1] *= 0.1f; pCenter = Vector3(0.0f, 0.0f, +0.3f); torque += pCenter.CrossProduct(pForce); // calculate draconic force (which makes direction aligned with speed) // note: this should be calculated for all missiles, but it is too late to add it now, as it might cause some changed behavior. pForce[0] = speed[0] * fabs(speed[0]) * -0.00033f + speed[0] * -0.005f; pForce[1] = speed[1] * fabs(speed[1]) * -0.00033f + speed[1] * -0.005f; pForce[2] = 0.0f; pForce *= mass; force += pForce; // convert to world space FutureVisualState().DirectionModelToWorld(friction, friction); FutureVisualState().DirectionModelToWorld(force, force); FutureVisualState().DirectionModelToWorld(torque, torque); torqueFriction = _angMomentum * 5.0f; // add gravity pForce = Vector3(0.0f, -G_CONST, 0.0f) * mass; force += pForce; // calculate new position VisualState moveTrans = PredictPos<VisualState>(deltaT); ApplyRemoteStateAdjustSpeed(deltaT,moveTrans); Vector3Val newPos = moveTrans.Position(); Vector3 lDir = newPos - position; Move(moveTrans); DirectionWorldToModel(FutureVisualState()._modelSpeed, FutureVisualState()._speed); ApplyForces(deltaT, force, torque, friction, torqueFriction);
  10. Model Config extraction added. It's a first version so maybe there are some errors. Please let me know if you find any. Be aware that axis entries for animations are missing because these are not directly saved in the ODOL (only axis position and direction is). I also hope that some conversion errors that were occuring lately are fixed now.
  11. Website has been updated to also support ODOL Version 73.