4XCPC, ένα παιχνίδι 4X εμπνευσμένο από το Ascendancy για Amstrad CPC 6128

Γεια! Έβγαλα την έκδοση v1.1 του 4X παιχνιδιού μου, η οποία προσθέτει ένα σύντομο μήνυμα βοήθειας. Ήταν όντως λίγο ζόρικο αν δεν είχες παίξει ποτέ ξανά Ascendancy.

Code & Logic Involvement

Υβριδικό (βασικές ρουτίνες δημιουργημένες από AI· συναρμολόγηση/επεξεργασία από άνθρωπο)

Assets & Pipeline Involvement

Ιστορία, διάλογοι ή κείμενο εγχειριδίου

Project Notes & Prompts

Claude Code + Arkos Tracker + RASM + μερικά προσαρμοσμένα εργαλεία γραμμένα σε Go για την επεξεργασία assets, fuzzing και build του παιχνιδιού.

Αυτό το παιχνίδι κάνει εκτεταμένη χρήση split-rasters για την εμφάνιση πολλών χρωμάτων στο mode 1. Απαιτείται πραγματικός CPC ή ένας εξομοιωτής υψηλής ακρίβειας.

3 «Μου αρέσει»

4xcpc.dsk (199,8 KB)

Αυτό το κουμπί «Play In Browser» είναι εξαιρετικό! Εμφανίζεται αυτόματα όταν δημοσιεύεται ένα DSK;

Τα split rasters φαίνονται μια χαρά.

Ναι. Χρειάζεται μόνο να σύρετε και να αφήσετε το αρχείο στο σώμα του μηνύματος.

1 «Μου αρέσει»

Αν ενδιαφέρεται κανείς:

  • Το DSK δημιουργείται απευθείας από μια βιβλιοθήκη Go που έγραψα πριν από μερικά χρόνια. Επιτρέπει την τοποθέτηση δυαδικών δεδομένων (binary data) απευθείας σε οποιονδήποτε τομέα (sectors). Ο φορτωτής |cpm έχει έναν πίνακα που περιέχει τη θέση των δεδομένων και τον προορισμό τους στη μνήμη RAM του CPC (banks, offset). Έτσι αποφεύγεται η χρήση του καταλόγου που αναγκάζει την κεφαλή να επιστρέφει στην αρχή του δίσκου.
  • Τα split rasters υποστηρίζονται από μια βιβλιοθήκη εξομοίωσης CPC γραμμένη από τον Claude, χρησιμοποιώντας το GitHub - koron-go/z80: Z80 emulator written in Go · GitHub . Μόλις βαθμονομηθεί με NOP σε έναν πραγματικό CPC, επιτρέπει αυτόματες δοκιμές μονάδας (unit testing) των split rasters.
  • Η μουσική και το πληκτρολόγιο επεξεργάζονται πριν από την περιοχή σχεδίασης, όπου εμφανίζονται τα rasters. Εκτελούνται σε σταθερό χρόνο, χρησιμοποιώντας τον FAP player για τη μουσική.
  • Όταν η οθόνη μαυρίζει (blanked) για τον υπολογισμό της σειράς του εχθρού, η μουσική επανασυνδέεται στις κανονικές διακοπές (interrupts) του CPC για να αποφευχθούν τα κολλήματα.
  • Μπορεί να εμφανίσει και τα 27 χρώματα ταυτόχρονα στην οθόνη. Κάθε γραμμή έχει μια παλέτα 6 χρωμάτων. Βασικά, 5. Το μαύρο είναι σταθερό. Ορίζονται 3 pens κατά τη διάρκεια του hsync (περίπου 30 nops) και στη συνέχεια, τα pen 1 και pen 3 ορίζονται ξανά κατά τη σχεδίαση της γραμμής. Αυτό επιτρέπει το αναβόσβημα (blink) ενός χρώματος είτε στην αριστερή είτε στη δεξιά στήλη. Το αριστερό εικονίδιο δεν επηρεάζεται από το blanking.
  • Αυτό θα μπορούσε να χρησιμοποιηθεί σε οποιοδήποτε παιχνίδι τύπου spreadsheet, πιστεύω. Επιτρέπει το αναβόσβημα μιας γραμμής αλλάζοντας μόνο 8 τιμές σε κάθε κύκλο.

Το παιχνίδι μπορεί να ολοκληρωθεί σε περίπου 2 με 3 ώρες. Ή σε λίγα λεπτά, αν απλώς αφήνετε τον χρόνο να περνά μέχρι να κερδίσει ο αντίπαλος…

1 «Μου αρέσει»

Ωωω, φαίνεται υπέροχο! Με ενδιαφέρουν πολύ οι τεχνικές λεπτομέρειες των αλλαγών στο ράστερ (raster).

(δηλ. θέλω να τις χρησιμοποιήσω στις δικές μου παραγωγές)

Χρησιμοποίησα το AceDL για να δω πώς υλοποιήθηκε στο παιχνίδι Le Fugitif. Η βασική ιδέα είναι να δημιουργήσεις μια μεγάλη λίστα από πένες (pens), να δείχνεις σε αυτήν με τον καταχωρητή HL και στη συνέχεια να έχεις κάτι σαν το παρακάτω:

    ; ορισμός χρώματος φόντου
    ld e, 0x54
    out (c), 0
    out (c), e

    ld c, 0x01
    ld d, 0x02
    ld e, 0x03

display_loop:
    out (c), c
    outi
    inc b
    out (c), d
    outi
    inc b
    out (c), e
    outi
    
    nop
    ...
    nop
    
    dec a
    jp nz, display_loop


Κάθε outi θα θέσει το χρώμα που δείχνει ο HL στην επιλεγμένη πένα και στη συνέχεια θα τον αυξήσει (increment). Είναι πολύ σημαντικό να κάνεις inc b μετά, επειδή η outi μειώνει τον B.

Και, φυσικά, πριν από αυτό, πρέπει να περιμένεις το VBL για να συγχρονιστείς.

    ; αναμονή VBL
    ei ; ενεργοποίηση διακοπών (τις χρειαζόμαστε για το HALT)
    ld b,0xF5
novbl:
    in a,(c)
    rra
    jr nc,novbl

    halt ; είμαστε συγχρονισμένοι 16 γραμμές πριν από την οθόνη
    di ; και τώρα απενεργοποιούμε τις διακοπές μέχρι το τέλος

    ; εδώ μπορεί να μπει οποιοσδήποτε κώδικας έχει ακριβή χρονισμό, όπως ο FAP player. Ή πολλά nop και loops για κατανάλωση χρόνου.

Και, φυσικά, μπορείς να εκτελέσεις outi;inc b αρκετές φορές για να αλλάξεις την ίδια πένα πολλές φορές κατά τη διάρκεια της γραμμής, εξ ου και ο διαχωρισμός (split).

Χμ, έχω φάει κόλλημα; Πώς υποβάλλεις τα σχόλιά σου;

Μέσα στο παιχνίδι; Χρησιμοποίησε τα βελάκια και το return για να επιλέξεις ένα στοιχείο από το μενού. Στη συνέχεια, χρησιμοποίησε τα γράμματα που επισημαίνονται με κόκκινο χρώμα στα ρήματα για [Next]. Ή [Pass] για να προχωρήσεις στο επόμενο συμβάν. (Τέλος κατασκευής, αύξηση πληθυσμού, ολοκλήρωση έρευνας..)

Ίσως θα έπρεπε να προσθέσω μια οθόνη βοήθειας για τα πλήκτρα χειρισμού. :thinking: