arcusmaximus / VNTranslationTools

Tools for translating visual novels
MIT License
295 stars 42 forks source link

Request for Anim engine (Crowd engine) #58

Open Memorizzal opened 2 years ago

Memorizzal commented 2 years ago

Hello, can I request Anim engine? The game is this one, English patch. I got a tool for Anim from f95, it dumps to .json too, but its format is too ugly that I can't even look, also I recognized the tool can't dump repeated lines. I have included the script and the tool, I also included a raw script from https://vndb.org/v2607 in case since I can't find raw script of NTR homestay. Anim_stuff.zip

Memorizzal commented 2 years ago

I forgot to tell you somehow the tool only dumps dialogue lines if it is English script

Cosetto commented 2 years ago

huh, it looks so similar to this

Cosetto commented 1 year ago
using System;

namespace Anim
{
    internal class ArcDat
    {
        public static byte[] ChangeKey(ref byte[] keyBuffer, byte a2)
        {
            byte[] result;
            switch (a2 & 7)
            {
            case 0:
            {
                byte[] array = keyBuffer;
                int num = 0;
                array[num] += a2;
                byte[] array2 = keyBuffer;
                int num2 = 3;
                array2[num2] += a2 + 2;
                keyBuffer[4] = keyBuffer[2] + a2 + 11;
                result = keyBuffer;
                keyBuffer[8] = keyBuffer[6] + 7;
                return result;
            }
            case 1:
            {
                keyBuffer[2] = keyBuffer[9] + keyBuffer[10];
                keyBuffer[6] = keyBuffer[7] + keyBuffer[15];
                byte[] array3 = keyBuffer;
                int num3 = 8;
                array3[num3] += keyBuffer[1];
                result = keyBuffer;
                keyBuffer[15] = keyBuffer[5] + keyBuffer[3];
                return result;
            }
            case 2:
            {
                byte[] array4 = keyBuffer;
                int num4 = 1;
                array4[num4] += keyBuffer[2];
                byte[] array5 = keyBuffer;
                int num5 = 5;
                array5[num5] += keyBuffer[6];
                byte[] array6 = keyBuffer;
                int num6 = 7;
                array6[num6] += keyBuffer[8];
                result = keyBuffer;
                byte[] array7 = keyBuffer;
                int num7 = 10;
                array7[num7] += keyBuffer[11];
                return result;
            }
            case 3:
                keyBuffer[9] = keyBuffer[2] + keyBuffer[1];
                keyBuffer[11] = keyBuffer[6] + keyBuffer[5];
                keyBuffer[12] = keyBuffer[8] + keyBuffer[7];
                result = keyBuffer;
                keyBuffer[13] = keyBuffer[11] + keyBuffer[10];
                return result;
            case 4:
                keyBuffer[0] = keyBuffer[1] + 111;
                keyBuffer[3] = keyBuffer[4] + 71;
                keyBuffer[4] = keyBuffer[5] + 17;
                result = keyBuffer;
                keyBuffer[14] = keyBuffer[15] + 64;
                return result;
            case 5:
            {
                byte[] array8 = keyBuffer;
                int num8 = 2;
                array8[num8] += keyBuffer[10];
                keyBuffer[4] = keyBuffer[5] + keyBuffer[12];
                keyBuffer[6] = keyBuffer[8] + keyBuffer[14];
                result = keyBuffer;
                keyBuffer[8] = keyBuffer[11] + keyBuffer[0];
                return result;
            }
            case 6:
                keyBuffer[9] = keyBuffer[11] + keyBuffer[1];
                keyBuffer[11] = keyBuffer[13] + keyBuffer[3];
                keyBuffer[13] = keyBuffer[15] + keyBuffer[5];
                keyBuffer[15] = keyBuffer[9] + keyBuffer[7];
                break;
            }
            keyBuffer[1] = keyBuffer[9] + keyBuffer[5];
            keyBuffer[2] = keyBuffer[10] + keyBuffer[6];
            keyBuffer[3] = keyBuffer[11] + keyBuffer[7];
            result = keyBuffer;
            keyBuffer[4] = keyBuffer[12] + keyBuffer[8];
            return result;
        }

        public static byte[] Decrypt(ref byte[] buffer)
        {
            byte[] array = new byte[buffer.Length];
            byte[] array2 = new byte[16];
            for (int i = 0; i < array2.Length; i++)
            {
                array2[i] = buffer[i + 4];
            }
            int num = 0;
            for (int j = 0; j < array.Length - 20; j++)
            {
                array[j] = ((array2[num] | buffer[j + 20]) & ~(array2[num] & buffer[j + 20]));
                if (++num == 16)
                {
                    num = 0;
                    ArcDat.ChangeKey(ref array2, array[j - 1]);
                }
            }
            return array;
        }

        public static byte[] Encrypt(ref byte[] buffer, ref byte[] KeyBuffer)
        {
            byte[] array = new byte[buffer.Length];
            int num = 0;
            for (int i = 0; i < array.Length; i++)
            {
                array[i] = ((KeyBuffer[num] | buffer[i]) & ~(KeyBuffer[num] & buffer[i]));
                if (++num == 16)
                {
                    num = 0;
                    ArcDat.ChangeKey(ref KeyBuffer, buffer[i - 1]);
                }
            }
            return array;
        }

        public ArcDat()
        {
        }
    }
}

Hope that can help