Hello, Guest the thread was called4.4k times and contains 17 replays

last post from TheRyk at the

4-Spieler-Adapter in BASIC abfragen?

  • Hi!


    Ich bin begeisterter Besitzer des 4-Spieler-Adapters und finde es schade, daß
    es so relativ wenige Spiele dafür gibt...!
    Bomb Mania ist natürlich der Kracher und Tour de France auf der aktuellen GO64!-Disk
    ist auch lustig. Habe auch die restlichen 4-Spieler-Games noch nicht, aber es wäre doch
    schön, wenn es noch mehr gäbe...! Karate und Hockey finde ich persönlich nicht so interessant...!


    Ich würde auch gerne etwas dazu beitragen, daß es mehr solche Spiele gibt.
    Leider kann ich nur ein wenig Spaghetticode, trotzdem will ich es zumindest versuchen.
    Da ich noch nie was mit Joystick-Abfrage programmiert habe, würde ich mich freuen,
    wenn man mir das mal erklären könnte...! :prof:

  • Hi!


    Freut mich, dass Du mehr solcher Spiele forderst. Tanks 3000 ist da noch ein Spiel für 2-4 Player. Einfach mal die spielbare Demo-Version von CSDB runterladen.
    Abgesehen davon würde ich nicht raten jetzt noch 2-4-Player-Games zu coden. Mögliche Reaktionen (wirkliche Zitate!) könnten sein:


    - Du steckst mit PTV unter einer Decke, willst Kohle scheffeln und deren 4-Player-Adapter-Verkauf fördern (gibt bestimmt Provision)
    - 4 Player kommen eh nie zusammen
    - Diese Spiele will keiner Spielen
    und das Highlight:
    - Du bist nur zu dumm einen Computergegner zu coden!


    Würde mich natürlich sehr freuen, wenn Du Dich wirklich der Sache annehmen würdest. Dabei zählt m. E. rein der Spielspaß. Grafik und Sound sind da für mich eher Nebensache...aber Vorsicht: Sieht nicht jeder so! Da wird man schnell als Lamer abgestempelt, wenn man Games codet, die nicht dem heuten C64-Standart (LOL) entsprechen. Und das nicht nur im kommerziellen Bereich (wo ich es noch ansatzweise verstehen kann) sondern auch im Non-kommerziellen.
    Aber laß Dich durch mich nicht entmutigen...das werden schon ganz Andere übernehmen!


    Ah, hier noch der Code der Joystick-Routine für den 4-Player-Adapter:


    ; Sourcecode für das auslesen des PTV
    ; 4 Player Adapters. Die Werte werden in der
    ; joybit-Tabelle hintereinander abgelegt.
    ; Aufruf: jsr joyinit (einmalig)
    ; jsr joy (zur Abfrage z.B. per Frame)


    joyinit
    lda #$80
    sta $dd03
    lda $dd01
    sta $dd01
    rts


    joy
    lda $dc00
    sta joybit+1
    lda $dc01
    sta joybit
    lda #$80
    sta $dd01
    nop
    nop
    nop
    lda $dd01
    and #$1f
    sta joybit+3
    lda #$00
    sta $dd01
    nop
    nop
    nop
    lda $dd01
    and #$0f
    sta joybit+2
    lda $dd01
    and #$20
    lsr
    ora joybit+2
    sta joybit+2
    rts


    joybit
    !by $00,$00,$00,$00


    ;--------------------------------------
    ; Die eigentlich Abfrage in welche Richtung nun welcher joystick gedrückt wurde könnte so aussehen
    lda joybit,x ; x steht hier für joy 1-4
    lsr
    bcc oben
    lsr
    bcc unten
    lsr
    bcc links
    lsr
    bcc rechts
    lsr
    bcc feuerknopf
    rts ; keine Aktivität am Joystick

  • Quote

    - Du steckst mit PTV unter einer Decke, willst Kohle scheffeln und deren 4-Player-Adapter-Verkauf fördern (gibt bestimmt Provision) - 4 Player kommen eh nie zusammen - Diese Spiele will keiner Spielen und das Highlight: - Du bist nur zu dumm einen Computergegner zu coden!



    OMG!
    Kommen solche Schwachsinigkeiten etwa hier aus dem Forum, oder wer schreibt sowas???

  • Quote


    - Du steckst mit PTV unter einer Decke, willst Kohle scheffeln und deren 4-Player-Adapter-Verkauf fördern (gibt bestimmt Provision)


    man könnte natürlich auch einfach alle der mitlerweise mindestens 3 verschiedenen adapter unterstützen, so wie das ninja bei seinem ik+ gemacht hat. warum das bei den ptv spielen nicht möglich ist wird mir immer ein rätsel bleiben :=P


    btw was sollen eigentlich die nops in der routine da? das funktioniert auch ohne die ganz prima :=P

  • Quote

    ich würde mal sagen er hat spass gemacht oder getrunken


    Leider nein, diese Sätze mußte ich so oder so ähnlich über mich ergehen lassen.


    Quote

    warum das bei den ptv spielen nicht möglich ist wird mir immer ein rätsel bleiben


    Berechtigter Einwand...hab selbst halt den von PTV und mir über die anderen Bauformen nie wirklich Gedanken gemacht. Da ich Tanks 3000 eh nochmal etwas aufpuzzeln muß wg. NTSC kann ich mal schauen ob ich da nicht noch 'ne entsprechende Abfrage einbauen kann. Danke!


    Quote


    btw was sollen eigentlich die nops in der routine da? das funktioniert auch ohne die ganz prima


    Hörte nur, dass es ohne die zu Problemen kömmen könnte. Hab die daher einfach gelassen...scheiß auf die 6 Bytes. Hauptsache Bugs vermeiden. :winke:


  • Also:


    1.) Runterladen kann ich (zurzeit noch) nicht...!


    2.) Bei meinen beschissenen Programmier"künsten" nimmt PTV eher Schaden...!


    3.) Klar will ich Kohle scheffeln, aber das wird mir mit meinen Primitiven Progs wohl
    nie gelingen (und das habe ich damit auch nicht vor...)


    4.) Ich will diese Spiele spielen, der Rest ist mir egal. Außerdem haben die Bomb Mania-Orgien auf der Willowparty einen anderen Eindruck erweckt...!


    5.) Ich bin wirklich zu dumm, einen Computergegner zu coden!


    6.) Spielspaß über alles! Grafik und Sound können PCs besser! Scheiß der Hund drauf!


    7.) Ich bin ein Lamer!


    8.) Mich entmutigt keine(r)!


    9.) Ich hatte nach BASIC gefragt!!!


    10.) Die Simpsons haben angefangen....

  • Quote


    9.) Ich hatte nach BASIC gefragt!!!


    lda #$80
    sta $dd03
    lda $dd01
    sta $dd01


    -> poke $dd03,$80:poke$dd01,peek($dd01)


    lda #$80
    sta $dd01
    lda $dd01
    and #$1f
    sta joybit+3


    -> poke $dd01,$80:j3=peek($dd01)and$1f


    lda #$00
    sta $dd01
    lda $dd01
    and #$0f
    sta joybit+2


    -> poke $dd01,$00:j2=peek($dd01)and$0f


    lda $dd01
    and #$20
    lsr
    ora joybit+2
    sta joybit+2


    -> j2=j2 or ((peek($dd01)and$20)/2)


    joystick 1 und 2 gehen wie üblich. öhm, und die hexzahlen nach dezimal umrechen überlass ich dir mal :=P

  • Quote

    Original von sauhund
    [quote]


    joystick 1 und 2 gehen wie üblich.


    Und wie geht das üblicherweise?


    Der PEEK-Befehl gibt mir dann, je nach Stellung des jeweiligen Joysticks einen bestimmten Wert, oder? Welche Werte kommen da raus?

  • Ja, alter Fred, Leichenschänder usw. Ist ja gut!


    Aber da die Frage der Überschrift hier nie beantwortet wurde und dieser Fred (enthält Abfrage 3&4 in BASIC) verschiedene/allgemeine Fragen beantwortet, knalle ich hier mal mein Listing für die Abfrage aller 4 Joysticks rein.


    Tastaturabschaltung ist natürlich nicht obligatorisch, dient dazu, Probleme aufgrund von Leiterbahnen, die sich Controlport und Tastatur blöderweise teilen, auszublenden. Kann ggf. mit POKE 56322,255 oder RUN/STOP+RESTORE wieder behoben werden.


    RND und ON ... GOTO fand ich ganz nett, da ja sonst theoretisch immer Port 1 einen minimalen Vorteil hat ;)
    Ansonsten gibt es natürlich für Ports 1 & 2 schnellere Verfahren, z.B. mit FN. Ich habe im vorliegenden Beispiel versucht, Controlports und Userport in etwa gleich schnell bzw. langsam abzufragen. Die FN-Lösung, so es sie denn überhaupt für Userport bzw. Joys #3 und #4 gibt, habe ich noch nicht ausgetüftelt.


    Statt der PRINT-Ereignisse würde man logischerweise in einem Spiel dann wohl z.B.

    Code
    1. ... then j=41:return

    folgen lassen.
    Dann kann man die Joystickabfrage per GOSUB als Sprungziel ansteuern und erhält über j=41 z.B. die Information: Joystick #4 Unten.
    Noch einfacher und womöglich schneller: in Endloschschleife Werte in dem GOSUB-Sprungziel übergeben für J(1) bis J(4) über das entsprechende GePEEKe und nur dann mit RETURN wieder raus, sobald irgendein Joystick Action meldet. Erst dann (z.B. in weiterem Sprungziel) mit IF herausfinden wie denn/wo denn/was denn (welcher Joy macht was).


    Vielleicht hilft der Codeschnipsel ja dem einen oder anderen BASIC-Coder, der zufällig auch noch den 4-Player-Adapter von Protovision hat, auf die Sprünge.


    Als konkretes Anschauungsmaterial für 4-Player-Adapter in BASIC kann man sich auch mal Zeile 6000 ff. von Edikles' Alone in the Green 4 Four reinziehen (dort liegt die Abfrage, angesteuert/ausgewertet wird so bei Zeile 5700 ff.), ein Release, der auf der BCC#3 für Kurzweil gesorgt hat. In Sachen Tempo gäbe es da zwar noch einiges zu optimieren, das liegt aber soweit ich das überblicke, nicht unbedingt an der Joystickabfrage, sondern an der Kollisionsabfrage, die natürlich bei 4 Objekten, die mit je 8 Feldern verglichen werden, in Basic nicht blitzschnell läuft. Aber um eine Idee zu kriegen, wie man den 4-Player-Adapter in Basic nutzen kann, ist der Code wirklich ganz brauchbar!
    :weg:

  • z=1+((z+1)and3)

    Kombination aus Addition und AND (und dann noch in ein und derselben Formel) funktioniert so leider nicht in Basic, das erste + mag er nicht, liefert dann abwechselnd 2 und 4.
    Aber die Idee ist gut, und so z.B. geht es:

    Code
    1. 10 z=z+1and3
    2. 20 onz+1gosub30,40,50,60:goto10:REM ### das + hinterm ON z funktioniert ###
    3. 30 print"1":return
    4. 40 print"2":return
    5. 50 print"3":return
    6. 60 print"4":return


    Liefert brav
    1
    2
    3
    4