Was meinst Du damit genau? Funktioniert es? Läuft es ins Leere?
Druckbare Version
Was meinst Du damit genau? Funktioniert es? Läuft es ins Leere?
Ich hab mir mal eben \v[9473] in einer Textbox ausgeben lassen, was weit ausserhalb vonZitat:
Was würde wohl passieren, wenn man sich sowas z.B. mal in einer Textbox ausgeben lassen würde?
dem liegt was das dafür hergehaltene Spiel benutzt. Das Ergebnis ist 0.
Wenn ich sie über einen Pointer zuweisen will...
...ist das Ergebnis in der Box 1, auch wenn die Variable ausserhalb liegt und es entsteht zu keinerCode:<> Change Var [1065:Pointer] = 9473
<> Change Var [Var[1065:Pointer]] = 1
<> Message: \v[9473]
Zeit ein Fehler. Sie ist lediglich ausserhalb des über Makermöglichkeiten debugbaren Bereiches.
Wie MagicMaker sagte,das Ergebnis daraus ist 0.
Es passiert nämlich garnichts,weder ein Lese noch ein Schreibverfahren.
Nein, das ist falsch.
Es passiert ein Schreibverfahren; und beim Lesen ein Leseverfahren.
Man kann jede Variable benutzen, auch weit über dem definierten Bereich hinaus. Dieser dient nämlich nur dazu, Namen für die Variablen zu vergeben, das Variablen-Array selbst wird immer dynamisch vergrößert.
Sie auch hier: http://www.multimediaxis.de/threads/...ng#post2349904
Stimmt alles soweit und MagicMaker ist dran.
Nachdem MagicMaker nix einfällt, hier die neue Frage:
Was bedeutet folgende Meldung? Assertion Failure (D:\ha\02rpg2000\2003\RPG_RT\LGD_Picture.pas, 526 Line)
Bonusfrage: Was ist das für ein Dateipfad? Und was wäre die eigentliche Bedeutung dieser Meldung (nicht nur was sie beim Maker in diesem Fall bedeutet)?
Das die 526.Zeile des Skripts der eigentlich versteckten pas-Datei LGD_Picture einen Fehler aufweist? (ich hatte diese Meldung bisher noch nie)
Nicht wirklich^^
Naja, nehme mal an das passiert wenn man zb viele Heros hat und dann halt in einem Script die Party tauscht (oder im Kampf). Wenn man da dann vllt die "Max Number" verringert dann will der Maker ja immer noch drauf zu greifen, was zu einem Assertion Failure führt.
Oder man hat eine rm2k exe und will dann im rm2k3 ein Bild adressieren das über 20 liegt, was ja nicht gehen würd^^
Ne, das führt dann zu einem "Event script referenced a hero that doesn't exist"
Das ist die richtige Antwort. Exakt: Wenn man zu hohe Bild-IDs verwendet.
Auflösung der Bonusfragen:
Der Pfad bezieht sich auf den PC des Erstellers der RPG_RT.exe, nicht auf den PC des Spielers.
Und zwar bedeutet "Assertion Failure", dass ein Sicherheitscheck fehlgeschlagen ist.
Um zu verhindern, dass irgendwo im späteren Programmverlauf Fehler auftreten, die dann schlecht rückverfolgbar sind, verwendet man ein "assert(Bedingung)" um Dinge zu überprüfen, die eigentlich nie schief gehen sollten. Normalerweise gibts das aber nur in Debugbuilds, nicht in Releases.
In diesem Fall hatte der gute Lucifer in Zeile 526 der Datei "Picture.pas", die zum Sourcecode der RPG_RT.exe gehört, ein "assert(picture_id <= 20)" stehen.
Du bist dran.
Freirunde.
Dann werd ich gleich mal die Freirunde ausnutzen.
Was passiert, wenn man im Rm2k ein Event mit der Position "Same level as hero" genau dahin teleportiert, wo gerade der Held steht?
netwarrior
Nichts Besonderes. Der Held bleibt immernoch mobil und läuft trotz Mask von dem "fremden" Event herunter, aber dann nicht mehr herauf.
Leute, es macht keinen Spaß, wenn man ne richtige Antwort gibt und dann nie wieder reinkuckt und keine neue Frage stellt. So ist der Thread vor 2 Jahren auch versumpert.
Einfach: Wie kriegt man eine Zahlenanzeige per Events hin, wo eine Ziffer schmäler ist als 16 Pixel, ohne dafür 100 verschiedene Grafiken verwenden zu müssen? Oder anders formuliert: Wie kriegt man bei einer Event-Zahlenanzeige mehr als eine Ziffer auf ein Tile, mit möglichst wenig Aufwand?
Ich rate einfach mal:
Indem man jede Ziffer doppelt auf ein Charset legt, wobei eine von beiden auf der linken und die andere auf der Rechten Seite (linke, bzw. rechte 8 Pixel) liegt. Im Maker legt man die beiden Zahlen dann in jeweils ein Event, welche man dann beide übereinander legt.
Ganz recht.
Du bist.
Was einfaches: Was ist das?
Bemerkung: Ich will nicht wissen, was es macht, sondern nur, um was es sich handelt.Zitat:
Zitat von EasyEventExporter
Ich geb mal einen Tipp, vielleicht antwortet dann ja jemand darauf:
Es ist ein bekannter Algorithmus
Der Algorithmus ist also bekannt ja? Das macht es natürlich viel einfacher :)
Ich schieß mal ins RTP-Grüne und sag, auch wenns wohl komplett falsch ist, Bubblesort. xD
Oh Mann. xD
Na gut, was Einfacheres... Macht Show Screen was, wenn der Bildschirm schon hell ist? Wenn ja, unter welchen Bedingungen?
Bezieht sich das auf die Möglichkeit dem Einblenden von Pictures "special effects" hinzuzufügen indem man das ShowScreen davor setzt? (kann mich völlig irren, aber da war doch was)
100 Punkte für Seto Ka- Corti. (Names the same.)
Welcher Sonderfall der Eventpageverarbeitung kann sich im Standard-KS bei der Verwendung von Selfcast-Zaubern ergeben und welche Bedingung muss für das Eintreten erfüllt sein?
Das weiß nicht mal ich. Lös bitte auf.
Selfcastzauber, die eine Condition hinzufügen führen dazu, dass in der "Hero used X Command"-Eventpage /freigeswitchte/ Eventseiten ignoriert werden. Der Sonderfall ist das Überspringen jener Eventseiten falls Held auf sich selbst eine Condition ändert, bei anderen Zielen ists no prob.
Cherry darf.
Wie kann man es anstellen, dass man einen Assertion Failure-Fehler mit "LGD_Chipset.pas" bekommt, und zwar im Editor, und nix mehr tun kann im Projekt? Und wie löst man das Problem dann wieder?
Hab k.a. also rate ich einfach mal.
Theorie:
Der Fehler kommt, wenn man auf ner Map ein Chipset verwendet, dass nicht in der DB eingestellt ist und dessen Tileset-ID oberhalb der max. eingestellten liegt.
Lösung: Anzahl der Tileseteinträge hochstellen. Um trotz Editorcrash da hin zu kommen: Mapfile ersetzen solange.
Völlig korrekt.
Keine Lust ne Frage zu stellen.
Okay... dann Freirunde. Wenn bis heute Abend keiner was fragt, frage ich.
Was ist die performanteste Methode, einen Haufen Bedingungen, z.B. von 1 bis 100, aufzubauen?
Also so, dass je nach Zahlenwert einer Variable, 1 bis 100, was anderes passiert.
RM Eventfactory?
Das ist vielleicht der einfachste, aber darum gehts ja nicht.
sofern man die werte irgendwie von 1 bis 99 umwandeln kann, wurd ich sagen es ist wenn man nen map event hat mit bis 99 seiten (was max ist wenn ich mich recht erinnere), und dann halt diesem event rufen mit n variabel die zu der seite passt. hat man mehr als 99 werten könnte man nen branch haben der guckt ob der wert über 99 ist, wenn ja nimm 99 davon und mach einem neuen check bis es unter 99 ist und dann dem entsprechend event rufen.
alternativ könnte man auch nen bedingungs pyramide bauen a la binärbaum, bzw. man hat erst ein branch mit dem mittelwert und guckt dann ob der wert den man hat gleich ist, wenn nicht dann obs kleiner oder grösser ist. wenn grösser dann geht man im "true" teil, ansonsten geht man in dem "else" teil, wo neue bedinungen mit nem neuen mittelwert für dem entsprechend restierende zahlen drin sind, bis man dem korrekten wert gefunden hat.
if(>50)
jump to LOL
else
if(1)
else
if(2)
else
if(3)
else
end
end
end
Label: LOL
if(100)
else
end
end
Es kann 100 Seiten haben. Insofern wäre das sogar noch schneller als ich eigentlich gedacht habe. Dafür bekommst du das Prädikat richtiger als richtig.
Das war das, was ich eigentlich gemeint hatte.
Das kapier ich jetzt grade nicht...
Wenn >50, springst du zu wenn 100; und wenn <=50 fragst du aber einzeln ab? Vielleicht meinst du ja auch einen Binärbaum, dann wärs richtig, aber Kazesui war schneller und ist demnach dran.
Habe mir schon gedacht dass du an dem Binärbaum gedacht hast, und habe desshalb den auch erwähnt.
aber mal zum frage:
Wie kann man mit event code herausfinden ob ein event innerhalb eines Kreisses ist mit nur einem Bedingung/Conditional branch?
zum beispiel:
Die 'x' markiert Tiles um einem Punkt 'O', und man soll herausfinden ob ein Event innerhalb die Fläche von 'x' drin ist.
Dafür soll nur einem Conditional branch benutzt werden, aber Variabel Operationen könnt ihr so viel wie ihr wollt benutzen. Der Kreis im Code is auch nur ein Beispiel und der Kreis muss nicht diese grösse haben, solange es halt ein Kreis bildet.Code:xxx
xxxxx
xxxxxxx
xxxxxxxxx
xxxxOxxxx
xxxxxxxxx
xxxxxxx
xxxxx
xxx
Für die, die ein bisschen Mathe können dürfte es nicht so schwer sein
Hero X - ZielX
Hero Y - ZielY
If ZielX is greater than -4
>If ZielX is less than 4
>>If ZielY is greater than -4
>>>If ZielY is less than 4
ZIEL IST IM RADIUS
erstens wäre dass 4 conditional branches stadt eine, und zweitens wäre das kein Kreis sondern ein Viereck.
dein vorschlag wurde etwa so aussehen
Code:
xxxxxxx
xxxxxxx
xxxxxxx
xxxOxxx
xxxxxxx
xxxxxxx
xxxxxxx
Pseudocode:
Ich gehe hiermit die X-Spalten nacheinander ab und grenze die dafür erlaubten Y-Werte ein.Code:XTemp = ZentrumobjektX - ZielobjektX
YTemp = ZentrumobjektY - ZielobjektY
(Differenzen berechnen)
If XTemp == -4
If YTemp >=-1
If YTemp <=1
DRIN
End
End
End
If XTemp == -3
If YTemp >=-2
If YTemp <=2
DRIN
End
End
End
If XTemp == -2
If YTemp >=-3
If YTemp <=3
DRIN
End
End
End
If XTemp == -1
If YTemp >=-4
If YTemp <=4
DRIN
End
End
End
If XTemp == 0
If YTemp >=-4
If YTemp <=4
DRIN
End
End
End
If XTemp == 1
If YTemp >=-4
If YTemp <=4
DRIN
End
End
End
If XTemp == 2
If YTemp >=-3
If YTemp <=3
DRIN
End
End
End
If XTemp == 3
If YTemp >=-2
If YTemp <=2
DRIN
End
End
End
If XTemp == 4
If YTemp >=-1
If YTemp <=1
DRIN
End
End
End
Ist eigentlich ganz simpel.
Um den Fall zu integrieren, dass es ausserhalb liegt, benutzt man entweder nen doppelten
Switch oder verschachtelt die Fälle in ELSEs.
Für ein richtigen Kreis geht btw auch :A (Man muss nur das zusammen rechnen von X und Y anders machen)Code:Event X = Event X - Hero X
Event Y = Event Y - Hero Y
if(Event X < 0)
Event X *= -1
if(Event Y < 0)
Event Y *= -1
Event X += Event X
if(Event X <= AbstandInTiles) { // zb 4
//Held steht im Bereich Karoförmig (oder was das da is xD)
....
}
Edit:
Habt ihr beiden da oben nicht gelesen das nur ein "Branch" genutzt werden soll?
Ich muss mich schlecht ausgedrückt haben. Es soll nur 1 bedingung / conditional branch / fork / if statement benutzt werden.
Es geht aber in die richtige richtung, ist schon richtig erstmal den differenzen zu finden.
R.D. ist schon auf was drin, ist aber immernoch 3 Conditional branches, und es ist immernoch da nicht wirklich ein Kreis, sondern ein anderem karoförmiges Viereck wie du selber geschrieben hast. Und es ist genau nach diesem "extra" mit dem zusammen rechnen von X und Y ich aus bin.
mit diesem extra braucht man die beiden branches die nachguckt ob eine der werte negativ sind nicht.
Setz auf den Kreis ein Spezialterrain und catche die TerrainID von dem Zielobjekt.
Das geht mit einer einzigen Bedingung.
@ Kazesui
Vielleicht ja auch so?:
Ich denke mal das war nicht gemeint aber so ungefähr würd
ich es machen und dann bei jemdem Schritt das Ereigniss neu aufrufen lassen.
Lg
Multi-Master1988
Das Problem in deiner Variante ist, du wolltest sicher abfragen ob jemand auf einer genauen
Stelle steht (nichtmal das scheint korrekt gelöst worden zu sein). Hier haben wir allerdings
einen Toleranzkreis der mit einer einzigen Bedingung abgefragt werden soll, ausser der
Möglichkeit in meinem vorherigen Post fällt mir dazu nicht wirklich nochwas ein.
Ausser vielleicht mit ein paar Pointern die die gleiche Fork immerwieder neu aufrufen,
nur dadurch halt verändern.
haha, mist. Hab vergessen irgend eine einschränkung gegen terrain / event ID reinzutun. War nicht die lösung an die ich gedacht habe, und ne besonders gute lösung ist es auch nicht da es dann ziemlich statisch bleibt, aber es ist eine lösung, desshalb werd ich es für korrekt halten, und sagen dass MagicMaker dran ist.
Die lösung nach dem ich war, benutzt dass "x²+y² = 1" ein kreis bildet, also könnte es so gelöst werden:
wo "abstand" ein wert im bezug von dem kreis wäre, was normaleweise von n² bis (n+1)² liegen sollte, wo n dem radi von mitte bis aussen in entweder horizontaler oder vertikaler richtung entspricht.Code:ziel_x -= zentrum_x
ziel_y -= zentrum_y
ziel_x *= ziel_x
ziel_y *= ziel_y
ziel_x += ziel_y
if( ziel_x < abstand)
drin
end
Deswegen würd ich die auch nie wirklich anwenden. Dazu muss das schon sehr strikt sein.Zitat:
und ne besonders gute lösung ist es auch nicht da es dann ziemlich statisch bleibt
MM will nichts fragen. Daher:
Welcher Bug bei "Show Message" kann das Spiel abstürzen lassen?
Richtig.
Du bist.
Folgefrage: Wie behebt man den Fehler? xD
Vlt einfach in der Database die Variablen bis zum Maximum alle aktivieren xD
Es ist eigentlich völlig egal wenn eine Variable genannt wird ob sie im Bereich des vom
Maker in der Datenbank definierten ist. Das einzige was mir eigentlich zu Absturzbug
eingefallen wäre in Message ist das Benutzen eines Backslashes ohne daraus einen
Befehl zu formen. ~> crash
Code:<> Show Message: \
<>
Ich denke, Corti meinte z.B. "\n[\n[x]]". Den Fehler hab ich in der No-ATB-Demo irrtümlich bei der Nonne gemacht (im 2-Helden-Fall), und weil er das angesprochen hat, hab ich es richtig gewertet. Das mit "\" wäre auch richtig gewesen.
Cherry ist dran und Cherry, dein Postfach ist voll, man kann dir nix mehr schicken. Und Cherry~ magst mir meine ICQ nummer mal schicken? (per PM) Ich hab se verlegt und vergessen und du bist einer von 3 Leuten auf der Welt, mit denen ich per ICQ kommuniziere.
Öh, ich hab weder die Frage wie man das behebt richtig verstanden (meine eigentliche Antwort darauf wäre "ääh, richtigstellen?" gewesen), noch wieso mein Versuch MagicMaker zu erklären was du mit deiner Antwort gemeint hast eine richtige Antwort ist, aber mir solls Recht sein http://cherrytree.at/misc/smilies/065enton.gif
Mir gehen langsam die Fragen aus, btw.
Was ist die einfachste Methode, animiertes Gras einzubauen, ohne Animationstiles zu benutzen? (Zum Beispiel weil man mehr/weniger Frames oder ein anderes Tempo haben will)
Also spontan würde ich sagen mit Charsets die man über Eventgrafiken anzeigen lässt. kann man dann auch verschieden schnell einstellen und man hat mehrere Frames (auch weniger)
Also ich würd ja meinen man wechselt einfach das Chipset aus und verlegt die Animationsframes auf verschiedene Dateien.
3 oder so Pictures, die dann loopen lassen und tada animiertes Gras^^
Hm, MM's Variante ist wohl ungefähr gleich gut wie die, die ich meine. Es gibt für beides Pro und Contra.
Da MM aber sowieso nie fragen stellen will, warte ich mal, ob die Antwort noch kommt, die ich eigentlich suche.
und ich wurde vorschlagen den "tile substitution" zu benutzen, wo man "statische" tiles benutzt, die halt zusammen einem animation bilden
Rüschitch.
Du bist.
welcher von diesem kodes "geht" schneller (in maker zeit) und wieso sind die zwei anderen lahmer?
Code:loop
Variable Oper:[0001] + , 1
Variable Oper:[0002] - , 1
end loop
Code:label 1
Variable Oper:[0003] + , 1
Variable Oper:[0004] - , 1
Comment: Variabel 3 wird grösser
Comment: Variabel 4 wird kleiner
jump to label 1
Code:label 1
Branch if Var [0666] is 0
Variable Oper:[0005] + , 1
Else Handler
Variable Oper:[0005] - , 1
End
jump to label 1
Variante 3... sag ich mal...
Bei 1. gibs loops die im Maker langsamer sind als Label, beim 2. wird ja noch ein SUB gemacht, in 3 hingegen nur ein ADD + ein einfaches JMP.
könnte logisch erscheinen, der maker stimmt dir aber nicht zu
Methode 2 würd ich einfach mal so sagen.
Dort wwerden die Varis nur geändert und sofort zum Label gesprungen.
Bei Methode 1 ist ja ein Loop,die mehr Rechenzeit benötigen...
Bei Methode 3muss doch zusätlich noch die Bedingung abgefragt werden...
ist lustiger weise (eigentlich eher trauriger weise) nicht richtig
Dann ist es logischerweise das erste, weil da am wenigsten Eventzeilen abgearbeitet werden müssen (ja, Kommentare zählen da auch dazu!). Obwohl Loops länger brauchen als ein "Jump to Label", ist das daher schneller.
und das ist völlig richtig
Irgendwie klar, wenn von 3 Antworten 2 schon als falsch markiert sind.
Was einfaches: Wie kriegt man im RM2k3 im Standard-KS einen bewegten Hintergrund hin? Und welche Arten Bewegung sind da ausschließlich möglich?
Genial daneben #2 (heisst: ich rate):
Über den "Change Panorama" Befehl.
Bewegungen: Scrollen Vert. + Horiz.
Eher daneben als genial http://cherrytree.at/misc/smilies/002wink.gif
Damit meine ich, nein, es gibt im Kampf gar kein "Panorama"-Bild, sondern ein "Backdrop"-Bild.
Bei Terrain muss man statt Background Frame auswählen (die Bilder müssen dementsprechend natürlich im Frame-Ordner liegen) und kann dann Bilder für Vordergrund und Hintergrund einstellen und diese sich horizontal und/oder vertikal bewegen lassen.
Dann muss man beim Start eines Kampfes nur noch diesen Hintergrund einstellen.
Richtig.
Okay, da mir nichts wirklich gutes einfällt:
Was passiert auf manchen Rechnern wenn ich ein Picture rotieren lasse?
Welcome to laggy ruckely ruckelnd Ruckel-Lagging-Land.Zitat:
Was passiert auf manchen Rechnern wenn ich ein Picture rotieren lasse?
Die FPS gehen in den Keller.