コード例 #1
0
        internal ZDictionary(Story story, ZText ztext)
        {
            this.story = story;
            this.ztext = ztext;

            this.address = Header.ReadDictionaryAddress(story.Memory);

            var reader = new MemoryReader(story.Memory, address);

            int wordSepCount = reader.NextByte();

            this.wordSeparators = reader.NextBytes(wordSepCount).ConvertAll(b => (char)b).AsReadOnly();

            int entryLength = reader.NextByte();
            int entryCount  = reader.NextWord();

            int zwordsSize = story.Version <= 3 ? 2 : 3;
            int dataSize   = entryLength - (zwordsSize * 2);

            this.entries = new List <ZDictionaryEntry>(entryCount);
            for (int i = 0; i < entryCount; i++)
            {
                var entryAddress = reader.Address;
                var entryZWords  = reader.NextWords(zwordsSize);
                var entryData    = reader.NextBytes(dataSize);
                var entryZText   = ztext.ZWordsAsString(entryZWords, ZTextFlags.All);
                entries.Add(new ZDictionaryEntry(entryAddress, i, entryZWords, entryZText, entryData));
            }
        }
コード例 #2
0
 internal ZObject(ZObjectTable objectTable, ZText ztext, ushort address, ushort number)
 {
     this.objectTable = objectTable;
     this.ztext       = ztext;
     this.address     = address;
     this.number      = number;
 }
コード例 #3
0
ファイル: InformData.cs プロジェクト: taradinoc/ZDebug
 public InformData(byte[] memory, MemoryMap memoryMap, ZText ztext)
 {
     this.memory    = memory;
     this.memoryMap = memoryMap;
     this.version   = Header.ReadInformVersionNumber(memory);
     this.ztext     = ztext;
 }
コード例 #4
0
        public override void Execute()
        {
            string s = ZText.DecodeStringWithLen((ushort)Machine.Memory.PC, out int length);

            Machine.Memory.PC += length;
            Machine.Output.PrintString(s);
        }
コード例 #5
0
        public void Run()
        {
            Memory.Initialize(Story.Header.StartPC);
            mInterpreter = new ZInterpreter(this);

            ZText.Initialize(this);

            mInterpreter.Interpret();
        }
コード例 #6
0
ファイル: InformData.cs プロジェクト: taradinoc/ZDebug
        public string GetPropertyName(int propNum)
        {
            var address = memoryMap[MemoryMapRegionKind.PropertyNamesTable].Base + (propNum * 2);
            var propNamePackedAddress = memory.ReadWord(address);
            var propNameAddress       = Header.UnpackStringAddress(memory, propNamePackedAddress);

            var propNameZWords = ZText.ReadZWords(memory, propNameAddress);

            return(ztext.ZWordsAsString(propNameZWords, ZTextFlags.None));
        }
コード例 #7
0
        public void PrintZSCII(short aChar)
        {
            if (aChar == 0)
            {
                return;
            }

            char ch = ZText.CharFromZSCII(aChar);

            _screen.WriteChar(ch);
        }
コード例 #8
0
ファイル: TestScreen.cs プロジェクト: MagdyYoussef/Memoton
        public override void Initialize()
        {
            m_texture = new ZTexture(m_gameReference, new CommonState("texture", Color.White, new Vector2(30, 100), Vector2.Zero, 1f, 0, 0));
            this.AddToList(m_texture);


            CommonState textState = new CommonState();

            textState.filePath = "spritefont";
            textState.color    = Color.Black;
            textState.position = new Vector2(400, 100);
            textState.origin   = Vector2.Zero;
            textState.scale    = 1f;
            textState.rotation = 0;

            m_welcomeMsg = new ZText(m_gameReference, textState, "Hello, iam a text bounded in a box trying to achieve the purpose for which i was created.", 300);
            this.AddToList(m_welcomeMsg);


            m_timer = new ZTimer(20);
            this.AddToList(m_timer);

            m_sound = new ZSound(m_gameReference, "sound", false);
            this.AddToList(m_sound);


            CommonState animationState = new CommonState();

            animationState.filePath = "animation";
            animationState.color    = Color.White;
            animationState.position = new Vector2(450, 250);
            animationState.scale    = 1f;
            animationState.rotation = 0;
            animationState.origin   = Vector2.Zero;

            m_animation = new ZAnimation(m_gameReference, animationState, 75, 75, 2);
            this.AddToList(m_animation);

            m_exitBtn = new ExitButton(m_gameReference);
            m_exitBtn.OnButtonPress += new Action(m_exitBtn_OnButtonPress);
            this.AddToList(m_exitBtn);

            ZTexture bar      = new ZTexture(m_gameReference, new CommonState("bar", Color.White, new Vector2(400, 500), Vector2.Zero, 1f, 0, 0));
            ZTexture progress = new ZTexture(m_gameReference, new CommonState("progress", Color.White, new Vector2(400, 500), Vector2.Zero, 1f, 0, 0));

            m_loadingBar = new ZLoadingBar(m_gameReference, bar, progress);
            this.AddToList(m_loadingBar);

            base.Initialize();
        }
コード例 #9
0
        protected ZMachine(Story story)
        {
            this.Story   = story;
            this.Memory  = story.Memory;
            this.Version = story.Version;
            this.ZText   = new ZText(this.Memory);

            this.GlobalVariableTableAddress = Header.ReadGlobalVariableTableAddress(this.Memory);

            this.OutputStreams = new OutputStreamCollection(story);
            RegisterScreen(NullScreen.Instance);
            RegisterSoundEngine(NullSoundEngine.Instance);
            RegisterMessageLog(NullMessageLog.Instance);
        }
コード例 #10
0
        public override void Execute(ushort aPackedAddress)
        {
            long byteAddress = 0;

            if (Machine.Story.Header.Version <= FileVersion.V3)
            {
                byteAddress = aPackedAddress << 1;
            }
            else if (Machine.Story.Header.Version <= FileVersion.V5)
            {
                byteAddress = aPackedAddress << 2;
            }

            string s = ZText.DecodeStringWithLen(byteAddress, out _);

            Machine.Output.PrintString(s);
        }
コード例 #11
0
        private Story(byte[] memory)
        {
            this.memory               = memory;
            this.version              = Header.ReadVersion(memory);
            this.serialNumber         = Header.ReadSerialNumber(memory);
            this.releaseNumber        = Header.ReadReleaseNumber(memory);
            this.checksum             = Header.ReadChecksum(memory);
            this.actualChecksum       = Header.CalculateChecksum(memory);
            this.routinesOffset       = Header.ReadRoutinesOffset(memory);
            this.stringsOffset        = Header.ReadStringsOffset(memory);
            this.instructionCache     = new InstructionCache((memory.Length - Header.ReadStaticMemoryBase(memory)) / 8);
            this.ztext                = new ZText(memory);
            this.memoryMap            = new MemoryMap(memory);
            this.informData           = new InformData(memory, this.memoryMap, ztext);
            this.objectTable          = new ZObjectTable(memory, ztext);
            this.globalVariablesTable = new GlobalVariablesTable(memory);
            this.dictionary           = new ZDictionary(this, ztext);
            this.mainRoutineAddress   = Header.ReadMainRoutineAddress(memory);

            RegisterInterpreter(new DefaultInterpreter());
        }
コード例 #12
0
ファイル: ZObjectTable.cs プロジェクト: taradinoc/ZDebug
        internal ZObjectTable(byte[] memory, ZText ztext)
        {
            this.memory  = memory;
            this.ztext   = ztext;
            this.version = Header.ReadVersion(memory);
            this.address = Header.ReadObjectTableAddress(memory);

            this.maxObjects                = (ushort)(version <= 3 ? 255 : 65535);
            this.maxProperties             = (byte)(version <= 3 ? 31 : 63);
            this.propertyDefaultsTableSize = (byte)(maxProperties * 2);
            this.objectEntriesAddress      = (ushort)(address + propertyDefaultsTableSize);
            this.entrySize                  = (byte)(version <= 3 ? 9 : 14);
            this.attributeBytesSize         = (byte)(version <= 3 ? 4 : 6);
            this.attributeCount             = (byte)(version <= 3 ? 32 : 48);
            this.numberSize                 = (byte)(version <= 3 ? 1 : 2);
            this.parentOffset               = (byte)(version <= 3 ? 4 : 6);
            this.siblingOffset              = (byte)(version <= 3 ? 5 : 8);
            this.childOffset                = (byte)(version <= 3 ? 6 : 10);
            this.propertyTableAddressOffset = (byte)(version <= 3 ? 7 : 12);

            this.objects = ReadAllObjects();

            this.propertyTables = new IntegerMap <ZPropertyTable>(objects.Length);
        }
コード例 #13
0
ファイル: ComponentService.cs プロジェクト: thurn/tarkin
        Text UpdateText(ZText zText, GameObject gameObject)
        {
            Text text = GetOrAddComponent <Text>(gameObject);

            if (zText.Text != null)
            {
                text.text = zText.Text;
            }

            if (zText.Font != null)
            {
                text.font = _assetService.GetFont(zText.Font);
            }

            switch (zText.FontStyle)
            {
            case ZText.Types.FontStyle.Normal:
                text.fontStyle = FontStyle.Normal;
                break;

            case ZText.Types.FontStyle.Bold:
                text.fontStyle = FontStyle.Bold;
                break;

            case ZText.Types.FontStyle.Italic:
                text.fontStyle = FontStyle.Italic;
                break;

            case ZText.Types.FontStyle.BoldAndItalic:
                text.fontStyle = FontStyle.BoldAndItalic;
                break;
            }

            if (zText.FontSize.HasValue)
            {
                text.fontSize = zText.FontSize.Value;
            }

            if (zText.LineSpacing.HasValue)
            {
                text.lineSpacing = zText.LineSpacing.Value;
            }

            if (zText.SupportRichText.HasValue)
            {
                text.supportRichText = zText.SupportRichText.Value;
            }

            switch (zText.Alignment)
            {
            case ZTextAnchor.UpperLeft:
                text.alignment = TextAnchor.UpperLeft;
                break;

            case ZTextAnchor.UpperCenter:
                text.alignment = TextAnchor.UpperCenter;
                break;

            case ZTextAnchor.UpperRight:
                text.alignment = TextAnchor.UpperRight;
                break;

            case ZTextAnchor.MiddleLeft:
                text.alignment = TextAnchor.MiddleLeft;
                break;

            case ZTextAnchor.MiddleCenter:
                text.alignment = TextAnchor.MiddleCenter;
                break;

            case ZTextAnchor.MiddleRight:
                text.alignment = TextAnchor.MiddleRight;
                break;

            case ZTextAnchor.LowerLeft:
                text.alignment = TextAnchor.LowerLeft;
                break;

            case ZTextAnchor.LowerCenter:
                text.alignment = TextAnchor.LowerCenter;
                break;

            case ZTextAnchor.LowerRight:
                text.alignment = TextAnchor.LowerRight;
                break;
            }

            if (zText.AlignByGeometry.HasValue)
            {
                text.alignByGeometry = zText.AlignByGeometry.Value;
            }

            switch (zText.HorizontalOverflow)
            {
            case ZText.Types.HorizontalWrapMode.Wrap:
                text.horizontalOverflow = HorizontalWrapMode.Wrap;
                break;

            case ZText.Types.HorizontalWrapMode.HorizontalOverflow:
                text.horizontalOverflow = HorizontalWrapMode.Overflow;
                break;
            }

            switch (zText.VerticalOverflow)
            {
            case ZText.Types.VerticalWrapMode.Truncate:
                text.verticalOverflow = VerticalWrapMode.Truncate;
                break;

            case ZText.Types.VerticalWrapMode.VerticalOverflow:
                text.verticalOverflow = VerticalWrapMode.Overflow;
                break;
            }

            if (zText.ResizeTextForBestFit.HasValue)
            {
                text.resizeTextForBestFit = zText.ResizeTextForBestFit.Value;
            }

            return(text);
        }