TVTower / TVTower

A tribute to Mad TV. Written in BlitzMax, Lua and a bit of C.
http://www.tvtower.org
Other
106 stars 35 forks source link

Programm-abhängige Fernsehbilder #1140

Open nittka opened 3 months ago

nittka commented 3 months ago

Im Forum wurde nach der Möglichkeit gefragt, in der Datenbank Filmbild-Dateien definieren zu können, die dann bei der Ausstrahlung angezeigt werden. (https://www.gamezworld.de/phpforum/viewtopic.php?id=14098)

Eine Definition innerhalb der Standarddatenbank scheint mir dafür ungeeignet. Da die meisten Bilder rein nutzerspezifisch sein dürften (also nicht Teil der offiziellen Lieferung), müssten lokale Anpassungen immer wieder neu gemacht werden, da man sonst entweder offizielle Erweiterungen der DB nicht mitbekommt oder immer die eigenen Filmbilder wieder verloren gehen. Das spielt etwas in das Thema #971 und #1046 rein. Partielles Überschreiben, Erweitern ist aktuell noch nicht wirklich unterstützt. Wenn das Thema nicht grundsätzlich bearbeitet wird, könnte man eine dedizierte ProgrammePicture-Datei erlauben, in der für die jeweilte GUID das zu verwendende Bild hinterlegt ist.

Eine Low-Cost-Lösung wäre möglicherweise, einfach nur bei der Auswahl des Programmsprites zu prüfen, ob eins mit der passenden GUID registriert ist und als Fallback das Genre zu verwenden. Wenn man pro Film (Serie) eine Bilddatei hat, könnte man in interface.xml einen passenden Abschnitt ergänzen (oder eine eigene entsprechende xml-Datei in resources.xml) registrieren

<spritepack name="gfx_interface_tv_programme_indi">
    <url>res/user/gfx/programme_indi.png</url>
    <children>
        <child name="gfx_interface_tv_programme_<GUID_indi1>"         x="0" y="0" w="110" h="85" />
        <child name="gfx_interface_tv_programme_<GUID_indi2>"         x="0" y="0" w="110" h="85" />
    </children>
</spritepack>

Für Eigenproduktionen funktioniert das natürlich nicht mehr so einfach, da man da keinen Einfluss auf die GUID hat.

Ich habe mich noch nicht mit der Speicherverwaltung beschäftigt. Werden immer alle Sprites geladen und liegen permanent im Speicher oder werden sie nach Bedarf geladen und Speicher wieder freigegeben. Bei einem enthusiastischen Spieler mit hunderten eigener Filmbilder, könnte es ggf. Probleme geben.

scr0llbaer9000 commented 3 months ago

Am besten wär wohl, wenn man die Bilder einfach in einem Verzeichnis irgendwo unter /res ablegen kann, das nicht stört (also man sollte keine vorhandenen Ressource-Files editieren müssen). Da kann man dann Unterordner anlegen mit den Film- oder Drehbuch-GUIDs als Ordnernamen (EDIT: oh, auch für Werbung, das wurde auch gewünscht). Wenn mehrere Bilder drin liegen, werden die als Slideshow angezeigt, während der Film läuft. Bei nur einem Bild kann man vielleicht auch direkt die Datei [guid].jpg anlegen ohne eigenen Ordner.

Analog auch für die Musik. Hier sollte allerdings nicht wie bei der Bilder-Slideshow per fixem Zeitintervall durchrotiert werden, sondern ein Stück sollte komplett nach dem anderen abgespielt werden. Wenn die Stücke zu lang sind, ist es das Problem des Users, der muss dann die Musik selber so zusammenscheiden wie er will. Die Musik läuft dann nur solang der Film läuft, bei Werbung (sofern keine eigenen spezifischen Werbe-Jingles existieren) oder News wird dann wieder zum normalen Soundtrack cross-gefadet (fast iMUSE-mäßig ☺️).

Hmm On-Demand-Loading sollte nicht so problematisch sein heutzutage? Jeden Tag um Mitternacht kann der Cache dann geleert werden, da gibt's eh bereits 'nen kleinen "Ruckler", und sowas wird das Kraut dann auch nicht fett machen.

pauldim commented 3 months ago

Ich freue mich, dass Sie diese Verbesserung in Angriff nehmen.

nittka commented 2 months ago

Slide-Show ist massiver Implementierungsaufwand. Aktuell wird bei jedem Update (dutzende Male pro Sekunde) entschieden, welches Bild angezeigt wird. Praktisch wird also permanent neu berechnet, welches Bild gerade im Fernseher angezeigt wird.

Ich habe keine Ahnung, wie das Speicher-Management bezüglich der Sprites aussieht. Da muss Ronny was dazu sagen. Technisch geht bestimmt vieles, aber wenn die aktuelle Infrastruktur darauf ausgelegt ist, dass alle registrierten (und aktuell häufig verwendeten) Sprites permanent im Speicher gehalten werden, ist es vielleicht möglich aber "teuer" einen Umbau vorzunehmen, der tausende (vielfach unbenutzt oder selten gebrauchte) Bilder vorzuhalten oder aufzuräumen.

Ausprobiert habe ich, dass png und jpg unterstützt werden. Am besten die Dateien liegen schon in der richtigen Größe vor, denn selbst mit Angabe der Bildgröße in der xml-Datei wird nicht alles wie erwartet skaliert...

GWRon commented 2 months ago

Derzeit wird jedes Sprite (bzw die Textur/das Bild dahinter) eingelesen und im RAM vorgehalten und gleichzeitig wird im VRAM die Textur hochgeladen (also zur GPU). Beim Rendern der Bilder wird die GPU-Textur dann nur noch benutzt und es muss nicht immer erneut "hochgeladen" werden.

Bei Animationen, Slides, ... wären dies natürlich viele Bilder die immer vorgehalten werden müssten. Das ist eindeutig "zu viel".

Um so einen "Slide-Mechanismus" bereitzustellen, bedarf es einer neuen "Sprite-Klasse". Eine, die das Basisbild ("Genrebild") referenziert bzw als Fallback nutzt. Gleichzeitig muss es einen Ressourcenloader (den gibt es ja schon) beauftragen, dass es gerne folgende "x Bilder" eingeladen haben will (dann sind die jpg/png... schon mal eingeladen). Dieser Ressourcenloader läuft in einem eigenen Thread und blockiert somit nicht das Spiel.

Sobald die Bilder (bzw die TPixmaps - also nur die "Bilddaten im RAM", nicht im VRAM) geladen würde, kann der Mainthread (der hat Zugriff auf den VRAM...) die Texturen zur GPU schicken und ab dann ist es nutzbar.

Damit wir nicht alles ewig "vorhalten" (im Speicher) muss allerdings an irgend einer Stelle "aufgeräumt" werden. Wir könnten das abstrahieren, in dem es eine Klasse gibt, die einfach nur ein TV-Bild-Sprite als "Field" und im Falle von "Slideshow" waere es dann eben das "TV-Slideshow-Bild-Sprite". Bei jedem Programmwechsel wird eine neue Instanz der Klasse angelegt - und somit bei erneutem Wechsel vom GarbageCollector irgendwann "eingesammelt". Im Falle der normalen TV-Bild-Sprites passiert dann nix (da die noch in der Registry referenziert werden). Die "TV-Slideshow-Bild-Sprites" hingegen räumen sich dann automatisiert auch auf/werden geloescht und die zugehoerigen Texturen usw fliegen aus dem RAM/VRAM. Heisst aber, dass immer alles aus einer Slideshow "neugeladen" wird - auch wenn es vorher schon geladen war. Ja, das kann man dann noch mit einem "lastUsed"-Buffer umgehen (speichere die letzten X Slideshows...).

pauldim commented 2 months ago

A packet of images of movies and commercials in the link. We could use them. http://pd.net.pl/ADVERTISIMENTS.zip http://pd.net.pl/MOVIES.zip

I suggest giving images in the IMG directory and writing:

example500.jpg. would not be considered. When changed to ` ` it would replace the default theme with the program image - if there was one.
scr0llbaer9000 commented 2 months ago

About the ads, as mentioned in the forum, I find these images too polished and "professional" for the art style of the game. Sure, we can't include those in the official release anyway because of the real brands, but I guess a main "inofficial" art pack downloadable somewhere in the internet might become the standard eventually.

The movie images seem fine so far.

But in both cases I'm also wondering about color. Should they be displayed in color? Also a matter of taste perhaps, but the design was black-and-white already in Mad TV for a reason I think, the color might be too distracting and not fitting the art style. (Or does the game turn them into black and white already anyway? In that case the source material also should be in black and white to save space).

Then you also have movie posters. These should be displayed when browsing the films in the film agency I think, and that's an additional feature request I guess. I think this was actually also requested a long time ago on the forums. These definitely can be in color then, for my taste.

(Not to mention that a lot of these films aren't even in the game yet, but we're getting there.)

pauldim commented 2 months ago

As for ads - after all, we can use various images without the trademarks of the companies in question in the official version. The point is that there should be variety of display on the screen. Because this is the essence of the game. So that we watch television - sort of :) It is possible, for example, in a toothpaste commercial to give a picture of toothpaste, a cup, but without trademark names. If you implement this, I can pore over the relevant images.

pauldim commented 2 months ago

As for the programs - you have implemented such a cool flashing of the TV screen, so the color of the picture will not strongly interfere with the perception of the game. For me, this functionality is the most important and I would prefer it in color. You have a lot of old movies and they are in black and white. The only thing that worries me is that this will probably be difficult to implement, due to the resources and speed of the game. As I said before, this is for me and probably not only for me the most important functionality. As for the posters, it's not some super important thing. We have well-described programs in the film agency and it is ok. With posters it would be great. Beautification of the game. Just would the resources be enough? I edit the program.xml file then I know how many there are. Shock. There are a bunch of them. I need another week, to complete the translation. You have a great deal of old videos that I didn't even know about. :)