Geschrieben um 00:08 am 02.05.2007 | Zitat | Editieren | Löschen | |
Mitglied Pupil Gumby Beiträge: 14 | Hallo ich bin's wieder und diesmal sogar mit einem richtigen Problem. Bisher laufen die Arbeiten leider nicht so schnell wie ich es gerne hätte aber immerhin wurde (obs nun gut ist oder schlecht) die 256 K Marke gesprengt. Allerdings ist mir dabei etwas aufgefallen, was ziemlich katastrophale Auswirkung auf das Projekt haben könnte und wohl auch haben wird. Ich hatte mir nach den Anregungen hier ein wenig im I-Net umgesehen und mir diese Conversation Extension von Mark Tilord heruntergeladen: http://www.inform-fiction.org/I7Downloads/Extensions/Mark%20Tilford/Simple%20Chat Schätze die Leute mit deutlich mehr Ahnung als ich erkennen sofort, dass diese Ext. nicht im Glulx Format kompilierbar ist. Da ich allerdings später wohl einen ziemlich hohen Speicherbedarf haben werde (momentan habe ich gerade mal eine handvoll Räume und einige Menüs) bin ich quasi technisch aufgeschmissen. Gibt es irgendeine einfache Möglichkeit den Code doch noch zu retten, oder muss ich nun endgültig Inform 6 Programmierung lernen? Edit: Genauer wäre die Frage wohl, was kann an dem oben aufgeführten Quellcode zum Kompilierungsfehler führen? Ich habe leider wenig Ahnung von Glulx. Was sind den die merklichsten Unterschiede zwischen Z-Code und Glulx Kompilierung? |
Geschrieben um 19:29 am 03.05.2007 | Zitat | Editieren | Löschen | |
Mitglied Pupil Gumby Beiträge: 14 | Ok, habe hier eine Lösung gefunden. Das Problem schien zu sein, dass Glulx keine vollständige Wortreihe lesen kann sondern diese einzeln eingelesen werden müssen über den Befehl KeyboardPrimitive(). Man muss lediglich die Zeile read buffer parse; mit KeyboardPrimitive(buffer, parse); ersetzen und von da an sollte sich der Code in Glulx kompilieren lassen. Außerdem kann man statdessen auch *#ifdef TARGET_ZCODE; read buffer parse; ifnot; ! TARGET_GLULX;KeyboardPrimitive(buffer, parse); endif;*eingeben, so dass Inform gegebenenfalls von Z-Code zu Glulx überspringt. Aber ob das was bringt weiß ich leider nicht. Ich hoffe das hilft anderen Inform 7 Neueinsteigern. Es gibt allerdings einen neuen Bug der wohl von der aktuellen 4S08 Version herrührt. Wenn ich versuche über run a conversation from Y von einem chat node X aus nach Y zu springen wird plötzlich eine neue Konversation gestartet, die parallel zu der vorherigen läuft (dies ist soweit ich mich zurückerinnern kann bei der älteren Version nicht der Fall gewesen. Ich müsste allerdings mal nachschauen). Soll: heißen nach einigen Malen hin und her gibt es einen overflow crash, da zu viele rulebooks simultan laufen. Sehr ärgerlich. |
Geschrieben um 15:56 am 20.05.2007 | Zitat | Editieren | Löschen | |
Mitglied Pupil Gumby Beiträge: 14 | Hallo noch mal, Ganz dämliche Frage: Ich habe momentan Probleme Trefferpunkte für einzelne Körperteile in das System zu integrieren, weil es scheinbar keine doppelten Referenzen akzeptiert, also zB. Gesundheit of Torso of Person X. Für Gesundheit habe ich eine (spezifische) Kind of Value verwendet um es flexibler zu gestalten und um nicht für jeden einzelnen Charakter eine variable Nummer zu erstellen. Torso ist eine Kind of Körperteil welches wiederum ein thing und Szenerie ist (um später auch Ganzkörperschäden zu ermöglichen. Zumindest theoretisch). Zwar funktioniert: say Gesundheit of your Torso, aber wenn ich was anderes ähnlich wie das obere Beispiel versuche schafft es Inform nicht die Referenz richtig zu deuten und nimmt of X of Y als eine einzige zusammenhängende Beschreibung. Weiß vielleicht jemand Rat? |
Geschrieben um 13:39 am 22.05.2007 | Zitat | Editieren | Löschen | |
Mitglied Bachelor Gumby Beiträge: 60 | Bin mir nicht sicher, was du jetzt wie implementiert hast, darum einfach mal ein funktionierendes Stück Quellcode (mit aktueller Version 4U65).
Ich glaube für dich ist vor allem die letzte Zeile interessant. Doppelt "of" geht nicht, aber "which is bla of bla" wird problemlos angenommen. edit: Ich halte es für keine gute Idee, ein nicht-englischsprachiges Spiel mit Inform 7 zu schreiben. Aber das interessiert wohl eh keinen. Just my 2 cent. |
Geschrieben um 15:18 am 22.05.2007 | Zitat | Editieren | Löschen | |
Mitglied Student Gumby Beiträge: 24 | Clive:
Ich bin 100%ig Deiner Ansicht! |
Geschrieben um 19:55 am 22.05.2007 | Zitat | Editieren | Löschen | |
Mitglied Pupil Gumby Beiträge: 14 | @Clive Nah, das which hatte ich schon ausprobiert und es funktioniert leider in meinen Fall nicht so wie es sollte. Ich geb mal die Codefragmente an:
|
Geschrieben um 00:45 am 23.05.2007 | Zitat | Editieren | Löschen | |
Mitglied Bachelor Gumby Beiträge: 60 | Nach ewigem Rumprobieren hab ich endlich eine funktionstüchtige Version gefunden:
Das ist nicht praktisch. Aber es klappt, und in der Dokumentation hab ich auch leider keine Hinweise gefunden, wie es anders zu lösen ist (ich hab aber auch mehr probiert als nachgelesen). Dass aber solch einfache Sachen eines solchen Aufwands bedürfen, zeigt imho wieder einmal, dass Inform 7 entworfen wurde, um eine Geschichte in natürlicher Sprache erzählen und in ein Spiel umwandeln zu können. Das geht schon nicht mehr, wenn man ein deutsches Spiel mit Inform 7 schreiben möchte. Dazu kommt noch die deutsche Grammatik. Wer gern eine komplexe Spielwelt, gar ein Kampfsystem haben will, dem rate ich dringend zu Inform 6. Einige Gründe:
Ich will dich nicht entmutigen, aber ich kann beim besten Willen keinen guten Grund erkennen, der bei deinem Vorhaben für Inform 7 spricht. |
Geschrieben um 14:29 am 23.05.2007 | Zitat | Editieren | Löschen | |
Mitglied Bachelor Gumby Beiträge: 60 | So, ich konnte nicht widerstehen und hab ein kleines Inform 7-Kampfsystem gebastelt, in dem Personen freundlich oder feindlich gesinnt sind. Feindliche Personen im selben Raum greifen den Spieler jede Runde an, freundliche werden feindlich, wenn der Spieler sie angreift. Außerdem wird automatisch der Torso angegriffen, wenn man eine Person angreift, es sei denn, man greift ein bestimmtes Körperteil an. Ich finde es unsinnig, zusätzlich health für die ganze Person zu haben, denn wenn z.B. der Kopf zu Brei geschlagen wurde, ist die Person schließlich auch tot. Bisher ist nur der Torso als Körperteil implementiert, aber in dieser Form ist das leicht zu erweitern.
Was mich stört ist nur der extensive Gebrauch von Schleifen, aber wie gesagt... hab noch nicht herausgefunden, wie es anders zu lösen ist. |
Geschrieben um 00:09 am 24.05.2007 | Zitat | Editieren | Löschen | |
Mitglied Pupil Gumby Beiträge: 14 | Ok, es ist ziemlich spät und ich bin müde aber trotzdem: Ich könnte mir noch vorstellen, dass man mit relate das ganze ein wenig besser aufteilen könnte in verschiedenen Angriffsarten (Nah- Fernkampf, Einsatz von Hitze oder Elektrizität usw.) aber das würde auch in deinem Beispiel wohl problemlos funktionieren (etwas wenn man vermerkt welche Waffe gerade der Angreifer benutzt). Nur kurz zu den Personen TP, die sind für einen leichteren Schwierigkeitsgrad gedacht. Ist dieser ausgewählt sollen die aufgeteilte Trefferzonen (zumindest für den Spielercharakter) entfallen und mit einem einzigen Gesundheitsbalken ersetzt werden, welcher mehr TP fasst als Torso und Kopf es einzeln tun würden (deren Verlust im normalen oder schweren Schwierigkeitsgrad natürlich das Leben kostet) und sämtliche Handicaps für den Spieler, wie sie etwa bei einem schwer verletztes Bein entstehen könnten, werden vollkommen entfernt. Der Spieler überlebt also deutlich länger und ist nicht mehr anfällig gegenüber gezielten Angriffe seiner Gegner. Aber jetzt erstmal danke. Ich weiß die Mühe wirklich zu würdigen. Jetzt stehen erst einmal Präsenzklausuren an und ich bin mit dem Üben ein wenig im Verzug. Ich werde versuchen mich am Wochenende ausgiebiger damit zu beschäftigen und schauen was sich ergibt. |
Geschrieben um 00:28 am 24.05.2007 | Zitat | Editieren | Löschen | |
Mitglied Bachelor Gumby Beiträge: 60 | Pass auf, dass du nicht mehr Ambitionen entwickelst als deine Motivation ertragen kann. Ich finde unterschiedliche Schwierigkeitsgrade in Textadventures eher überflüssig. Und selbst wenn man es dem Spieler leichter machen will, dann würde ich einfach den Schaden reduzieren, den Monster anrichten. Oder die HP für die Trefferpunkte des Spielers erhöhen. Das hat einen ähnlichen Effekt und kostet kaum zusätzlichen Aufwand. Ist damit auch weniger buganfällig. Verschiedene Waffen, die verschiedenen Schaden anrichten, wäre ja kein Problem. Aber ich kann nur wiederholen: Diese ganzen eher technischen Sachen sind in Inform 6 sehr viel leichter zu implementieren, wie ich finde. Wenn du also eher ein System bauen als eine Geschichte erzählen willst, überleg dir lieber nochmal, ob du nicht doch umsteigst. Ansonsten viel Glück mit deinen Klausuren. |
Geschrieben um 05:13 am 31.07.2007 | Zitat | Editieren | Löschen | |
Mitglied Pupil Gumby Beiträge: 14 | Yay, es lebt doch noch! Dann kann ich ja jetzt weitermachen. Erstmal danke @Clive das Glück konnte ich gebrauchen. Leider ist, was das Programmieren betrifft, erschreckend wenig passiert vor allem, da ich momentan umsiedle. Das Problem mit dem Körperteil Referenzen ließ sich ziemlich leicht lösen. Man braucht lediglich eine zusätzlich Zeile wie etwa: If Torso (called target) is part of Person X, ... usw. Daraufhin kann man weiterhin mit 'target' arbeiten. Ob Inform 7 dabei auch durch eine Liste durchläuft weiß ich net aber es ist jedenfalls angenehmer zu benutzen als etwa durch repeat. Bevor ich aber mit weiteren Errungenschaften prahle nochmals ein, zwei Fragen. Gibt es eigentlich so etwas wie 'Glulx Farben für Dummies'? Ein wenig peinlich aber ich habe immer noch nicht verstanden wie dies in Inform 7 (oder 6) funktionieren soll. Das mit den Hexadezimalzahlen ist ja noch im Ansatz nachvollziehbar, aber was nötig ist um Zahl in Farbe umzuwandeln bleibt mir schleierhaft. Und die zweite: Gäbe es irgendeine Möglichkeit den Speicherbefehl zu modifizieren ohne gleich in der Library rumzupfuschen? Der Gedanke macht mich ein wenig nervös. Wäre also gut, falls es ein Hintertür gibt. Ob in Inform 7 oder 6. (EDIT: Hat sich glaube ich erledigt. Zumindest falls check saving the game wirklich das tut was ich denke) Da wäre auch noch das Problem, dass ich bisher noch keine Möglichkeit gefunden habe den Spieler zu verzögern. Ihn sozusagen für einige Runden 'aussetzten' zu lassen. Gibt es dafür irgendwelche bekannten Mittel und Wege? Ich werde mal die grundlegenden Befehlsroutinen runterarbeiten, die ich zustande bekommen habe. Grundlegend, weil ich einige Sachen absichtlich rauslassen werde, die, mehr oder weniger, spezifisch für das Spiel gedacht sind (etwa das Berechnen der aktuellen Fertigkeiten durch Attribute) und demzufolge ihren allgemeinen Nutzwert verlieren. Fangen wir am besten mit der Handhabung von Objekten, die vom Spieler kontinuierlich gehalten werden müssen um wirklich gebräuchlich zu sein (wie etwa ein Werkzeug und in diesem Fall natürlich auch Waffen). Ich unterscheide zwischen 3 Objektgrößen, was in meinem Fall vor allem mit dem Inventarmanagement zu tun hat, aber ebenfalls für andere Zwecke verwendet oder ignoriert werden kann. So besteht hier der Unterschied lediglich darin, dass ein großer Gebrauchsgegenstand stets abgelegt wird, wenn man versucht einen anderen zu benutzen oder versucht einen weiteren großen Gegenstand aufzunehmen. Hier also das 'neutrale' Codesegment:
Könnte sein, dass noch der ein oder andere kleine Fehler auftaucht, da das obige noch ungetestet, da zu einigen Teilen komplett neu geschrieben, ist. Aber im Großen und Ganzen sollte es funktionieren. Was ich herausgelassen habe sind zum einen die Möglichkeit zum gezielten Schießen (/Schlagen), da dies zum Teil über die Simple Chat Extention abläuft und ich versuchen will solche erstmal heraus zu lassen. Sollte aber das Interesse bestehen kann ich später noch hinzueditieren. Grob gesagt verläuft es so: Der Spieler kann ein bestimmtes Körperteil anvisieren, muss dafür allerdings je nach Wahl einen bestimmten Malus hinnehmen. Jedoch schießt er nicht sofort sondern kann, solange er nicht das Ziel aus den Augen verliert oder seine Waffe ablegt, seinen Gegner weiterhin im Visier behalten und somit die Trefferwahrscheinlichkeit über mehrere Runden hinweg steigern. Die Schnelligkeit dieser Steigerung ist von der Konzentration (quasi das Äquivalent zu Intelligenz in anderen Rollenspielen) abhängig. Der Angriff erfolgt dann durch den normalen Attacking Befehl. Dann wäre da noch ein Befehl, der die Gesundheit des Spielers in möglichst wagen Worten wiedergibt. Eigentlich nur lästiges copy & paste, man arbeitet sich durch sämtliche Körperteile und fertig. Also hier nur Platzverschwendung. Und zu guter Letzt gibt es noch die Möglichkeit zu treten, aber das ist im Moment nichts anderes als eine anders klingende Möglichkeit Leute und Dinge zu schlagen. Wenn erstmal so etwas wie ein Raumverhältnisse existiert soll es den Spieler ermögliche Gegner von ihm wegzustoßen oder ihnen Hindernisse in den Weg zu befördern unter anderem. Was als nächstes drankommt sind Dimensionen und Raumkoordinaten damit ich endlich ein vernünftiges Arbeitsumfeld bekomme und zeitabhängige Handlungen. Zweites ist bei NPCs kein Problem, weil die keine Befehle eintippen können. Beim Spieler wird es allerdings schwieriger... Gah! Augen brennen. Nacht (oder Morgen) EDIT: Ok, bin noch mal drübergegangen und habe die gröbsten Fehler bereinigt. Sollte jetzt alles soweit fehlerfrei laufen bis auf die Tabellen. |
Geschrieben um 17:32 am 14.08.2007 | Zitat | Editieren | Löschen | |
Mitglied Bachelor Gumby Beiträge: 60 | Basti: Gibt es eigentlich so etwas wie 'Glulx Farben für Dummies'? Ein wenig peinlich aber ich habe immer noch nicht verstanden wie dies in Inform 7 (oder 6) funktionieren soll. Das mit den Hexadezimalzahlen ist ja noch im Ansatz nachvollziehbar, aber was nötig ist um Zahl in Farbe umzuwandeln bleibt mir schleierhaft. In Glulx werden solche sachen durch glk-Funktionen erledigt. Eigentlich musst du nur die entsprechende glk_function raussuchen und den entsprechenden Farbencode als aktuellen Parameter übergeben. Es gibt aber schon Bibliotheken wie die unglklib.h, da kannst du auch mit den englischen Namen für gewisse Standardfarben arbeiten (wenn ich das richtig erinnere). Das gilt jetzt aber alles für Inform 6, ich hab noch nicht versucht, mit Inform 7 Glulx-mäßig was zu machen. Werde ich wohl auch erstmal nicht, dafür ist mir das einfach zu unpraktisch. Basti: Da wäre auch noch das Problem, dass ich bisher noch keine Möglichkeit gefunden habe den Spieler zu verzögern. Ihn sozusagen für einige Runden 'aussetzten' zu lassen. Gibt es dafür irgendwelche bekannten Mittel und Wege? Ich würde dafür einfach eine Routine schreiben, wo drinsteht, welche anderen Routinen alle ausgeführt werden sollen, während der Spieler nicht eingreifen kann. Bei Bedarf rufst du sie dann auf und der Spieler kann erst hinterher wieder was machen. Falls du willst, dass der Spieler aussetzt, weil er ohnmächtig ist oder so, kannst du das dann auch an das Gebiet anpassen, in dem er ohnmächtig geworden ist. |
Geschrieben um 02:02 am 24.08.2007 | Zitat | Editieren | Löschen | |
Mitglied Pupil Gumby Beiträge: 14 | Hi Clive, das mit den glulx Funktionen funktioniert glaub ich nicht wie in Inform 6. Zumindest vermute ich es, weil es auch in der Anleitung nie Erwähnung findet. Mir bleibt wohl doch nur übrig mich ein bisschen mehr mit der Include Funktion auseinander zusetzten (Stöhn). Allerdings ist mit der neuen Inform 7 Version (und dem dazugehörigen Upgrade für Glulx Text Effects) die Möglichkeit gekommen einen individuellen Schreibstil auch eine bestimmte glulx Farbe zu verpassen. Leider kann man bisher nur maximal zwei davon erstellen also bleibt mir nur die Auswahl zwischen fett gedruckten Buchstaben oder roten. Muss ich wohl ein wenig improvisieren. Beim zweiten Punkt bin ich nicht ganz sicher was du meinst fürchte ich. Was meinst du zum Beispiel mit 'wenn der Spieler nicht eingreifen kann'? Etwa beim Ende einer Runde (nachdem er einen Befehl eingegeben hat)? Momentan verstehe ich den Ansatz so, dass der Spieler solange nicht handeln kann sofern eine bestimmte Routine durch seine Handlung aktiviert wird. Ich hatte schon vorher so etwas ausprobiert indem ich die Spielfigur quasi 'zwingen' wollte zu warten bis ein Testzähler abgelaufen ist. Aber das Programm lies mich trotzdem jede Runde neue Befehle eingeben und war demzufolge ziemlich sinnfrei. |
Geschrieben um 15:16 am 24.08.2007 | Zitat | Editieren | Löschen | |
Mitglied Bachelor Gumby Beiträge: 60 | Damit meine ich einfach nur, dass in der Routine drin steht, was alles in der Zwischenzeit passiert. Da ein Textadventure nicht in Echtzeit abläuft, kannst du ja frei entscheiden, was alles in einem Zug passieren soll. Nachdem die Routine abgearbeitet ist - im nächsten Zug also - ist der Spieler wieder dran. Ich sehe nicht, wo das Problem ist? Falls der Spieler denken soll, dass mehrere Züge verstrichen sind, und falls die Anzahl der Züge angezeigt wird, setzt du sie einfach manuell hoch. Tatsächlich aber passiert das alles in demselben Zug, in dem der Spieler zuletzt eine Aktion machen durfte, daher kann er zwischendurch natürlich auch nicht eingreifen. Um dem Spieler zusätzlich das Gefühl von verstreichender Zeit zu geben, kannst du es auch so einrichten, dass er einfach zwischendurch eine Taste drücken muss, bis es weiter geht. |
Geschrieben um 17:10 am 13.01.2008 | Zitat | Editieren | Löschen | |
Mitglied Pupil Gumby Beiträge: 14 | Hi zusammen! Erst einmal frohes Neues und ich hoffe ihr habt alle die Weihnachtszeit gut überstanden. Ich hab mich in den letzten Monaten mit meinem eigenen kleinen Frankensteins Monster beschäftigt: dem Erstellen 2-dimensionaler Karten für Räume in Inform 7, auf denen sich Figuren bewegen können (was ähnlich aussieht wie bei den berühmt berüchtigten Nethack Spielen). Ich glaube, ich bin jetzt endlich in der Lage zumindest einen ersten Prototypen anbieten zu können (momentan leider nur in Glulx Format). Der Quellcode ist aber viel zu lang, als dass ich ihn so einfach hier hereinkopieren könnte wie ichs vorher gemacht habe. Falls ihr interessiert seid und einen Blick drauf werfen wollt, schick mir einfach eine Mail unter 'Basti_rahn@hotmail.com' und ich liefere den Code als extension. Freihaus natürlich (zusammen mit Dokumentation und einigen veranschaulichenden Beispielen, sowie eine zweite extension, die als eine, zumindest rudimentäre, Wegfindungsroutine fungiert). Gruß Basti |
Geschrieben um 23:29 am 31.01.2008 | Zitat | Editieren | Löschen | |
Mitglied Pupil Gumby Beiträge: 14 | Ok, Version 1 meiner 'Room & Dimension' extension ist draußen und kann hier heruntergeladen werden. Sie befindet sich allerdings in meinen Augen noch immer in einer Beta Phase. Dementsprechend fände ich es nicht schlecht, wenn sich noch einige weitere Leute finden würden, um den Code auszutesten. Werbung ende und Gruß Basti |