If you start a new game design, there is always the same old question: will it be class based or skill based. If it is class based, then players usually select their class at the start. They level in the class using class equipment doing class specific quest lines. Finally they end up at the level cap being the best skilled and equipped tank, damage dealer, or healer. But a priest always remains a priest. It won't ever be able to use plate armor. This would make the priest uber. The class system makes balancing easier.
An open skill system on the other hand allows anyone to be anything provided the player invests the time. I can choose an area effect damage dealer career specializing in smart bombs and cruise missiles. A year later the same character can be a maxed out healer by pushing repair drones around while the battle rages. Given the time, you can be anything and a combination of it. This makes balancing more difficult. Still, there are means to overcome the problems.
Skill based systems work well. They offer more freedom to players. Freedom is the right to choose, and the burden. Skill systems often appear complex to newbies, because there are so many options. A class system might be easier, because the career path is clear.
So, that's that.
Recently I read a player complaining, that he had to sell his sword and get a new one in order to progress. He asked why the sword does not grow and get better so, that he could keep it while leveling up. The sword could get more rune sockets and other upgrades over time. It could have a name like a pet and grow with the character.
This is a great idea.
What about omitting the character leveling at all. We could skill and level the items only. Skilling items would combine class and skill systems. No need to choose a class, because you are choosing an item. The item has a type, which works like a character class. So the simplicity of a class system is built in. On the other hand you are free to choose items. You can train items (like pets) and skill items to high levels. You can get very good items of any type, given time and money. This is very much like a skill system where you can specialize in anything you want, only that you have specialized items. Still the character counts. If items are bound to the character (e.g. on pickup), then the player is bound to the character. Only this character can use a specific item. The skilled item is perceived as a part of the character. It defines the character class and at the same time it is exchangable for another item with a different specialization. Transferable items may even be used to transfer skills between characters. Sword sharper might be a profession much like a beast master. In other words: everything is a pet, even your sword. There is no difference between feeding the pet with expensive food and sharpening the sword regularly with an expensive grindstone. Both will perform badly if you do not care.
The item skilling system lets us even adjust the death penalty. Death penalty is a hot topic in game design like the skill/class question. If the death penalty is too low, then people risk to much and never really feel the danger. In recent games death is a minor inconvenience, a waste of a few minutes at most. Some game theories say, that the best games in terms of immersion have permanent death. But being set back by months or years because of a lost fight is a major annoyance and not suitable for the mainstream. The truth probably lies somewhere in between. If the pirates attack, then you should feel you heart beat, because you have much to loose. If you finally loose, then not everything should be lost. The publisher of the game is afraid, that you switch to another game instead of starting over from square one. The truth is probably somewhere in between.
If items (pets, robots, drones) fight and if they loose a fight, then they might be lost. This might be a severe loss, because the item has been skilled and was expensive in terms of time and/or money. Still the loss might not be fatal, because the owner might be able to save the upgrades. Maybe it's not only the sword that was upgraded, but the plugged rune. Maybe the owner can save the rune, but looses the sword. The really important (skilled and named) item might be not the sword itself, but the forge. Maybe the forge has upgrades and produces high-end swords. Swords need expensive resources, but after all they are consumables. The forge with all it's upgrades might be the important item. Maybe even the forge is a consumable. It's expensive, but the real value is in the forge's tools. You could loose swords regularly. If someone attacks the forge, you could loose the forge (ouch, the forge ought to be protected, maybe in a guarded industrial park). But if you can save some tools before the forge blows up, then you can plug them into a new forge to produce the same high-end swords as the old forge.
With items, the death penalty can be adjusted easily. An early design decision is not required. No cementries, where you re-appear, no cover story with clones and such, to make the death penalty reasonable. The true beauty of an item skilling system is that the game designer can defer decisions. This makes game design more flexible and error tolerant without drastic changes.
_happy_designing()
25. Dezember 2008
Skilling Items
Labels: Gamedesign, Games
2. Dezember 2008
Windows Unicode
Der Windows Kernel ist komplett Unicode, und zwar immer 2 Byte, nämlich "unsigned short". Das hat die Portierung von ASCII zu Unicode und paralleles Programmieren von ASCII und Unicode Programmen erleichtert. Man programmiert alles in C++ Macros mit TCHAR als Datentyp und der Compiler macht entweder ASCII (char) oder Unicode (WCHAR).
Soweit so gut. Aber wenn man plattformübergreifend programmieren will, also das gleiche auch auf Mac/Linux kompiliert, kann man TCHAR nicht verwenden. Auf Unix gibt es nur UTF-8. Viele Open Source Libraries sind auch nur in UTF-8, manche in ASCII, aber fast keine in Windows Unicode.
Ich sage: WCHAR war ein Fehler. Sie hätten den Kernel in UTF-8 machen sollen. WCHAR ist nicht wesentlich schneller als UTF-8, ausser, wenn man in langen Texten einen Buchstaben sucht, aber wann macht man das schon und wenn kann man es auch bei UTF-8 effizient hinbekommen. Es ist auch nicht wirklich richtig einfach zwischen ASCII und Unicode umzuschalten. Die "Einfachheit" von TCHAR erkauft man durch viele C++ Macros, viel Disziplin beim Programmieren und doppeltes Testing.
Ich programmiere jedenfalls auch auf Windows in UTF-8. Die Stringklase macht UTF-8. Wenn man das WinAPI bedient, dann wird in Windows Unicode gewandelt. Erstaunlicherweise hält mich jeder gestandene Windows Programierer für verrückt, manche sogar für unfähig, unerfahren, nixblickend. Alle meinen es echt gut und wollen mir erklären, wie man auf Windows "richtig" programmiert: WCHAR für interne Verarbeitung und UTF-8 für Datenaustausch, ich weiss. Ständig konvertieren soll toll sein? Warum nicht immer UTF-8 und nie konvertieren, dabei auch noch mit anderen Plattformen und Libraries kompatibel sein?
Ein deutliches Indiz dass was faul ist, ist dass der NT Kernel ursprünglich auf genau 2 Byte pro Buchstabe festgelegt war. Das nennt sich dann UCS-2. Später hat man das umdefiniert zu UTF-16, was soviel heisst wie: ein Buchstabe hat 2 oder 4 Byte. Damit entfällt die feste Länge und praktisch der gesamte TCHAR Mechansimus ist ad absurdum geführt. UTF-16 ist für UCS-2 genau das gleiche wir UTF-8 für ASCII. Wenn man von UCS-2 auf UTF-16 wechselt, dann hätte man auch gleich von ASCII auf UTF-8 wechseln können ohne den unglaublich aufwendigen Umweg über WCHAR.
Ich weiss was alle denken, was richtig wäre auf Windows, aber ich glaube trotzdem dass da jemand anders mal einen dicken Denkfehler gemacht hat und alle Windows Programierer machen seit 15 Jahren mit.
_happy_coding()
30. November 2008
Solarenergie aus dem Weltraum
Das Thema geht ja immer mal wieder durch die Presse: man macht kilometergroße Solarsatelliten und strahlt die Energie per Mikrowelle zur Erde. Ist teuer wegen den Startkosten, aber es gibt immer wieder Vorschläge, die behaupten es ist finanzierbar. Und wenn dann alle Energieprobleme gelöst sind, kann man es sich ja auch was kosten lassen.
Kann ja sein, aber irgendwas ist daran komisch.
Der Punkt ist: die Solarsatelliten erzeugen Strom, der zur Erde tranportiert werden muß. Kabel geht nicht. Aber Mikrowellen kann man einfach erzeugen und ziemlich effizient wieder einfangen mit sogenannten Rectennas.
Nun haben aber manche Leute Angst, dass der Mikrowellenstrahl "abhauen" könnte und Leute in Städten röstet oder dass Vögel durchfliegen und gebraten werden. Vom Waffenpotential mal ganz zu schweigen. Deshalb fächert man den Mikrowellenstrahl so weit auf, dass er keinen Schaden (respektive Kriegsnutzen) anrichten kann. Er hat dann etwa die Energiedichte von normaler Sonnenstrahlung. Das ist dann für alle verständlich, weil Vögel ja sonst auch kein Problem mit der Sonne haben.
Für 1 Gigawatt, das entspricht etwa einem Kernreaktor, braucht man ein 1 km großes Feld von Empfangsantennen. Kann man machen, ist sicher nicht billig. Aber was mich vor allem wundert: warum fängt man nicht gleich Sonnenstrahlung auf dem Boden ein, statt Sonnenstrahlung im Weltraum, dann per Mikrowelle zur Erde und auf dem Boden Mikrowelle einfangen. Wenn die Leistungsdichte des 1 km breiten Mikrowellenstrahls so ist, wie die Sonnenstrahlung dann kann man doch gleich die Sonnenstrahlung einfangen. Die Sonne liefert ca. 1 kW/qm. Das nennt man Solarkonstante. Genauer: 1,37 kW +/- 5% pro Quadratmeter. Aber 1 kW reicht als Abschätzung.
Und siehe da, 1 kW/qm multipliziert mit 1 Quadratkilometer Empfangsfläche ist genau 1 Gigawatt. Natürlich hat man Nacht und mal Wolken, aber statt das Zeug ins All zu transportieren kann man auch einfach 4 mal so viele Solarkollektoren bauen. Für den Preis des Transports bekommt man sicher 4 mal so viele Solarzellen oder Spiegel. Kommt noch dazu, dass man auf der Erde nur auf Energieeffizienz achten muß, im Weltraum aber vor allem auf Gewicht. Da meistens leichter=teurer kann man sich auch deswegen mehr Quadratkilometer auf der Erde leisten.
Dass mir jetzt keiner sagt man muß Platz sparen. Platz ist genug da. Und zwar genau dort wo er billig ist und die Sonne ohne Wolken brennt: in der Wüste. Auch die Mikrowellenempfänger würde man ja wohl in der Wüste bauen. Jedenfalls abseits von Städten und da wo keiner jammert, wenn das Gemüse mal ausversehen Mikrowelle abbekommt, d.h. nicht in der Kulturlandschaft. Berge sind auch unpraktisch.
Bei so attraktiven Kriterien wie "flach, billig, leer, trocken" bleibt auf der Erde nur die Wüste. Es gibt Millionen Quadratkilometer Wüste. Nevada reicht für die USA. Ein tausendstel Sahara reicht für allen Strom in Europa. Kurze Rechnung: 1 Atomkraftwerk bringt pro Reaktor ca. 1 Gigawatt. Die Sonne pro Quadratkilometer auch. Die Sahara hat 9 Mio. Quadratkilometer. Das wären 3 Mio. Atomkraftwerke. Baut man nur ein Hundertstel der Sahara mit Solarzellen oder Spiegeln zu, dann erzeugt man genügend Strom für die ganze Erde. Auch in Zukunft. Energie ist nicht knapp. Die Sonne liefert im Überfluß. Wie nutzen sie nur nicht.
Zurück zu Solarenergie aus dem Weltraum: also entweder
- der Mikrowellenstrahl wird doch gebündelt und hier ist eine große Augenwischerei im Spiel
- Solarsatelliten mit Mikrowellenübertragung sind totaler Unsinn und man sollte lieber 4 Quadratkilometer Solarzellen in die Wüste bauen, statt 1 Quadratkilometer voller Mikrowellenempfänger.
- ich habe was nicht verstanden.
_happy_burning()
29. November 2008
Wolfspelz's Primzahl-k-linge Vermutung
Habe gerade gelesen, dass die Zahl der Primzahlen unter einer Zahl n etwa gleich n/log n ist. Das "etwa" heisst: der Grenzwert für n gegen unendlich der wirklichen Zahl der Primzahlen geteilt durch den Schätzwert "n/log n" ist gleich 1. Mit anderen Worten: für große n ist der Unterschied vernachlässigbar und die Schätzung ziemlich genau.
Es gibt außerdem noch Primzahlzwillinge, das sind aufeinanderfolgende Zahlen, die beide Primzahlen sind. Natürlich nicht direkt aufeinanderfolgend, weil dann immer eine gerade Zahl dabei wäre, die durch 2 teilbar und deshalb keine Primzahl ist. Aber wenn n und n+2 beide Primzahlen sind, dann sind sie Primzahlzwillinge. Die Zahl der Primzahlzwillinge unter einer Zahl n ist etwa n/(log n)^2. Das sieht mir ziemlich ähnlich zur Zahl der Primzahlen unterhalb von n aus.
Jetzt kommts: ich stelle mal die Vermutung auf, dass die Zahl der Primzahldrillinge unterhalb von n etwa gleich n/(log n)^3 ist. Verallgemeinerung: die Zahl der Primzahl-k-linge unter n ist etwa n/(log n)^k.
Warum ist das eine "Vermutung"? Weil jeder große Mathematiker eine Vermutung aufstellt an deren Beweis sich Generationen die Zähne ausbeissen (Fermat, Poincaré, Riemann, Goldbach, Legendre, Hodge). Ergo: die Vermutung reicht für den Ruhm. Vielleicht ist es auch so, dass nur die Vermutungen von großen Mathematikern überhaupt bekannt sind, weil von den anderen keiner Notiz nimmt. Also: ich hab meinen Teil getan, die Vermutung aufgestellt. Jetzt ist es an Euch, Notiz zu nehmen und die Zähne daran auszubeissen, damit es noch für den Titel "großer Mathematiker" langt.
_happy_proving()
Labels: Zahlentheorie
Unsichtbare Schneeflocken sehen
Heute morgen sehe ich aus dem Fenster: es schneit. Ich gehe ans Fenster und die ganze Straße runter schneit es. Klar, würde man denken. Wenns schneit, schneits überall.
Erstaunlich ist aber dass ich es sehen kann, auch in 50 m Entfernung. Ich bin kurzsichtig (Stärke 1,5) und ich kann sicher nicht eine Schneeflocke in 50 m Entfernung sehen. Ich kann ja ohne Brille nicht mal aus 10 m Entfernung den Tafelanschrieb lesen. Der Strich der Kreide ist so groß wie die Schneeflocken heute morgen, genauso weiss vor dunklem Hinergrund, aber 50 m: keine Chance. Also WTF?
Mein Verdacht: die Rübe spielt mir was vor. In der Nähe sehe ich wirklich Flocken, in der Ferne glaube ich auch Flocken zu sehen. Aber wahrscheinlicher ist, dass ich im Fernbereich statistische Dichtefluktuationen der Schneeflockenverteilung optisch verstärkt durch die Transversalbewegung sehe und mir einbilde ich sehe einzelne Flocken fallen, weil ich weiss, dass sie da sind.
_happy_flocking()
26. November 2008
Simple Remote Procedure Call - Array Response
SRPC-ArrayResponse is an extension to SRPC. SRPC-ArrayResponse carries an array of key/value lists as response.
Multiple key/value lists could be encoded as SRPC values with an appropriate escaping and encoding for each list. But SRPC-ArrayResponse presents a standardized way to represent an array of key/value lists instead of the usual one dimensional list.
The normal SRPC response looks like:
- a=b
- c=d
The ArrayResponse allows for multiple values of similar keys:
- 0:a=b
- 0:c=d
- 1:a=b1
- 1:c=d1
- 2:a=b2
- 2:c=d2
The ArrayResponse allows for multiple values of similar keys:
- Status=1
- 0:Filename=sp.gif
- 0:Data/Encoding=base64
- 0:Data/Type=image/gif
- 0:Data=R0lGODlhAQABAIAAAP///////yH5BAEAAAEALAAAAAABAAEAAAICTAEAOw==
- 1:Filename=sp2.gif
- 1:Data/Encoding=base64
- 1:Data/Type=image/gif
- 1:Data=R0lGODlhDwAOAIAAAP///////yH5BAEKAAEALAAAAAAPAA4AAAIMjI+py+0Po5y02osLADs=
The extension looks very similar to SRPC-Batch. The difference is that SRPC-Batch transfers multiple requests and multiple responses in a single transaction whereas SRPC-ArrayResponse has only one request and an item list in the response.
Rationale: the decoder can be shared for both cases. It is always clear how to interpret the array, because you know, if you expect an array response or multiple responses.
Labels: SRPC
Google's Lively Learnings
http://www.virtualworldsnews.com/2008/11/google-lively-didnt-meet-tough-targets-looking-to-use-tech-elsewhere.html
Google says: "We set Lively tough targets and it did not achieve them, but Lively did teach us about what our users like and what they don't. We learned people want to be social in many places on the web, and we learned that users appreciate the ability to meet new people and share content with friends. These are important lessons for future product development."
That's 2 points for weblin:
- people want to be social in many places on the web (maybe everywhere on the web?)
- users appreciate the ability to meet new people (new people, not just friends as in social networks)