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)); } }
internal ZObject(ZObjectTable objectTable, ZText ztext, ushort address, ushort number) { this.objectTable = objectTable; this.ztext = ztext; this.address = address; this.number = number; }
public InformData(byte[] memory, MemoryMap memoryMap, ZText ztext) { this.memory = memory; this.memoryMap = memoryMap; this.version = Header.ReadInformVersionNumber(memory); this.ztext = ztext; }
public override void Execute() { string s = ZText.DecodeStringWithLen((ushort)Machine.Memory.PC, out int length); Machine.Memory.PC += length; Machine.Output.PrintString(s); }
public void Run() { Memory.Initialize(Story.Header.StartPC); mInterpreter = new ZInterpreter(this); ZText.Initialize(this); mInterpreter.Interpret(); }
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)); }
public void PrintZSCII(short aChar) { if (aChar == 0) { return; } char ch = ZText.CharFromZSCII(aChar); _screen.WriteChar(ch); }
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(); }
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); }
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); }
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()); }
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); }
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); }