<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0">
	<channel>
		<title>BlitzBasic Portal Worklogs - Iliran</title>
		<link>https://www.blitzforum.de/worklogs/210/</link>
		<description>Worklog von Iliran-Team</description>
		<language>de</language>
		<managingEditor>mail@blitzforum.de</managingEditor>
		<webMaster>mail@blitzforum.de</webMaster>
		<pubDate>Fri, 28 Dec 2012 13:07:18 +0100</pubDate>
		<lastBuildDate>Fri, 28 Dec 2012 13:07:18 +0100</lastBuildDate>

		<item>
			<title>Türen, Inhalt und Erweiterungen bei den NPCs</title>
			<link>https://www.blitzforum.de/worklogs/210/#3626</link>
			<guid>https://www.blitzforum.de/worklogs/210/#3626</guid>
			<author>Lador</author>
			<description>Sehr lange ist der letzte Eintrag mal wieder her. Und weil nun Weihnachten ist und die Welt noch steht, wollte ich noch meine Fortschritte des letzten Jahres vorstellen.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Vor geraumer Zeit, nachdem ich die Indoor-Maps f&amp;uuml;r das Dorf Bringht nahezu fertiggestellt hatte, hab ich den &amp;Uuml;bergang von Outdoor- zu Indoor-Map verbessert bzw. erweitert. Es gibt H&amp;auml;usereing&amp;auml;nge, bei denen man eine T&amp;uuml;r &amp;ouml;ffnen muss, und welche, bei denen man einfach darauf loslaufen kann. Neu sind auch seitliche sowie n&amp;ouml;rdliche Eing&amp;auml;nge; bis jetzt waren lediglich s&amp;uuml;dliche m&amp;ouml;glich. T&amp;uuml;ren, die man mit Enter &amp;ouml;ffnen muss, existieren jedoch nur auf der s&amp;uuml;dlichen H&amp;auml;userseite. Diese werden dann durch eine schicke Animation &amp;uuml;berzeichnet. Au&amp;szlig;erdem wird jeder Map-Wechsel durch einen gem&amp;uuml;tlichen schwarzen Alpha-Effekt begleitet, sodass man nicht mehr aprupt von einer Map in die n&amp;auml;chste springt. Die Hauptmap (also die Outdoor-Welt) wird zudem von Anfang an in einem eigenen Array IliranMap[] gespeichert, sie wird also nicht bei jedem Wechsel dorthin neu geladen, was einiges an Ladezeit und Rechenleistung spart.&lt;br /&gt;Inzwischen gibt es auch Eing&amp;auml;nge, die nicht nur ein Tile breit und ein Tile hoch sind, sondern auch gro&amp;szlig;e Tore, die z.B. 3x2 Tiles gro&amp;szlig; sind. Dementsprechend gibt es nat&amp;uuml;rlich auch verschiedene T&amp;uuml;ren mit eigenen Animationen.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Besonders bei den NPCs hat sich vieles getan. So sind nun etwa Gespr&amp;auml;chs- bzw. Ereigniswechsel bei Nichtspielern ohne Zutun von Quests m&amp;ouml;glich (man erinnere sich vielleicht nocht an den Eintrag &amp;uuml;ber den Quest-Editor vor vielen Jahren). Das hat zur Folge, dass diese nun (meistens) nicht mehr andauernd den selben Satz sagen m&amp;uuml;ssen, falls sie nicht in eine Quest involviert sind, und demzufolge nat&amp;uuml;rlich auch mehr Arbeit f&amp;uuml;r mich bei der Erstellung der Gespr&amp;auml;che. ^^&lt;br /&gt;Dazu wird einfach am Ende des Gespr&amp;auml;chs in die Textdatei &amp;quot;[Ereignis=xy]&amp;quot; geschrieben, wobei xy das Sprung-Ereignis ist, welches mittels Byte(&amp;quot;xy&amp;quot;) zu einem Byte umgewandelt wird. Einstellige Zahlen werden dadurch ausgedr&amp;uuml;ckt, das x = &amp;quot; &amp;quot; (ein Leerzeichen) ist. Mehr als zwei Stellen werden wohl nicht n&amp;ouml;tig sein.&lt;br /&gt;Als kleine Erg&amp;auml;nzung zu den Gespr&amp;auml;chen machen NPCs nun nach den Zeichen Punkt, Komma, Ausrufe-, Fragezeichen und Gedankenstrich eine kurze Pause. Bei Satzzeichen (am Ende eines Satzes) ist diese etwas l&amp;auml;nger. Das wird einfach mittels Mid() und Millisecs() realisiert. NPCs, die sich nicht zuf&amp;auml;llig in der Welt bewegen, sondern an derselben Stelle stehen bleiben, drehen sich nach einem Gespr&amp;auml;ch auch wieder in ihre urspr&amp;uuml;ngliche Richtung zur&amp;uuml;ck. Dazu habe ich ein&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox0&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('0')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox0&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('0')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox0&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('0');&quot;&gt;Field OrSFrame&amp;#58;Byte&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;(f&amp;uuml;r: OriginalStartFrame) beim NPC-Type eingef&amp;uuml;gt, das - im Gegensatz zum &amp;quot;normalen&amp;quot; SFrame:Byte und analog zu vielen anderen Or-Variablen - im gesamten Programm mehr als Backup f&amp;uuml;r die urspr&amp;uuml;ngliche Information genutzt wird, und nur selten bis gar nicht ver&amp;auml;ndert wird.&lt;br /&gt;&lt;br /&gt;Die wohl gr&amp;ouml;&amp;szlig;te und umfangreichste Neuerung bez&amp;uuml;glich der NPCs ist, dass diese nach getaner Arbeit in ihr Haus zum Schlafen gehen und die T&amp;uuml;re hinter sich verschlie&amp;szlig;en. Sie haben also so etwas wie ihren eigenen kleinen Tagesablauf. Durch diesen Algorithmus ist es mit einer kleinen Abwandlung auch m&amp;ouml;glich, dass sie zu bestimmten Uhrzeiten auch einfach in der Welt umherwandern. Manchen NPCs kann man sogar beim Schlafen zusehen, n&amp;auml;mlich wenn sie in einer Herberge schlafen, die ja auch f&amp;uuml;r den Spieler zug&amp;auml;nglich ist.&lt;br /&gt;Dazu habe ich den NPC-Type um folgende Felder erg&amp;auml;nzt:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox1&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('1')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox1&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('1')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox1&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('1');&quot;&gt;Field Pathx&amp;#58;Short&lt;br /&gt;Field Pathy&amp;#58;Short&lt;br /&gt;Field Uhrzeit1&amp;#58;Byte&lt;br /&gt;Field Uhrzeit2&amp;#58;Byte&lt;br /&gt;Field Hausx&amp;#58;Short&lt;br /&gt;Field Hausy&amp;#58;Short&lt;br /&gt;Field HausMap&amp;#58;String&lt;br /&gt;Field InHausx&amp;#58;Byte&lt;br /&gt;Field InHausy&amp;#58;Byte&lt;br /&gt;Field LastSFrame&amp;#58;Byte&lt;br /&gt;Field WegList&amp;#58;TList = New TList&lt;br /&gt;Field OrWegList&amp;#58;TList = New TList&lt;br /&gt;Field NachHause&amp;#58;Byte&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Pathx und Pathy sind die angestrebte Position, die der NPC haben soll, damit er nach Hause laufen kann, also die Startposition f&amp;uuml;r den Weg nach Hause. Relevant ist dies vor allem f&amp;uuml;r Charaktere, welche sich sonst zuf&amp;auml;llig bewegen, da sie ja stets abweichende x- und y-Werte haben. Zur Vereinfachung kann man beide Variablen in der externen Datei mit 0 deklarieren und das Programm setzt sie dann auf die Startwerte der NPC-Startposition, welche sie zu Beginn des Programms innehaben.&lt;br /&gt;Die beiden Uhrzeit-Variablen stehen f&amp;uuml;r die Stundenzahl des Schlafengehens (Uhrzeit1) bzw. des Aufstehens (Uhrzeit2). Ist die &amp;quot;Weltzeit&amp;quot; gr&amp;ouml;&amp;szlig;er oder gleich Uhrzeit1, so geht der NPC schlafen, analog bei Uhrzeit2. Hierbei ist zu beachten, dass Uhrzeit1 immer gr&amp;ouml;&amp;szlig;er Uhrzeit2 ist, weil die Charaktere (im Normalfall) etwa in der ersten Tagesh&amp;auml;lfte (von 0-12 Uhr) aufstehen und in der zweiten Tagesh&amp;auml;lfte (13-24 Uhr) schlafen gehen. Au&amp;szlig;erdem k&amp;ouml;nnen die NPCs auch erst dann aufstehen, wenn sie zuvor schlafen gegangen sind; letzteres hat also die h&amp;ouml;here Priorit&amp;auml;t und wird zuerst ausgef&amp;uuml;hrt, doch dazu sp&amp;auml;ter mehr.&lt;br /&gt;Hausx und Hausy sind die Position von dem Eingang des Hauses bzw. ein Tile davor, wenn es sich um eine T&amp;uuml;r handelt. Demzufolge wird dies die Endposition sein, die der Nichtspieler erreicht hat, wenn er den Weg abgelaufen ist. Es sei denn nat&amp;uuml;rlich, er ist einer der bereits genannten &amp;quot;Wanderer&amp;quot;, welche in der Welt umherlaufen. Dann ist der Wert beider Variablen gleich 0, weil sie ja kein Haus erreichen wollen.&lt;br /&gt;Befindet sich der NPC auf der Position Hausx/Hausy, dann dreht er sich in Richtung von LastSFrame, sein MapName wird auf HausMap gesetzt und seine Position auf InHausx/InHausy. Letzteres ist aber nur entscheidend f&amp;uuml;r Figuren, denen man beim Schlafen zusehen kann. Diejenigen, die in ihr Haus gehen und dann die T&amp;uuml;r absperren, verschwinden einfach von der Bildfl&amp;auml;che. Dann wird die Liste aller Verbindungen (s. Worklog H&amp;auml;user-Editor) nach der entsprechenden durchforstet und deren Field Schloss:Byte auf 102 gesetzt (wenn es vorher 0 war), was einem Schloss entspricht, das man nur mit einem Schl&amp;uuml;ssel &amp;ouml;ffnen kann (s. Worklog Schl&amp;ouml;sserknacken). Wenn der NPC wieder aufsteht, wird das Haus auch nur dann ge&amp;ouml;ffnet (also auf 0 gesetzt), wenn das Schloss gleich 102 ist, denn sonst w&amp;uuml;rde der NPC ja ein vorhandenes Schloss versehentlich selbst &amp;ouml;ffnen.&lt;br /&gt;Zu guter Letzt speichert WegList die Richtungen, in die ein NPC gehen muss, um zu seinem Haus zu gelangen. Geht er wieder zur Arbeit, werden die Richtungen einfach umgedreht; es ist also keine zus&amp;auml;tzliche Liste daf&amp;uuml;r n&amp;ouml;tig. &amp;Uuml;brigens ist NachHause die Variable, die den derzeitigen Status des Nachhause-Gehens bzw. Aufstehens speichert und OrWegList ist - nat&amp;uuml;rlich - die originale Liste, weil der WegList bei jedem Schritt nach Hause das erste bzw. bei jedem Schritt zur Arbeit das letzte Element entfernt wird und diese daraufhin leer ist.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So, das war mal wieder ein sehr langer Worklogeintrag, der l&amp;auml;ngst &amp;uuml;berf&amp;auml;llig gewesen ist. ^^ Zum Schluss noch ein neuer Screenshot:&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://iliran.il.funpic.de/Sonstiges/ScreenAaelo.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;Auf diesem Bild k&amp;ouml;nnt ihr das ehemalige Gebirgsd&amp;ouml;rfchen Aaelo im Westen von Iliran sehen, das fr&amp;uuml;her einmal beim Bergbau und der Rohstoffverarbeitung f&amp;uuml;hrend war, jedoch inzwischen wegen seiner schlechten Lage abgel&amp;ouml;st wurde und kaum noch besiedelt wird. Wie man an den B&amp;uuml;schen, Pilzen und Baumst&amp;auml;mmen sehen kann, funktioniert die Halbtransparenz inzwischen ohne Probleme (s. Screenshot letzter Eintrag). ^^ Feedback (egal ob positiv oder negativ) ist erw&amp;uuml;nscht.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;An dieser Stelle w&amp;uuml;rde ich auch gerne all diejenigen &lt;b&gt;talentierten Mapper unter euch&lt;/b&gt; aufrufen, die gerne mit mir und Gabbes zusammen an Iliran arbeiten m&amp;ouml;chten, sich bei mir zu melden. Wir suchen vor allem noch Dungeon- und Outdoor-Designer. Also, wenn ihr Lust habt, dann w&amp;uuml;rden wir uns freuen, euch in unserem Team begr&amp;uuml;&amp;szlig;en zu d&amp;uuml;rfen. ^^</description>
			<pubDate>Fri, 28 Dec 2012 13:07:18 +0100</pubDate>
		</item>

		<item>
			<title>Schriftrollen, Ausbilder und Erfahrung bei Quests</title>
			<link>https://www.blitzforum.de/worklogs/210/#3467</link>
			<guid>https://www.blitzforum.de/worklogs/210/#3467</guid>
			<author>Lador</author>
			<description>Nach fast einem Jahr melde ich mich auch mal wieder, damit es nicht so aussieht, als w&amp;auml;re ich die ganze Zeit auf der faulen Haut gelegen. ^^&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Zum Einstieg hab ich diesmal einen Screenshot von der originalen Welt mitgebracht (keine Testmap):&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://iliran.il.funpic.de/Sonstiges/IliranMap.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;Gabbes k&amp;uuml;mmert sich um die Outdoor-Map. Auf diesem Bild ist ein Wasserfall ganz im S&amp;uuml;den von Iliran zu sehen, der ins Meer m&amp;uuml;ndet. Dieser und das Wasser werden im sp&amp;auml;teren Spiel dann noch animiert. Auff&amp;auml;llig nervig sind hier die grauen Fl&amp;auml;chen unter B&amp;auml;umen und Pflanzen; diese werden sp&amp;auml;ter die Schatten darstellen, ich suche derzeit auch schon fieberhaft nach einer L&amp;ouml;sung (ich glaube das Stichwort hei&amp;szlig;t Halbtransparenz?).&lt;br /&gt;&lt;br /&gt;In Iliran kann man ja schon l&amp;auml;nger Zauber anwenden. Wenn man nun jedoch einen auf Kampf spezialisierten Charakter hat, dann ist die meiste Magie nutzlos schwach bzw. man kann wegen des wenigen vorhandenen Manas teils gar nicht zaubern. Es kann aber sein, dass manche Gegnertypen sich von ein paar Schwerthieben und Stichwunden nicht beeindrucken lassen. Dann muss auch der Krieger zu magischen Hilfsmitteln greifen, die sogar er anwenden kann: Schriftrollen. Diese kosten kein Mana, jedoch geht eine l&amp;auml;ngere Nutzung auf Dauer in die B&amp;ouml;rse, denn f&amp;uuml;r Schriftrollen verlangen H&amp;auml;ndler relativ hohe Preise. Man wird sie aber auch &amp;ouml;fter finden bzw. in bestimmten Quests bekommen, wenn man sie braucht. Auch Magier k&amp;ouml;nnen durch Schriftrollen schon auf fr&amp;uuml;hen Stufen bessere Zauber wirken.&lt;br /&gt;Der Einbau von Schriftrollen in mein Programm war eigentlich einigerma&amp;szlig;en simpel: Der Zauber-Type erh&amp;auml;lt einfach noch ein Feld Schriftrolle:Byte (entweder True oder False) und ein Feld Anzahl:Byte (wie oft die Schriftrolle im Zauberinventar vorhanden ist). Nun musste nur noch &amp;uuml;berpr&amp;uuml;ft werden, ob der ausger&amp;uuml;stete Zauber auf einer Schriftrolle basiert oder nicht. Wenn ja, wird bei jeder Anwendung einfach die Anzahl um 1 verringert, wenn sie gleich 0 ist, wird das Feld im Zauberinventar gel&amp;ouml;scht.&lt;br /&gt;&lt;br /&gt;Wieder eine m&amp;ouml;gliche Situation im Spiel: Sagen wir, man braucht ganz dringend gegen einen bestimmten Gegnertyp eine spezielle Waffengattung. Jedoch macht man nicht gen&amp;uuml;gend Schaden damit, weil man diese Fertigkeit bisher vernachl&amp;auml;ssigt hat. Nun w&amp;auml;re es doch hilfreich, wenn man diese schnell und unkompliziert steigern k&amp;ouml;nnte. Daf&amp;uuml;r gibt es nun Ausbilder bzw. Trainer. Bei ihnen kann man bestimmte F&amp;auml;higkeiten bis zu einem gewissen Level verbessern.&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox2&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('2')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox2&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('2')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox2&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('2');&quot;&gt;'Ausbildung-Type&lt;br /&gt;Type TAusbildung&lt;br /&gt;&amp;nbsp; &amp;nbsp;Field ID&amp;#58;Short&lt;br /&gt;&amp;nbsp; &amp;nbsp;Field Name&amp;#58;String&lt;br /&gt;&amp;nbsp; &amp;nbsp;Field Inhalt&amp;#58;TList = New TList&lt;br /&gt;End Type&lt;/div&gt;&lt;br /&gt;Name:String speichert den Namen des Ausbilders und Inhalt ist eine Liste aller angebotenen Ausbildungen. F&amp;uuml;r die Objekte darin habe ich eine eigene Klasse erstellt:&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox3&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('3')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox3&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('3')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox3&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('3');&quot;&gt;'A&amp;#40;us&amp;#41;B&amp;#40;ildung&amp;#41;Einheit-Type&lt;br /&gt;Type TABEinheit&lt;br /&gt;&amp;nbsp; &amp;nbsp;Field ID&amp;#58;Short&lt;br /&gt;&amp;nbsp; &amp;nbsp;Field Fertigkeit&amp;#58;Byte&lt;br /&gt;&amp;nbsp; &amp;nbsp;Field MaxLevel&amp;#58;Byte&lt;br /&gt;&amp;nbsp; &amp;nbsp;Field Kosten&amp;#58;Float&lt;br /&gt;End Type&lt;/div&gt;&lt;br /&gt;Das ausbildbare Talent wird in Fertigkeit:Byte (1-15) gespeichert, das maximal ausbildbare Level dieser Fertigkeit in MaxLevel:Byte. Kosten:Float gibt hier den Preis &amp;quot;pro Level&amp;quot; an, ist man zum Beispiel gerade mit dem Talent Lange Klingen auf Stufe 20, betragen die Kosten f&amp;uuml;r die Ausbildung auf Stufe 21 eben 20 mal Kosten:Float.&lt;br /&gt;Ein NPC kann entweder ein H&amp;auml;ndler oder ein Ausbilder (nat&amp;uuml;rlich auch keins von beiden ^^) sein. Bei H&amp;auml;ndlern ist das Feld Handeln = 1, bei Ausbildern gilt Handeln = 2. Spricht man nun mit einem Charakter, dann wird eben jene Variable &amp;uuml;berpr&amp;uuml;ft und es erscheint ein entsprechender Button.&lt;br /&gt;&lt;br /&gt;Als letzte gro&amp;szlig;e Neuerung in diesem Eintrag m&amp;ouml;chte ich gerne etwas &amp;uuml;ber die Erfahrung loswerden. Durch Besiegen eines Gegners, Anwenden eines Zaubers oder einfaches &amp;quot;Verteidigen&amp;quot; (bei jedem Angriff von einem Gegner bekommt die jeweils aktuelle R&amp;uuml;stungsf&amp;auml;higkeit Erfahrung; bei gemischten R&amp;uuml;stungen gilt das Verh&amp;auml;ltnis 50%/30%/20% von Brustpanzer/Schild/Helm, zum Beispiel schwerer Brustpanzer, leichtes Schild und kein Helm w&amp;uuml;rde bei 10 Erfahrungspunkten pro Schlag 5 Erfahrung zum Talent &amp;quot;Schwere Ruestung&amp;quot;, 3 Erfahrung zu &amp;quot;Leichte Ruestung&amp;quot; und 2 Erfahrung zu &amp;quot;Keine Ruestung&amp;quot; addieren) erh&amp;auml;lt die jeweilige Fertigkeit Erfahrung durch Anwendung (s. Elder Scrolls). Bei anderen bekannten Spielen erh&amp;auml;lt der Charakter Erfahrung (v.a. durch Quests) und steigt selbstst&amp;auml;ndig auf, die Fertigkeiten nicht (zum Beispiel Two Words oder auch MMORPGs). Mit dem aktuellen System h&amp;auml;tten dann nur leider die Quests weniger Sinn, abgesehen von etwas Gold und ein paar Gegenst&amp;auml;nden (s. Schriftrollen oben ^^). Deswegen bekommt man f&amp;uuml;r einige Quests auch Erfahrung f&amp;uuml;r ein bestimmtes Talent. Dieses richtet sich dann nach dem Auftraggeber: Absolviert man etwa einen Auftrag f&amp;uuml;r die Kriegergilde, so erh&amp;auml;lt man Erfahrungspunkte f&amp;uuml;r eine Kampff&amp;auml;higkeit.&lt;br /&gt;Auch hier ist die Implementierung wieder relativ leicht: Der Quest-Type braucht einfach noch die Felder Erfahrung:Short (Erfahrungspunkte) und Fertigkeit:Byte (aufgewertetes Talent). Wenn beides gr&amp;ouml;&amp;szlig;er als 0 ist, erh&amp;auml;lt man nach Abschluss der Quest eine Nachricht.&lt;br /&gt;&lt;br /&gt;Zum Schluss m&amp;ouml;chte ich noch einmal meine innenarchitektischen (?) K&amp;uuml;nste beweisen. Ich werde mich n&amp;auml;mlich k&amp;uuml;nftig selbst um die Indoor-Maps des Spiels k&amp;uuml;mmern.&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://iliran.il.funpic.de/Sonstiges/Indoor.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;Ein Haus in einem alten Bauerndorf im S&amp;uuml;den Ilirans. Der wei&amp;szlig;e Rand ist Teil meines MapEditors. ^^&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Als n&amp;auml;chstes werde ich mich wahrscheinlich wie gesagt um die Halbtransparenz, also die Schatten k&amp;uuml;mmern (auch wieder sehr sch&amp;ouml;n sichtbar am Tisch im Indoor-Screenshot). Wenn ich eine sch&amp;ouml;ne und schnelle M&amp;ouml;glichkeit daf&amp;uuml;r finde. ^^</description>
			<pubDate>Mon, 30 Jan 2012 17:27:02 +0100</pubDate>
		</item>

		<item>
			<title>Stufenaufstieg, Beschwören, Charaktermenü</title>
			<link>https://www.blitzforum.de/worklogs/210/#3182</link>
			<guid>https://www.blitzforum.de/worklogs/210/#3182</guid>
			<author>Lador</author>
			<description>Da ich nun in den letzten Wochen mal wieder etwas Zeit fand, mich um mein Riesenprojekt zu k&amp;uuml;mmern, hab ich mir &amp;uuml;berlegt, welche Grundlagen in der Engine noch fehlen (weil Inhalt gibts immer noch nur auf dem Papier^^). Ich bin dann auf einen alten Ordner namens &amp;quot;Stufenaufstieg&amp;quot; gesto&amp;szlig;en.&lt;br /&gt;&lt;br /&gt;Das Prinzip ist relativ simpel: Die 15 Fertigkeiten sind in 5 Haupt- und 10 Nebenfertigkeiten aufgeteilt. Hat man zehn Aufstiege der Hauptfertigkeiten, steigt man eine Stufe auf, wobei sich die Attribute (St&amp;auml;rke, Intelligenz, Geschicklichkeit) erh&amp;ouml;hen. Dies macht das Programm wiederum nicht von alleine, sondern der Spieler muss das erledigen. Es gibt jeweils f&amp;uuml;nf Fertigkeiten, die ein Attribut &amp;quot;unterst&amp;uuml;tzen&amp;quot;, d.h. je mehr man diese Gruppe von Fertigkeiten trainiert, desto h&amp;ouml;her kann das Attribut beim Stufenaufstieg erh&amp;ouml;ht werden. Das Stichwort hei&amp;szlig;t (bei mir) &amp;quot;Multiplikator&amp;quot;. Die Anzahl an Fertigkeitenaufstiegen wird halbiert, und diese Zahl ergibt dann den Multiplikator.&lt;br /&gt;Pro Stufenaufstieg kann man 12 Punkte auf drei Haupt- und jeweils zwei (also insgesamt sechs) Unterattribute verteilen. Ein Hauptattribut kostet drei Punkte, wird aber auf beide Unterattribute verteilt. Ist der Multiplikator dieses Attributs jedoch gr&amp;ouml;&amp;szlig;er als eins, kann es nur einmal erh&amp;ouml;ht werden. Ein Unterattribut kostet nur einen Punkt, kann aber bei einem Multiplikator des Hauptattributs gr&amp;ouml;&amp;szlig;er als eins alleine nicht erh&amp;ouml;ht werden. Kompliziert? Ich hoffe ihr k&amp;ouml;nnt das in ein paar wenigen Monaten selbst im Spiel oder einer Vorabversion testen.&lt;br /&gt;&lt;br /&gt;Auch ist mir aufgefallen, dass das Beschw&amp;ouml;ren von Monstern zwar schon funktioniert, ich das Beschw&amp;ouml;ren einer Waffe oder einer R&amp;uuml;stung aber noch nicht einmal eingebaut hatte. Wird der Zauber ausgef&amp;uuml;hrt, wird einfach nur die aktuelle R&amp;uuml;stung bzw. Waffe durch die herbeigezauberte Waffe ersetzt. Der Zauber speichert die ItemID dann wird einfach dieses Item geladen, ob man es im Inventar hat oder nicht.&lt;br /&gt;&lt;br /&gt;Gestern hab ich dann noch das Charaktermen&amp;uuml; etwas erweitert. Zuerst einmal wird nun angezeigt, ob und wie sich die H&amp;ouml;he von (Unter-)Attributen, Schaden und Fertigkeiten ver&amp;auml;ndert hat (z.B. durch Ringe, Zauber, Stichwort: Zust&amp;auml;nde). Positive Ver&amp;auml;nderungen werden gr&amp;uuml;n z.B. mit &amp;quot;+12&amp;quot; hinter dem jeweiligen Attribut bzw. der Fertigkeit angezeigt, negative Ver&amp;auml;nderungen rot  z.B. mit &amp;quot;-5&amp;quot; dahinter. Des Weiteren werden nun die Resistenzen bzw. Anf&amp;auml;lligkeiten (Feuer-, Eis-, Blitz-, Erd-, Gift-, Todes-Magie) im Charaktermen&amp;uuml; angezeigt und ebenfalls deren Ver&amp;auml;nderungen gr&amp;uuml;n bzw. rot. Hat der Charakter (oder auch der Gegner) einen Feuerresistenz-Wert von 0.4, ist er 40% gegen Feuer resistent und erleidet nur 60% des urspr&amp;uuml;nglichen Feuer-Schadens. Hat er einen Feuerresistenzwert von -0.2, ist er 20% anf&amp;auml;lliger f&amp;uuml;r Feuer und erleidet dementsprechend 120% des urspr&amp;uuml;nglichen Feuer-Schadens, also 20% mehr. Gegner haben noch Resistenzen/Anf&amp;auml;lligkeiten gegen&amp;uuml;ber Klingen (Lange und Kurze Klingen, &amp;Auml;xte), Stichwaffen (Speere, Pfeile) und Schlagwaffen (Keulen, St&amp;auml;be).</description>
			<pubDate>Mon, 14 Feb 2011 16:14:17 +0100</pubDate>
		</item>

		<item>
			<title>Schon wieder ein neuer Mapdesigner</title>
			<link>https://www.blitzforum.de/worklogs/210/#2935</link>
			<guid>https://www.blitzforum.de/worklogs/210/#2935</guid>
			<author>Lador</author>
			<description>Die Abst&amp;auml;nde zwischen den Worklogs werden immer gr&amp;ouml;&amp;szlig;er. ^^ Ich muss mir leider eingestehen, dass ich jetzt zum Schluss wirklich sehr schlecht voran komme. Die Sommerferien habe ich GAR nicht zum Programmieren genutzt, nur zum Schluss hat mich noch ein kleiner Motivationsschub erreicht. Da Skabus selbst viel zu tun hat, habe ich mich bereit erkl&amp;auml;rt, zumindest die Indoor-Maps auf meine Kappe zu nehmen. Skabus wird also weiterhin die Au&amp;szlig;enwelt designen. Und damit ihr euch mal ein kleines Bild (genauer gesagt zwei ^^) von meinen F&amp;auml;higkeiten machen k&amp;ouml;nnt:&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://iliran.il.funpic.de/Sonstiges/Kneipe.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;Das hier ist die Kneipe im s&amp;uuml;dlichen Hafenkaff Zhak (man sieht nur einen Teil, aber das meiste). Dort treiben sich viele Piraten rum, die man jetzt nur noch nicht sieht. ^^&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://iliran.il.funpic.de/Sonstiges/Schlafraum.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;Ein Schlafraum in der Festung Enarco (Hauptstadt Ilirans). Dort wird man im Spiel anfangen. Mehr werde ich allerdings noch nicht verraten. ^^&lt;br /&gt;&lt;br /&gt;W&amp;uuml;rde mich &amp;uuml;ber Kritik freuen. Diese beiden Maps sind auch eigentlich soweit fertig, au&amp;szlig;er ihr habt noch etwas daran auszusetzen. ^^ &amp;Uuml;brigens ist es nicht die Originalgr&amp;ouml;&amp;szlig;e aus dem Spiel, im MapEditor sind die Tiles nur 32x32, damit es etwas &amp;uuml;bersichtlicher ist. Im Spiel ist es 48x48 (erkennt man vielleicht auch in der Demo).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Mehr hab ich leider nicht zu berichten. Wer das BlitzMax-Allgemein Forum mitverfolgt, hat vielleicht mitbekommen, dass ich demn&amp;auml;chst noch Fackeln/Beleuchtung und einen Blur-Effekt einbauen werde. Auch animiertes Wasser steht noch weit oben auf meiner To-Do-Liste.</description>
			<pubDate>Sun, 03 Oct 2010 15:30:13 +0200</pubDate>
		</item>

		<item>
			<title>Nachrichten, Zustände und Schlösser knacken</title>
			<link>https://www.blitzforum.de/worklogs/210/#2682</link>
			<guid>https://www.blitzforum.de/worklogs/210/#2682</guid>
			<author>Lador</author>
			<description>In den letzten Wochen habe ich den Worklog (aber auch das Programmieren) leicht vernachl&amp;auml;ssigt. Das liegt haupts&amp;auml;chlich daran, dass es mir an Motivation fehlte, weil mir eigentlich nicht mehr ganz so wichtige Sachen einfallen, die ich noch implementieren muss (mal abgesehen vom ganzen Spielinhalt ^^), aber auch daran, dass mir wenig Zeit zur Verf&amp;uuml;gung stand.&lt;br /&gt;&lt;br /&gt;Wie versprochen, habe ich mich um die Nachrichten gek&amp;uuml;mmert. Das sind einfache, kurze, einzeilige (f&amp;uuml;r mehrzeilige m&amp;uuml;sste ich dann mehrere Nachrichten machen) Anzeigen am linken Bildschirmrand in Textform. Sie machen deutlich, ob etwas besonderes im Spiel passiert ist, etwa einen Stufenaufstieg, Tagebucheintrag, eine Krankheit etc.&lt;br /&gt;Die Nachrichten werden als einfache TNachricht-Instanz im Nachrichten-Array gespeichert. Bis jetzt sind maximal 5 m&amp;ouml;glich (vielleicht erweitere ich es noch ein bisschen, wenn der Platz reicht), die neueste steht immer an oberster Stelle. Wenn alle 5 &amp;quot;Pl&amp;auml;tze&amp;quot; voll sind, wird einfach die &amp;auml;lteste gel&amp;ouml;scht und die neue Nachricht hinzugef&amp;uuml;gt. Zuerst einmal der Type:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox4&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('4')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox4&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('4')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox4&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('4');&quot;&gt;&lt;br /&gt;'Nachricht-Type&lt;br /&gt;Type TNachricht&lt;br /&gt;&amp;nbsp; &amp;nbsp;Field Text&amp;#58;String&lt;br /&gt;&amp;nbsp; &amp;nbsp;Field Alpha&amp;#58;Float&lt;br /&gt;&amp;nbsp; &amp;nbsp;Field Aktiv&amp;#58;Byte&lt;br /&gt;End Type&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Alpha deutet schon auf eine transparente Schrift hin. Die Nachrichten werden immer durchsichtiger, je l&amp;auml;nger sie aktiv sind. Der Wert Alpha f&amp;auml;ngt bei 0 an, und wird dann immer um 0.002 gr&amp;ouml;&amp;szlig;er, bis er den Wert 1.8 erreicht hat, dann ist die Nachricht inaktiv und wird nicht mehr angezeigt. Der Alpha-Wert f&amp;auml;ngt bei 2 an, wodurch die Schrift erst einmal l&amp;auml;ngere Zeit unver&amp;auml;ndert bleibt und bei 0.2 wird die Nachricht automatisch gel&amp;ouml;scht, weil sie dann fast unlesbar und uralt ist ^^.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ein weiterer Punkt waren die Zust&amp;auml;nde. Sie geben einen besonderen Bonus oder Malus an, der von begrenzter, aber auch von unbegrenzter Dauer sein kann (zum Beispiel durch die Wahl der Rasse/Klasse oder durch bestimmte Ausr&amp;uuml;stungsgegenst&amp;auml;nde). Der Type:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox5&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('5')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox5&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('5')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox5&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('5');&quot;&gt;&lt;br /&gt;'Zustand-Type&lt;br /&gt;Type TZustand&lt;br /&gt;&amp;nbsp; &amp;nbsp;Field Art&amp;#58;String&lt;br /&gt;&amp;nbsp; &amp;nbsp;Field Dauer&amp;#58;Byte&lt;br /&gt;&amp;nbsp; &amp;nbsp;Field Start&amp;#58;Int&lt;br /&gt;&amp;nbsp; &amp;nbsp;Field Fortschritt&amp;#58;Byte&lt;br /&gt;End Type&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Art:String ist der eigentliche Code des Zustands, zum Beispiel &amp;quot;Staerke + 5&amp;quot;. Dieser wird im Programm manuell festgelegt.&lt;br /&gt;Ist Dauer:Byte (in Sekunden) gleich 0, dann ist der Zustand dauerhaft.&lt;br /&gt;Start:Int wird mit MilliSecs() der Startzeitpunkt zugewiesen.&lt;br /&gt;Fortschritt:Byte gibt an, ob der Zustand bereits aktiviert wurde oder schon wieder deaktiviert (also gel&amp;ouml;scht) wird.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Zum Schluss noch kurz etwas zum Schl&amp;ouml;sser knacken. Daf&amp;uuml;r habe ich ausnahmsweise mal keinen neuen Type gemacht, sondern einfach nur bei TVerbindung (liegt lange Zeit zur&amp;uuml;ck, s. zweiter Eintrag) und TBehaelter das Field Schloss:Byte hinzugef&amp;uuml;gt, welches angibt, ob es sich um ein offenes bzw. ge&amp;ouml;ffnetes Schloss handelt (=0), ein versperrtes Schloss, das man mit einem Dietrich oder Zauber &amp;ouml;ffnen kann (=1-100) oder ob man einen Schl&amp;uuml;ssel daf&amp;uuml;r braucht (=101). Schl&amp;uuml;ssel sind normale TItem-Objekte, bei denen Typ:String der Name der StartMap der Verbindung bzw. der Map des Beh&amp;auml;lters, Schaden1 = x und Schaden2 = y entspricht.&lt;br /&gt;Dazu musste ich nun auch die Dietriche einbauen. Diese haben unterschiedliche Qualit&amp;auml;tsstufen, zum Beispiel 25%. Das bedeutet dann, dass die Fertigkeit des Spielers nur zu 25% genutzt werden kann.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ich hoffe, ich habe nichts vergessen (sonst f&amp;uuml;g ich das dann noch einfach nachtr&amp;auml;glich hinzu ^^). Demn&amp;auml;chst werde ich wahrscheinlich noch einmal den Quest-Editor &amp;uuml;berarbeiten, da dieser f&amp;uuml;r mich sp&amp;auml;ter f&amp;uuml;r die Implementierung der Spielinhalte sehr wichtig ist und deshalb auch gut handzuhaben sein sollte.</description>
			<pubDate>Tue, 13 Jul 2010 17:52:16 +0200</pubDate>
		</item>

		<item>
			<title>Kleine Demo</title>
			<link>https://www.blitzforum.de/worklogs/210/#2399</link>
			<guid>https://www.blitzforum.de/worklogs/210/#2399</guid>
			<author>Lador</author>
			<description>So, wie versprochen, habe ich in den letzten Tagen an einer Demo gearbeitet.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;https://www.blitzforum.de/upload/file.php?id=8622&quot; target=&quot;_blank&quot;&gt;https://www.blitzforum.de/upload/file.php?id=8622&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ich musste noch ein paar Bugs beheben (leider sind immer noch einige vorhanden, ich wollte nur nicht noch l&amp;auml;nger auf die Testversion warten lassen ^^). Au&amp;szlig;erdem noch ein bisschen am Balancing feilen etc.&lt;br /&gt;Auch habe ich einige Sachen noch nicht eingebaut. Ihr k&amp;ouml;nnt ja anhand dieses Worklogs einigerma&amp;szlig;en mitverfolgen, was ich schon gemacht habe bzw. was ich noch machen muss. Ich wollte eigentlich schon f&amp;uuml;r die Demo eine Hintergrundmusik einbauen, allerdings konnte ich kein Programm finden, dass .mid-Dateien in .ogg oder &amp;auml;hnliches umwandeln kann. Normalerweise mache ich das immer mit Audacity, nur ist bei meiner (Onboard)-Soundkarte die Aufnahmefunktion kaputt und deshalb funktioniert das so nun auch leider nicht mehr.&lt;br /&gt;Kampf- und Zauberfaktor (siehe voriger Worklog) habe ich noch nicht eingebaut. Auch die Ringe im Inventar haben noch keinen Nutzen.&lt;br /&gt;&lt;br /&gt;Steuerung:&lt;br /&gt;Pfeiltasten - Bewegen&lt;br /&gt;Strg links - Angreifen&lt;br /&gt;Enter - Reden/Beh&amp;auml;lter &amp;ouml;ffnen&lt;br /&gt;Maus - im Interface agieren (Hinweis: mit Rechtsklick kann man einen Gegenstand im Inventar ablegen, wenn er ausger&amp;uuml;stet ist)&lt;br /&gt;Strg links + Mausklick links - im Inventar Gegenst&amp;auml;nde bewegen/auf Hotkeyslot legen&lt;br /&gt;I - Inventar &amp;ouml;ffnen&lt;br /&gt;C - Charaktermen&amp;uuml; &amp;ouml;ffnen&lt;br /&gt;H - Hotkeyleiste abschalten&lt;br /&gt;J - Tagebuch &amp;ouml;ffnen&lt;br /&gt;1-0 - Hotkeys&lt;br /&gt;F12 - Screenshot (wenn ihr wollt ^^)&lt;br /&gt;Ich hoffe, ich habe nichts vergessen.&lt;br /&gt;&lt;br /&gt;Euer Held ist ein Krieger, demzufolge nicht ganz so gut in Magie und Fernkampf. Ausprobieren k&amp;ouml;nnt ihr es aber trotzdem. Im Charaktermen&amp;uuml; (C) k&amp;ouml;nnt ihr auch eure Fertigkeiten ansehen.&lt;br /&gt;Ich wei&amp;szlig;, dass ich einiges vielleicht recht schlampig gel&amp;ouml;st habe...&lt;br /&gt;&lt;br /&gt;Wie gesagt, es kann sehr gut sein, dass ihr noch den einen oder anderen Fehler entdeckt. Wenn das der Fall ist, w&amp;auml;re es nett, wenn ihr diesen entsprechen posten k&amp;ouml;nntet. F&amp;uuml;r ein paar Fehler hat auch die Zeit jetzt nicht mehr gereicht, sie zu beheben, aber im fertigen Spiel sind sie dann weg. ^^&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Jetzt aber viel Spa&amp;szlig;. ^^ &amp;Uuml;ber Lob, Kritik und Verbesserungsvorschl&amp;auml;ge w&amp;uuml;rde ich mich wie immer freuen.</description>
			<pubDate>Thu, 20 May 2010 17:40:44 +0200</pubDate>
		</item>

		<item>
			<title>Erweiterungen im Inventar, Zauber handeln...</title>
			<link>https://www.blitzforum.de/worklogs/210/#2371</link>
			<guid>https://www.blitzforum.de/worklogs/210/#2371</guid>
			<author>Lador</author>
			<description>In letzter Zeit habe ich mich vor allem mit dem Inventar befasst. Es war ja eigentlich schon fertig, ich habe nur noch kleinere (bzw. auch gr&amp;ouml;&amp;szlig;ere) Verbesserungen vorgenommen.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Zum Einen habe ich nun Fernkampfwaffen eingebaut (sprich: Pfeil und Bogen). Dazu musste ich erst einmal ein neues Ausr&amp;uuml;stungsfeld hinzuf&amp;uuml;gen. Es gibt nun also zwei Felder f&amp;uuml;r ausger&amp;uuml;stete Waffen. Das erste ist nur f&amp;uuml;r &amp;quot;normale&amp;quot; Waffen, also Nahkampf- und Fernkampfwaffen gedacht. Das zweite ist belegt, wenn man entweder eine zweih&amp;auml;ndige Nahkampfwaffe, Pfeile f&amp;uuml;r seinen Bogen oder ein Schild ausger&amp;uuml;stet hat. Ein Schuss mit dem Bogen kostet aber auch einen Pfeil. ^^ Im Falle eines Treffers werden Schaden von Bogen und Pfeil addiert, d.h., es wird im fertigen Spiel auch verschiedene Pfeile geben, die verschieden gro&amp;szlig;en Schaden anrichten. Die B&amp;ouml;gen haben auch verschiedene Schussgeschwindigkeiten, meistens sind sie aber schneller als Zauber.&lt;br /&gt;&lt;br /&gt;Vorhin schon erw&amp;auml;hnt, kann man sich jetzt auch mit einem Schild ausr&amp;uuml;sten. Und es ist sogar (anders als die Waffen) am Charakter sichtbar. &amp;Uuml;brigens (das ist aber schon l&amp;auml;nger eingebaut), wird die Erfahrung bei den R&amp;uuml;stungs-Fertigkeiten so verteilt, wie man gerade ausger&amp;uuml;stet ist. Es gibt ja keine, leichte und schwere R&amp;uuml;stung. Diese kann man auch kombinieren. 50% der Erfahrung bekommt die R&amp;uuml;stungsfertigkeit, 30% die des Schildes und 20% die des Helmes. Und neu eingebaut habe ich auch die Verz&amp;ouml;gerungsfaktoren. Das hei&amp;szlig;t, je &amp;quot;schwerer&amp;quot; man ausger&amp;uuml;stet ist, desto l&amp;auml;nger braucht man f&amp;uuml;r eine Attacke bzw. einen Zauber. Bei leichter R&amp;uuml;stung kann ein Waffenangriff bis zu 25% l&amp;auml;nger dauern, ein Zauberangriff bis zu 50%. Bei schwerer R&amp;uuml;stung ein Waffenangriff bis zu 50%, ein Zauberangriff sogar bis zu 100% l&amp;auml;nger (Werte noch nicht final).&lt;br /&gt;&lt;br /&gt;Auch neu sind nun Ringe. Man kann bis zu zwei davon ausr&amp;uuml;sten, allerdings haben sie bis jetzt noch keine Wirkung, die baue ich aber als n&amp;auml;chstes ein (Zust&amp;auml;nde). Dadurch musste ich die Anzahl an Ausr&amp;uuml;stungsfeldern noch einmal um zwei erh&amp;ouml;hen.&lt;br /&gt;Bei H&amp;auml;ndlern kann man nun auch Zauber kaufen und verkaufen, insofern sie welche anbieten.&lt;br /&gt;&lt;br /&gt;Wie im letzten Worklogeintrag erw&amp;auml;hnt, habe ich auch Beh&amp;auml;lter f&amp;uuml;r tote Gegner/NPCs eingebaut. Dabei wird einfach nur &amp;uuml;berpr&amp;uuml;ft, ob einer der geladenen Beh&amp;auml;lter denselben Namen wie ein toter Gegner hat und ob das Feld NPC:Byte des Beh&amp;auml;lters gleich 1 ist.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Zum Schluss noch ein kleiner Screenshot vom neuen Inventar:&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://iliran.il.funpic.de/Sonstiges/ScreenInventar.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Als n&amp;auml;chstes werde ich dann erstmal Textnachrichten einbauen, also kurze Nachrichten, die &amp;uuml;ber der Hotkey-Leiste erscheinen, z.B. &amp;quot;Ihr wurdet vergiftet!&amp;quot; oder &amp;quot;Eure Fertigkeit Schwere Ruestung ist gestiegen!&amp;quot; etc. Danach werde ich mich an die Zust&amp;auml;nde machen, also z.B. Vergiftung, St&amp;auml;rke um 5 erh&amp;ouml;hen usw. Dicht damit verbunden sind nat&amp;uuml;rlich auch die Krankheiten, die man bekommen kann.&lt;br /&gt;&lt;br /&gt;Falls gr&amp;ouml;&amp;szlig;eres Interesse an einer Demoversion bestehen sollte, w&amp;uuml;rde ich mich bereiterkl&amp;auml;ren, in den n&amp;auml;chsten 1-2 Wochen einmal etwas (derartiges ^^) vorzubereiten und hochzuladen. Sagt mir einfach bescheid.</description>
			<pubDate>Mon, 10 May 2010 17:53:46 +0200</pubDate>
		</item>

		<item>
			<title>Zauber erweitert</title>
			<link>https://www.blitzforum.de/worklogs/210/#2313</link>
			<guid>https://www.blitzforum.de/worklogs/210/#2313</guid>
			<author>Lador</author>
			<description>In den letzten Tagen habe ich mich vor allem mit den Zaubern besch&amp;auml;ftigt. Diese waren ja auch schon teilweise eingebaut (siehe Video), jedoch nicht besonders komfortabel. Kostprobe?&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://iliran.il.funpic.de/Sonstiges/ScreenZauber.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;(Das bei der Hotkeyleiste keine Zahlen dastehen, liegt daran, dass ich das Bild erst nach dem Erstellen des Screenshots eingef&amp;uuml;gt habe, weil ich sie w&amp;auml;hrend des Programms ausgesschaltet hatte, und die Zahlen werden erst im Programm eingef&amp;uuml;gt. Durch die fehlende Hotkeyleiste sah die Gegner-Lebensanzeige etwas komisch aus, so mitten auf dem Bildschirm ^^.)&lt;br /&gt;&lt;br /&gt;Wie man vielleicht erkennen kann, ist dies ein Fl&amp;auml;chenzauber. Dieser wird aber nur auf Tiles gezeichnet, auf denen der Spieler auch laufen kann (deswegen brennen z.B. die B&amp;auml;ume auch nicht, aber hinter/unter ihnen brennt es, weil der Spieler dort laufen kann und die Bl&amp;auml;tter &amp;uuml;ber ihm gezeichnet werden). F&amp;uuml;r diese gibt es den Type TFlaechenschaden:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox6&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('6')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox6&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('6')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox6&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('6');&quot;&gt;&lt;br /&gt;'Fl&amp;auml;chenschaden-Type&lt;br /&gt;Type TFlaechenschaden&lt;br /&gt;&amp;nbsp; &amp;nbsp;Field x&amp;#58;Short&lt;br /&gt;&amp;nbsp; &amp;nbsp;Field y&amp;#58;Short&lt;br /&gt;&amp;nbsp; &amp;nbsp;Field Aktiv&amp;#58;Byte&lt;br /&gt;&amp;nbsp; &amp;nbsp;Field Zeichnen&amp;#58;Byte&lt;br /&gt;End Type&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;x und y sind die Koordinaten (in Tiles, also Map-Koordinaten). Wenn Aktiv:Byte gleich True ist, dann wirkt der Zauber auf dieser Fl&amp;auml;che noch (das hei&amp;szlig;t, die Gegner k&amp;ouml;nnen noch davon Schaden bekommen, auch wenn sie bereits einmal Schaden durch diesen Zauber bekommen haben). Aktiv ist z.B. auf nicht begehbaren Fl&amp;auml;chen False, oder auf Stellen, auf denen bereits ein Gegner &amp;quot;Feuer gefangen&amp;quot; hat (auch wenn es nicht nur Feuer-Fl&amp;auml;chenzauber geben wird). Allerdings k&amp;ouml;nnen Gegner auch nur kurze Zeit Fl&amp;auml;chenschaden nehmen, solange die Animation l&amp;auml;uft. Und da der Fl&amp;auml;chenzauber im fertigen Spiel auch mehr Mana verbrauchen wird, als ein normaler Zauber, lohnt er sich wahrscheinlich eher, wenn viele Gegner auf kleinerer Fl&amp;auml;che sind.&lt;br /&gt;Zeichnen:Byte ist wie Aktiv, nur dass Zeichnen auch noch True ist, wenn Aktiv durch einen Gegner False wurde.&lt;br /&gt;Der Type wird dann in einem Array, dass Zauber.FlaechenBreite breit (x) und Zauber.FlaechenLaenge hoch (y) ist, verwendet. &amp;Uuml;brigens: Dreht sich der Spieler, dreht sich auch der Zauber. Breite wirkt immer von links nach rechts vom Spieler aus gesehen, und Laenge wirkt immer von hinten nach vorne gesehen.&lt;br /&gt;&lt;br /&gt;Vielleicht erkennt der ein oder andere auch, dass der Zauber &amp;quot;Feuersturm&amp;quot; im Bild ein Nahkampfzauber ist. Das habe ich ebenfalls neu eingebaut. Diese funktionieren &amp;auml;hnlich wie die Nahkampfangriffe. Der Spieler muss direkt neben einem Gegner stehen und in seine Richtung sehen, sonst kann die Attacke nicht ausgef&amp;uuml;hrt werden. Nahkampfzauber werden weniger Mana brauchen, weil der Spieler Schaden auf sich nehmen muss, wenn er sie einsetzen will.&lt;br /&gt;&lt;br /&gt;Nicht so gut im Screenshot erkennt man die n&amp;auml;chste Neuerung: Zauber k&amp;ouml;nnen eine gewisse Zeit lang wirken. Das muss nicht hei&amp;szlig;en, dass das auch jeder Zauber macht, aber es wird viele Zauber im Spiel geben, die eine Wirkungsdauer haben (die kosten dann aber auch mehr Mana ^^). Bei Kampf- oder Heilzaubern wird dann der Schaden bzw. die Wirkung jede Sekunde vom Gegner abgezogen bzw. dem Spieler hinzugef&amp;uuml;gt. Steigerungs- und Senkungszauber (z.B. Attribute wie St&amp;auml;rke usw.) wirken dann einfach so lange, also z.B. St&amp;auml;rke wird f&amp;uuml;r 30 Sekunden um 20 erh&amp;ouml;ht.&lt;br /&gt;&lt;br /&gt;Ansonsten gab es ein paar kleinere &amp;Auml;nderungen im Zaubermen&amp;uuml; (Zauberinventar) und im &amp;quot;normalen&amp;quot; Inventar.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Demn&amp;auml;chst werde ich dann noch das Inventar erweitern. Dort fehlen mir noch Fernkampfwaffen, Schilde und (verzauberte) Ringe. Au&amp;szlig;erdem werde ich noch einbauen, dass get&amp;ouml;tete Gegner, die einen Gegenstand bei sich tragen (also eher NPCs, die zu Gegnern wurden), diesen dann fallen lassen und man ihn dann aufheben kann, wenn das Inventar nicht voll ist.&lt;br /&gt;&lt;br /&gt;Lob, Fragen, Anregungen und Kritik sind gerne willkommen. ^^</description>
			<pubDate>Thu, 22 Apr 2010 17:26:34 +0200</pubDate>
		</item>

		<item>
			<title>Tagebuch-Funktion</title>
			<link>https://www.blitzforum.de/worklogs/210/#2284</link>
			<guid>https://www.blitzforum.de/worklogs/210/#2284</guid>
			<author>Lador</author>
			<description>Samstag Abend habe ich mich mit dem Tagebuch im Spiel besch&amp;auml;ftigt. Dort werden aktualisierte Questereignisse niedergeschrieben. Zuerst einmal ein Bild zur Verdeutlichung:&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;img onload=&quot;resize_image(this)&quot; src=&quot;http://iliran.il.funpic.de/Sonstiges/ScreenTagebuch.png&quot; alt=&quot;user posted image&quot; /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Das Tagebuch ist eine TList (genannt TagebuchList:TList). Diese besteht aus den Instanzen Eintrag:TEintrag. Der Eintrag-Type sieht folgenderma&amp;szlig;en aus:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox7&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('7')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox7&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('7')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox7&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('7');&quot;&gt;&lt;br /&gt;'Tagebucheintrag-Type&lt;br /&gt;Type TEintrag&lt;br /&gt;&amp;nbsp; &amp;nbsp;Field ID&amp;#58;Short&lt;br /&gt;&amp;nbsp; &amp;nbsp;Field QuestName&amp;#58;String&lt;br /&gt;&amp;nbsp; &amp;nbsp;Field Tag&amp;#58;Short&lt;br /&gt;&amp;nbsp; &amp;nbsp;Field UhrZeit&amp;#58;String&lt;br /&gt;&amp;nbsp; &amp;nbsp;Field Inhalt&amp;#58;String&amp;#91;25&amp;#93;&lt;br /&gt;End Type&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;ID gibt an, an welcher Stelle im Tagebuch der Eintrag ist (sichtbar unten an der Seitenzahl, es gibt immer nur einen Eintrag pro Tagebuchseite).&lt;br /&gt;Der QuestName ist der Name der Quest (in diesem Falle &amp;quot;Die Medizin fuer den Alten&amp;quot;, steht oben in der zweiten Zeile).&lt;br /&gt;Der Tag speichert die Zahl des Tages im Spiel, zu welcher der Tagebucheintrag enstand (erste Zeile).&lt;br /&gt;UhrZeit speichert die Stunden- und Minutenzahl, zu welcher der Tagebucheintrag entstand (ebenfalls erste Zeile; wer das Bild genau unter die Lupe nimmt, erkennt unter den Balken f&amp;uuml;r Lebens-, Mana- und Fertigkeitsanzeige auch noch die Uhrzeit &amp;quot;16:02 Uhr&amp;quot; ^^).&lt;br /&gt;Der Inhalt ist ein Array, in dem die einzelnen Zeilen des Tagebucheintrages gespeichert sind (es sind maximal 25 m&amp;ouml;glich, mehr passen auch nicht auf eine Seite).&lt;br /&gt;&lt;br /&gt;Hinzu kommt au&amp;szlig;er der TagebuchFunktion(), die beim Dr&amp;uuml;cken von J aufgerufen wird, vor allem noch die Funktion TagebucheintragHinzufuegen(ID:Short,QuestName:String). In Ihr wird ein neuer Eintrag:TEintrag erstellt. F&amp;uuml;r das Field ID habe ich eine Variable EintragID:Short mitlaufen lassen, der nach jedem erstellten Eintrag +1 hinzugef&amp;uuml;gt wird. Tag und UhrZeit werden einfach direkt aus dem Hauptprogramm &amp;uuml;bernommen, und der Parameter ID der Hinzuf&amp;uuml;gen-Funktion dient dazu, die richtige Datei zu laden.&lt;br /&gt;&lt;br /&gt;F&amp;uuml;r die TagebuchFunktion() gibt es noch die Variable TagebuchSeite:Short, die angibt, auf welcher Doppelseite man sich gerade befindet, also TagebuchSeite=0 hei&amp;szlig;t, man sieht die Seiten 1+2, TagebuchSeite=1 hei&amp;szlig;t, man sieht die Seiten 3+4. Die Variable wird mit klicken auf den Schwertpfeil unten rechts vergr&amp;ouml;&amp;szlig;ert, und unten links verkleinert, vorausgesetzt, man hat schon genug Eintr&amp;auml;ge.&lt;br /&gt;&lt;br /&gt;Wahrscheinlich werden die Tagebucheintr&amp;auml;ge eher so kurz wie der obige gehalten werden, deswegen mache ich evtl. noch den Abstand zwischen den Zeilen und/oder die Schriftgr&amp;ouml;&amp;szlig;e gr&amp;ouml;&amp;szlig;er.</description>
			<pubDate>Mon, 12 Apr 2010 17:21:56 +0200</pubDate>
		</item>

		<item>
			<title>Lange Pause, neuer Mapdesigner, Behälter, Handeln...</title>
			<link>https://www.blitzforum.de/worklogs/210/#2206</link>
			<guid>https://www.blitzforum.de/worklogs/210/#2206</guid>
			<author>Lador</author>
			<description>Ich wollte auch mal wieder ein Lebenszeichen von mir geben. Seit dem letzten Worklog-Eintrag ist auch wieder einiges in Iliran passiert.&lt;br /&gt;&lt;br /&gt;Zuerst hatte ich Probleme mit den neuen Editoren, die nicht so wollten wie ich wollte. Dann war mein Computer 2 Monate lang kaputt und ich fand anfangs keine Motivation, an meinem Projekt weiterzumachen. Zus&amp;auml;tzlich sagte mir auch noch mein Mapdesigner Cireva mangels Zeitgr&amp;uuml;nden ab (schon wieder einer...^^). Deshalb m&amp;ouml;chte ich nun auch herzlich &lt;b&gt;Skabus&lt;/b&gt; in meinem Team begr&amp;uuml;&amp;szlig;en, der neben seinem Projekt Aves Certim die Maps f&amp;uuml;r Iliran macht.&lt;br /&gt;&lt;br /&gt;Neben zahlreichen Kleinigkeiten, habe ich mich in letzter Zeit &amp;uuml;berwiegend mit Beh&amp;auml;ltern und mit dem Handeln besch&amp;auml;ftigt. Mit Beh&amp;auml;lter meine ich z.B. Truhen, Kisten, F&amp;auml;sser etc., die eine Liste aus Items beinhalten. NPCs, mit denen man Handeln kann, sind auch eine Art Beh&amp;auml;lter. Falls ein Beh&amp;auml;lter ein NPC ist, ist der Eintrag &amp;quot;NPC:Byte&amp;quot; im Type TBehaelter gleich True, und die x/y-Werte sind in diesem Fall auch egal (also 0/0), da diese Beh&amp;auml;lter nicht wie die anderen ge&amp;ouml;ffnet werden k&amp;ouml;nnen. Desweiteren ist im NPC-Type ein Field BehaelterID, das sich die ID-Nummer des Beh&amp;auml;lters merkt und der Eintrag Handeln wird gleich True.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox8&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('8')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox8&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('8')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox8&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('8');&quot;&gt;Type TBehaelter&lt;br /&gt;&amp;nbsp; &amp;nbsp;Field ID&amp;#58;Short&lt;br /&gt;&amp;nbsp; &amp;nbsp;Field Name&amp;#58;String&lt;br /&gt;&amp;nbsp; &amp;nbsp;Field NPC&amp;#58;Byte&lt;br /&gt;&amp;nbsp; &amp;nbsp;Field x&amp;#58;Short&lt;br /&gt;&amp;nbsp; &amp;nbsp;Field y&amp;#58;Short&lt;br /&gt;&amp;nbsp; &amp;nbsp;Field Inhalt&amp;#58;TList = New TList&lt;br /&gt;End Type&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Normalerweise &amp;ouml;ffnet man einen Beh&amp;auml;lter, indem man sich davor stellt und Enter dr&amp;uuml;ckt. Bei den NPCs muss man diese erst ansprechen und kann dann auf einen Button &amp;quot;Handeln&amp;quot; klicken.&lt;br /&gt;&lt;br /&gt;Des weiteren habe ich letzte Woche auch noch eingebaut, dass NPCs zu Gegnern (vor allem w&amp;auml;hrend Quests) werden k&amp;ouml;nnen. Dazu muss eine eigene Gegner-Instanz in der GegnerList reserviert werden. Bei dieser Instanz ist die Position wieder 0/0, und der Eintrag NPC:Byte im Type TGegner ist gleich True. Im NPC-Type wird noch der Eintrag GegnerID eingef&amp;uuml;gt, der sich die ID-Nummer des Gegners merkt. Wenn nun w&amp;auml;hrend einer Quest der Befehl gegeben wird, dass der NPC x feindlich wird, dann wird auch die entsprechende Variable Feindlich:Byte im NPC-Type gleich True und dann erfolgt die Funktion NPCzuGegner():&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Code: &lt;/b&gt;&lt;span style=&quot;font-size:0.8em; display:inline;&quot; id=&quot;showcodebox9&quot;&gt; &lt;a href=&quot;javascript&amp;#058;show_code('9')&quot;&gt;[AUSKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-size:0.8em; display:none;&quot; id=&quot;hidecodebox9&quot;&gt; &lt;a href=&quot;javascript&amp;#058;hide_code('9')&quot;&gt;[EINKLAPPEN]&lt;/a&gt; &lt;/span&gt;&lt;div id=&quot;codebox9&quot; class=&quot;codebox&quot; style=&quot;max-height: 200px;&quot; onload=&quot;check_code('9');&quot;&gt;Function NPCzuGegner&amp;#40;&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;For g&amp;#58;TGegner = EachIn GegnerList&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;If g.ID = NPC.GegnerID And g.NPC = True Then&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;g.Image = NPC.Image&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;g.px = NPC.px&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;g.py = NPC.py&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;g.ppx = g.px*48&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;g.ppy = g.py*48&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;g.NPC = False&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;ListRemove&amp;#40;NPCList,NPC&amp;#41;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;EndIf&lt;br /&gt;&amp;nbsp; &amp;nbsp;Next&lt;br /&gt;End Function&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Man sieht, dass sich beide Verfahren teilweise sehr &amp;auml;hnlich sind.</description>
			<pubDate>Mon, 15 Mar 2010 15:36:46 +0100</pubDate>
		</item>


	</channel>
</rss>
