Vespertino world racing

Ακόμα περισσότερο άγχος :slight_smile:

Μόνο 2 ερωτήσεις:

  • γνωρίζουμε ότι το παιχνίδι θα κυκλοφορήσει σε μορφή Cartridge με αντάπτορα για CPC std και Plus series, σωστά;
  • Προβλέπεται ψηφιακή έκδοση για εξομοιωτές (emulators) ή συστήματα FPGA;
18 «Μου αρέσει»

Και πάλι, απλώς AI σαβούρα…

:Ξαπλωμένος στο πάτωμα κλαίγοντας:

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

Όχι 4 παίκτες στην ίδια οθόνη; Δώστε μου πίσω τα χρήματά μου που δεν είχα ξοδέψει ακόμα…

Rhino πραγματικά έχω μείνει άφωνος.

ΣΕΒΑΣΜΟΣ σε εσένα προσωπικά και σε όλα τα παιδιά που συμμετείχαν σε αυτό.

Ξεκινώντας με το Batman Forever το 2011, έχεις πραγματικά αναζωογονήσει την κοινότητα του CPC με τόσους πολλούς τρόπους.

Σε ευχαριστώ!

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

Το παιχνίδι που καθηλώνει είναι εδώ, όπως υποσχεθήκαμε.

Σας ευχαριστούμε.

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

Το μόνο που μπορώ να πω είναι:

wtf.

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

Αν και μένει να το δούμε σε πραγματικό CPC, φαίνεται εντυπωσιακό, λίγο έμεινε ακόμα :alien::cool_button:

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

Απλά εκπληκτικό!

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

Απλώς Α π ί σ τ ε υ τ ο !!!

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

φαίνεται εντυπωσιακό, αλλά γιατί έβαλες τη μηχανή παραγωγής σαβούρας (slopmachine) να φτιάξει αυτό το χάλια τρέιλερ;

Τριάντα δευτερόλεπτα βίντεο — να τρέχει σε πραγματικό υλικό (hardware) θα έκανε τη δουλειά ακόμα πιο αποτελεσματικά.

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

ο γκρινιάρης ο γέρος πάντα θα γκρινιάζει :smiley:

Δεν είμαι σίγουρος για το World Racing στον τίτλο. Το Real Racing Simulator ακούγεται πολύ καλύτερα. Και μια και το 'φερε η κουβέντα, γιατί να μην προσθέσουμε το Gran πριν από το Vespertino; Αυτό ήταν! Το πετύχαμε διάνα!

OMG, φαντάσου μια έκδοση σε κλασική Plus cartridge, πλήρη έλεγχο με joypad, playable σε modded GX4000 με 128K :face_with_tongue:! Μπορείς να το φανταστείς;

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

Ενδιαφέρον βίντεο. Φαίνεται να επιβεβαιώνει τη διαίσθησή μου.

Παρακάτω παραθέτω τις υποθέσεις και τη διαίσθησή μου. Δεν κρίνω ούτε προσπαθώ να υποβαθμίσω το επίτευγμα. Το αποτέλεσμα είναι εξαιρετικά εντυπωσιακό. Μπράβο!

Η γενική στρατηγική κατά την ταπεινή μου γνώμη έχει δύο άξονες

  • :chipmunk: Ο Z80 δεν διαθέτει instruction cache (ενδιάμεση μνήμη εντολών). Κάθε εντολή κοστίζει πολύ (σε σύγκριση με τον i386 και τους μεταγενέστερους, όπου οι εντολές που εκτελούνται πολλές φορές μέσα σε έναν μικρό βρόχο είναι πολύ πιο γρήγορες). Γρήγορος κώδικας για Z80 σημαίνει κώδικας που εκτελεί λιγότερες εντολές ανά εγγεγραμμένο byte. Επομένως, ένας χρυσός κανόνας βελτιστοποίησης κώδικα Z80 είναι: αφαιρέστε όλες τις εντολές που δεν γράφουν bytes στον προορισμό. Αφαιρέστε (ξεδιπλώστε / unroll) τους βρόχους. Είναι εκπληκτικό πόσα περιττά πράγματα μπορείς να αφαιρέσεις αν ωθήσεις μια τέτοια προσέγγιση στα άκρα. Εξερευνώντας αυτές τις ιδέες στα άκρα κατάφερα να γράψω το Sunny Day (for A Shadow Party) :: pouët.net
  • :optical_disk: Στρατηγική ακραίου συμβιβασμού μνήμης έναντι επεξεργαστή (memory-vs-CPU tradeoff). Κανονικά, ο CPC δεν έχει αρκετή μνήμη για να φτάσει αυτή τη στρατηγική στα άκρα. Αν όμως διαθέτεις μια εξωτερική ROM όσο μεγάλη θες, μπορείς να πας ακόμα παραπέρα. Λεπτομέρειες παρακάτω.

Λεπτομέρειες

  • :alien_monster: Παρατηρώντας το βίντεο καρέ-καρέ (pixel peeping), αποκαλύπτεται ότι τα αυτοκίνητα σχεδιάζονται με ανάλυση σε επίπεδο byte (byte granularity). Το πλάτος εκτείνεται αριστερά και δεξιά με άλματα των δύο pixel. Όταν κάποιο από αυτά είναι ανεπιθύμητο, σχεδιάζεται γκρι. Είναι αόρατο στα γκρι τμήματα του δρόμου, αλλά ορατό στα υπόλοιπα. Αυτό απλοποιεί και επιταχύνει τις ρουτίνες σχεδίασης: απλώς γράφεις bytes, χωρίς μάσκες, χωρίς χειρισμό bit.
  • :high_voltage: Παρ’ όλα αυτά, χρειάζεται μια εξαιρετικά γρήγορη ρουτίνα σχεδίασης. Εφαρμόστε τον χρυσό κανόνα που αναφέρθηκε παραπάνω.
  • :left_right_arrow: Αν το αυτοκίνητο δεν κινείται πάνω ή κάτω (ειδικά το αυτοκίνητο του παίκτη), η ρουτίνα γίνεται ακόμα πιο απλή και γρήγορη.
  • :optical_disk: Φτάστε αυτές τις επιλογές στα άκρα, ανεξάρτητα από το κόστος σε αποθηκευτικό χώρο. Γι’ αυτόν τον λόγο αυτό λειτουργεί μόνο με κασέτα ROM (cartridge). Απαιτούνται τεράστιες περιοχές μνήμης (μόνο για ανάγνωση).
  • :window: Τα τεράστια περιστρεφόμενα αυτοκίνητα στην οθόνη επιλογής είναι απλή συμπίεση δέλτα (delta compression). Τα περισσότερα pixel δεν αλλάζουν και οι αλλαγές είναι γνωστές εκ των προτέρων, γεγονός που κάνει τη διαδικασία πολύ γρήγορη. Όταν έχεις διαθέσιμα τόσα πολλά bytes στη ROM, απλώς κάνεις αυτό. Κάτι παρόμοιο έγινε πάλι στο Sunny Day (for A Shadow Party) :: pouët.net, όπου το σύνολο των bytes που γράφονται στην πραγματικότητα είναι n φορές μικρότερο από αυτό που φαίνεται (αν θυμάμαι καλά n=6).
  • :high_voltage: Όλα τα κινούμενα στοιχεία σχεδιάζονται με τη μέθοδο «γραφικά-ως-κώδικας» (graphics-as-code). Η σχεδίαση δεν καλεί μια γενική ρουτίνα «σχεδίασε κάτι» παίρνοντας συγκεκριμένα «δεδομένα αυτού του κάτι». Αντιθέτως, το να «σχεδιάσεις κάτι» σημαίνει ότι καλείς μια εξειδικευμένη ρουτίνα (π.χ. μία ρουτίνα για κάθε αυτοκίνητο σε κάθε συγκεκριμένο προσανατολισμό, μία ρουτίνα για κάθε αντικείμενο σε κάθε απόσταση). Οι ρουτίνες είναι προπαρασκευασμένος κώδικας Z80, εννοιολογικά πολύ απλός: απλώς γράφει bytes, χωρίς βρόχους, χωρίς τίποτα περιττό. (Η τεχνική δεν είναι νέα, έχει χρησιμοποιηθεί σε αρκετές παραγωγές. Το εφάρμοσα για τα εφέ μετάβασης επιπέδων στο Just Get 9)
  • :optical_disk: Ένα στοιχείο που προδίδει τη στρατηγική «από τη στιγμή που θεωρείς δεδομένη μια τεράστια ROM, δεν πειράζει να έχεις και τεράστιες ανάγκες σε ROM» είναι ο αριθμός των οπτικών γωνιών για κάθε αντικείμενο. Στο βίντεο, οι δημιουργοί ισχυρίζονται ότι υπάρχουν 5000+ sprites. Από τη στιγμή που έχεις αναρίθμητα bytes και μπορείς να δημιουργήσεις χιλιάδες sprites με το render ενός ψηφιακού μοντέλου αυτοκινήτου, κάν’ το. Το αποτέλεσμα είναι μια εντυπωσιακά ομαλή και απολαυστική απόδοση των 3D θέσεων των αυτοκινήτων στον δρόμο.
  • :motorway: Αυτό υποθέτω ότι ισχύει και για τη σχεδίαση του δρόμου. Έχεις μια τεράστια λίστα εξειδικευμένων ρουτινών που απλώς σχεδιάζουν ένα πλήρως ολοκληρωμένο οριζόντιο τμήμα του δρόμου. Καλείς την κατάλληλη ρουτίνα για κάθε γραμμή. Θα είναι πιο γρήγορο από το ήδη γρήγορο Chase HQ, το οποίο σχεδιάζει πρόχειρα τμήματα και στη συνέχεια τα τελειοποιεί για τις λευκές διαγραμμίσεις των λωρίδων. Αυτό είναι φυσικά πιο περίπλοκο από ένα επαναλαμβανόμενο μοτίβο όπως στο Sub Hunter, ωστόσο αυτό το παιχνίδι δείχνει ότι τεράστιες περιοχές της οθόνης μπορούν να κινηθούν ομαλά γράφοντας στην πραγματικότητα (κάνοντας push) bytes.
  • :window: Επίσης, χρησιμοποιείται double buffer αλλά όχι για ολόκληρη την οθόνη. Μια πλήρης οθόνη overscan καταλαμβάνει 24k χρήσιμων bytes. Με συγκεκριμένες ρυθμίσεις του CRTC και ίσως κάποιο screen split, αυτά τα 24k μπορούν να «πακεταριστούν» (αφήνοντας την υπόλοιπη μνήμη όχι ιδιαίτερα κατακερματισμένη). Δύο buffers σημαίνουν 48k. Απομένει μια πλήρης εναλλάξιμη περιοχή 16k για bank switching. Κάνεις bank switch ανάμεσα σε αμέτρητες σελίδες για να αποκτήσεις πρόσβαση στη φυσική ROM της κασέτας. Ακόμα και ο κώδικας μπορεί να αντιγραφεί μέσα στις ROM.

Και… δεν είμαι 100% σίγουρος ότι αυτά καλύπτουν τα πάντα. Ίσως (μάλλον) να υπάρχουν κι άλλα μυστικά.

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

Σας ευχαριστώ πολύ για τα λόγια σας!

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

Μια ενδιαφέρουσα ανάλυση, δεν θα πω αν είναι ακριβής ή όχι! :slight_smile:
Έχω όμως μια ερώτηση… Σε αυτούς τους τύπους παιχνιδιών, το πλάτος του δρόμου είναι συνήθως πολύ μεγαλύτερο από το πλάτος της ορατής οθόνης, μιας και ο δρόμος μετατοπίζεται καθώς κινείσαι πλευρικά. Οι ρουτίνες που προτείνεις, οι οποίες σχεδιάζουν κάθε οριζόντια γραμμή, θα αποδίδουν (render) μόνο την ορατή περιοχή; Αν ναι, πόσες ρουτίνες θα απαιτούνταν για κάθε οριζόντια γραμμή ώστε να επιτευχθεί οριζόντια κύλιση pixel (pixel scrolling); Ευχαριστώ!

Αυτό ξεπερνά κάθε φαντασία, είναι απλά απίστευτο!

Συγχαρητήρια σε όλη την ομάδα γι’ αυτή τη φαινομενική εξέλιξη.

@Rhino

Θα υπάρξουν μελλοντικές συζητήσεις σχετικά με μερικές από τις τεχνικές που χρησιμοποιήθηκαν στο παιχνίδι;

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

Όταν άκουσα ότι το παιχνίδι θα χρησιμοποιούσε χιλιάδες προ-αποδοσμένα sprites (pre-rendered sprites) αποθηκευμένα σε ROM, ήξερα ότι η ομαλότητα στο scaling και την περιστροφή θα ξεπερνούσε οτιδήποτε είχε επιχειρηθεί μέχρι τότε, και βλέποντάς το επιτέλους εν κινήσει, δεν απογοητεύει καθόλου. Ο CPC μπορεί να κάνει εντυπωσιακά πράγματα αν του προσθέσεις μπόλικη μνήμη, αλλά χρειάζεται πολλή δουλειά για να την αξιοποιήσεις σωστά.

Αυτό που με εντυπωσίασε πραγματικά είναι η προσοχή και η φροντίδα που δόθηκε στο front-end, τα μενού κ.λπ. Πρόκειται για ένα χρονοβόρο και όχι πάντα ευχάριστο κομμάτι του game development, κι όμως τα πάντα δείχνουν όσο πιο προσεγμένα γίνεται, με έναν συνεκτικό σχεδιασμό που δένει όλο το σύνολο.

Με τόση προσπάθεια, το μόνο που μένει να ελπίζουμε είναι να παίζεται τόσο καλά όσο δείχνει. Βλέπω αρκετά αυτοκίνητα στην οθόνη ταυτόχρονα, κάτι που είναι πολλά υποσχόμενο. Δεν έκαναν καθόλου τσιγκουνιές στα αυτοκίνητα των αντιπάλων.

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

Ε, εσύ, ο master coder του Batman Group, κάνεις σε εμένα ερώτηση για προγραμματισμό; Κάποιο κόλπο παίζει εδώ. :sweat_smile:

Και πράγματι, δεν έχω κάνει κανέναν υπολογισμό, γι’ αυτό και έγραψα στρατηγικά «ένα τρισεκατομμύριο bytes», κάτι που προσφέρει μια ευπρόσδεκτη «ασάφεια».

Εντάξει, άσε με να σκεφτώ και να προσπαθήσω να απαντήσω στην ερώτησή σου. Το να έχουμε εξειδικευμένες ρουτίνες που γράφουν μια ολόκληρη γραμμή δρόμου για όλες τις περιπτώσεις θα ήταν απλό (σταθερός χρόνος, εγγραφή 80 ή ακόμα και 96 bytes σε πλήρες overscan), αλλά θα απαιτούσε εξαιρετικά μεγάλο αριθμό ρουτινών. Ένας τρόπος μείωσης θα μπορούσε να είναι το PUSH bytes με το χρώμα του εδάφους από τα δεξιά, μετά κλήση εξειδικευμένων ρουτινών για να γραφτεί ο ίδιος ο δρόμος, και μετά PUSH μερικά ακόμα bytes με το χρώμα του εδάφους. Αυτό το μοντέλο περιορίζει κάπως τον αριθμό των συνδυασμών, αλλά δεν μπορεί να σχεδιάσει όταν ο δρόμος εκτείνεται πέρα από τα άκρα της οθόνης αριστερά ή δεξιά. Μμμ, υπάρχει μια άλλη επιλογή που περιορίζει επίσης το πλήθος των ρουτινών, διατηρώντας ταυτόχρονα υψηλή τη συνολική ταχύτητα. Τι θα έλεγες για έναν κλιμακωτό πίνακα δύο επιπέδων (cascading two-level table): για μια δεδομένη γεωμετρία γραμμής, αναζήτηση σε μια λίστα με μικρότερες ρουτίνες και κλήση αυτών των ρουτινών. Έχουν προϋπολογισμένες τιμές bytes για να σχεδιάσουν όλα τα pixels και ο αριθμός τους είναι πολύ μικρότερος. Αυτό θα καλύψει ακόμα και καταστάσεις όπου η γραμμή του δρόμου εκτείνεται έξω από την οθόνη αριστερά και δεξιά, χωρίς υπολογισμούς κατά το run-time. Μαντεύω σωστά, @Rhino;

(προσοχή, ακολουθεί αστείο :police_car_light:) Ανατροπή στην πλοκή: όλα αυτά τα χρόνια τα teasers του Vespertino ήταν ψεύτικα, οι δημιουργοί ρωτούν κόσμο στο forum, συγκεντρώνουν τις απαντήσεις τους με τα χρόνια μέχρι να υπάρξει ένα αρκετά ισχυρό AI, για να του τροφοδοτήσουν τις απαντήσεις και να κάνει την πραγματική δουλειά. :exploding_head: Πλάκα κάνω. :smile:

Ας σοβαρευτούμε πάλι: συγχαρητήρια σε όλη την ομάδα για αυτή την εντυπωσιακή δουλειά!

Μετά από τόσο καιρό και τόσα teasers, ανυπομονώ επιτέλους να δω και να παίξω το Vespertino!

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