Example #1
0
        public static void AddDMCE(EffectInfo effect, DMCE dmce, ChunkPlaybackInfo playbackInfo, Dictionary <ulong, ulong> replacements)
        {
            DMCEInfo newInfo = new DMCEInfo {
                Model        = dmce.Data.Model,
                Material     = dmce.Data.Look,
                Animation    = dmce.Data.Animation,
                PlaybackInfo = playbackInfo
            };

            if (replacements.ContainsKey(newInfo.Model))
            {
                newInfo.Model = replacements[newInfo.Model];
            }
            if (replacements.ContainsKey(newInfo.Material))
            {
                newInfo.Material = replacements[newInfo.Material];
            }
            if (replacements.ContainsKey(newInfo.Animation))
            {
                newInfo.Animation = replacements[newInfo.Animation];
            }
            effect.DMCEs.Add(newInfo);
        }
Example #2
0
        public void Process(EffectInfo effectInfo, KeyValuePair <ChunkPlaybackInfo, IChunk> chunk, Dictionary <ulong, ulong> replacements)
        {
            // todo: STUVoiceStimulus has f3099f20/m_volume
            // probably more stuff too


            // hey have some notes about particles:
            // 000000003CEC.006 - 000000001D3D.08F = ana - guardian:
            //     one RPCE, 61 chunks
            //     seems to be at correct position with rpce at rot: x=90

            // 000000003796.006 - 000000001A31.08F = genji - warrior's salute:
            //     one RPCE, 64 chunks.

            // VCCE might be a texture/material transform
            // A B C D = R G B A
            // see 'extract-debug-vcce'


            if (effectInfo == null)
            {
                return;
            }
            if (chunk.Value == null)
            {
                return;
            }
            if (replacements == null)
            {
                replacements = new Dictionary <ulong, ulong>();
            }
            if (chunk.Value.GetType() == typeof(TCFE))
            {
                TCFE tcfe = chunk.Value as TCFE;
                if (tcfe == null)
                {
                    return;
                }
                effectInfo.EffectLength = tcfe.Data.EndTime1;
            }
            if (chunk.Value.GetType() == typeof(DMCE))
            {
                DMCE dmce = chunk.Value as DMCE;
                if (dmce == null)
                {
                    return;
                }
                AddDMCE(effectInfo, dmce, chunk.Key, replacements);
            }
            if (chunk.Value.GetType() == typeof(CECE))
            {
                CECE cece = chunk.Value as CECE;
                if (cece == null)
                {
                    return;
                }
                AddCECE(effectInfo, cece, chunk.Key, replacements);
            }
            if (chunk.Value.GetType() == typeof(OSCE))
            {
                OSCE osce = chunk.Value as OSCE;
                if (osce == null)
                {
                    return;
                }
                AddOSCE(effectInfo, osce, chunk.Key, replacements);
            }
            if (chunk.Value.GetType() == typeof(FECE))
            {
                FECE fece = chunk.Value as FECE;
                if (fece == null)
                {
                    return;
                }
                EffectInfo feceInfo  = null;
                ulong      effectKey = fece.Data.Effect;
                if (replacements.ContainsKey(fece.Data.Effect))
                {
                    effectKey = replacements[fece.Data.Effect];
                }
                using (Stream feceStream = IO.OpenFile(effectKey)) {
                    if (feceStream != null)
                    {
                        using (Chunked feceChunkednew = new Chunked(feceStream)) {
                            EffectParser sub = new EffectParser(feceChunkednew, fece.Data.Effect);
                            feceInfo = sub.ProcessAll(replacements);
                        }
                    }
                }

                AddFECE(effectInfo, fece.Data.Effect, feceInfo, chunk.Key, replacements);
            }
            if (chunk.Value.GetType() == typeof(NECE))
            {
                NECE nece = chunk.Value as NECE;
                if (nece == null)
                {
                    return;
                }
                AddNECE(effectInfo, nece, chunk.Key, replacements);
            }
            if (chunk.Value.GetType() == typeof(RPCE))
            {
                RPCE rpce = chunk.Value as RPCE;
                if (rpce == null)
                {
                    return;
                }
                AddRPCE(effectInfo, rpce, chunk.Key, replacements);
            }
            if (chunk.Value.GetType() == typeof(SSCE))
            {
                SSCE ssce = chunk.Value as SSCE;
                if (ssce == null)
                {
                    return;
                }

                AddSSCE(effectInfo, ssce, chunk.Key.PreviousChunk?.GetType(), replacements);
            }
            if (chunk.Value.GetType() == typeof(SVCE))
            {
                SVCE svce = chunk.Value as SVCE;
                if (svce == null)
                {
                    return;
                }

                AddSVCE(effectInfo, svce, chunk.Key, replacements);
            }
        }