예제 #1
0
        public override void Execute(ushort aRange, ushort aArg1, ushort aArg2, ushort aArg3, ushort aArg4, ushort aArg5, ushort aArg6, ushort aArg7, ushort aArgCount)
        {
            if ((short)aRange <= 0)
            {
                ZRandom.Seed(-(short)aRange);
                Store(0);
            }
            else
            {
                ushort result;

                if (ZRandom.interval != 0)
                {
                    result = (ushort)ZRandom.counter++;
                    if (ZRandom.counter == ZRandom.interval)
                    {
                        ZRandom.counter = 0;
                    }
                }
                else
                {
                    ZRandom.a = 0x015a4e35 * ZRandom.a + 1;
                    result    = (ushort)((ZRandom.a >> 16) & 0x7fff);
                }

                Store((ushort)(result % aRange + 1));
            }
        }
예제 #2
0
        public void Initialize(ushort aStartPC)
        {
            ZRandom.Seed(0);
            Stack = new ZStack(this);

            StartPC = aStartPC;
            PC      = StartPC;

            //SetByte(HeaderOffset.CONFIG, ZMachine.Story.Header.config);
            //SetWord(HeaderOffset.FLAGS, ZMachine.Story.Header.flags);

            //if (ZMachine.Story.Header.Version >= FileVersion.V4)
            //{
            //    SetByte(HeaderOffset.INTERPRETER_NUMBER, ZMachine.Story.Header.interpreter_number);
            //    SetByte(HeaderOffset.INTERPRETER_VERSION, ZMachine.Story.Header.interpreter_version);
            //    SetByte(HeaderOffset.SCREEN_ROWS, ZMachine.Story.Header.screen_rows);
            //    SetByte(HeaderOffset.SCREEN_COLS, ZMachine.Story.Header.screen_cols);
            //}

            //ushort screenCols = ZMachine.Story.Header.screen_cols;
            //ushort screenRows = ZMachine.Story.Header.screen_rows;

            //if (ZMachine.Story.Header.Version >= FileVersion.V5)
            //{
            //    SetWord(HeaderOffset.SCREEN_WIDTH, screenCols);
            //    SetWord(HeaderOffset.SCREEN_HEIGHT, screenRows);
            //    SetByte(HeaderOffset.FONT_HEIGHT, 1);
            //    SetByte(HeaderOffset.FONT_WIDTH, 1);
            //    SetByte(HeaderOffset.DEFAULT_BACKGROUND, ZMachine.Story.Header.default_background);
            //    SetByte(HeaderOffset.DEFAULT_FOREGROUND, ZMachine.Story.Header.default_foreground);
            //}

            //if ((ZMachine.Story.Header.Version >= FileVersion.V3) && (ZMachine.Story.Header.user_name[0] != 0))
            //{
            //    for (int i = 0; i < 8; i++)
            //    {
            //        SetByte((HeaderOffset.USER_NAME + i), ZMachine.Story.Header.user_name[i]);
            //    }
            //}
            //SetByte(HeaderOffset.STANDARD_HIGH, ZMachine.Story.Header.standard_high);
            //SetByte(HeaderOffset.STANDARD_LOW, ZMachine.Story.Header.standard_low);
        }
예제 #3
0
    public void Update(Vector3 position)
    {
        PlayerPosition = position;
        // at start
        if (start)
        {
            start = false;
            ZRandom rnd = new ZRandom();
            for (int i = -1; i < 2; i++)
            {
                for (int j = -1; j < 2; j++)
                {
                    if (!(i == 0 && j == 0))
                    {
                        ChunksToGenerate.Add(new Vector2i(i, j));
                    }
                }
            }

            ChunksToGenerate.Add(new Vector2i(0, 0));
            ActiveChunk     = new Vector2i(0, 0);
            lastActiveChunk = ActiveChunk;
            UpdateChunksToGenerate(ChunkGenerationDistance);
        }

        if (GeneratedChunksMap.Count > 0)
        {
            ActiveChunk = GetActiveChunk(position, ActiveChunk);
        }

        if (ActiveChunk != lastActiveChunk)
        {
            Debug.Log("Changed from " + lastActiveChunk + " to " + ActiveChunk);
            //update, because player changed the active chunk
            UpdateChunksToGenerate(ChunkGenerationDistance);
            lastActiveChunk = ActiveChunk;
        }
        // Update Threads
        UpdateThreads();
        // Create the Meshes if rdy by the multithreading
        GenerateMeshs(ChunkGenerationDistance);
    }