Frage - Interaktives Boxduell - wie?

Das Board für Schwierigkeiten beim Adventure-Machen und zum Melden von Bugs
Post Reply
Icebaer3
An Adventure Creator
Posts: 408
Joined: 19 Dec 2012, 20:15
Location: Koblenz

Frage - Interaktives Boxduell - wie?

Post: # 81051Post Icebaer3
25 Jan 2014, 08:07

Hallo Community,

ich brauche/will mal Hilfe in dem besagten Fall. Worum gehts. Ich will ein wenig "Äktschn" in mein Spiel bringen und habe mich an alte C64* Games erinnert. Vom Grundsatz her habe ich das schon im Sinn wie ich das umsetzen will, aber mit dem Code habe ich da noch Probleme und hätte gerne eure Hilfe und Infos dazu, wie ich mir die Umsetzung am ehesten gestalten kann, Gut ok, ich bin zu faul, besser?

Also im Vordergrund sollen zwei Arme als Objekte sein, die sich mit dem Mauszeiger mitbewegen. Im Hintergrund bewegt sich ein Objekt (irgend ein finsterer Typ) hin und her und wechselt halt einfach mal so die Richtung. Beim klicken soll der rechte Arm nach vorne und zuschlagen. Wenn der dann den Typen trifft, soll es einen Punkte geben oder eben Energie von nem Balken abziehen. Klar, oder?

Grundsatzfrage: Mach ich das über Objekte oder besser über einen Char?
Wie würdet ihr das gestalten um euch viel Skriptarbeit zu sparen?

Jeder der mithilft, bekommt von mir eine virtuelle :banana: geschenkt! Na, Anreiz genug?

Gruß Ice


* Für alle die nach dem Mauerfall geboren wurden: C64 war eine High-End-Spielekonsole mit beschissener Grafik und irre langen Ladezeiten, wo aber die Spiele noch Spaß gemacht haben!

japanhonk
PaC-DK God
Posts: 1716
Joined: 05 Feb 2009, 20:36
Location: NRW
Contact:

Re: Frage - Interaktives Boxduell - wie?

Post: # 81052Post japanhonk
25 Jan 2014, 09:42

C64..ach ja... ich kenne noch den Vorgänger C16 mit Datasette... Uuuahhhh... Aber wir hatten ja Nix....

Also, wenn Du das mit einem Arm im Vordergrund machen willst, dann rate ich zu Objekten.

Ich selber habe auch mal drüber nachgedacht etwas in der Art wie "Streetfighter" einzubauen.


Wenn Du nur zwei Arme zeigst, dann geht das Ganze mit einer Mischung aus Chars und Objekten.
Der sichtbare Gegner ist ein Char - damit er auch beim Näherkommen grösser wird.
Eine Variablenberechnung setzt per Randomnum fest, ob der Gegner sich entfernt oder näher kommt
und gibt dann einen Wert aus :
aktuelle Charposition +1y -> Gegner kommt näher,
aktuelle Charposition -1y -> Gegner entfernt sich,

Damit weisst Du, ob Du vielleicht ins Leere haust.

Ausserdem musst Du festlegen, welche y Position die maximale Entfernung im Raum sein darf, damit
der Feigling nicht abhaut...
Ebenso, welcher Y Wert direkt vor Dir endet, damit der Typ dich nicht über den Haufen rennt.
usw

Nur, wenn der Gegner die max Y Wert erreicht hat, wird eine Kollisionsabfrage gestartet werden
können. ( kostet sonst zu viel Rechenzeit )

Damit der Gegner etwas "tänzelt", wäre auch eine Änderung der x Position denkbar.

Dann brauchst Du min 4 Dummyobjekte :

-Deinen Kopf
-Deine Faust
-Gegnerkopf
-Gegnerfaust

Dein Kopf ist fix, bleibt also, wo er ist. Willst Du dich bewegen, änderst Du die x/y Koordinaten des
Gegners, ohne, das er sich bewegt.

Schlägt der Gegner zu, dann startet eine Funktion die Schlaganimation, wenn er dicht genug vor
Dir steht. Dabei bewegst Du das Dummyobjekt der Gegnerfaust an die gewünschte Stelle.
Auf halber Armlänge startest Du ( per Frameskript ) dann die Kollisionsabfrage.

Da dein Kopfobjekt wohl das Grösste ist, wird ein Treffer wahrscheinlich sein. Machst Du den Kopf
aber nicht zu breit, dann kannst Du Dich ja auch seitlich bewegen - die Faust geht neben das
Kopfobjekt und verfehlt - oder wenn Du dich ducken willst, geht es darüber.

Ist der Arm eingefahren, oder es wurde ein Treffer erkannt, endet die Abfrage.

Jetzt Du :

Wenn Du zuschlägst, wird die Kollisionsabfrage nur gestartet, wenn der Gegner dicht genug vor Dir steht. Andernfalls läuft nur die Animation ab. Der Gegner könnte dann z.B. fies lachen...

Ist er dicht genug dran, bewegst Du dein Faustobjekt von der Ruheposition dorthin, wo die Grafik die
Faust am ausgestreckten Arm hinführt. dann startet die Kollisionsabfrage mit dem gegnerischen Kopf
( der ja kleiner ist ) , welcher sich passend mit dem Char seitlich bewegt. ( vor / zurück macht keinen Sinn, da ja nur getroffen wird, wenn er dicht genug vor dir steht )


Da ich während des Schreibens nachgedacht habe, kann vielleicht noch ne kleine Schwachstelle
drin sein... :mmh: Ist eben mit heisser Nadel gestrickt.

on (enter)
{
Setnum (Gegner_max_y;20) -> Gegner bei Y=20 am weitesten weg
Setnum (Gegner_min_y;25) -> Gegner direkt vor Dir
Setnum (Gegner_max_x;35) -> Gegner am Weitesten rechts
Setnum (Gegner_min_x;25) -> Gegner am Weitesten links
setnum (Treffer_min_x;29) -> Treffer nur möglich, wenn Gegner min x=29 oder
setnum (Treffer_max_x;31) -> x=31 hat, sonst zu weit rechts oder links
}

Der Y Laufbereich des Gegners leigt im Raum also zwischen Walkmappunkten Y20 und Y25
Der Trefferbereich liegt zwischen Walkmappunkten 29 und 31.

on (loop1)
moveobj (Gegnerdummy_Kopf; [charx:Gegner]-30;[chary:Gegner]-150;0)

Damit bewegst Du das Kopfobjekt passend zu den Walkmappunkten des Gegners.
Die Zahlen können variieren, musst du testen, kommt auf die Grössen an.

on (loop2)
{
randomnum (walkchar_y;6)
randomnum (walkchar_x;11)

setnum (current_GX;[charx;gegner]) ->aktuelle Gegnerposition feststellen
setnum (current_GY;[chary;gegner])

if_num (walkchar_x;11)
setnum (current_GX;[charx;gegner]) -> Wert 11= keine X Änderung
if_num (walkchar_y;6)
setnum (current_GY;[chary;gegner]) -> Wert 6= keine Y Änderung

if_num (walkchar_x;1)
{
if_num (current_GX;<36) -> Wenn Gegner x 35 noch nicht erreicht hat
setnum (current_GX;+1)
}
if_num (walkchar_x;2)
{
if_num (current_GX;<34)
setnum (current_GX;+2)
}
if_num (walkchar_x;3)
{
if_num (current_GX;<32)
setnum (current_GX;+3)
}
if_num (walkchar_x;4)
{
if_num (current_GX;<30)
setnum (current_GX;+4)
}
walkto (Gegner;[current_GX];[current_GY];1)
}

Das wäre ein Ansatz, wie der Gegner sich seitlich innerhalb der definierten Grenzen bewegen
könnte.

Jetzt brauch ich erstmal nen Kaffee...

Gruss

Manni
Es gibt 10 Arten von Usern :
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de

Icebaer3
An Adventure Creator
Posts: 408
Joined: 19 Dec 2012, 20:15
Location: Koblenz

Re: Frage - Interaktives Boxduell - wie?

Post: # 81056Post Icebaer3
25 Jan 2014, 16:54

Ach du scheiße Alter!

Ich musste erst mal ein dickes DANKE schreiben, obwohl ich bisher nur die Hälfte von deinem Beitrag gelesen habe. Der hat ja nicht mehr aufgehört. Gut, ok ich hab auch gerade gepennt und bin noch schlaftrunken... im Übrigen hatte ich auch ne Datasette. Geiles Ding!

Ich werde mir den Kommentar nun mal genauer anschauen und überlegen. Was ich aber sagen kann mit dem vor und zurück, ich wollte es mir Anfangs einfach machen und den erst mal nur nach rechts und links laufen lassen. Ist aber ne gute Idee.

Was ich schon mal feststellen kann: ich hab mir ja wirklich so viel wie möglich hier im Forum durchgelesen und auch die Tuts und Beispiele angeschaut. Sogar die ganzen Hilfestellungen habe ich runtergeladen und archiviert. Wenn ich das aber genau so umsetze, klappt das nicht. Oft liegt es an einer Klammer oder so.

Bin mal gespannt ob ich das also hinbekomme. Wenn ich Fragen habe melde ich mich noch zwischen durch. Aber Manni, RESPEKT!!!
(Gut, ich hab auch nix anderes von dir erwartet :mrgreen: :mrgreen: :mrgreen: :mrgreen: :mrgreen: )

DeinTroll
Experienced PaC-DK User
Posts: 561
Joined: 07 Sep 2011, 21:33
Location: In der Ortenau
Contact:

Re: Frage - Interaktives Boxduell - wie?

Post: # 81058Post DeinTroll
25 Jan 2014, 19:06

Ich kenne das mit der Klammer vergessen...Es hilft mir immer so viel wie möglich immer auszuprobieren...gerade bei langen Skripts, einfach immer wieder zwischendurch ausprobieren was man gemacht hat.
Image

japanhonk
PaC-DK God
Posts: 1716
Joined: 05 Feb 2009, 20:36
Location: NRW
Contact:

Re: Frage - Interaktives Boxduell - wie?

Post: # 81062Post japanhonk
25 Jan 2014, 19:54

Ich habe Wochenlang an der Raumkampfsimulation aus Sicht der Brücke der Enterprise gesessen und mich mit Positionierung, Navigation und Objektbewegung, Waffenfeuer , Eigenbewegung und Kollisionsabfrage beschäftigt.

Wenn ich Dir DIE Skripte zeige, haben deine Augen so viel zu tun, dass sogar die Ohren mitklingeln...

Danach war ich auch echt fertig mit den Nerven, denn dafür ist die Engine nicht gemacht.
Aber ich hab es trotzdem rausgekitzelt.

Teil 1 war noch erbärmlich, scottys Log dagegen schon recht okay. Ich habe immer noch den Ehrgeiz, das zu verbessern, aber es sitzt noch immer in den Knochen,,,

Um Skripte, wie Du sie brauchst zu schreiben, dürfte es einer Woche konzentrierter Arbeit brauchen,
mit passenden Grafiken, um das Ganze auch zu testen....Wenn man zwischendurch pausiert, braucht man ewig, um wieder reinzukommen...

Da hast Du Dir ja was vorgenommen...
Es gibt 10 Arten von Usern :
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de

Icebaer3
An Adventure Creator
Posts: 408
Joined: 19 Dec 2012, 20:15
Location: Koblenz

Re: Frage - Interaktives Boxduell - wie?

Post: # 81063Post Icebaer3
25 Jan 2014, 22:58

Danke danke, diese Motivationsspritze war ausreichend. Ne Woche, tzz.

Aber wenn ich mal so darüber seniere wie viel ich schon dazu gelernt habe in den letzten Wochen, toll. Jedenfalls werde ich mich mit dem Move Objekt Befehl aueinander setzen und die Beispiele durchflücken. Da sollte schon das wichtigste für mich dabei sein. Bei allem anderen frage ich dann nach.

Icebaer3
An Adventure Creator
Posts: 408
Joined: 19 Dec 2012, 20:15
Location: Koblenz

Re: Frage - Interaktives Boxduell - wie?

Post: # 81064Post Icebaer3
26 Jan 2014, 08:26

Frage zwischendurch (an Manni):

Du nutzt im Skript loop1 und loop2. Was in der Hilfe steht kenn ich, aber was ist der praktische Nutzen / Unterschied in der Benutzung.
Wann sollte ich welches davon nehmen?
Ich hab bisher nur loop1 genommen, da das selbe Skript mit loop2 oft nicht gefunzt hat.

PS: Bin gerade das "coingame" am auseinander nehmen und übe mit den Funktionen. Nur einige Skriptbefehle habe ich bisher in der Anleitung gar nicht gefunden. Ich hab zum Beispiel etwas gebraucht bis ich den `mousex´ oder ´mousey´ Befehl gefunden habe in euren Skripten. Ich hatte es immer xmouse geschrieben und es hat nicht geklappt. Hab ich da was übersehen in der Anleitung? Und gibt es noch mehr solcher "versteckter" Befehle?

PPS: Was bedeutet dieser Befehl: setnum (movex; *-1) ???

Hier mal mein Entwurf zum verbessern: http://www.xup.in/dl,31261324/Boxentest.adz/
Von der Idee her so wie gedacht, aber halt zu hakelig in der Umsetzung.

Zimond
Der Engine Papa
Posts: 3420
Joined: 06 Apr 2003, 19:34
Location: Krefeld
Contact:

Re: Frage - Interaktives Boxduell - wie?

Post: # 81067Post Zimond
27 Jan 2014, 06:06

Der Sinn von Loop2 ist es Gespräche von Nebencharakteren unterbrechen zu können. Loop2 wird immer danach angehalten wenn du entweder in einer Textscene oder Cutscene bist oder wenn du einen Charakter anvisierst und zu ihm läufst. Also z.B du hast in einem Raum 2 Typen die sich per Loop2 gegenseitig irgendeinen Dunst erzählen und willst einen von ihnen ansprechen. Wenn das passiert pausiert Loop2 solange bis du fertig bist.

[mousex] und [mousey] sind keine Befehle sondern vordefinierte Variablen. In der Anleitung findest du sie bei "Variablen Nutzen". Es gibt noch weitere für Uhrzeit und Datum ect.


setnum (movex ; *-1) ... wenn direkt ein Rechenzeichen in diesem Befehl steht, der zweite Teil also mit * / + oder - anfängt anstatt mit einer Ziffer dann wird die Variable selber benutzt, heißt also :

movex *-1 Aus positiv wird negativ und umgekehrt.
Image

japanhonk
PaC-DK God
Posts: 1716
Joined: 05 Feb 2009, 20:36
Location: NRW
Contact:

Re: Frage - Interaktives Boxduell - wie?

Post: # 81068Post japanhonk
27 Jan 2014, 06:40

Hi,

da ich ja nur ein Beispiel geben wollte, habe ich es in 2 Loops unterteilt.
In der Praxis sollte man aber geeignete Funktionen schreiben und diese dann

ZUM RICHTIGEN ZEITPUNKT starten und beenden.

Permanent ablaufende Abfragen in einem Raum kann man - wenn es nicht zu viel ist - mit Loop1
umsetzen. Aber mit Funktionen klappt es besser.

Wenn Du willst, suche ich mal den Quellcode von Scottys Log raus, dann kannst Du Dir die Skripte
ansehen vom Raumkampf - ich prügel da eben nur keinen Bösewicht, sondern schiesse auf Raumschiffe.

Vom Prinzip her ähnlich.

Gruss

Manni
Es gibt 10 Arten von Usern :
die, die Binärcode verstehen und die, die es nicht tun....
----------------------------------------------------------
STAR TREK FYNE :
http://www.fynegames.homepage.t-online.de

Icebaer3
An Adventure Creator
Posts: 408
Joined: 19 Dec 2012, 20:15
Location: Koblenz

Re: Frage - Interaktives Boxduell - wie?

Post: # 81069Post Icebaer3
27 Jan 2014, 09:12

Danke für eure Antworten. Bin am Ausprobieren. Ich hab mir jetzt mal das Coingame genommen und einfach den 1 Euro gegen mein eigenes Bild ausgetauscht und siehe da (!) es funzt nicht so wie es soll. Gut, ich hab noch nicht die Ahnung aber das motiviert natürlich ungemein. Au wei!

Keine Sorge! Mein Ehrgeiz ist geweckt und ich will den Schiss hinbekommen. Wahrscheinlich lach ich in einem Jahr über diesen Beitrag, aber dann kann man den ja löschen 8)

@Zimond: Hab ich glatt übersehen in der Hilfe. Aber Tatsache, da stehts... :roll:

Icebaer3
An Adventure Creator
Posts: 408
Joined: 19 Dec 2012, 20:15
Location: Koblenz

Re: Frage - Interaktives Boxduell - wie?

Post: # 81883Post Icebaer3
12 Nov 2014, 21:38

So Freunde, hier hat sich nun mal was bewegt in meinem Kopf. Ich habe einen ersten großen Schritt getan und da will ich euch teilhaben lassen.

Folgender Code hat mich nun zu einem erhofften Ergebnis geführt:

Code: Select all

on (enter)
  {
  setnum (Position; 740)
  setnum (Treffer; 0)
  textout (Zähler; Getroffen: [Treffer]; 400; 120)
  }

on (loop1)
  {
  moveobj (Icon X; [Position]; 300; 5)

  if_xobj (Icon X; >739)
    setnum (Position; 130)

  if_xobj (Icon X; <131)
    setnum (Position; 740)
  }
Dieser simple Code bringt nun endlich mal das doofe Objekt dazu sich nach rechts zu bewegen und dann (!) dort angekommen, auch wieder zurück.
Was mir hierbei immer gefehlt hat war die Abfrage des Objekts, also "if_xobj". Habe ich erst in den Examples von der Webseite was gefunden.
Dieser Befehl ist irgenwie an mir vorbei und ich habe ihn auch nicht in der Anleitung gefunden.

Jetzt kann ich an den Rest gehen, aber... erst mal ein Bier auf, prost! :drink:

Post Reply