Gamestudio Links
Zorro Links
Newest Posts
Blobsculptor tools and objects download here
by NeoDumont. 03/28/24 03:01
Issue with Multi-Core WFO Training
by aliswee. 03/24/24 20:20
Why Zorro supports up to 72 cores?
by Edgar_Herrera. 03/23/24 21:41
Zorro Trader GPT
by TipmyPip. 03/06/24 09:27
VSCode instead of SED
by 3run. 03/01/24 19:06
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
1 registered members (degenerate_762), 1,114 guests, and 1 spider.
Key: Admin, Global Mod, Mod
Newest Members
sakolin, rajesh7827, juergen_wue, NITRO_FOREVER, jack0roses
19043 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Page 1 of 5 1 2 3 4 5
Dialog box darstellung? #466386
06/12/17 14:15
06/12/17 14:15
Joined: Jun 2010
Posts: 212
tagimbul Offline OP
Member
tagimbul  Offline OP
Member

Joined: Jun 2010
Posts: 212
vor längerer zeit habe ich mal ein programm geschriben das mit eine text datei ausliesst und sie stückweise in einen dynamsichen string array abspeichert. bereit stehen mir also einzelne dialoge in einzelnen string

nun würde ich gerne ein dialogbox schreiben wie hier:


diese Dialogbox kann folgendes
-verschiedene Wörter in unterschiedlichen Farben darstellen
-icon bmap anzeigen
-Buchstaben und bmaps der reihe nach abspielen
-mehrere seiten darstellen

meine frage wäre wie man das am sinnvollsten in 3DGS umsetzen könnte.
ich hätte schon ein paar Ideen, aber ich fürchte die sind sehr primitiv und würden nur sehr langsam laufen.
daher dachte ich ich frage euch mal falls ihr schon so etwas ähnliches gemacht habt.

ich hoffe ihr könnt mir helfen
freundliche grüsse
tom

Last edited by tagimbul; 06/12/17 14:16.

meine website mit 3dgs sachen =) //noch nicht ganz umgebaut ^^"
http://flashbreaker.com/home.html
und mein YT channel mit diversen game entwicklungs videos, vor allem shader zeugs
https://www.youtube.com/user/tagimbul/videos
Re: Dialog box darstellung? [Re: tagimbul] #466393
06/12/17 23:39
06/12/17 23:39
Joined: Nov 2005
Posts: 204
Bavaria
HellThunder Offline
Member
HellThunder  Offline
Member

Joined: Nov 2005
Posts: 204
Bavaria
Stand auch mal vor der Überlegung wie man sowas am besten lösen könnte. Das größte Problem für mich damals war der automatische Zeilensprung.

Ich habe Zelda und auch viele andere Adventures und JRPGs gespielt und musste leider feststellen, dass die Zeilenumbrüche keinerlei Logik folgten.
Bedeutet also, das wurde manuell von den Entwicklern gemacht (Zelda, Suikoden, Final Fantasy, Tales Of...).

- Einfachste Weg für das Beispiel von oben sind vier TEXT* mit jeweils einem String. Platziere sie untereinander.
- Den InputString, welcher die gesamte Nachricht beinhaltet, teilst du einfach auf, so dass jeder String mit einer bestimmten Anzahl von Zeichen befüllt wird.
- Fülle die Strings der TEXT* Zeichen für Zeichen, mit einer for oder while Schleife und vergiss das wait nicht.
- Benutze einen MonoSpace Fonttype (jedes Zeichen besitzt dann die gleiche Breite und du kannst ein Maximum an Buchstaben für jede Zeile bestimmen.
- Icon BMAPs realisierst du über PANEL*.

Hier siehst du ein etwas älteres Resultat daraus:
YouTube Video - MessageBox

Last edited by HellThunder; 06/12/17 23:44.

Create your own JRPG and join our community: https://www.yrpgtoolkit.com
Re: Dialog box darstellung? [Re: HellThunder] #466405
06/13/17 07:07
06/13/17 07:07
Joined: Jun 2010
Posts: 212
tagimbul Offline OP
Member
tagimbul  Offline OP
Member

Joined: Jun 2010
Posts: 212
ja ich hab mal was ähnliches gemacht. aber mit einem TEXT und dann mit str_width und dem text flag WWRAP gearbeitet. damit konnte auch andere fonts nehmen als ein monospace

ich tüftle sozusagen an einem system rum das noch mehr drauf haben soll.
ich würde gerne unicode nutzen so das man die text datei in der alle dialoge drin stehen manipulieren kann und jeder einen sprachmod erstellen kann. also chinesisch, japanisch, hebräisch, grichisch ect. also alle sonderzeichen die es so gibt

also icons anzeigen wäre ja nicht so das problem. nur beim colorieren bestimmter wörter. da ist man mit den gegebenen funktionen für TEXT objekte ein wenig eingeschränkt.
es bräuchte eine funktion zum colorieren von einzelnen wörtern in einem TEXT objekt

alles andere... uff ^^
ich müsste einen dialog string aus der txt datei auslesen und in stücke zerhacken und einzelne wörter rausfiltern.
und dann müste ich mit str_width die daraus entstandenen neuen strings einzeln messen und gucken ob es in eine zeile des dialog panels passt

es wäre kein ding der unmöglichkeit doch es wären schon ein recht grosser haufen an funktionen für etwas das so oft aufgerufen werden soll...


ich glaube ich reduziere einer meiner ansprüche und zwar der hinsichtlich der colorierung.
dann kann ich zwar keine einzelnen wörter aber immerhin noch den ganzen text einfärben

hm... ich glaube ich mach es so wie du hier empfielst. in der text datei einzelne zeilen machen und mit str_width prüfen wie lang der string in pixel ist. so kann ich auch gleich im vorfeld prüfen ob der string zu lang ist.
in einer zeile in der txt datei schreibe ich dann icon hinweise hin wie etwa "du must #key_1# drücken" und dann key_1 aus dem string löschen und mit leerschlägen füllen die in etwa der pixelbreite des icons entsprechen und dann an der position ein icon einblenden...
irgendwie so

ich glaube so kann ich dann auch den grundgedanken für nicht lateinsiche schriften beibehalten.
In A8 unterstützen alle Stringfunktionen Unicode-Strings.

doch dann würde es wieder in sehr komplizierten codes auslaufen wenn man jeden buchstaben einzeln erscheinen lassen will.
da hab ich mir schon überlegt ob ich einfach text und icons vor der schlussentlichen darstellung in eine bmap rendern soll um dann in einem shader eine 4 zeilige blende(oder jeh nachdem wieviel zeilen man hat) basteln soll deren anzeige ich mit einer einzigen variable steuer.

joa... ich glaub ich werde da mal ein wenig rum probieren
und danke für die Anregung

mfg tom =)

Last edited by tagimbul; 06/13/17 07:19.

meine website mit 3dgs sachen =) //noch nicht ganz umgebaut ^^"
http://flashbreaker.com/home.html
und mein YT channel mit diversen game entwicklungs videos, vor allem shader zeugs
https://www.youtube.com/user/tagimbul/videos
Re: Dialog box darstellung? [Re: tagimbul] #466409
06/13/17 08:52
06/13/17 08:52
Joined: Jul 2010
Posts: 283
Germany
J
jenGs Offline
Member
jenGs  Offline
Member
J

Joined: Jul 2010
Posts: 283
Germany
Ich hab etwas ähnliches mit einem shader gemacht.

Leider geht das nur mit monospace ansonsten wird das sehr kompliziert.

Ich hab einen Bitmapfont generiert mit den entsprechenden Zeichen die ich brauchte.

Dann einen Array erstellt mit einer Größe des maximalen ascii Zeichen, der an der entsprechenden Position passend zur Bitmap den Zeichencode als Array-Position hatte. Das heißt auf der Bitmap ist das erste Zeichen ein "A" also ist im array der Wert der dem code für A zugeordnet ist die position (Einzeilig) des Zeichens in der Bitmap.

Nun Text in den Shader zu schreiben ist etwas tricky. Ich hab eine 32 bit FLoat bitmap erstellt, die mit den Zeichen positionen (über den lookup array den ich erstellt hatte) gefüllt wird.

Im Shader selbst wird nun die position mit dem Text-Offset subtrahiert und dann durch die Zeichenbreite geteilt. Damit weiß ich an welcher Textposition/Zeichenposition ich mich befinde. Entsprechend die Data bitmap abgefragt und die Position des Zeichens erfahren und dann auf die Zielbitmap geschrieben.

Das lief erstaunlich schnell, besonders, wenn man die data Bitmap nicht jeden Frame neu befüllen muss. Da es eine 32 bit float bitmap ist, können dann noch metainfos wie Farbe mitgegeben werden. Ich hatte das mal für eine editbox verwendet.

Ich werde mal versuchen dies animiert multiline umzuschreiben (hatte soetwas auch schon angefangen) und unicode zu integrieren.

Hatte vor kurzem auch versucht mit der Methode nicht monospace Fonts auf Bitmaps zu schreiben. Aber das macht nur Kopfschmerzen. Das ganze ist so schon recht komplex.

Re: Dialog box darstellung? [Re: jenGs] #466411
06/13/17 09:04
06/13/17 09:04
Joined: Jun 2010
Posts: 212
tagimbul Offline OP
Member
tagimbul  Offline OP
Member

Joined: Jun 2010
Posts: 212
jo ich hoffe ihr verzeiht mir meine rechtschreib fehler gleich ^^ war einfach mal Brainstorming
ich hab mir mal ein konzept zurecht gelegt und das würde auch mit unicode gehen:

Quote:


gegeben ist ein roher string array
ausgelesen von einer text datei.
beispiel der text datei:
"
Dialogue_000_3;
ich bin die erste Zeile von dialogue 0;
ich bin die zweite Zeile von dialogue 0;
ich bin die drite und letzte Zeile von dialogue 0;
Dialogue_001_2;
ich bin die erste Zeile von dialogue 1;
ich bin die zweite und letzte Zeile von dialogue 1;
Dialogue_002_3;
ich bin die erste Zeile von dialogue 2;
ich bin die zweite Zeile von dialogue 2;
ich bin die drite und letzte Zeile von dialogue 2;
"



in dem unteren code würde im text dann sowas stehen:

"
Dialogue_000_3;
ich bin die erste Zeile von dialogue 0 und zum weiterschalten in der dialogbox muss ich #1 drücken;
"

// Dialogue_000_3 bedeutet das es der dialog 000 ist und 3 zeilen beinhaltet evtl kann man das auch gleich nutzen


///////////////// PHASE 1 ////////////////////////////// roher string vorbereiten fürs struct

0 man findet im ersten string ein #1 und nun passiert:
1 in einem temporären string wird alles bis hierher gespeichert dieser string wird mit str_width geguckt wieviel pixel
das resulatat wird in einen var array gespeichert
2 ich zähle alle zeichen in diesem string in ein varaiblen array. dieser sagt mir dann bei welcher nummer ich das icon

einblenden werde
3 ich leere den temporären sting wieder
4 ich schreibe die zahl, in dem falle "1" von "#1" in einen weiteren array
5 ich lösche das "#1" und setze an der stelle ein paar leerschläge die platz machen für das icon bzw die icon pixel

breite
6 ich schreibe i in eine variable
7 ich wiederhole schrit 1, solange bis kein # mehr gefunden wird / break


8 else/ kein # gefunden. weiter in PHASE 2


0 bis 7 ist also eine for schleife
und "var i" bestimmt welcher array benutzt wird.
"i" sagt auserdem auch noch wieviel # bzw icons gefunden wurden

///////////////// PHASE 2 ////////////////////////////// struct eigenschaften füllen

nun habe ich die daten:

(1) variable wieviel pixel ein icon vom lesestart aus gesetzt werden muss
(2) variable wieviel buchstaben/ziffern ein icon vom lese start entfernt ist
(4) variable welche icon nummer ich benötige. 1,2,3,4,5 usw
(5) den fertigen string für die dialogbox ohne # und mit leerschlägen
(6) variable wieviel icons in einer zeile sind

diese daten könnte ich eigentlich in ein struct verwandeln. damit ich dann mit dem struct weiter arbeiten kann

weitere struct daten:
var "zu welchem dialog es gehört 0001, 0002 oder 0003 usw "
var "welche zeile es ist. 1,2,3,4 usw"
var "wieviele zeilen es hat"
var "welche array nummer es hat //ähnlich wie bei beim roh string einteilen"

fazit:
ich wandle die rohen strings aus dem alloziier prozess um in ein struct
diese sind fix und können beim initialisieren des games gesetzt werden
und sind dann zugänglicher für das dialog box system

// das roh string file kann man nun löschen


///////////////// PHASE 3 ////////////////////////////// das struct im dialog system benutzen

mit dem neuen daten typ / struct füttere ich nun das dialog system

die strings werden buchstabe für buchstabe mit str_trunc (String, Zahl)
abgeschnitten und beim erreichen des uchstabenzahl eines icons wird dann ein icon eingeblendet





///////////////// PHASE ? ////////////////////////////// der text debugger
dialog_tester.c
in dieser datei werden alle strings geladen
und getestet ob sie zu lang sind
dazu werden alle strings ausgelesen, die #key_?" entfernt, die nötigen pixel dazugerechnet, das font berücksichtigt
und in einer text datei werden alle strings reingeschrieben die fehlerhaft sind mit den dazugehörigen dialog nummern
dann kann man mit dieser text datei die dialog.txt korigieren
desweiteren kann man die grösse angeben die man benutzt. also die dialog box pixel breite
und auch die icon pixel breite

dies macht man zwar manuel aber immerhin besser als garnichts


///////////////// PHASE X ////////////////////////////// das colorieren via shader

ich rendere die TEXT in ein kleines renderbild
mit unzähligen skill1 ... skill41 parameter kann ich nun colorier positionen und colorierungs felder (x1 x2 y1 y2)

basteln und mehrere einfärbungen auch via vecskill. falls nötig und erwünscht
dann das renderbild in das dialogbox panel rendern
man müsste also ein 4 kanal bmap rendern
da diese aber nur ein ausschnit ist und somit klein und vom shader schnell verarbeitbar sollte das easy gehen
ich könnte sogar noch weiter gehen und zum string struct 4 oder 6 positionen für eine collorierung angeben indem ich

eine funktion schreibe die bei lesen (phase 1) schlüsselwörter durchkämmt wie etwa "Schwert", "Schild" oder "Bogen" und

an dort die startposition in pixel sucht und auch die länge des wortes ausliest in pixel und diese dann weiter gebe an

den shader. ich könnte auchnoch colorierungen rein machen wie etwa "@255,0,0@Schwert" was soviel heisst wie das dass

nöchste wort nach @255,0,0@ so eingefärbt werden soll
somit wäre im struct für diesen string dann noch eine anzahl an gefundenen @ markierungen und in einem vector dessen

oder ich nutze im shader ein HLS converter damit ich nurnoch eine zahl zwischen 0 und 360 reingeben muss fürs colorieren ^^


farbe. und die jeweiligen positionen bzw pixel entfernung von start zu wortbeginn
und pixel länge des wortes.
das alles wird an den shader gegeben und so gibt es dann colorierte texte






Last edited by tagimbul; 06/13/17 09:24.

meine website mit 3dgs sachen =) //noch nicht ganz umgebaut ^^"
http://flashbreaker.com/home.html
und mein YT channel mit diversen game entwicklungs videos, vor allem shader zeugs
https://www.youtube.com/user/tagimbul/videos
Re: Dialog box darstellung? [Re: tagimbul] #466414
06/13/17 09:51
06/13/17 09:51
Joined: Oct 2008
Posts: 679
Germany
Ayumi Offline
User
Ayumi  Offline
User

Joined: Oct 2008
Posts: 679
Germany
Da mich das Thema interessiert, hier ein Ansatz, wie ich das angehen würde. Vielleicht schreib ich s noch fertig, aber momentan fehlt mir die Muse.

Aus dem Stringarray muss ein Struct gefertigt werden, was den Stringpointer und die Farbe beinhaltet (z.b.).
Unter pan_setdigits wird pan_setcolor aufgerufen.
Ausserdem brauchts noch eine zusätzliche Schleife mit den Wörtern, die eingefärbt werden sollen, was auch ein Struct sein kann (Wort+ Farbe). Das ganze sollte schnell genug laufen.


Code:
STRING* keyE ="e";

PANEL* DsPanel = 
{
	bmap = bmpDsObj;
	pos_x = 100;
	pos_y = 100;
}

PANEL* DsPanelE = 
{
	bmap = bmpDsShowE;
}


FONT* fontTest = "Arial#20";
STRING* strFile[4000];

action DialogTrigger() 
{
	DsPanelE.pos_x = 400;
	DsPanelE.pos_y = 400;
	var strWidth = 0;
	var posX =0, posY = 0;
	var charCount;
	var counter = 0;
	
	while(1)
	{
		var dist = abs(vec_dist(player.x, my.x));
		if(dist < 255)
		{					
			set(DsPanelE, SHOW);		
			if(key_pressed(key_for_str(keyE))) 
			{				
				while(key_pressed(key_for_str(keyE))) 
					wait(1);
					
				while(!key_pressed(key_for_str(keyE))) 
				{
					set(DsPanel, SHOW);
					
					var fileHandle = file_open_read("ColoredText.txt");
					if (fileHandle)
					{	
						while(1)
						{
							if(charCount == -1)
								break;
								
							strFile[counter] = str_create("");
							charCount = file_str_readto(fileHandle,strFile[counter], " ", 4000);						
								
							strWidth += str_width (strFile[counter], fontTest); // 200  max
							if(strWidth < 300)
							{
								posX = strWidth + 5;	
							}
							else
							{
								posY += 30;
								posX = 0;
								strWidth = 0;
							}
			
							pan_setdigits(DsPanel, 0, posX,posY, strFile[counter], fontTest, 1, 0);
							counter++;
							
							
							wait(1);
						}
										
						file_close (fileHandle);
					}
					
					
					reset(DsPanelE, SHOW);	
					wait(1);
				}
				
				while(key_pressed(key_for_str(keyE))) 
					wait(1);
					
				reset(DsPanel, SHOW);
				set(DsPanelE, SHOW);	
			}
		}
		else
		{
			reset(DsPanelE, SHOW);	
			reset(DsPanel, SHOW);	
		}
			
		wait(1);
	}
}


Last edited by Ayumi; 06/13/17 09:51.
Re: Dialog box darstellung? [Re: Ayumi] #466415
06/13/17 10:42
06/13/17 10:42
Joined: Jun 2010
Posts: 212
tagimbul Offline OP
Member
tagimbul  Offline OP
Member

Joined: Jun 2010
Posts: 212
dann würdest du jedes wort in einem string in einzelne strings unterteilen und in mehreren digits anzeigen lassen damit du sie colorieren kannst?

man kann ja nicht interhalb von einem digit mehrfarbige wörter zeichnen.

und ich glaube zuviele digitsaufrufe in einem frame, mit einem unicode, haut schon ordentlich auf die fps

sagen wir mal in einer zeile sind 10 wörter und dann insgesamt 6 zeilen die dargestelt werden
in einem frame wären dass dann 60 digits aufrufe

und bei digits fällt glaubs der REVERSE flag aus. d.h man kann keine sprach mods/packete schreiben für sprachen die rückwärts geschriben werden wie z.B arabisch


daher würde sich glaubs TEXT besser anbieten. weil der kann auch unicode und kann auch keine einzelnen wörter farbig anzeigen ^^
aber ich glaub der speed is dort besser wenn man ihn als ganzes nutzt.
und um zusätzlich die cpu zu entlasten kann man ja denn text in die gpu schiken zum colorieren.

Last edited by tagimbul; 06/13/17 10:46.

meine website mit 3dgs sachen =) //noch nicht ganz umgebaut ^^"
http://flashbreaker.com/home.html
und mein YT channel mit diversen game entwicklungs videos, vor allem shader zeugs
https://www.youtube.com/user/tagimbul/videos
Re: Dialog box darstellung? [Re: tagimbul] #466416
06/13/17 10:48
06/13/17 10:48
Joined: Jun 2010
Posts: 212
tagimbul Offline OP
Member
tagimbul  Offline OP
Member

Joined: Jun 2010
Posts: 212
also du kannst gerne es versuchen =)

einzelne wörter zu colorieren und buchstabe für buchstabe anzeigen lassen.

ich tüftle dann parallel dazu an einem dialog system das gamepad buttons und keyboard tasten anzeigt =)


meine website mit 3dgs sachen =) //noch nicht ganz umgebaut ^^"
http://flashbreaker.com/home.html
und mein YT channel mit diversen game entwicklungs videos, vor allem shader zeugs
https://www.youtube.com/user/tagimbul/videos
Re: Dialog box darstellung? [Re: tagimbul] #466417
06/13/17 11:02
06/13/17 11:02
Joined: Oct 2008
Posts: 679
Germany
Ayumi Offline
User
Ayumi  Offline
User

Joined: Oct 2008
Posts: 679
Germany
Nein, pro Frame ein Wort und damit ein Digitaufruf. Ausserdem sind die Texte alle temporär weil du sie zur Laufzeit festlegst und aufrufst. Soll heissen, du hast maximal ein Paneltext gleichzeitig.

Ich weiß nicht, ob Unicode funktioniert, aber das Beispiel kann ich trotzdem fertigstellen. Kann ja mal unterschiedliche Sprachen nehmen, in meinem Fall bietet sich chinesisch an.

Re: Dialog box darstellung? [Re: Ayumi] #466422
06/13/17 13:14
06/13/17 13:14
Joined: Jun 2010
Posts: 212
tagimbul Offline OP
Member
tagimbul  Offline OP
Member

Joined: Jun 2010
Posts: 212
ja unicode geht. habs getestet.
beim format bei diggits muss einfach 0 rein


meine website mit 3dgs sachen =) //noch nicht ganz umgebaut ^^"
http://flashbreaker.com/home.html
und mein YT channel mit diversen game entwicklungs videos, vor allem shader zeugs
https://www.youtube.com/user/tagimbul/videos
Page 1 of 5 1 2 3 4 5

Moderated by  HeelX, Lukas, rayp, Rei_Ayanami, Superku, Tobias, TWO, VeT 

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1