Aktuelle Zeit: 23.09.2018 04:21

Alle Zeiten sind UTC + 1 Stunde




 Seite 1 von 16 [ 237 Beiträge ]  Gehe zu Seite 1, 2, 3, 4, 5 ... 16  Nächste
Autor Nachricht
 Betreff des Beitrags: Furry RPG! (Arbeitstitel)
BeitragVerfasst: 10.06.2014 21:05 
SNES-Freak
SNES-Freak
Benutzeravatar

Registriert: 29.12.2011 15:33
Beiträge: 522
Wohnort: Löwenhöhle :3
+Positive Tradingpoints+: 3 von 3
Bild

Was ist »FURRY RPG!«?

Furry RPG! ist ein brandneues, momentan in Entwicklung befindliches Rollenspiel für das gute alte SNES. Das Spiel ist als Open-Source-Software geplant, wobei hierzu noch keine endgültige Entscheidung getroffen wurde.

Furry RPG! ist als Rollenspiel mit Action-Elementen konzipiert (im Stil von Chrono Trigger, Tales of Phantasia oder Star Ocean). »Furry« (von engl. fur = Fell) bedeutet, dass die Charaktere sämtlich anthropomorphe Tiere sind.

Die Story

Achtung -- dich erwarten größere Spoiler! :!:
versteckter Inhalt:
On learning that a »ghost« haunts their village as of late, scaring the kids and stealing food from unlocked pantries, best friends Alec Marlowe, a young hunter (lion), and skeptic scholar Lilac Pondicherry (tigress) join foreign soldier Primus Greyfur (wolf) for a trip into the vast forest just beyond their doorstep. Bent on hunting down and uncovering the villain, whom they suspect to be very fleshly in appearance (although furred, of course), the three venture deep into the woods, where they eventually make a discovery that will forever change their destinies as well as the history of their country, the Republic of Librefur. For in an abandoned military outpost, unbeknownst to anyfur, Reinhold von Pappenheim (fox/coyote?) has been living a secret life, with an unsightly fennec puppet named Dorothy as his sole companion.

Initially posing as a trickster and ventriloquist, Reinhold is soon revealed to be the exiled heir to the throne of Fleckenstein Kingdom, beyond the Republic’s eastern border. He tells Alec and his friends of an uprising in his home country. The rebel forces are supposedly led by »the Badger,« whose sole purpose in life appears to be to overthrow the reign of the Pappenheim line of kings, and plunge the realm into chaos and destruction.

Convinced that his new friend should be lent a paw returning to his people, claiming back the throne and restoring peace to Fleckenstein, Alec and his comrades join Reinhold on a journey back to the kingdom—only to find it in full preparation for war against its three neighboring states: the Furderal Empire, to the south, the Free County of Coathill in the north, and the Republic of Librefur, due west.

Shocked about this finding, Alec and Lilac agree to return home in order to warn both the Palace and the population of Librefur of the impending invasion. But before they can even leave the capital of Fleckenstein, the four friends are all arrested and put in separate jails, knowing they will be publically executed on the very next morning for alleged high treason. However, Alec, Lilac and Primus are found and liberated at night by nofur else than »the Badger« himself, a.k.a. Kilian Lacrimo della Valle (cheetah), who tells them that Reinhold was nowhere to be found and has most likely already been killed.

During their journey back to the Republic of Librefur, the remaining three tell Kilian about Reinhold’s identity. Kilian, in turn, explains that nothing of what Reinhold told them was true. According to »the Badger,« the Pappenheim reign is actually a ruthless and cruel dictatorship that needs to keep up its outward saber-rattling so as to remain credible to its large amount of faithful citizens, and that the rebels indeed intend to rid the country of its unfurvorable leader. He reminds Alec that he and his friends are far too deeply involved within the conflict to go back to their normal lives anymore—as Fleckenstein assassins have already been sent out to track them down—and instead convinces them to retreat to the abandoned outpost in the forest, fortify it in case they are discovered by Fleckenstein spies, and aid the resistance from there.

In time, they are joined by others hoping to stop Fleckenstein: young Damian Fleck (jaguar/leopard?), a martial artist who is loyal to his home kingdom, yet afraid the Pappenheim’s war-mongering might wreak havoc on it; Tara of Idenmarch (lynx), a Fleckenstein refugee who saw her family being murdered by Pappenheim’s henchmen; Gregory P. E. H. Eindhoven Dubois Quaoar van der Muhlhausen Nido sulle Colline (bear), a would-be Coathill aristocratic who gets debunked quickly by Kilian and, being a carpenter, decides to help rebuilding the outpost; Kit, an orphan foxling whose flute-playing ensnares friends and foes alike; and several others (i.e., secret characters).

When the motley crew around Alec finally re-enter Fleckenstein Kingdom to confront Reinhold in the hopes of ending the war before it really begins, they appear to succeed—only to realize that hardly anyfur amongst them is actually what he or she pretends. Not only that, but the real threat is found to stem from deeper than the deluded minds of those few who seek to conquer the lands around them.

In the end, Alec has to make a decision the world he knows depends upon—as do both his own life and the lives of all his friends …

Wie weit ist das Projekt?

Die Hauptarbeit konzentriert sich momentan auf die Entwicklung einer von Grund auf neuen RPG-Engine. Daneben gibt es immer wieder Fortschritte in den Bereichen Story/Handlung/Charaktere, Gameplay sowie Soundtrack zu verzeichnen. :wink:

Hier ein paar Beispiele (alle Grafiken sind Platzhalter):

Bild

Bild

Bild

Bild

Bild

Bild

Wer ist beteiligt?

  • Idee, Planung, Story, Texte: Ramsis
  • Programmierung: Ramsis
  • Grafische Gestaltung: ??? (Wie gesagt, alle bisherigen Grafiken sind Platzhalter …)
  • Musik: Ramsis

Wann wird das Spiel fertig?

Das hängt in erster Linie davon ab, ob und wann das Team Verstärkung erhält -- momentan ist selbiges nämlich leider sehr klein (1 Person). :wink:

Aber immerhin kannst du dir trotzdem jederzeit ein Bild vom aktuellen Stand des Projekts machen. :nice: Lade dir einfach das nachstehende letzte WIP-Build herunter, probiere es aus und hab keine Skrupel, in diesem Thread deine Meinung dazu kundzutun. :D

Download:
https://github.com/Ramsis-SNES/furryrpg/raw/master/furryrpg.sfc

Viel Spaß und lieben Gruß,
Ramsis


Nachstehend der initiale Post vom 10.06.2014:

Zitat:
Neben der PowerPak-Firmware v3, die sich nach wie vor blendend entwickelt, suche ich permanent nach neuen Herausforderungen. Typisch für mich. :D So ist die Idee zu einem neuen RPG für meinen Liebling unter den Konsolen entstanden. Also, für das SNES. :wink:

Das Projekt wird garantiert freie Software sein (das heißt, falls es jemals Release-Status erreicht), garantiert Open Source (dito) -- und garantiert 100% furry (das auf jeden Fall)! :D

Screenshots des momentanen Fortschritts (sämtliche Texte und Grafiken sind Platzhalter und werden bis zur Final ausgetauscht werden):

http://manuloewe.de/snestuff/projects/furryrpg_build_00152_1.png
http://manuloewe.de/snestuff/projects/furryrpg_build_00152_2.png

Hier ein paar technische Infos -- für diejenigen, die es interessiert:
versteckter Inhalt:
Ein RPG verlangt selbstverständlich nach einer vernünftigen Textbox-Routine. Die habe ich ohne VWF, aber dafür in Mode 5 realisiert. Warum? Weil ich glaube, dass ein RPG hauptsächlich von der Story und den Dialogen lebt. Mit meiner Implementierung kriege ich bis zu 200 Zeichen in einer Textbox unter. Mehr als genug, um den Lesefluss nicht durch unnötige "Seitenwechsel" zu stören, besonders nicht mitten im Satz -- es sei denn, genau das ist gewollt (s. o. Screenshot).

Die Tatsache, dass ich keine variablen Tilemaps benutze, sondern die entsprechenden Tiles der jeweiligen ASCII-Zeichen während der nächsten paar Vblanks nach und nach via DMA ins VRAM schaufele, erlaubt es mir, den Text auf einen einzigen BG-Layer (BG2) zu beschränken. So bleibt der andere Layer (BG1) für das Porträt der gerade sprechenden Figur frei. Der Vorteil gegenüber der ursprünglich angedachten Sprite-Porträt-Variante liegt auf der Hand: Dank hoher horizontaler Auflösung wirken die Porträts trotz gleicher Farbanzahl (16) wesentlich klarer und plastischer (korrekte vorherige Skalierung im Bildbearbeitungsprogramm vorausgesetzt). :nice:

Die Mode-7-Grafiken werden voraussichtlich zwei Sprite-Paletten frei lassen: eine für die 16x16-Sprite-Font und eine für das Fluginstrument (das wahrscheinlich lebendig sein wird :ugly: ).

Ach ja, die Musik ist bisher mittels SNESMod implementiert -- auch das kann sich aber ggf. noch ändern. :wink:

Download des Pre-Pre-Pre-Alpha ( :ugly: ) ROMs:
http://manuloewe.de/snestuff/projects/furryrpg_build_00152.7z

Wie man sieht, bin ich grafisch nicht wirklich begabt, aber immerhin läuft das Teil auf echter Hardware ebenso wie auf allen gängigen Emulatoren. :-P Zur Bedienung gibt's nur wenig zu sagen:

  • Sobald am unteren Bildschirmrand der Farbverlauf erscheint, drückt entweder Start, um die Textbox aufzurufen, oder Select für den Mode-7-Testbildschirm.
  • Während sich die Textbox aufbaut, könnt Ihr Select drücken, um zum Mode-7-Testbildschirm zu gelangen -- das klappt sogar, wenn der Text noch gar nicht komplett ist. :D
  • Die Textbox lässt sich jederzeit mit X leeren. Der Start-Knopf baut den Text dann wieder neu auf.
  • Auf dem Mode-7-Testbildschirm könnt ihr rechts/links auf dem Steuerkreuz drücken, um den Zoom-Faktor zu verändern. Start resettet alle Mode-7-Parameter.

Viel Spaß beim Ausprobieren und bis dann wieder! :)
Ramsis


Zuletzt geändert von Ramsis am 26.09.2015 18:25, insgesamt 5-mal geändert.


_________________
Laufende Dev-Projekte:
Furry RPG! – ein brandneues Rollenspiel für das SNES!
Aktuelle WLA-DX-Binaries für Windows und Linux
Inoffizielle Firmware für das SNES PowerPak
Offline
 Profil  
 
 Betreff des Beitrags: Re: Mal was Neues von mir ...
BeitragVerfasst: 10.06.2014 22:01 
snesfreaks.com-Team
snesfreaks.com-Team
Benutzeravatar

Registriert: 26.02.2007 14:56
Beiträge: 9930
Wohnort: Nippon
+Positive Tradingpoints+: 98 von 98
Coole Techdemo! Ich bin gespannt was da noch kommt! :)
Hast du dich wegen Pixelkünstlern für RPGs schon in den RPG-Maker Communitys umgehört (z.B. RPG-Atelier und diverse franz. Seiten)? Der SNES-Stil 2000er ist da noch recht beliebt.



_________________
Bild
| Mein YT Channel | Mein Twitter | Ich suche | Ich verkaufe | Foren SuFu |
...weil Terranigma einfach das Größte ist!
Offline
 Profil  
 
 Betreff des Beitrags: Re: Mal was Neues von mir ...
BeitragVerfasst: 11.06.2014 07:04 
Code Bro
Code Bro
Benutzeravatar

Registriert: 12.08.2012 20:18
Beiträge: 2665
Wohnort: ハノーファー区
+Positive Tradingpoints+: 12 von 12
Ramsis! Schön zu sehen, dass jemand hier was fürs SNES programmiert (damit ist die Erwartungshaltung mir gegenüber weg, das ist gut)!
Ich habe noch keine Zeit gehabt, mir die ROM anzuschauen, bin aber sehr gespannt. Auch auf den Mode 5. Wird das mit eben diesem jenen nicht etwas kompliziert, die Spielwelt auf einem einzigen BG zu machen? Ich meine, Sachen wie Dachfirste o. ä., die nur einen halben Tile bedecken, musst du dann alles mit Sprites abdecken. Oder du musst einen Dialog-Screen machen wie bei Shadowrun.

Oh bitte mach viele Updates, ich liebe es, über sowas zu schnacken! ^.^



_________________
pantalytron: ルトロンはくそのディスアセンブラだよ!

Perikles hat geschrieben:
Man muss sich das mal reinziehen: die Idee ist scheiße, die theoretische Ausarbeitung ist scheiße, die praktische Umsetzung ist scheiße und der so entstehende Anspruch noch beschissener.
Offline
 Profil  
 
 Betreff des Beitrags: Re: Mal was Neues von mir ...
BeitragVerfasst: 11.06.2014 08:58 
Hardcore SNES-Freak
Hardcore SNES-Freak
Benutzeravatar

Registriert: 11.01.2014 18:27
Beiträge: 766
+Positive Tradingpoints+: 10 von 11
Hm, an Grafiken würde ich mich ja glatt mal versuchen (keine Chars, lieber Umgebungen/Tile-Sets). Früher habe ich auch schon RPG-Maker Sets modifiziert.



_________________
The SNES Place Group on Facebook
Offline
 Profil  
 
 Betreff des Beitrags: Re: Mal was Neues von mir ...
BeitragVerfasst: 11.06.2014 12:51 
SNES-Freak
SNES-Freak
Benutzeravatar

Registriert: 29.12.2011 15:33
Beiträge: 522
Wohnort: Löwenhöhle :3
+Positive Tradingpoints+: 3 von 3
Hi, Leute! :)

ChronoMoogle hat geschrieben:
Coole Techdemo! Ich bin gespannt was da noch kommt! :)

Ich muss gestehen: Ich auch! :ugly: Im Ernst, es gibt noch einige "major hurdles" zu bewältigen. Ganz primär ist das die Entwicklung einer funktionierenden Game-Engine, also des "Unterbaus" aus Code, der z. B. entscheidet, wann eine Stadt geladen wird, wann eine Zwischensequenz folgt, wann in den Kampfmodus gewechselt wird, wann das Menü erscheinen soll etc.

Was das betrifft, habe ich noch kaum Ahnung und Erfahrung. Allerdings habe ich eine grobe Vorstellung, wie man so was programmiertechnisch aufziehen kann. Und weiß auch schon, wo ich mir die nötigen Infos erfrage, die mir noch fehlen. :wink:

Aber auch sonst gibt's -- von Grafiken, Musik, Story und Spieltext mal ganz abgesehen -- noch genug zu tun:

  • VRAM kartographieren und bis zum letzten Word optimal ausnutzen. Das ist nötig, weil das VRAM des SNES (= der Ort, wo alles abgelegt werden muss, was auf dem Bildschirm erscheinen soll) mit 64 KB recht knapp bemessen ist. Immerhin, die Hi-Res-Font frisst dank des dynamischen Tile-Streamings keine 12 KB mehr wie noch in der PowerPak-Firmware (da kam es auch noch nicht drauf an, Platz zu sparen); jetzt bewegt sich der Platzbedarf inkl. Tilemap (!) im Bereich von weit unter 5 KB. Problematisch nur, dass nicht nur der Platz begrenzt ist, sondern auch die Verteilung von Tile- und Tilemap-Daten gewissen Zwängen unterliegt. Für Sprites sind z. B. nur vier mögliche Startadressen vorgesehen -- im ganzen VRAM. Für Mode-7-Grafik sogar nur eine, nämlich $0000!
  • Die Mode-7-Matrix ist mir im Moment noch ziemlich rätselhaft. Meine HDMA-Table für eine "gekippte" Sicht auf die Karte funktioniert nur richtig, solange ich nicht herumscrolle (und ist im obigen ROM deshalb deaktiviert). Ich hab normalerweise durchaus ein Herz für Zahlen, aber Sinus, Cosinus und die restlichen Monstrositäten, die die Trigonometrie so bereithält und die man für souveräne Mode-7-Effekte offenbar beherrschen muss, waren mir schon im Grundkurs Mathematik damals ein ziemlicher Horror. :ugly: (Wer auf den Geschmack gekommen ist, sollte hier weiterlesen -- Achtung, viele Formeln, Diagramme und Code in C!)
  • Vblank-Routine flexibler gestalten, so dass sie Hand in Hand mit der Engine zusammenarbeitet. Mach ich teilweise jetzt schon über Bits, die ich während Vblank checke, um z. B. zu bestimmen, ob ein Textstring bearbeitet werden soll, eine Tilemap aktualisiert werden muss etc.
  • WRAM kartographieren und optimal nutzen. Sollte aber dank üppiger 128 KB und überaus praktischer Compiler-Funktionen wie STRUCTs usw. kein wirkliches Problem darstellen.
  • HDMA-Channels optimal verteilen -- die vorhandenen 8 Stück davon sind gefühlt schneller belegt, als mir bislang lieb sein kann ...
  • Nevikstis uralte Joypad-Routine durch meine eigene ersetzen.
  • Gameplay und Tempo des Spiels festlegen und programmtechnisch umsetzen.
  • SNESMod durch irgendwas Flexibleres ersetzen. MSU-1 ist toll, aber leider kaum verbreitet. Und für Soundeffekte auch nicht ideal, der SPC700 müsste also eh parallel zum Einsatz kommen ...
  • ... hab ich was vergessen? Oh ja, bestimmt eine ganze Menge ... :ugly:

ChronoMoogle hat geschrieben:
Hast du dich wegen Pixelkünstlern für RPGs schon in den RPG-Maker Communitys umgehört (z.B. RPG-Atelier und diverse franz. Seiten)? Der SNES-Stil 2000er ist da noch recht beliebt.

Sebel hat geschrieben:
Hm, an Grafiken würde ich mich ja glatt mal versuchen (keine Chars, lieber Umgebungen/Tile-Sets). Früher habe ich auch schon RPG-Maker Sets modifiziert.

Cool, danke euch beiden! :nice: Sobald das mit den Grafiken relevant wird, komme ich ggf. auf das ein oder andere zurück. (Meine mich auch zu erinnern, dass es vor langer Zeit hier mal einen Thread gab, wo jemand seine Fähigkeiten als Pixel-Artist angepriesen hat ...)

lytron hat geschrieben:
Ramsis! Schön zu sehen, dass jemand hier was fürs SNES programmiert (damit ist die Erwartungshaltung mir gegenüber weg, das ist gut)!

Höh? Jeder hier kann sich hinsetzen und SNES-Programming lernen. 8) Wie, ist natürlich eine individuelle Sache.

Ich zum Beispiel bin kein Tutorial-Typ; lieber schnappe ich mir ein Fachbuch à la Programming the 65816, öffne parallel dazu ein Browserfenster mit nocashs Fullsnes, wurschtele drauflos und schlage alles nach, was ich nicht weiß bzw. was selbst nach hartnäckigem Herumprobieren nicht klappen will. Hat mich bisher weitergebracht als jedes SNES-Assembler-Howto, das ich früher ab und zu konsultiert habe -- nur um hinterher jedes Mal verzweifelter und ratloser zu sein als je zuvor. :D

(Fußnote dazu: Würde ich so ein Howto schreiben, so würde ich den neugierigen Leser niemals gleich zu Beginn mit den verschiedenen Addressing Modes der CPU verschrecken. Das ist schwere Kost, das kann kein Anfänger kapieren. Und das Interesse dafür kommt eh erst später -- wenn es nämlich notwendig wird, an Daten jenseits von Direct Page und ROM-Bank 0 heranzukommen.

Womit habe ich selber angefangen? Nevikstis/bunnyboys Vblank-Routine zu zerpflücken, bis ich ihren Sinn und Zweck vollends verstanden hatte. Der damalige Erkenntnisgewinn entspricht in etwa dem Zustand des Universums jeweils vor und nach dem Urknall. :ugly:

Und womit würde ich ein SNES-Assembler-Howto beginnen? Hmmm ... gar nicht, vermutlich. :D Und wenn ich müsste? Dann wohl damit, wo ich mittels lda/sta-Combos welche Werte hinschreiben muss, damit "Hallo!" auf dem Bildschirm erscheint. Doch, das führt zum Ziel. Altnordisch lernt man innerhalb eines einzigen Semesters auch nur, indem man sich gleich in der allerersten Sitzung die "Thidrekssaga" vornimmt und einfach jedes Wort nachschlägt. :ugly: Ende der Fußnote.)

Davon abgesehen ist die Auswahl an Dokumentation zu SNES-Programming heute natürlich viel, viel größer und besser als noch vor drei, fünf oder auch acht Jahren. Hat nicht zuletzt auch ein gewisser lytron in irgendeinem SNES-Freaks-Forum diverse Einsteiger-Tutorials verfasst? Also, all ihr Leute mit Zeit und Ambition, nur ran an den Speck! :D

Lange Rede, kurzer Sinn: Wer was für das SNES programmiert haben will, muss es einfach selber machen. Das kann am Anfang echt hart sein, keine Frage. Wenn sich aber dann unweigerlich die ersten Erfolge einstellen, ist das ein megageiles Gefühl. :king:

lytron hat geschrieben:
Ich habe noch keine Zeit gehabt, mir die ROM anzuschauen, bin aber sehr gespannt. Auch auf den Mode 5. Wird das mit eben diesem jenen nicht etwas kompliziert, die Spielwelt auf einem einzigen BG zu machen? Ich meine, Sachen wie Dachfirste o. ä., die nur einen halben Tile bedecken, musst du dann alles mit Sprites abdecken. Oder du musst einen Dialog-Screen machen wie bei Shadowrun.

Ich habe verschwiegen, dass nur der Bereich mit der Textbox die hohe horizontale Auflösung verwendet. Sehe zwar gerade, dass noch ein lda #$05 / sta $2105 in meiner Setup-Routine herumspukt, das ist aber völlig belanglos, da ich mittels HDMA am Anfang auf Mode 1 schalte und dann eben erst später auf Mode 5. Sonst wäre der reguläre Spielbildschirm in der Tat etwas beschränkt, und die Tiles übrigens auch aufwendiger zu realisieren.

Falls Du Geiger's Snes9x Tracer/Debugger zur Hand hast, öffne mal das ROM damit und klicke auf "What's Used" bzw. "What's Missing", da werden dir die verwendeten BG-Modi und die HDMA-Transfers angezeigt.

Auf dem Mode-7-Testscreen wiederum habe ich HDMA im Moment komplett deaktiviert. Es kann aber sein, dass ich die Textbox da später auch noch anzeigen will/muss. Das wiederum würde die verfügbaren Tiles für Mode 7 noch mehr einschränken, als sie es durch die verwendeten Sprites sowieso schon sind. Aber mal schauen. ;)

Kurzum: Dank Mode 1 im normalen Spielbereich sollte es keine großen Probleme mit der Grafikdarstellung geben. Eventuell verlege ich die HDMA-Table auch noch ins WRAM und "patche" dann die Screenmode-Bytes je nach aktuellem Bedarf. (Einen ähnlichen Trick verwende ich jetzt schon in der neuen PowerPak-Firmware, um den SPC-Player vertikal zentriert über den Filebrowser zu legen, ohne die Scrolling-Offsets resetten zu müssen.)

lytron hat geschrieben:
Oh bitte mach viele Updates, ich liebe es, über sowas zu schnacken! ^.^

Hehe, klar. Ich doch auch! :D

Aber jetzt muss ich erst mal was zu Mittag essen ...

Lieben Gruß und bis dann wieder,
Ramsis



_________________
Laufende Dev-Projekte:
Furry RPG! – ein brandneues Rollenspiel für das SNES!
Aktuelle WLA-DX-Binaries für Windows und Linux
Inoffizielle Firmware für das SNES PowerPak
Offline
 Profil  
 
 Betreff des Beitrags: Re: Mal was Neues von mir ...
BeitragVerfasst: 11.06.2014 13:47 
Code Bro
Code Bro
Benutzeravatar

Registriert: 12.08.2012 20:18
Beiträge: 2665
Wohnort: ハノーファー区
+Positive Tradingpoints+: 12 von 12
Ramsis hat geschrieben:
Im Ernst, es gibt noch einige "major hurdles" zu bewältigen. Ganz primär ist das die Entwicklung einer funktionierenden Game-Engine, also des "Unterbaus" aus Code, der z. B. entscheidet, wann eine Stadt geladen wird, wann eine Zwischensequenz folgt, wann in den Kampfmodus gewechselt wird, wann das Menü erscheinen soll etc.


Ach ja, ach ja, das sollte ich auch langsam mal machen...

... aber stattdessen vertingel ich meine Zeit mit anderen Sachen. Aber na ja, vielleicht kommt es irgendwann dazu. Mein erster Schritt wäre, eine Engine zu bauen, mit der ich im Schnelldurchgang ein paar Slideshows programmieren kann/könnte. Sorry, wrampi: Wenn ich Slideshows machen werde/würde, dann wohl allein mit einigen Game-Mockup-Screens.

Ramsis hat geschrieben:
VRAM kartographieren und bis zum letzten Word optimal ausnutzen. Das ist nötig, weil das VRAM des SNES (= der Ort, wo alles abgelegt werden muss, was auf dem Bildschirm erscheinen soll) mit 64 KB recht knapp bemessen ist. Immerhin, die Hi-Res-Font frisst dank des dynamischen Tile-Streamings keine 12 KB mehr wie noch in der PowerPak-Firmware (da kam es auch noch nicht drauf an, Platz zu sparen); jetzt bewegt sich der Platzbedarf inkl. Tilemap (!) im Bereich von weit unter 5 KB. Problematisch nur, dass nicht nur der Platz begrenzt ist, sondern auch die Verteilung von Tile- und Tilemap-Daten gewissen Zwängen unterliegt. Für Sprites sind z. B. nur vier mögliche Startadressen vorgesehen -- im ganzen VRAM. Für Mode-7-Grafik sogar nur eine, nämlich $0000!


Was ist "dynamisches Tile-Streaming"? Klatschst du die ebenfalls via HDMA in den VRAM? Wie viele HDMAs lässt du derzeit laufen!?! Und: Ist es überhaupt möglich, alle acht DMA-Channels für HDMA zu gebrauchen!?
Himmel, das klingt ziemlich klompiziert. ;)

Ramsis hat geschrieben:
Die Mode-7-Matrix ist mir im Moment noch ziemlich rätselhaft. Meine HDMA-Table für eine "gekippte" Sicht auf die Karte funktioniert nur, solange ich nicht herumscrolle (und ist im obigen ROM deshalb deaktiviert). Ich hab normalerweise durchaus ein Herz für Zahlen, aber Sinus, Cosinus und die restlichen Monstrositäten, die die Trigonometrie so bereithält und die man für souveräne Mode-7-Effekte offenbar beherrschen muss, waren mir schon im Grundkurs Mathematik damals ein ziemlicher Horror. :ugly: (Wer auf den Geschmack gekommen ist, sollte hier weiterlesen -- Achtung, viele Formeln, Diagramme und Code in C!)


Ich war zwar Mathe-LK, aber das heißt nix, weil ich mittlerweile schon wieder alles vergessen habe. :D
Meine ein, zwei Versuche mit Mode 7 waren mit wenig Erfolg gekrönt (d. h. mit gar keinem; Black Screen), aber zugegebenermaßen habe ich bisher mich noch nicht mit ganzem Herzblut daran begeben.

Ramsis hat geschrieben:
Vblank-Routine flexibler gestalten, so dass sie Hand in Hand mit der Engine zusammenarbeitet. Mach ich teilweise jetzt schon über Bits, die ich während Vblank checke, um z. B. zu bestimmen, ob ein Textstring bearbeitet werden soll, eine Tilemap aktualisiert werden muss etc.


Machs doch wie bei Treasure Conflix und stell den NMI-Vektor auf eine WRAM-Adresse, da reservierst du dann vier Byte für ein "JSL $xxxxxx". :D
Finde ich persönlich recht abgefahren, aber flexibler geht's nimmer! ;)

Ramsis hat geschrieben:
Nevikstis uralte Joypad-Routine durch meine eigene ersetzen.


Eh, schreibst du mit C oder ASM?
Warum ich mich bisher nicht an eine eigene Engine gemacht habe, war, weil ich diese Boot-Subroutine neuschreiben will. Ich benutze derzeit immer eine, die ich aus den Tutorials übernommen habe, mit denen ich gelernt habe, und deren Schreibstil macht mir mehr und mehr graue Haare.

Ramsis hat geschrieben:
SNESMod durch irgendwas Flexibleres ersetzen. MSU-1 ist toll, aber leider kaum verbreitet. Und für Soundeffekte auch nicht ideal, der SPC700 müsste also eh parallel zum Einsatz kommen ...


Damit habe ich mich das letzte halbe Jahr recht intensiv beschäftigt (also: SPC), und muss sagen: Wenn man mal den Zugang dazu gefunden hat, ist es recht easy. Und ich schätze, all diese Zusatzfunktionen wie die Square-Engine würde eine Engine für ein reguläres Game nicht brauchen.

Ramsis hat geschrieben:
Ich zum Beispiel bin kein Tutorial-Typ; lieber schnappe ich mir ein Fachbuch à la Programming the 65816, öffne parallel dazu ein Browserfenster mit nocashs Fullsnes, wurschtele drauflos und schlage alles nach, was ich nicht weiß bzw. was selbst nach hartnäckigem Herumprobieren nicht klappen will. Hat mich bisher weitergebracht als jedes SNES-Assembler-Howto, das ich früher ab und zu konsultiert habe -- nur um hinterher jedes Mal verzweifelter und ratloser zu sein als je zuvor. :D

(Fußnote dazu: Würde ich so ein Howto schreiben, so würde ich den neugierigen Leser niemals gleich zu Beginn mit den verschiedenen Adressing Modes der CPU verschrecken. Das ist schwere Kost, das kann kein Anfänger kapieren. Und das Interesse dafür kommt eh erst später -- wenn es nämlich notwendig wird, an Daten jenseits von Direct Page und ROM-Bank 0 heranzukommen.


Japp, die Tutorials, die ich um 2010/1 gefunden habe, mit denen ich auch angefangen habe, waren auch alle zum Kotzen. :D
Den wirklichen Einstieg habe ich mit bazz' Tutorials gefunden, die bei superfamicom.org konserviert sind. Die ich nach und nach auch immer schlechter fand, je mehr ich wusste, weil einfach zu viel lapidar behandelt wird, und er gleich damit anfängt, auch WLA-DX-Makros zu schreiben, statt "einfach nur" direkten Code.

Ich habe mich selbst mal an einem Tutorial probiert, aber das Weiterschreiben schiebe ich auch weiter ad infinitum, weil, meh, es gibt besseres zu tun, zumal ich nicht das Gefühl habe, dass irgendwer das, was ich bisher schrob, überhaupt von Anfang bis Ende gelesen hat. ;)

Ramsis hat geschrieben:
Womit habe ich selber angefangen? Nevikstis/bunnyboys Vblank-Routine zu zerpflücken, bis ich ihren Sinn und Zweck vollends verstanden hatte. Der damalige Erkenntnisgewinn entspricht in etwa dem Zustand des Universums jeweils vor und nach dem Urknall. :ugly:

Und womit würde ich ein SNES-Assembler-Howto beginnen? Hmmm ... gar nicht, vermutlich. :D Und wenn ich müsste? Dann wohl damit, wo ich mittels lda/sta-Combos welche Werte hinschreiben muss, damit "Hallo!" auf dem Bildschirm erscheint. Doch, das führt zum Ziel. Altnordisch lernt man innerhalb eines einzigen Semesters auch nur, indem man sich gleich in der allerersten Sitzung die "Thidrekssaga" vornimmt und einfach jedes Wort nachschlägt. :ugly: Ende der Fußnote.)


Hut ab, das klingt nach einem ziemlich blutgetränkten Einschlag mitten rein ins Thema. Ich schätze, dazu hätte ich nicht die Nerven gehabt. Mich wundert sowieso, dass ich nicht komplett wahnsinnig bei dem Kram geworden bin... aber eventuell bin ich es ja auch. :ugly:

Ich habe mein Assembler-Howto noch kleiner angesetzt: Mach den Bildschirm bunt! :ugly:
Color 0 von Palette 0 verfärben, da Tilemap und Tileset auch alles nullen sind, kann man mit zwei transferierten Bytes den ganzen Screen einfärben.

Ramsis hat geschrieben:
Davon abgesehen ist die Auswahl an Dokumentation zu SNES-Programming heute natürlich viel, viel größer und besser als noch vor drei, fünf oder auch acht Jahren. Hat nicht zuletzt auch ein gewisser lytron in irgendeinem SNES-Freaks-Forum diverse Einsteiger-Tutorials verfasst? Also, all ihr Leute mit Zeit und Ambition, nur ran an den Speck! :D


Genau! Tut was für unser Geld! :ugly:
Oder das von Piko Interaktive. :ugly:

Ramsis hat geschrieben:
Ich habe verschwiegen, dass nur der Bereich mit der Textbox die hohe horizontale Auflösung verwendet. Sehe zwar gerade, dass noch ein lda #$05 / sta $2105 in meiner Setup-Routine herumspukt, das ist aber völlig belanglos, da ich mittels HDMA am Anfang auf Mode 1 schalte und dann eben erst später auf Mode 5. Sonst wäre der reguläre Spielbildschirm in der Tat etwas beschränkt, und die Tiles übrigens auch aufwendiger zu realisieren.


Also, du hast die Map-Tilemap und die Box-Tilemap beide im WRAM liegen und HDMAst erst die erste, dann die zweite, immer im Wechsel? Holla, das stell ich mir kopfschmerzenerregend vor.

Ramsis hat geschrieben:
Falls Du Geiger's Snes9x Tracer/Debugger zur Hand hast, öffne mal das ROM damit und klicke auf "What's Used" bzw. "What's Missing", da werden dir die verwendeten BG-Modi und die HDMA-Transfers angezeigt.


Guck ich beizeiten. Ich bin gespannt. :)

Ramsis hat geschrieben:
Auf dem Mode-7-Testscreen wiederum habe ich HDMA im Moment komplett deaktiviert. Es kann aber sein, dass ich die Textbox da später auch noch anzeigen will/muss. Das wiederum würde die verfügbaren Tiles für Mode 7 noch mehr einschränken, als sie es durch die verwendeten Sprites sowieso schon sind. Aber mal schauen. ;)


Ich glaube, keins der bekannten "größeren" RPGs hat TextBoxen auf der Worldmap, oder?


Ich freu mich auf deinen nächsten Besuch hier! ^.^



_________________
pantalytron: ルトロンはくそのディスアセンブラだよ!

Perikles hat geschrieben:
Man muss sich das mal reinziehen: die Idee ist scheiße, die theoretische Ausarbeitung ist scheiße, die praktische Umsetzung ist scheiße und der so entstehende Anspruch noch beschissener.
Offline
 Profil  
 
 Betreff des Beitrags: Re: Mal was Neues von mir ...
BeitragVerfasst: 12.06.2014 18:20 
SNES-Freak
SNES-Freak
Benutzeravatar

Registriert: 27.02.2011 11:48
Beiträge: 264
+Positive Tradingpoints+: 5 von 5
Geil! Ramsis ist mal wieder am Werk!^_^ Ich finde es immer wieder faszinierend wie begabt und furchtlos du an solche Projekte herangehst (das gleiche wie mit der der Firmware für das SD2SNES).


Offline
 Profil  
 
 Betreff des Beitrags: Re: Mal was Neues von mir ...
BeitragVerfasst: 12.06.2014 18:31 
SNES-Freak
SNES-Freak
Benutzeravatar

Registriert: 29.12.2011 15:33
Beiträge: 522
Wohnort: Löwenhöhle :3
+Positive Tradingpoints+: 3 von 3
Hey, lytron!

Hui, das sind viele Fragen auf einmal. Hoffentlich übersehe ich nichts. :)

lytron hat geschrieben:
... aber stattdessen vertingel ich meine Zeit mit anderen Sachen.

lytron hat geschrieben:
... aber das Weiterschreiben schiebe ich auch weiter ad infinitum, weil, meh, es gibt besseres zu tun

Wir sind hier im Snesfreaks-Forum. Du solltest echt mal deine Prioritäten klären. :ugly: Nee, war nur Spaß. :D Aber komm, zeig mal deinen Fortschritt im Bereich SPC700-Programmierung! :pieks: Der könnte, wenn man's recht bedenkt, bei diesem Projekt ja unter Umständen, also, ich meine, ganz eventuell, nur vielleicht und mit vielen, vielen Vorbehalten ( :ugly: ) durchaus hilfreich werden. Ich sag nur nochmal: Soundeffekte! :nice:

lytron hat geschrieben:
Was ist "dynamisches Tile-Streaming"? Klatschst du die ebenfalls via HDMA in den VRAM? Wie viele HDMAs lässt du derzeit laufen!?! Und: Ist es überhaupt möglich, alle acht DMA-Channels für HDMA zu gebrauchen!?
Himmel, das klingt ziemlich klompiziert. ;)

Ist es gar nicht. :)

Aber der Reihe nach:

Im Moment komme ich noch mit zwei HDMA-Channels aus -- einer für den Screen mode, einer für den Hintergrund der Textbox. Alle acht Kanäle auf einmal zu benutzen, ist sicherlich möglich -- guck dir mal die YouTube-Videos zu d4s' kuriosem Musikspiel an, da erwähnt er etwas in der Art (für den wirklich äußerst coolen "Blättereffekt").

Tile-Daten mittels HDMA ins VRAM zu schieben, ist zwar theoretisch möglich, für meine Zwecke wäre es aber ungeeignet, weil zum einen das Timing exakt stimmen muss und zum anderen vermutlich nicht genug Zeit bliebe, um vier Tiles à 16 Bytes zu laden.

Was ich nun mit dynamischem Tile-Streaming meine, ist die Tatsache, dass ich für die Textbox-Routine die übliche Vorgehensweise komplett umgekehrt habe.

"Üblich" (d. h. sehr verbreitet) ist, dass es eine Font gibt, die du ins VRAM lädst. Dann gibt es eine gepufferte Tilemap, in die du deine ASCII- bzw. Table-Werte schreibst, damit nach dem nächsten Vblank der gesamte Text auf dem Bildschirm erscheint.

Meine Textbox dagegen hat eine fixe Tilemap, die ganz zu Anfang während Forced blank ins VRAM geschrieben wird und die ungefähr so aussieht: $22, $24, $26, ... Die Zweierschritte rühren daher, dass Mode 5 immer zwei 8x8-Tiles zu einem einzigen 16x8-Tile zusammenzieht.

Wenn ich nun Text darstellen will, setze ich ein Bit, das in Vblank gecheckt wird. Daraufhin startet eine Subroutine, die eine bestimmte Anzahl von Textzeichen (derzeit 4) als Font-Tiles ins VRAM lädt und sich dann selbst beendet. Beim nächsten Vblank sind (via Counter-Variable) die nächsten 4 Zeichen dran, und so weiter. Das Bit wird erst gecleart, wenn der "End-of-String"-Marker ($00) erreicht wird. Außerdem gibt es ein paar Steuerzeichen (z. B. $01 = neue Zeile, geplant sind außerdem Bytes für Verzögerungen etc.).

Dafür, dass nur 4 Zeichen geladen werden, gibt es zwei Gründe: Für alle 200 Zeichen auf einmal ist Vblank zu kurz, d. h. es würde nur ein Teiltext angezeigt werden (ich hab's ausprobiert: 32 Zeichen ist bei der derzeitigen Nutzung der ~8000 Vblank-Zyklen das Maximum). Der zweite Grund liegt auf der Hand: Ich will ja ohne großen Aufwand, d. h. ohne künstlich eingebaute Delays oder so, eine Laufschrift haben. ;) Die Geschwindigkeit lege ich zukünftig fest, indem ich die Anzahl der zu ladenden Zeichen ändere - wahlweise etwa 1, 2, 4 oder 6 (bzw. 8 ).

Da das Ganze unabhängig vom "normalen" Spiel-Code während Vblank abläuft, kann ich zeitgleich das Bild auf- oder abblenden, Herumscrollen, Sprites manipulieren etc. pp.

Neat, huh? :wink:

lytron hat geschrieben:
Machs doch wie bei Treasure Conflix und stell den NMI-Vektor auf eine WRAM-Adresse, da reservierst du dann vier Byte für ein "JSL $xxxxxx". :D
Finde ich persönlich recht abgefahren, aber flexibler geht's nimmer! ;)

Das ... ist ... brillant genial. :D Danke dir für den Hinweis. Das MUSS ich einfach ausprobieren. Flexibler geht's kaum, in der Tat (und in der Theorie). Yay! Danke nochmal! :applaus:

lytron hat geschrieben:
Eh, schreibst du mit C oder ASM?

Die coole Antwort wäre wohl: mit beidem. Die wahre ist: nur mit ASM. :ugly:

Ehrlich, ich hab mir diverse C-Implementierungen für SNES-Development angeschaut. Die meisten sind wirklich nett geworden und in jedem Fall gut gemeint. Aber ich hatte dabei immer das Gefühl, dass ich mir den Zugriff auf die Hardware damit um 99% verbaue -- um andererseits keinerlei Zugewinn zu haben! Denn ich habe von Kindesbeinen an einen Background in BASIC und COMAL, und in Assembler fühle ich mich mittlerweile sattelfest. In und über C/C++ weiß ich dagegen praktisch nichts. Diese Programmiersprache ist mir schon immer total fremd geblieben, trotz hehrer Bemühungen (deren Motivationsziel mir aber nie erklärt wurde und das ich deshalb auch vermutlich schlicht entbehren kann). :D

lytron hat geschrieben:
Warum ich mich bisher nicht an eine eigene Engine gemacht habe, war, weil ich diese Boot-Subroutine neuschreiben will. Ich benutze derzeit immer eine, die ich aus den Tutorials übernommen habe, mit denen ich gelernt habe, und deren Schreibstil macht mir mehr und mehr graue Haare.

Wo ist der Gegensatz? Eine Engine funktioniert auch mit einer Boot-Routine aus dem Pleistozän. Sollte sie zumindest. Wenn sie gut ist. 8)

Aber geh's doch einfach an und update die Boot-Routine. Dürfte innerhalb eines Nachmittags zu einem ziemlich coolen und vor allem schnellen Ergebnis führen. Übrigens kann ich dir nur beipflichten. Was diese Boot-Routine macht und WIE sie es macht, ist zum Teil haarsträubender Blödsinn. :pfeif:

Nur ein Beispiel, das Original missbraucht DMA-Register, um die Return-Adresse zu speichern. Das sieht exakt so aus:

  LDX $1FFD      ;we clear all the mem at one point ...
  STX $4372     ;so save the return address in a place that won't get overwritten
  LDX $1FFF
  STX $4374

[...]

  LDX $4372     ;get our return address...
  STX $1FFD
  LDA $4374
  STA $1FFF


Bei mir sehen dieselben Abschnitte mittlerweile aus wie folgt (A ist jeweils 16 bit). Die ursprüngliche 24-bit-Adresse ist unnötig, da ich die Routine innerhalb derselben ROM-Bank aufrufe.

Vorteil: Egal wo ich vorher meinen Stack hingepflanzt habe, ich kann die Routine aufrufen, ohne hardgecodete Werte abändern zu müssen -- was man ja doch allzu schnell vergisst und dann wieder mit unnötigem Debuggen büßen darf. :(

   lda 1, s            ; preserve return address (using a DMA register that won't get overwritten when WRAM is cleared)
   sta $4372

[...]

   lda $4372            ; restore return address
   sta 1, s


Abgesehen davon spare ich mit meiner Version sowohl ein paar Hardware-Zyklen als auch wertvollen (!?) ROM-Space. :wink:

lytron hat geschrieben:
Den wirklichen Einstieg habe ich mit bazz' Tutorials gefunden, die bei superfamicom.org konserviert sind. Die ich nach und nach auch immer schlechter fand, je mehr ich wusste, weil einfach zu viel lapidar behandelt wird, und er gleich damit anfängt, auch WLA-DX-Makros zu schreiben, statt "einfach nur" direkten Code.

Dazu fällt mir ein, dass jeder Neuling im Bereich SNES-Programmierung im Grunde zweigleisig fahren muss, was das Lernen angeht: Zum einen gilt es, mit Assembler und mit der Hardware vertraut zu werden (PPU-Register!). Zum anderen ist es unabdingbar, die Features des benutzten Compilers kennenzulernen und zu benutzen. Um irgendwann selber bestimmen zu können, wann man welches Feature benutzt und warum.

Ein Makro zu schreiben hat am meisten Sinn, wenn ich es mit Parametern aufrufen kann (klassisches Beispiel: "Printstring 'Hello!'") oder ich gezwungen bin, sehr kurze Code-Schnipsel immer und immer wieder auszuführen, die mit zusätzlichem jsr/rts nur unnötige Hardware-Zyklen verbrauchen würden (à la "- lda REG_ISTER / bne -"). Bei längeren Passagen, zumal ohne Parameter, empfiehlt sich dagegen eher eine Subroutine.

Leute, ich schwöre es euch: Der Quellcode der originalen PowerPak-Firmware war DIE Initialzündung für mich, um Compiler-Features verstehen und anwenden zu wollen. Der Entwickler, bunnyboy, scheint (oder schien, bis zu meinem Eingreifen) von selbigen nämlich noch nie etwas gehört zu haben: Kein Makro, keine STRUCTs weit und breit, nur hardgecodeter Schrott, wohin ich schau(t)e, und den aufzuspüren mich Tage und Wochen gekostet hat. :poeh:

lytron hat geschrieben:
Ich habe mein Assembler-Howto noch kleiner angesetzt: Mach den Bildschirm bunt! :ugly:
Color 0 von Palette 0 verfärben, da Tilemap und Tileset auch alles nullen sind, kann man mit zwei transferierten Bytes den ganzen Screen einfärben.

Nett, aber meines Erachtens kaum nützlich für Einsteiger, weil erstens Sinn und Zweck der Übung nicht klar sind (wozu auf eine bunte Fläche starren, wenn es nicht gerade moderne Kunst sein soll?) und zweitens der Lerneffekt tangential gegen Null geht. Du lernst vielleicht zwei Register so'n bisschen kennen ($2121/$2122). Das reicht aber nicht. Du brauchst 'ne Palette. Du musst akzeptieren, dass du bestimmte (Caramba: viele!) Register mit Daten bespielen und so schrittweise ihre Verwendung verstehen musst, um ein Bild auf dem Schirm anzuzeigen. :)

lytron hat geschrieben:
Also, du hast die Map-Tilemap und die Box-Tilemap beide im WRAM liegen und HDMAst erst die erste, dann die zweite, immer im Wechsel? Holla, das stell ich mir kopfschmerzenerregend vor.

Wäre es auch, wenn ich es so machen würde. :ugly: Vergiss nicht, dass die Tilemap-Adressen einen ganzen Frame lang gleich bleiben, es sei denn, ich ändere sie zwischendurch via HDMA. Und das tu ich nicht. Sondern ich reserviere einen Teil der BG2-Tilemap für den Text -- was ich mit dem Rest mache, bleibt mir überlassen. Der bleibt für Dachfirste, Baumkronen, Zeltplanen, Pavillons, whatever. :D

lytron hat geschrieben:
Ich glaube, keins der bekannten "größeren" RPGs hat TextBoxen auf der Worldmap, oder?

Spiel mal Breath of Fire 2. In der Übersetzung des d4s-Teams, versteht sich. :D

lytron hat geschrieben:
Ich freu mich auf deinen nächsten Besuch hier! ^.^

Komme leider im Augenblick aus beruflichen Gründen nicht allzu oft dazu, hier vorbeizuschauen, aber ich gelobe Besserung. Ohne Garantie. :ugly:

The Dealer of Fruit hat geschrieben:
Geil! Ramsis ist mal wieder am Werk!^_^ Ich finde es immer wieder faszinierend wie begabt und furchtlos du an solche Projekte herangehst (das gleiche wie mit der der Firmware für das SD2SNES).

Na, wenn schon mein Fernseher ein "Loewe" ist ...! :moose:

Lieben Gruß,
Ramsis



_________________
Laufende Dev-Projekte:
Furry RPG! – ein brandneues Rollenspiel für das SNES!
Aktuelle WLA-DX-Binaries für Windows und Linux
Inoffizielle Firmware für das SNES PowerPak
Offline
 Profil  
 
 Betreff des Beitrags: Re: Mal was Neues von mir ...
BeitragVerfasst: 13.06.2014 09:49 
Code Bro
Code Bro
Benutzeravatar

Registriert: 12.08.2012 20:18
Beiträge: 2665
Wohnort: ハノーファー区
+Positive Tradingpoints+: 12 von 12
Vorab die Frage: Kann ich überhaupt innerhalb von einem VBLANK den kompletten OAM und CGRAM updaten!?

Ramsis hat geschrieben:
Hui, das sind viele Fragen auf einmal. Hoffentlich übersehe ich nichts. :)


Ich will mal runterkürzen. ;)

Ramsis hat geschrieben:
Wir sind hier im Snesfreaks-Forum. Du solltest echt mal deine Prioritäten klären. :ugly: Nee, war nur Spaß. :D


Wieso? Stimmt doch. :twisted:
Allein Moogle kann mit dieser Wahrheit nicht leben. ;)

Ramsis hat geschrieben:
Aber komm, zeig mal deinen Fortschritt im Bereich SPC700-Programmierung! :pieks: Der könnte, wenn man's recht bedenkt, bei diesem Projekt ja unter Umständen, also, ich meine, ganz eventuell, nur vielleicht und mit vielen, vielen Vorbehalten ( :ugly: ) durchaus hilfreich werden. Ich sag nur nochmal: Soundeffekte! :nice:


"Programmierung" ist das falsche Wort. :D
Aber das hier könnte dir helfen, weil du damit sehen kannst, wie das in einem fertigen, funktionierenden Spiel gemacht wurde.

Ramsis hat geschrieben:
Da das Ganze unabhängig vom "normalen" Spiel-Code während Vblank abläuft, kann ich zeitgleich das Bild auf- oder abblenden, Herumscrollen, Sprites manipulieren etc. pp.

Neat, huh? :wink:


Also DAS Ganze klang kompliziert. :ugly:
Zumindest sieht man, dass du schon viel Hirnschmalz und Geteste da reininvestiert hast. Musst du dir nur überlegen, ob du irgendwie die DMA-Channels auch noch "sharen" willst, oder ob die das gesamte Spiel über für etwaige Textboxen okkupiert bleiben.

Ramsis hat geschrieben:
Das ... ist ... brillant genial. :D Danke dir für den Hinweis. Das MUSS ich einfach ausprobieren. Flexibler geht's kaum, in der Tat (und in der Theorie). Yay! Danke nochmal! :applaus:


Joa, musst nur wissen, ob du das auch wirklich brauchst. Damit verpulverst du ja wieder nützliche WRAM-Bytes. ;)
Shadowrun, glaube ich, hat da eine "Kompromisslösung": Ein fixer Teil, und das Ende des Handlers ist ein JMP-Befehl, der auf den Inhalt eines WRAM-Doppelbytes zielt. D. h., du kannst den Doppelbyte immer entsprechend bearbeiten, und wenn nix is', zielste ihn einfach auf ein RTI.

Ramsis hat geschrieben:
Die coole Antwort wäre wohl: mit beidem. Die wahre ist: nur mit ASM. :ugly:


An meine Brust, mein Bruder im Geiste! :Applaus:
Ich bin auch ASM treu geblieben, u. a. weil ich zu faul bin, mich in C reinzuwurschteln, weil ich fürchte, dass das bei mir mit dem Verständnis sehr, sehr lange dauern wird.

Ramsis hat geschrieben:
Wo ist der Gegensatz? Eine Engine funktioniert auch mit einer Boot-Routine aus dem Pleistozän. Sollte sie zumindest. Wenn sie gut ist. 8)


Einmal aus einem "psychologischen Waschzwang" heraus: Ich mag es nicht, wenn ich weiß, dass alles auf so einem schmuddeligen Dingens fußt. Außerdem fehlt mir da ein bisschen die Kontrolle über alles (z. B. die Position des Stacks), und es nervt mich, dass die Automatisch an den Anfang der ROM geknallt wird, das macht das Suchen mit dem Hexeditor so schwierig.

Ramsis hat geschrieben:
Aber geh's doch einfach an und update die Boot-Routine. Dürfte innerhalb eines Nachmittags zu einem ziemlich coolen und vor allem schnellen Ergebnis führen.


Jaaaa.... nee. Ich dachte mir auch immer: Das kriegste an einem halben Tag gewuppt (selbst ich, mit meinem Tempo...). Aber nee, da gabs dann immer tausend andere Sachen, die ich lieber gemacht habe. Zumal auch das Thema etwas "zu abstrakt" ist: Ich habe am Ende des Nachmittags keine sichtbaren, greifbaren Erfolge. Stattdessen mach ich lieber was, wo ich am Ende weiß: Da habe ich dann andere bunte Bildchen, die vorher nicht da waren. ;) Dazu später mehr, wenn es um die Tutorials geht. ;)

Ramsis hat geschrieben:
Übrigens kann ich dir nur beipflichten. Was diese Boot-Routine macht und WIE sie es macht, ist zum Teil haarsträubender Blödsinn. :pfeif:

Nur ein Beispiel, das Original missbraucht DMA-Register, um die Return-Adresse zu speichern.


Ja, stimmt, als ich mal meinen Stack für eine File für mein Tutorial verschoben habe, musste ich da lange suchen, warum der Kack nicht funktionierte. Stackinhalte hardwiren. Ich schlage mir mit Filzpantoffeln mit Hardgummisohle gegen den Kopf (Also, sinngemäß. Mach ich, wenn ich zu Hause bin. Ganz bestimmt).
Genauso doof finde ich es, dass er seinen Schmarrn an den Anfang der ROM forcet, nur weil er ein JML $008000 macht. Ganz zu schweigen davon, dass er ein Makro geschrieben hat, das de facto nix anderes macht als eine Subroutine aufzurufen... ach, egal.

Ramsis hat geschrieben:
Ein Makro zu schreiben hat am meisten Sinn, wenn ich es mit Parametern aufrufen kann (klassisches Beispiel: "Printstring 'Hello!'") oder ich gezwungen bin, sehr kurze Code-Schnipsel immer und immer wieder auszuführen, die mit zusätzlichem jsr/rts nur unnötige Hardware-Zyklen verbrauchen würden (à la "- lda REG_ISTER / bne -"). Bei längeren Passagen, zumal ohne Parameter, empfiehlt sich dagegen eher eine Subroutine.


Seit ich so langsam dahinter gekommen bin, wie die Dinger funktionieren, bin ich mehr und mehr versucht, sie auch zu nutzen. Allerdings müsste ich erst gucken, wie ich den Kram in eine eigene ASM-File ausgelagert bekomme, damit es übersichtlich bleibt. Die Übersichtlichkeit hat mich bisher davon abgehalten, mich näher damit zu beschäftigen. Und die Tatsache, dass das Experimentieren damit wieder einen Nachmittag ohne Ergebnis zur Folge hätte. ;)

Ramsis hat geschrieben:
Nett, aber meines Erachtens kaum nützlich für Einsteiger, weil erstens Sinn und Zweck der Übung nicht klar sind (wozu auf eine bunte Fläche starren, wenn es nicht gerade moderne Kunst sein soll?) und zweitens der Lerneffekt tangential gegen Null geht. Du lernst vielleicht zwei Register so'n bisschen kennen ($2121/$2122). Das reicht aber nicht. Du brauchst 'ne Palette. Du musst akzeptieren, dass du bestimmte (Caramba: viele!) Register mit Daten bespielen und so schrittweise ihre Verwendung verstehen musst, um ein Bild auf dem Schirm anzuzeigen. :)


Öhm. Jein. Da kommt wieder die Sache mit den "ergebnislosen Nachmittagen" zum Tragen: Wir beide unterscheiden uns dadurch, dass du wesentlich besser den "harten Einstieg" verträgst als ich. Allein, wie du und wie ich das SNES-Programmieren gelernt haben, unterstreicht das.
Demgemäß sehe ich meinen Versuch mit erstmal-Bildschirm-einfärben als guten Einstieg für Leute wie mich, weil man damit schnellstmöglich schon einmal irgendwas selbstständig für das SNES geschafft hat. Das ist nur ein Leckerli, ein Anreiz weiterzumachen. Und, in Anbetracht, dass mein Tutorial sich an totale Noobs richtet und die demgemäß bis dahin schon einiges an Basiswissen gewälzt haben, sicherlich auch nötig.



_________________
pantalytron: ルトロンはくそのディスアセンブラだよ!

Perikles hat geschrieben:
Man muss sich das mal reinziehen: die Idee ist scheiße, die theoretische Ausarbeitung ist scheiße, die praktische Umsetzung ist scheiße und der so entstehende Anspruch noch beschissener.
Offline
 Profil  
 
 Betreff des Beitrags: Re: Mal was Neues von mir ...
BeitragVerfasst: 13.06.2014 18:29 
SNES-Freak
SNES-Freak
Benutzeravatar

Registriert: 29.12.2011 15:33
Beiträge: 522
Wohnort: Löwenhöhle :3
+Positive Tradingpoints+: 3 von 3
Hey, lytron!

lytron hat geschrieben:
Vorab die Frage: Kann ich überhaupt innerhalb von einem VBLANK den kompletten OAM und CGRAM updaten!?

OAM und CGRAM sind zusammen nur 1056 Bytes groß, insofern: Ja, könntest du. :) (Vgl. Neviksti, der lädt über diverse DMAs 2592 Bytes, wenn ich recht sehe.) Musst du aber i. d. R. nicht -- wer braucht schon jedes Frame eine komplett neue Farbpalette? Das OAM dagegen musst du in der Tat für jedes Frame aktualisieren, falls du deine Sprites auch bewegen willst. ;)

lytron hat geschrieben:
"Programmierung" ist das falsche Wort. :D
Aber das hier könnte dir helfen, weil du damit sehen kannst, wie das in einem fertigen, funktionierenden Spiel gemacht wurde.

Werde ich mir mal anschauen, danke! :)

lytron hat geschrieben:
Musst du dir nur überlegen, ob du irgendwie die DMA-Channels auch noch "sharen" willst, oder ob die das gesamte Spiel über für etwaige Textboxen okkupiert bleiben.

Der Farbverlauf erstreckt sich auch auf das gesamte Feld oberhalb der Textbox, insofern ist dieser Channel ja nicht "verschwendet". ;) Den Mode-Channel brauche ich evtl. nicht ständig, sondern nur, wenn eine Textbox aufgeht. Ansonsten könnte man in dem Bereich auch Statusinformationen o. ä. unterbringen. Da lege ich mich aber mal lieber noch nicht fest. :)

lytron hat geschrieben:
An meine Brust, mein Bruder im Geiste! :Applaus:

*Flausch* :-D

lytron hat geschrieben:
mag es nicht, wenn ich weiß, dass alles auf so einem schmuddeligen Dingens fußt.
(...)
Ich habe am Ende des Nachmittags keine sichtbaren, greifbaren Erfolge. Stattdessen mach ich lieber was, wo ich am Ende weiß: Da habe ich dann andere bunte Bildchen, die vorher nicht da waren. ;)

Ein Loch ist im Eimer, Karl-Otto. :ugly:

lytron hat geschrieben:
Außerdem fehlt mir da ein bisschen die Kontrolle über alles (z. B. die Position des Stacks), und es nervt mich, dass die Automatisch an den Anfang der ROM geknallt wird

Na, also das beides zu ändern, ist aber wirklich kein Aufwand. :wink: Einfach die entsprechende Section vom FORCE befreien (löschen reicht, oder halt durch SEMIFREE o. ä. ersetzen) und irgendeine andere Section, die du lieber am Anfang sehen möchtest, vorziehen. (Ist bei meinen eigenen WIP-Homebrews immer eine Art Version-String. :) ) Und den Stackpointer zu verschieben ... das überlass ich jetzt mal dir. :ugly:

lytron hat geschrieben:
Genauso doof finde ich es, dass er seinen Schmarrn an den Anfang der ROM forcet, nur weil er ein JML $008000 macht.

Ersetze selbiges durch ein jsr InitSNES (der Name steht ja schon da), und das RTL am Ende der Routine durch ein rts. Done. ;)

lytron hat geschrieben:
Ganz zu schweigen davon, dass er ein Makro geschrieben hat, das de facto nix anderes macht als eine Subroutine aufzurufen... ach, egal.

Darüber habe ich mich auch gewundert. Die Initialisierung erfolgt im Grunde nur ein einziges Mal -- da ein Makro zu verwenden, ist ungefähr so nützlich, wie für ein zerbrochenes Streichholz den Sperrmüll zu bestellen. :ugly:

lytron hat geschrieben:
Allerdings müsste ich erst gucken, wie ich den Kram in eine eigene ASM-File ausgelagert bekomme, damit es übersichtlich bleibt. Die Übersichtlichkeit hat mich bisher davon abgehalten, mich näher damit zu beschäftigen. Und die Tatsache, dass das Experimentieren damit wieder einen Nachmittag ohne Ergebnis zur Folge hätte. ;)

Prof. Dr. Ramsis empfiehlt: In die Hauptdatei deines Projekts, wo du auch den SNES-Header etc. definierst, möglichst weit vorne ein ".INCLUDE macros.asm" reinschreiben, alle Makros in macros.asm packen, done. :D

lytron hat geschrieben:
Demgemäß sehe ich meinen Versuch mit erstmal-Bildschirm-einfärben als guten Einstieg für Leute wie mich, weil man damit schnellstmöglich schon einmal irgendwas selbstständig für das SNES geschafft hat. Das ist nur ein Leckerli, ein Anreiz weiterzumachen. Und, in Anbetracht, dass mein Tutorial sich an totale Noobs richtet und die demgemäß bis dahin schon einiges an Basiswissen gewälzt haben, sicherlich auch nötig.

I see your point. Trotzdem -- wann genau (außer bei einem HDMA-Farbverlauf) kommst du schon in die unangenehme Lage, den Main Backdrop mit einer anderen Farbe als schwarz einfärben zu müssen? Beim MegaDrive, okay, da mag man das schon (mehr als) einmal gesehen haben. Beim SNES nicht; mir fällt jedenfalls kein offizielles SNES-Spiel ein, wo das der Fall wäre. Insofern führt die Übung mit dem flächendeckend eingefärbten Screen m. E. schlicht meilenweit am Ziel vorbei. :|

Lieben Gruß,
Ramsis



_________________
Laufende Dev-Projekte:
Furry RPG! – ein brandneues Rollenspiel für das SNES!
Aktuelle WLA-DX-Binaries für Windows und Linux
Inoffizielle Firmware für das SNES PowerPak
Offline
 Profil  
 
 Betreff des Beitrags: Re: Mal was Neues von mir ...
BeitragVerfasst: 17.06.2014 07:27 
Moderator
Moderator
Benutzeravatar

Registriert: 13.06.2006 16:11
Beiträge: 345
+Positive Tradingpoints+: 1 von 1
Finde ich sehr gut, viel Erfolg!



_________________
Bild Bild
Offline
 Profil  
 
 Betreff des Beitrags: Re: Mal was Neues von mir ...
BeitragVerfasst: 17.06.2014 18:22 
SNES-Freak
SNES-Freak
Benutzeravatar

Registriert: 29.12.2011 15:33
Beiträge: 522
Wohnort: Löwenhöhle :3
+Positive Tradingpoints+: 3 von 3
d4s hat geschrieben:
Finde ich sehr gut, viel Erfolg!

Danke dir -- über positives Feedback speziell von dir freue ich mich (als "kleines Licht" in der SNES-Homebrew-Szene) natürlich ganz besonders! :nice:

Gestern hab ich übrigens die HDMA-Table für den Farbverlauf im Hintergrund überarbeitet -- und bei der Gelegenheit gleich einen neuen Background für "feindselige" Gesprächspartner (think Tales of Destiny) hinzugefügt. Sieht im Moment ungefähr so aus:

Bild

Außerdem bin ich derzeit sehr rege mit einem sehr fähigen Pixel Artist im Dialog -- und sehr zuversichtlich, dass sich aus diesem Kontakt eine fruchtbare Zusammenarbeit ergeben wird. :D

Lieben Gruß,
Ramsis



_________________
Laufende Dev-Projekte:
Furry RPG! – ein brandneues Rollenspiel für das SNES!
Aktuelle WLA-DX-Binaries für Windows und Linux
Inoffizielle Firmware für das SNES PowerPak
Offline
 Profil  
 
 Betreff des Beitrags: Re: Mal was Neues von mir ...
BeitragVerfasst: 18.06.2014 16:31 
SNES-Baby
SNES-Baby

Registriert: 23.12.2011 12:49
Beiträge: 43
+Positive Tradingpoints+: 1 von 1
Ein wirklich sehr interessantes Projekt. Ich bin gespannt wie es weitergeht :)


Offline
 Profil  
 
 Betreff des Beitrags: Re: Mal was Neues von mir ...
BeitragVerfasst: 19.06.2014 09:55 
SNES-Programmer
SNES-Programmer

Registriert: 27.01.2013 13:10
Beiträge: 229
+Positive Tradingpoints+: 5 von 5
@lytron : ich hab dein tutorial nicht nur gelesen sondern auch nachvollzogen bis mich dann plötzlich weltliche verpflichtungen in beschlag genommen haben. Also 85% deiner arbeit war schon jetzt nicht ganz umsonst. wenigstens bei mir war der Ansatz des BG einfärbens funktiiniert.

@ramsis super projekt! Ich mag opensource :)


Offline
 Profil  
 
 Betreff des Beitrags: Re: Mal was Neues von mir ...
BeitragVerfasst: 19.06.2014 17:14 
SNES-Freak
SNES-Freak
Benutzeravatar

Registriert: 29.12.2011 15:33
Beiträge: 522
Wohnort: Löwenhöhle :3
+Positive Tradingpoints+: 3 von 3
Danke euch beiden! :nice:

Passend zum Feiertag gibt's ein neues Build: Mit den L/R-Schultertasten könnt ihr jetzt zwischen 17 verschiedenen (Demo-)Texten umschalten, inklusive jeweils passendem Textbox-Hintergrund. :)

Bild

Behobene Fehler: Korrekte Bildschirmhelligkeit; die Lautstärke-Einstellung mittels Steuerkreuz funktioniert jetzt, wie sie soll; außerdem könnt ihr die Musik mit B stoppen und mit Y neu starten (gilt nicht für den Mode7-Testbildschirm).

Download:
http://manuloewe.de/snestuff/projects/furryrpg_build_00157.7z

Das nächste Build wird voraussichtlich schon Playfield-Grafik enthalten. :D

Lieben Gruß und bis dann,
Ramsis



_________________
Laufende Dev-Projekte:
Furry RPG! – ein brandneues Rollenspiel für das SNES!
Aktuelle WLA-DX-Binaries für Windows und Linux
Inoffizielle Firmware für das SNES PowerPak
Offline
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
 Seite 1 von 16 [ 237 Beiträge ]  Gehe zu Seite 1, 2, 3, 4, 5 ... 16  Nächste

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:

Zurück zu Development