Developer Store
Support
Member Forums

Screenshots
FAQ
Documentation
License
Known Issues
Downloads

MMOWorkshop BACK!

PyTorque
TGB Web Browser


DarkBaneStudios

hallsofvalhalla - Been A while
xapken - Wizards and Champions
J.C. Smith - The Repopulation - 0.5.2 Build Notes
EmpireGames - Elementals in Rise of Heroes
Empire Games - WarPath.
jaidurn - Warcall 0.0.1.0 build notes
medafor - Final detailing of models
Thamior - Presence system GONE! [May 25th 2009)]
... MORE BLOGS!

Building a MMO
Wow I had no idea....
Quest Remnants of Chaos
Checking to see if anyone is sti...
Well here I am again :)
T3D and MMOKit
afx 2.0
Terrain specularity [video]
Torque T3D MMO Kit
[3dFoin] Dragon Bug

Following is a patch from our source. Please include this by hand.

Index: C:/svns/repopulation_code/trunk/engine/source/T3D/shapeBase.h
===================================================================
--- C:/svns/repopulation_code/trunk/engine/source/T3D/shapeBase.h	(revision 85)
+++ C:/svns/repopulation_code/trunk/engine/source/T3D/shapeBase.h	(revision 86)
@@ -914,9 +914,16 @@
    /// @param   ammo        Does the image have ammo?
    /// @param   triggerDown Is the trigger on this image down?
    /// @param   target      Does the image have a target?
+// Begin MMO Kit
+/* Original TGE Code:
+    virtual void setImage(U32 imageSlot, ShapeBaseImageData* imageData, NetStringHandle &skinNameHandle,
+                          bool loaded = true, bool ammo = false, bool triggerDown = false,
+                          bool target = false);
+*/
    virtual void setImage(U32 imageSlot, ShapeBaseImageData* imageData, NetStringHandle &skinNameHandle,
-                         bool loaded = true, bool ammo = false, bool triggerDown = false,
+                         bool loaded = true, F32 scale = 1.f, bool ammo = false, bool triggerDown = false,
                          bool target = false);
+// End MMO Kit
 
    /// Clear out an image slot
    /// @param   imageSlot   Image slot id
@@ -1275,7 +1282,12 @@
    /// @param   imageSlot Image mount point
    /// @param   loaded    True if weapon is loaded (it assumes it's a weapon)
    /// @param   skinNameHandle   Skin name for object
-   virtual bool mountImage(ShapeBaseImageData* image,U32 imageSlot,bool loaded, NetStringHandle &skinNameHandle);
+// Begin MMO Kit
+/* Original MMO Kit
+    virtual bool mountImage(ShapeBaseImageData* image,U32 imageSlot,bool loaded, NetStringHandle &skinNameHandle);
+*/
+   virtual bool mountImage(ShapeBaseImageData* imageData,U32 imageSlot,bool loaded,NetStringHandle &skinNameHandle,F32 scale);
+// End MMO Kit
 
    /// Unmount an image from a slot
    /// @param   imageSlot   Mount point
Index: C:/svns/repopulation_code/trunk/engine/source/T3D/shapeBase.cpp
===================================================================
--- C:/svns/repopulation_code/trunk/engine/source/T3D/shapeBase.cpp	(revision 85)
+++ C:/svns/repopulation_code/trunk/engine/source/T3D/shapeBase.cpp	(revision 86)
@@ -3592,12 +3592,21 @@
 
             int count = stream->readInt(3);
 
+// Begin MMO Kit
+/* Original TGE Code:
             if ((image.dataBlock != imageData) || (image.skinNameHandle != skinDesiredNameHandle)) {
 
                setImage(i, imageData, skinDesiredNameHandle, image.loaded, image.ammo, image.triggerDown);
 
             }
+*/
+            if ((image.dataBlock != imageData) || (image.skinNameHandle != skinDesiredNameHandle) || image.scale != scale) {
 
+               setImage(i, imageData, skinDesiredNameHandle, image.loaded, scale, image.ammo, image.triggerDown);
+
+            }
+// End MMO Kit
+
             if (isProperlyAdded()) {
                // Normal processing
                if (count != image.fireCount)
@@ -4403,27 +4412,19 @@
    ShapeBaseImageData* imageData;
    if (Sim::findObject(argv[2],imageData)) {
       U32 slot = dAtoi(argv[3]);
-      // MMO Kit Change
-      /* Old code
-      bool loaded = (argc == 5)? dAtob(argv[4]): true;
-      NetStringHandle team;
-      */
-      // New code
-      // F32 scale = (argc >= 5)? dAtof(argv[4]): 1.0f;
+      F32 scale = (argc >= 5) ? dAtof(argv[4]) : 1.0f;
       bool loaded = false;
       NetStringHandle team;
-      // End MMO Kit
+
       if(argc == 6)
       {
          if(argv[5][0] == StringTagPrefixByte)
             team = NetStringHandle(U32(dAtoi(argv[5]+1)));
-         // Begin MMO Kit
          else
             team = NetStringHandle(argv[5]);
-         // End MMO Kit
       }
       if (slot >= 0 && slot < ShapeBase::MaxMountedImages)
-         object->mountImage(imageData,slot,loaded,team);
+         object->mountImage(imageData,slot,loaded,team,scale);
    }
    return false;
 }
Index: C:/svns/repopulation_code/trunk/engine/source/T3D/shapeImage.cpp
===================================================================
--- C:/svns/repopulation_code/trunk/engine/source/T3D/shapeImage.cpp	(revision 85)
+++ C:/svns/repopulation_code/trunk/engine/source/T3D/shapeImage.cpp	(revision 86)
@@ -747,20 +747,35 @@
 //----------------------------------------------------------------------------
 // Any item with an item image is selectable
 
+// Begin MMO Kit
+bool ShapeBase::mountImage(ShapeBaseImageData* imageData,U32 imageSlot,bool loaded,NetStringHandle &skinNameHandle,F32 scale)
+/* TGE Original Code
 bool ShapeBase::mountImage(ShapeBaseImageData* imageData,U32 imageSlot,bool loaded,NetStringHandle &skinNameHandle)
+*/
+// End MMO Kit
 {
    AssertFatal(imageSlot<MaxMountedImages,"Out of range image slot");
 
    MountedImage& image = mMountedImageList[imageSlot];
    if (image.dataBlock) {
+      // Begin MMO Kit
+      if ((image.dataBlock == imageData) && (image.skinNameHandle == skinNameHandle) && (image.scale == scale)) {
+      /* TGE Original Code
       if ((image.dataBlock == imageData) && (image.skinNameHandle == skinNameHandle)) {
+      */
+      // End MMO Kit
          // Image already loaded
          image.nextImage = InvalidImagePtr;
          return true;
       }
    }
    //
-   setImage(imageSlot,imageData,skinNameHandle,loaded);
+   // Begin MMO Kit
+   setImage(imageSlot,imageData,skinNameHandle,loaded,scale);
+   /* TGE Original Code
+    setImage(imageSlot,imageData,skinNameHandle,loaded);
+   */
+   // End MMO Kit
 
 	//see if the image has a light source
    if (imageData->lightType != ShapeBaseImageData::NoLight)
@@ -1120,7 +1135,10 @@
          mat->mul(nmat,data.eyeOffset);
       }
       else {
-         getRenderMountTransform(data.mountPoint,&nmat);
+         //Original TGE
+         //getRenderMountTransform(data.mountPoint,&nmat);
+         //MMO Kit
+         getRenderMountTransform(imageSlot,&nmat);
          mat->mul(nmat,data.mountTransform);
       }
    }
@@ -1279,7 +1297,12 @@
 
 //----------------------------------------------------------------------------
 
+// Begin MMO Kit
+void ShapeBase::setImage(U32 imageSlot, ShapeBaseImageData* imageData, NetStringHandle& skinNameHandle, bool loaded, F32 scale, bool ammo, bool triggerDown, bool target)
+/* TGE Original Code
 void ShapeBase::setImage(U32 imageSlot, ShapeBaseImageData* imageData, NetStringHandle& skinNameHandle, bool loaded, bool ammo, bool triggerDown, bool target)
+*/
+// End MMO Kit
 {
    AssertFatal(imageSlot<MaxMountedImages,"Out of range image slot");
 
@@ -1290,17 +1313,25 @@
       // Mark that there is not a datablock change pending.
       image.nextImage = InvalidImagePtr;
       // Change the skin handle if necessary.
-      if (image.skinNameHandle != skinNameHandle) {
+      // Begin MMO Kit
+      if (image.skinNameHandle != skinNameHandle || image.scale != scale) {
+      /* TGE Original Code
+       if (image.skinNameHandle != skinNameHandle) {
+      */
+      // End MMO Kit
          if (!isGhost()) {
             // Serverside, note the skin handle and tell the client.
             image.skinNameHandle = skinNameHandle;
+			image.scale = scale;  // <-- MMO Kit
             setMaskBits(ImageMaskN << imageSlot);
          }
          else {
             // Clientside, do the reskin.
             image.skinNameHandle = skinNameHandle;
+			image.scale = scale;  // <-- MMO Kit
             if (image.shapeInstance) {
                image.shapeInstance->reSkin(skinNameHandle);
+			   //image.shapeInstance->setShapeBalloon(scale);  // <-- MMO Kit
             }
          }
       }
@@ -1338,11 +1369,13 @@
    image.dataBlock = imageData;
    image.state = &image.dataBlock->state[0];
    image.skinNameHandle = skinNameHandle;
+   image.scale = scale;  // <-- MMO Kit
    image.shapeInstance = new TSShapeInstance(image.dataBlock->shape, isClientObject());
    if (isClientObject()) {
       if (image.shapeInstance) {
          image.shapeInstance->cloneMaterialList();
          image.shapeInstance->reSkin(skinNameHandle);
+		 //image.shapeInstance->setShapeBalloon(scale);  // <-- MMO Kit
       }
    }
    image.loaded = loaded;
@@ -1422,6 +1455,7 @@
    image.ammo = false;
    image.triggerDown = false;
    image.loaded = false;
+   image.scale = -1;  // <-- MMO Kit
    image.lightStart = 0;
 //   image.light.fLight.fType = TSLight::LightInvalid;
    updateMass();
@@ -1537,7 +1571,12 @@
 
    // Mount pending images
    if (image.nextImage != InvalidImagePtr && stateData.allowImageChange) {
-      setImage(imageSlot,image.nextImage,image.nextSkinNameHandle,image.nextLoaded);
+      // Begin MMO Kit
+      setImage(imageSlot,image.nextImage,image.nextSkinNameHandle,image.nextLoaded,image.scale);
+      /* TGE Original Code
+       setImage(imageSlot,image.nextImage,image.nextSkinNameHandle,image.nextLoaded);
+      */
+      // End MMO Kit
       return;
    }