Skip to content

Instantly share code, notes, and snippets.

@dmecke
Last active December 11, 2015 21:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dmecke/4666790 to your computer and use it in GitHub Desktop.
Save dmecke/4666790 to your computer and use it in GitHub Desktop.
The Onlinetennis Matchengine

Please scroll down for a german and spanish version!

The Onlinetennis Matchengine

The Problems and how to overcome them

The purpose of this document

More and more people are complaining about the matchengine and the overall satisfaction with the game seems to be low, especially for users who are a long time in the game. This document shall find the reasons for the current situation and point out a way to fix this.

What the main problem is

Different to the reality in Onlinetennis there are lots of users who are all on the same level. That means that the user on ranking position 1 is more or less equal to the one on position 200. Anyhow the users expect the position 1 user to be better than the others in some way so too much “jumping” in the ranking is avoided. To make this possible, a distinction between these players is needed.

The five components of influence

There are five components that have influence in the match evaluation. These components are skills, tactic, equipment, skilltree skills and randomness. They are all included in the formula which generates a point for one of the users. Though, every component has a different task in that. The equipment add up to the skills and are the base value for every hit calculated in the formula. The tactic on the one hand decides what kind of skills are used (whether it's a ball to the fore- or backhand and so on) and on the other hand creates a range for a factor that is multiplied with the base value of the skills. While the tactic make up the range, the randomness calculates the actual factor, individually for every hit. The skilltree skills make up another factor that is multiplied with the base value, depending on the situation (service, base shot, etc.). Currently all of these components – apart from the randomness of course – are equal for every long time user.

The problem of limited skills

The maximum value of each skill is limited to 100 (110 with the legend skilltree skill). For that reason every user will reach a maximum average value after some time. This average together with its values in every single skill is close to identical for every user who is in the game for a longer period. That means there is no more distinction in the matter of skills (the same goes for skill tree skills) between those players. Because of that, these components no more make a difference in the match evaluation.

The problem of a static tactic system

Similar to the skill's problem, the tactical settings have a value where they best match the skills. That means, that there is also a “perfect” setting for the tactic, which can also be considered to be used by every experienced user. So this component also falls out of the importance for the engine.

The problem of the low effect of the equipment

While all components apart from equipment and randomness disappeared from the consideration, the importance of the equipment is high. Because of that the balancing of it is critical, as it can be not noticeable at all in the one case or the only reason to win or lose a match on the other side. At the moment it seems to be very underbalanced so it makes no big difference.

The randomness is what's left

All of the components will be equal for all experienced users. That means that only the randomness is left to decide about the winner of a rally in the match. This results in close decisions related to a whole match in average. But that also makes it possible to have strange results in one or another direction.

How to make a distinction between users

As every experienced user is on the same level in all components he can have influence in, there need to be made a distinction in some way that leads to the winner. The randomness as we have it now, is one option. As this is not liked by the community, we have to find an alternative. At best, all of the five components are overworked and improved, so every of it matters again.

Skills: Different types of players (not yet planned)

One option is to differentiate between player types. These types could be based on the surface they are successful on. If one type is more successful on hardcourt, he has a permanent advantage over a player type which is more successful on clay. There are two downsides with this approach: First, there are only two surfaces which are very important (hardcourt and clay) which would lead into only two groups of players. The second downside is that both groups are completely equal again in their own type.

Tactic: Dynamic tactic system (planned for v1.2)

Instead of having perfect values that do not change, these should be vary for as many situations as possible. That means 1) the users have something to work on and improve all the time and 2) there is never a perfect situation where nothing can be improved anymore and both opponents are on the same level again.

Equipment: Raise influence (planned for v1.3)

To fix the problem with the equipment, the influence can simply be raised. As easy as this seems, this has to be done carefully to not completely rely on the selected equipment to decide which user wins the match.

Skilltree Skills: Change the way of the effects (not yet planned)

Currently the skill tree skills are included as additional factors in the engine. This makes it very hard for the user to "see" in what way and how much it influences the result. Instead, it should cause "special situations". "Power Serve" for example could (with a defined percentage) cause a direct point at service. This direct point could be pointed out in statistics and in the comments so both users can actually see what the influence of that skill was.

Randomness: Lower influence (done with v1.1)

As the randomness factor cannot be avoided completely (for example we need it to have a percentage at the services instead of 100% or 0% all the time), we can at least lower its influence in the formula. This step was done in v1.1, the factor in the formula is now divided by 10.

Workflow

As every component shall be adjusted we try to implement the changes step by step. Each step will be tested and if necessary adjusted in a phase where it is available only in showmatches. When it is approved to be an improvement to the previous version it is directly put live for all matches or the next step is based on it and tested.

The Onlinetennis Matchengine

Die Probleme und wie wir sie überwinden können.

Die Absicht dieses Dokuments

Immer mehr User beschweren sich über die Matchengine und die Zufriedenheit der Spieler scheint gering zu sein, vor allem für die Spieler, die schon lange dabei sind. Dieses Dokument soll die Gründe für die momentane Situation finden und eine Möglichkeit diese zu verbessern.

Das Hauptproblem

Im Gegensatz zur Realität gibt es bei Onlinetennis viele User, die auf dem gleichen Level sind. Das heisst, der User der auf Position 1 liegt, ist mehr oder weniger gleich stark, wie der User auf Position 200. Die User erwarten, dass die Nummer 1 der Welt besser ist als der Rest, so dass zu viel „Rumgespringe“ in der Weltrangliste verhindert wird. Um das möglich zu machen, ist eine Unterscheidung der Spieler nötig.

Die fünf Komponenten, die Einfluss nehmen

Es gibt fünf 5 Dinge, die Einfluss auf die Auswertung der Matches haben. Diese Komponenten sind folgende: Taktik, Skills, Ausrüstung, Skilltree-Skills und Zufall. Diese Komponenten sind alle in der Formel eingebaut, welche einen Punkt für einen der User generiert. Jedoch hat jede Komponente seine eigene Aufgabe darin. Die Ausrüstung addieren sich auf die Basisskills, welche dann die Grundlage für jeden berechneten Schlag in der Formel sind. Die Taktik bestimmt auf der einen Seite, welche Skills benutzt werden (ob es einen Schlag auf der Vor- oder der Rückhand gibt usw.) und auf der anderen Seite legt sie eine Range für einen Faktor fest, der mit dem Basisfaktor eines Skills multipliziert wird. Während die Taktik die Range bestimmt, wird durch den Zufall der endgültige Faktor generiert, für jeden einzelnen Schlag. Der Skilltree schafft einen weiteren Faktor der mit dem Basiswert multipliziert wird, abhängig von der Situation (Aufschlag, Grundlinenschlag, etc.)

Momentan sind all diese Komponenten – abgesehen vom Zufall - für jeden User gleich.

Das Problem von beschränkten Skills

Das Maximum eines jeden Skills ist 100 (110 mit „Legend“ im Skilltree). Aus diesem Grund wird jeder Spieler nach einer gewissen Zeit den maximalen Durchschnitt erreichen. Dieser Durchschnitt zusammen mit dem Wert in jedem einzelnen Skill ist bei den meisten User, die bereits eine lange Zeit in dem Spiel sind, identisch. Das heisst, es gibt praktisch keine Unterscheidung der Spieler bezüglich der Skills mehr. (Das Gleiche gilt für die SkillTree-Skills.) Das heisst, dieser Faktor macht in der Matchauswertung so gut wie keinen Unterschied mehr.

Das Problem des statischen Taktik Systems

Ähnlich wie beim Skill-Problem, haben die taktischen Einstellungen einen Wert, der am Besten zu den Skills passt. Das heisst, momentan gibt es auch eine „perfekte“ Einstellung für die Takitk, die prinzipiell von jedem erfahrenen Nutzer benutzt werden kann. Also fällt auch dieser Faktor aus der Wichtigkeit der Engine.

Das Problem des geringen Einflusses der Ausrüstung

Während alle Einflüsse abgesehen von Ausrüstung und Zufall aus der Berücksichtigung verschwunden sind, ist die Wichtigkeit der Ausrüstung momentan hoch. Deswegen ist das „Balancing“ davon sehr schwer, da entweder keine Auswirkungen spürbar sind oder es auf der anderen Seite der einzig ausschlaggebende Punkt ist, der über Sieg oder Niederlage entscheidet. Im Moment ist es underbalanced, der Einfluss ist also sehr gering.

Der Zufall ist, was übrig bleibt

Alle Einflüsse sind für erfahrene Spieler sehr ähnlich geworden. Das heisst, dass beinahe nur noch das Glück über den Gewinner eines Ballwechsels entscheidet. Daraus entstehen im Schnitt die engen Matches. Das macht es auch möglich, dass verwirrende Resultate entstehen, in der einen oder in die andere Richtung.

Wie man eine Unterscheidung zwischen den Spielern macht

Da alle erfahrenen Spieler in allen Komponenten auf dem gleichen Level sind, muss eine Unterscheidung zwischen den Spielern gemacht werden, die zu einem Gewinner führt. Der Zufall, wie wir ihn jetzt haben, ist eine Möglichkeit. Da dies aber von der Community nicht gewünscht wird, müssen wir eine Alternative finden. Optimalerweise werden alle fünf Komponenten überarbeitet und verbessert, so dass wieder jede einzelne eine Rolle spielt.

Skills: Verschiedene Spielertypen (noch nicht geplant)

Eine Option ist es zwischen Spielertypen zu unterscheiden. Diese könnten auf Grund der Beläge, auf welchen sie erfolgreich sind, gemacht werden. Wenn jemand erfolgreicher auf Hardcourt ist, hat er einen dauerhaften Vorteil gegenüber einem Spieler, der auf Sand erfolgreich ist. Es gibt aber zwei Probleme mit dieser Idee: Erstens gibt es eigentlich nur zwei Beläge, die wirklich wichtig sind (Hardcourt und Sand), was zu nur zwei Gruppen von Spielern führen würde. Das Zweite wäre, dass diese beiden Gruppen unter sich wieder komplett identisch wären.

Taktik: Das dynamische System (geplant für v1.2)

Anstatt von perfekten Werten, die sich nicht verändern, sollten diese variabel, für so viele Situationen, wie möglich sein. Das heisst 1) Die Spieler haben etwas, an dem sie arbeiten und verbessern können und das die ganze Zeit. 2) Es gibt niemals eine perfekte Situation, in der nichts mehr verbessert oderverändert werden kann und die beiden Gegner auf dem gleichen Level sind.

Ausrüstung: Einfluss erhöhen (geplant für v1.3)

Um das Problem mit der Ausrüstung zu lösen, kann der Einfluss dieser einfach erhöht werden. Das muss jedoch vorsichtig gemacht werden, um nicht komplett von der ausgewählten Ausrüstung abhängig zu sein.

Skilltree Skills: Ändere die Art des Effekts (noch nicht geplant)

Momentan sind die Skilltree-Skills als zusätzliche Faktoren indie Engine eingebaut. Auf diese Art ist es für den User sehr schwer zu sehen, inwiefern diese das Spiel beeinflussen. Daher sollten sie im Gegensatz zu jetzt, spezielle Situationen hervorrufen. „Power Serve“ zum Beispiel könnte (Mit einem definierten Prozentsatz) einen direkten Punktgewinn auf dem Aufschlag verursachen. Dieser Punkt könnte in der Statistik und im Kommentar speziell markiert werden, somit könnten beide Spieler den direkten Einfluss der SkillTree-Punkte sehen.

Zufall: Verringere Einfluss (mit Version v1.1)

Da der Zufallsfaktor nicht komplett vermieden werden kann (z.B brauchen wir ihn um eine Prozentzahl, um beim Aufschlag nicht ständig 100& oder 0% zu haben), können wir zumindest den Einfluss des Zufalls in der Formel verringern.

Das wurde in der Version 1.1 getan, der Faktor wurde durch 10 geteilt.

Workflow

Da jede Komponente angepasst werden muss, versuchen wir die Änderungen Step by Step einzuführen. Jeder Schritt wird getestet und wenn nötig angepasst, in einer Phase, in der er nur in Showmatches verfügbar sein wird. Wenn es eine Verbesserung zu einer früheren Version darstellt, wird die neue Version live gestellt und für alle Matches verwendet, oder der nächste Schritt basiert auf ihm und auch dieser wird dann natürlich getestet.

El motor del juego de Onlinetennis

Sus problemas y como superarlos

El propósito de este documento

Más y más gente se está quejando acerca del motor del juego y su satisfacción con el juego parece ser baja, especialmente para los usuarios que están hace mucho tiempo en el juego. Este documento pretende encontrar las razones para entender la situación actual y determinar qué arreglar.

Cuál es el principal problema

Contrariamente a la realidad, en Onlinetennis hay un montón de usuarios que están en el mismo nivel. Esto significa que un usuario N°1 es más o menos similar a uno N°200. De alguna manera, los usuarios esperan que el N°1 sea mejor que los demás, así un gran salto en el ranking es evitado. Para hacer esto realidad, se necesita una distinción entre los jugadores.

Los cinco componentes que impactan

Hay cinco componentes que tienen impacto en la evaluación de los partidos. Estos componentes son las habilidades, la táctica, el equipamiento, el árbol de habilidades, y la suerte. Todos están incluidos en la fórmula que genera un punto para cada usuario. Sin embargo, cada componente tiene una diferente misión en ese momento. El equipamiento sumado a las habilidades es el valor de base para cada golpe calculado en la fórmula. La táctica, por un lado, decide que tipo de habilidades son usados (si es al drive o al revés, y ese tipo de cosas), y, por otro lado, crea un rango en el que se encuentra un valor, que luego será multiplicado por el valor de base previamente mencionado. Mientras la táctica genera el rango, la suerte calcula ese factor, individualmente por cada golpe. El árbol de habilidades crea otro factor que es también multiplicado por el valor de base, dependiendo de la situación (servicio, golpe básico, etc). Actualmente, todos esos componentes – además de la suerte obviamente – son similares para cada jugador con experiencia.

El problema de las habilidades limitadas

El valor máximo de cada habilidad está limitado a 100 (110 si tenés 5 legends en el árbol de habilidades). Por esta razón, cada usuario va a llegar a un máximo de promedio después de algún tiempo. Este promedio, junto con las habilidades particulares de cada uno, también es muy similar para cada jugador experimentado en el juego. Eso significa que no hay diferenciación en cuento a las habilidades (lo mismo para el árbol de habilidades) entre estos jugadores. Por eso, estos componentes no hacen diferencia en la evaluación del partido.

El problema de un sistema estático de tácticas

Parecido al problema con las habilidades, las opciones de la táctica tienen un valor en el que quedan perfectos con los de las habilidades. Eso significa que hay una opción perfecta para la táctica, que también es usada en cada usuario con experiencia. Entonces, este componente también carece de importancia para el motor del juego.

El problema del bajo efecto del equipamiento

Mientras todos los componentes, aparte del equipamiento y la suerte, han desaparecido de nuestra consideración, la importancia del equipamiento es alta. Por eso, un balance de su impacto es crítico, ya que no puede ser muy apreciable a simple vista, pero tampoco puede ser la razón para ganar o perder un partido. Actualmente, parece no estar muy bien balanceado, por eso no hace gran diferencia.

La suerte es lo que queda

Todos los demás componentes van a ser iguales para todo usuario experimentado. Eso significa que solo la suerte queda para decidir el ganador o el perdedor de un partido. Esto puede generar cierres de partido muy parejos, o mismo resultados muy extraños.

Cómo hacer una distinción entre los usuarios

Como cada jugador experimentado está en el mismo nivel en todos los componentes que pueden impactar en el partido, existe la necesidad de hacer una distinción que de alguna forma nos encamine hacia un ganador. La suerte, como la tenemos ahora, es una opción. Como no es del agrado de la comunidad, tenemos que encontrar una alterntiva. Lo mejor que podría pasar es que los cinco componentes sean reestructurados y mejorados, para así poder importar nuevamente como antes.

Habilidades: Diferentes tipos de jugadores (aún no planeado)

Una opción es diferenciarlos mediante tipos de jugadores. Estos tipos de jugadores pueden estar basados en la superficie en la que son más exitosos. Si un jugador es mejor en cemento, va a tener ventaja permanente sobre quien sea mejor en arcilla. Pero hay dos asuntos con esto: Primero, hay dos superficies que son muy importantes (arcilla y cemento), que harían que hubieses dos tipos de jugadores. La segunda, es que ambos grupos son totalmente iguales contra otros rivales de su mismo tipo (cemento vs cemento / arcilla vs arcilla).

Táctica: Tácticas dinámicas (planeado para la v1.2)

En vez de tener valores perfectos que no cambian, éstos podrían variar la mayor cantidad de veces que se pueda. Esto significa 1) los usuarios tienen algo que hacer y mejorar todo el tiempo y 2) nunca hay una situación perfecta donde nada hay para mejorar y los usuarios están en el mismo nivel nuevamente.

Equipamiento: Aumentar su impacto (planeado para la v1.3)

Para arreglar el problema con el equipamiento, su impacto puede ser aumentado. Tan fácil como parece, esto tiene que ser hecho cuidadosamente para que no dependa exclusivamente del equipamiento escogido para decidir el ganador de un partido.

Habilidades del árbol de habilidades: Cambiar el modo de impacto (aún no planeado)

Actualmente, las habilidades del árbol de habilidades tienen factores adicionales al motor. Esto hace muy difícil que un usuario pueda ver y cuantificar el impacto en el resultado. En cambio, debería causar situaciones especiales. “Power Serve” por ejemplo, podría (con un porcentaje definido) causar un punto directo con el servicio. Este punto directo puede ser contado en unas estadísticas y comentarios, así ambos usuarios pueden ver cuan grande fue la influencia de esta habilidad.

Suerte: Disminuir su influencia (hecho en la v1.1)

Como la suerte no puede ser eliminada por completo, por lo menos podemos disminuir su impacto en la fórmula. Este paso fue hecho en la v1.1, el factor ahora está dividido por 10.

Trabajo

Como cada componente debería ser ajustado, trataremos de implementar los cambios paso a paso. Cada paso va a ser probado y, si es necesario, ajustado en una fase donde sea solo posible probarlo en amistosos. Cuando este aprobado para ser una mejora con respecto a la versión anterior del motor, es puesto para todos los partidos, y el nuevo paso será basado en éste, y probado.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment