Ejemplo n.º 1
0
        public MissionHacks(string missionName, MafiaFormats.Scene2BINLoader data)
        {
            try
            {
                // Fix backdrop sector
                var backdrop = GameObject.Find("Backdrop sector");
                {
                    if (backdrop != null)
                    {
                        backdrop.AddComponent <BackdropManipulator>();
                    }

                    foreach (Transform child in backdrop.transform)
                    {
                        SetUpSkybox(child);
                    }
                }

                // Change view distance
                {
                    var mainCamera = GameObject.Find("Main Camera").GetComponent <Camera>();

                    var viewDistance = data.viewDistance;

                    mainCamera.farClipPlane = viewDistance;
                }

                switch (missionName.ToLower())
                {
                case "00menu":
                {
                    var projectorRay           = GameObject.Find("9promitac/Cylinder18");
                    var projectorIDontCarePart = GameObject.Find("9promitac/Cylinder05");

                    if (projectorRay != null && projectorIDontCarePart != null)
                    {
                        var meshRenderer = projectorRay.GetComponent <MeshRenderer>();
                        var mat          = meshRenderer.sharedMaterial;

                        mat.shader = Shader.Find("Unlit/Transparent");
                        var oldTex = mat.GetTexture("_MainTex");
                        var tex    = ModelGenerator.LoadTexture(oldTex.name, false, true, true);
                        mat.SetTexture("_MainTex", tex);

                        projectorIDontCarePart.SetActive(false);
                    }

                    var lampRay = GameObject.Find("svetlo");

                    if (lampRay != null)
                    {
                        var meshRenderer = lampRay.GetComponent <MeshRenderer>();
                        var mat          = meshRenderer.sharedMaterial;

                        mat.shader = Shader.Find("Unlit/Transparent");
                        var oldTex = mat.GetTexture("_MainTex");
                        var tex    = ModelGenerator.LoadTexture(oldTex.name, false, true, true);
                        mat.SetTexture("_MainTex", tex);
                        //mat.SetColor("_Color", new Color(1f, 244/255f, 112/255f, 62/255f));
                    }

                    var photoFrame = GameObject.Find("foto");

                    if (photoFrame != null)
                    {
                        var s = photoFrame.transform.localScale;
                        photoFrame.transform.localScale = new Vector3(2.304092f, s.y, s.z);
                    }

                    var light9 = GameObject.Find("light9");

                    if (light9 != null)
                    {
                        light9.GetComponent <Light>().shadowNearPlane = 0.015f;
                    }
                }
                break;

                case "mise20-galery":
                {
                    var obloha   = GameObject.Find("obloha");
                    var obloha01 = GameObject.Find("obloha01");

                    if (obloha != null)
                    {
                        SetUpSkybox(obloha.transform);
                        obloha.transform.parent = backdrop.transform;

                        obloha.transform.localScale = new Vector3(2, 2, 2);
                    }

                    if (obloha01 != null)
                    {
                        obloha01.SetActive(false);
                    }
                }
                break;

                case "mise16-letiste":
                {
                    var slunko = GameObject.Find("denjasno/slunko");
                    slunko.gameObject.SetActive(false);
                }
                break;
                }


                // NOTE: Create a spawn point for player
                // TODO: Improve it

                /* var player = GameObject.Find("Main Player");
                 *
                 * if (player != null)
                 * {
                 *  Debug.Log("Player was found! Locating spawn point.");
                 *
                 *  var objects = Resources.FindObjectsOfTypeAll(typeof(ObjectDefinition));
                 *
                 *  foreach (ObjectDefinition obj in objects)
                 *  {
                 *      if (obj.data.specialType == MafiaFormats.Scene2BINLoader.SpecialObjectType.Player)
                 *      {
                 *          var tr = obj.transform;
                 *
                 *          player.transform.position = tr.position;
                 *          player.transform.rotation = tr.rotation;
                 *          tr.gameObject.SetActive(false);
                 *
                 *          var rg = player.GetComponent<Rigidbody>();
                 *          rg.velocity = new Vector3(0f, 0f, 0f);
                 *          rg.angularVelocity = new Vector3(0f, 0f, 0f);
                 *          break;
                 *      }
                 *  }
                 * } */
            }
            catch (System.Exception ex)
            {
                Debug.LogErrorFormat("There was an issue applying patches to the mission. Make sure the loaded mission wasn't edited!\n{0}", ex.ToString());
            }
        }
Ejemplo n.º 2
0
        public override GameObject LoadObject(string path)
        {
            GameObject rootObject = null;

            if (rootObject == null)
            {
                rootObject = new GameObject(path);
            }
            else
            {
                return(rootObject);
            }

            Stream fs;

            try
            {
                fs = GameManager.instance.fileSystem.GetStreamFromPath(path);
            }
            catch
            {
                return(null);
            }

            using (var reader = new BinaryReader(fs))
            {
                var sceneLoader = new MafiaFormats.Scene2BINLoader();
                lastLoader = sceneLoader;

                sceneLoader.Load(reader);

                var objects = new List <KeyValuePair <GameObject, MafiaFormats.Scene2BINLoader.Object> >();

                var backdrop = new GameObject("Backdrop sector");
                backdrop.transform.parent = rootObject.transform;

                var primary = new GameObject("Primary sector");
                primary.transform.parent = rootObject.transform;

                foreach (var obj in sceneLoader.objects)
                {
                    GameObject newObject;

                    if (obj.Value.name == "Primary sector")
                    {
                        continue;
                    }


                    if (obj.Value.modelName == null || (obj.Value.type != MafiaFormats.Scene2BINLoader.ObjectType.Model && obj.Value.specialType == 0))
                    {
                        newObject = new GameObject();
                    }
                    else
                    {
                        newObject = GameManager.instance.modelGenerator.LoadObject(Path.Combine("models", obj.Value.modelName));
                    }

                    if (newObject == null)
                    {
                        continue;
                    }

                    newObject.name = obj.Value.name;

                    newObject.transform.localPosition = obj.Value.pos;
                    newObject.transform.localRotation = obj.Value.rot;
                    newObject.transform.localScale    = obj.Value.scale;

                    objects.Add(new KeyValuePair <GameObject, MafiaFormats.Scene2BINLoader.Object>(newObject, obj.Value));
                }

                foreach (var obj in objects)
                {
                    var newObject = obj.Key;

                    if (obj.Value.parentName != null)
                    {
                        var parentObject = GameObject.Find(obj.Value.parentName);

                        if (parentObject != null)
                        {
                            newObject.transform.parent = parentObject.transform;
                        }
                        else
                        {
                            newObject.transform.parent = rootObject.transform;
                        }
                    }
                    else
                    {
                        newObject.transform.parent = rootObject.transform;
                    }

                    newObject.transform.localPosition = obj.Value.pos;
                    newObject.transform.localRotation = obj.Value.rot;
                    newObject.transform.localScale    = obj.Value.scale;

                    var specObject = newObject.AddComponent <ObjectDefinition>();
                    specObject.data = obj.Value;
                    specObject.Init();
                }
            }

            // NOTE(zaklaus): Hardcode 'Primary sector' scale to (1,1,1)
            var primarySector = GameObject.Find("Primary sector");

            if (primarySector != null)
            {
                primarySector.transform.localScale = new Vector3(1, 1, 1);
            }

            //StoreChachedObject(path, rootObject);

            return(rootObject);
        }
Ejemplo n.º 3
0
        public override GameObject LoadObject(string path, Mission mission)
        {
            GameObject rootObject = LoadCachedObject(path);

            if (rootObject == null)
            {
                rootObject = new GameObject(path);
            }
            else
            {
                return(rootObject);
            }

            Stream fs;

            try
            {
                fs = GameAPI.instance.fileSystem.GetStreamFromPath(path);
            }
            catch
            {
                return(null);
            }

            using (var reader = new BinaryReader(fs))
            {
                var sceneLoader = new MafiaFormats.Scene2BINLoader();
                lastLoader = sceneLoader;

                sceneLoader.Load(reader);
                fs.Close();

                // TODO: Check if refs are null, clear then
                ModelGenerator.cachedTextures.Clear();

                var objects = new List <KeyValuePair <GameObject, MafiaFormats.Scene2BINLoader.Object> >();

                var backdrop = new GameObject("Backdrop sector");
                backdrop.transform.parent = rootObject.transform;
                StoreReference(mission, backdrop.name, backdrop);

                foreach (var obj in sceneLoader.objects)
                {
                    AddNewObject(objects, mission, obj);
                }

                // Handle special cases of objects loaded by external source
                foreach (var obj in sceneLoader.externalObjects)
                {
                    var go = BaseGenerator.FetchCacheReference(mission, obj.Value.name)?.gameObject;

                    if (go != null)
                    {
                        var specialObjDef = go.GetComponent <ObjectDefinition>();

                        if (specialObjDef == null)
                        {
                            specialObjDef = go.AddComponent <ObjectDefinition>();
                        }

                        specialObjDef.data = obj.Value;

                        specialObjDef.Init();
                    }
                    // Seems like object acts on its own, add it anyway
                    else
                    {
                        AddNewObject(objects, mission, obj);
                    }
                }

                var primary = FetchReference(mission, "Primary sector");

                if (primary == null)
                {
                    primary = new GameObject("Primary Sector");
                }

                var objDef          = primary.AddComponent <ObjectDefinition>();
                var dummySectorData = new MafiaFormats.Scene2BINLoader.Object();
                dummySectorData.type     = MafiaFormats.Scene2BINLoader.ObjectType.Sector;
                objDef.data              = dummySectorData;
                primary.transform.parent = rootObject.transform;

                objects = objects.OrderByDescending(x => x.Value.isPatch).ToList();

                foreach (var obj in objects)
                {
                    var newObject = obj.Key;

                    if (obj.Value.isPatch)
                    {
                        var searchName  = obj.Value.name;
                        var redefObject = FindParent(mission, searchName, null);

                        if (redefObject != null)
                        {
                            if (obj.Value.isParentPatched && obj.Value.parentName != null)
                            {
                                var parent = FindParent(mission, obj.Value.parentName);

                                if (parent != null)
                                {
                                    redefObject.transform.parent = parent.transform;
                                }
                            }

                            if (obj.Value.isPositionPatched)
                            {
                                redefObject.transform.localPosition = obj.Value.pos;
                            }

                            /* if (obj.Value.isPosition2Patched)
                             *  redefObject.transform.position = obj.Value.pos2; */

                            if (obj.Value.isRotationPatched)
                            {
                                redefObject.transform.localRotation = obj.Value.rot;
                            }

                            if (obj.Value.isScalePatched)
                            {
                                redefObject.transform.localScale = obj.Value.scale;
                            }

                            redefObject.SetActive(!obj.Value.isHidden);

                            GameObject.DestroyImmediate(newObject, true);
                            continue;
                        }
                    }

                    newObject.transform.parent = FindParent(mission, obj.Value.parentName, rootObject).transform;

                    newObject.transform.localPosition = obj.Value.pos;
                    newObject.transform.localRotation = obj.Value.rot;
                    newObject.transform.localScale    = obj.Value.scale;

                    newObject.SetActive(!obj.Value.isHidden);

                    var specObject = newObject.AddComponent <ObjectDefinition>();
                    specObject.data = obj.Value;
                    specObject.Init();
                }
            }

            // NOTE(zaklaus): Hardcode 'Primary sector' scale to (1,1,1)
            var primarySector = GameObject.Find("Primary sector");

            if (primarySector != null)
            {
                primarySector.transform.localScale = new Vector3(1, 1, 1);
            }

            //StoreChachedObject(path, rootObject);

            return(rootObject);
        }
Ejemplo n.º 4
0
        public override GameObject LoadObject(string path)
        {
            GameObject rootObject = LoadCachedObject(path);

            if (rootObject == null)
            {
                rootObject = new GameObject(path);
            }
            else
            {
                return(rootObject);
            }

            FileStream fs;

            try
            {
                fs = new FileStream(GameManager.instance.fileSystem.GetPath(path), FileMode.Open);
            }
            catch
            {
                return(null);
            }

            using (var reader = new BinaryReader(fs))
            {
                var sceneLoader = new MafiaFormats.Scene2BINLoader();
                lastLoader = sceneLoader;

                sceneLoader.Load(reader);

                var objects = new List <KeyValuePair <GameObject, MafiaFormats.Scene2BINLoader.Object> >();

                foreach (var obj in sceneLoader.objects)
                {
                    if (obj.Value.type != MafiaFormats.Scene2BINLoader.ObjectType.Model)
                    {
                        continue;
                    }

                    GameObject newObject;

                    if (obj.Value.modelName == null)
                    {
                        newObject = new GameObject();
                    }
                    else
                    {
                        newObject = GameManager.instance.modelGenerator.LoadObject(Path.Combine("models", obj.Value.modelName));
                    }

                    newObject.name = obj.Value.name;

                    objects.Add(new KeyValuePair <GameObject, MafiaFormats.Scene2BINLoader.Object>(newObject, obj.Value));
                }

                foreach (var obj in objects)
                {
                    var newObject = obj.Key;

                    if (obj.Value.parentName != null)
                    {
                        var parentObject = GameObject.Find(obj.Value.parentName);

                        if (parentObject != null)
                        {
                            newObject.transform.parent = parentObject.transform;
                        }
                        else
                        {
                            newObject.transform.parent = rootObject.transform;
                        }
                    }
                    else
                    {
                        newObject.transform.parent = rootObject.transform;
                    }


                    newObject.transform.localPosition = obj.Value.pos;
                    newObject.transform.localRotation = obj.Value.rot;
                    newObject.transform.localScale    = obj.Value.scale;

                    var specObject = newObject.AddComponent <ObjectDefinition>();
                    specObject.data = obj.Value;
                    specObject.Init();
                }
            }

            StoreChachedObject(path, rootObject);

            return(rootObject);
        }
Ejemplo n.º 5
0
        public override GameObject LoadObject(string path, Mission mission)
        {
            GameObject rootObject = LoadCachedObject(path);

            if (rootObject == null)
            {
                rootObject = new GameObject(path);
            }
            else
            {
                return(rootObject);
            }

            Stream fs;

            try
            {
                fs = GameAPI.instance.fileSystem.GetStreamFromPath(path);
            }
            catch
            {
                return(null);
            }

            using (var reader = new BinaryReader(fs))
            {
                var sceneLoader = new MafiaFormats.Scene2BINLoader();
                lastLoader = sceneLoader;

                sceneLoader.Load(reader);
                fs.Close();

                // TODO: Check if refs are null, clear then
                ModelGenerator.cachedTextures.Clear();

                var objects = new List <KeyValuePair <GameObject, MafiaFormats.Scene2BINLoader.Object> >();

                var backdrop = new GameObject("Backdrop sector");
                backdrop.transform.parent = rootObject.transform;
                StoreReference(mission, backdrop.name, backdrop);

                foreach (var obj in sceneLoader.objects)
                {
                    GameObject newObject;

                    if (obj.Value.modelName == null || (obj.Value.type != MafiaFormats.Scene2BINLoader.ObjectType.Model && obj.Value.specialType == 0))
                    {
                        newObject = new GameObject();
                    }
                    else
                    {
                        newObject = GameAPI.instance.modelGenerator.LoadObject(Path.Combine("models", obj.Value.modelName), null);
                    }

                    if (newObject == null)
                    {
                        continue;
                    }

                    newObject.name = obj.Value.name;

                    StoreReference(mission, newObject.name, newObject);

                    newObject.transform.localPosition = obj.Value.pos;
                    newObject.transform.localRotation = obj.Value.rot;
                    newObject.transform.localScale    = obj.Value.scale;

                    objects.Add(new KeyValuePair <GameObject, MafiaFormats.Scene2BINLoader.Object>(newObject, obj.Value));
                }

                var primary         = FetchReference(mission, "Primary sector");
                var objDef          = primary.AddComponent <ObjectDefinition>();
                var dummySectorData = new MafiaFormats.Scene2BINLoader.Object();
                dummySectorData.type     = MafiaFormats.Scene2BINLoader.ObjectType.Sector;
                objDef.data              = dummySectorData;
                primary.transform.parent = rootObject.transform;

                foreach (var obj in objects)
                {
                    var newObject = obj.Key;

                    if (obj.Value.isPatch)
                    {
                        var searchName  = obj.Value.name.Replace(".", "/");
                        var redefObject = GameObject.Find(searchName);

                        if (redefObject != null)
                        {
                            if (obj.Value.isParentPatched && obj.Value.parentName != null)
                            {
                                var parent = FindParent(mission, obj.Value.parentName);

                                if (parent != null)
                                {
                                    redefObject.transform.parent = parent.transform;
                                }
                            }

                            if (obj.Value.isPositionPatched)
                            {
                                redefObject.transform.localPosition = obj.Value.pos;
                            }

                            /* if (obj.Value.isPosition2Patched)
                             *  redefObject.transform.position = obj.Value.pos2; */

                            if (obj.Value.isRotationPatched)
                            {
                                redefObject.transform.localRotation = obj.Value.rot;
                            }

                            if (obj.Value.isScalePatched)
                            {
                                redefObject.transform.localScale = obj.Value.scale;
                            }

                            redefObject.SetActive(!obj.Value.isHidden);

                            GameObject.DestroyImmediate(newObject, true);
                            continue;
                        }
                    }

                    newObject.transform.parent = FindParent(mission, obj.Value.parentName, rootObject).transform;

                    newObject.transform.localPosition = obj.Value.pos;
                    newObject.transform.localRotation = obj.Value.rot;
                    newObject.transform.localScale    = obj.Value.scale;

                    var specObject = newObject.AddComponent <ObjectDefinition>();
                    specObject.data = obj.Value;
                    specObject.Init();
                }
            }

            // NOTE(zaklaus): Hardcode 'Primary sector' scale to (1,1,1)
            var primarySector = GameObject.Find("Primary sector");

            if (primarySector != null)
            {
                primarySector.transform.localScale = new Vector3(1, 1, 1);
            }

            StoreChachedObject(path, rootObject);

            return(rootObject);
        }