Manuestaire / megacorporation

2 stars 1 forks source link

Nuevas unidades #17

Open Manuestaire opened 11 years ago

Manuestaire commented 11 years ago

Posibilidad de añadir nuevas unidades, no exponenciales a las actuales:

Ejemplo una unidad mártir, con mucho daño y sin defensa. Una unidad tanque que sólo absorbe daño.

NiciusB commented 11 years ago

Y se morirían antes los tanques que los mártires, no? Me parece una buena idea pero hay que pensarlo bien... Yo creo que el saboteador mas esas 3 unidades son perfectas :D

Manuestaire commented 11 years ago

A ver se trata de hacer unidades con distintas carácterísticas de ataque y defensa, de forma que dependiendo de la composición de ambas tropas (el que ataque y el que defiende) se pueda ganar o perder una batalla en función de si envias unas unidades o otras.

Es decir un mártir tiene mucho ataque (mataría muchos defensores) pero al no tener defensa moriría muy fácilmente. Un tanque tendría mucha defensa, por lo que sería una unidad difícil de matar, pero al no tener ataque, no puede matar otras unidades.

Manuestaire commented 11 years ago

Estaría bien saber que ecuación se está usando al calcular un ataque...

NiciusB commented 11 years ago

Bien, voy a cambiar la forma de carpetas :P

Manuestaire commented 11 years ago

El qué?

NiciusB commented 11 years ago

Manuestaire/megacorporation#19

DamageESP commented 11 years ago

Podríamos hacer que las nuevas tropas tuviesen su propio nivel de investigacion, y que se aumentase segun la experiencia de cada uno, y se conseguiria experiencia atacando.

O bien hacer una investigacion especifica para cada tipo de tropa.

Manuestaire commented 11 years ago

Yo había estado pensando en vincular esta idea con la de incluir dos modos de ataque, hacer básicamente que dependiendo del modo de ataque ataca primero uno o el otro, en un modo, los atacantes atacan primero (por lo que sería muy para el atacante útil tener mártires, que matarán muchas unidades antes de morir, y para el defensor tener tanques, que absorberán ese daño) Por el contrario en el otro modo, las tropas defensoras atacan primero, por lo que són más útiles los guardias, y los saboteadores, puesto que la mayoría de mártires morirían con el primer ataque de los guardas.

NiciusB commented 11 years ago

Me parece bien, aunque hay que pensárselo bien... Daría MUCHA mas estrategia al juego y sería bastante mas divertido con estos cambios

Manuestaire commented 11 years ago

Estaría bien si pudieseís poner cual es la ecuación o el algoritmo que se usa ahora mismo para calcular ataques.

NiciusB commented 11 years ago

Pues está en php asi que no la entenderías xD pero prácticamente es: $atg = (1 * $seguridad); //ataque de guardia $deg = (2 * $seguridad); //defensa de guardia $ats = (2 * $sabotaje); //ataque de saboteador $des = (1 * $sabotaje); //defensa de saboteador $resistencia = $rbase[$edificio] + $rup[$edificio] * ($infraestructura - 1); //resistencia del edificio a destruir $mug = floor(($saboteadores * $ats) / $deg); //guardias muertos teoricos (pueden ser mas de los guardias, pero se ponen al numero de guardias si son mayores) $mus = floor(($guardias * $atg) / $des); //saboteadores muertos teoricos $edificios_destruidos = floor((($ats * $saboteadores) - ($deg * $guardias)) / $resistencia); //edificios destruidos

la función floor es redondear hacia abajo

esto son extractos del php xD pero reducido a lo minimo para poder entenderlo :P

Manuestaire commented 11 years ago

Ignorad este mensaje:

(3x)/(2(x^1.1))-1

((3_(x^1.25)))/(2_x)

((3_(x^1.3635)))/(2_x)

Manuestaire commented 11 years ago
<?php
$modata = ((3*($lvlsabot^1.3635))/(2*$lvlsabot));
$moddef = ((3*($lvldefen^1.3635))/(2*$lvldefen));
$atasabot = ($damagesaboteador * $modsab);
$defsabot = ($defencesaboteador * $moddef);
$ataguard = ($damageguardia * $modata);
$defguard = ($defenceguardia * $moddef);
//en caso de ataque tipo 1 (sabotaje > defensores atacan primero)
//ronda 1 (atacan los defensores)
$numsabos = int(($numsabos * $defsabot) - ($numguard * $ataguard));
//ronda 2 (atacan los atacantes)
if($numsabos>0){
$numguard = int(($numguard * $defguard) - ($numsabos * $atasabot)(;
}else{
//defensor gana
calculofama($variable,$variable2);
}
//ronda 3 (atacan defensores otra vez)
if($numguard>0){
$numsabos = int(($numsabos * $defsabot) - ($numguard * $ataguard));
}else{
//atacante gana
calculoedificios($numsabos,$edifobjetivo);
}
//ronda 4 (atacante ataca por última vez)
if($numsabos>0){
$numguard = int(($numguard * $defguard) - ($numsabos * $atasabot));
//calcular daño a edificios, botín etc
}else{
//defensor gana
}
?>
Manuestaire commented 11 years ago

la gráfica que representa los modificadores es algo así: http://fooplot.com/plot/206vz4gnlk

Manuestaire commented 11 years ago

Qué os parece una función de ese tipo para calcular los ataques?

Sé que tiene algunos fallos perfectamente, como por ejemplo que pasa si en la última ronda ganan los atacantes. Pero habría que modificarla con el comportamiento de las nuevas unidades también, es sólo un ejemplo.

DamageESP commented 11 years ago

A mi me parece de puta madre

NiciusB commented 11 years ago

No se... yo de funciones matematicas ni puta idea xDD Haced lo que querais :P

Manuestaire commented 11 years ago

Necesito, que antes de seguir haciendo código, decidamos los nombres definitivos de todas las unidades. Para que luego no haya diferencias entre el nombre que le demos y el nombre en el código, porque se hace un lío gigantesco...

NiciusB commented 11 years ago

hombre, se puede hacer unidad1, 2 y 3 xD...

Los de ataque pero no defensa pueden ser tiradores o francotiradores Los normales saboteadores o infantería Los de defensa pueden ser Tanques o otros xD

Manuestaire commented 11 years ago

A ver pensemos con cabeza, que no es un juego de guerra no pega ni con cola tanques en este juego.

Yo diría guardias y antidisturbios. Y Ladrones y saboteadores.

Pero no me convence.

NiciusB commented 11 years ago

ladrones? no eso no xD

DamageESP commented 11 years ago

antidisturbios mola. podriamos poner estas:

Guardias -> Policías Nueva unidad de defensa mejorada -> Antidisturbios

Saboteadores -> Saboteadores xD Nueva unidad de ataque mejorada -> Mafiosos (?)

Manuestaire commented 11 years ago

Guardias -> Policías Nueva unidad de defensa mejorada -> Antidisturbios

Saboteadores -> Saboteadores

Hasta aquí bien, mafiosos ya no tanto. Para inspiraros os recuerdo que la nueva unidad tiene mucho ataque pero nada de defensa. Digamos un mártir, o un suicida, o si fuese un barco un brulote, a ver si así os inspiraís.

Manuestaire commented 11 years ago
<?php
$modata = ((3*($lvlsabot^1.3635))/(2*$lvlsabot));
$moddef = ((3*($lvldefen^1.3635))/(2*$lvldefen));
$atasabot = ($damagesaboteador * $modsab);
$defsabot = ($defencesaboteador * $moddef);
$ataguard = ($damageguardia * $modata);
$defguard = ($defenceguardia * $moddef);
//en caso de ataque tipo 1 (sabotaje > defensores atacan primero)
//ronda 1 (atacan los defensores)
$numgang =
$numsabos = int(($numsabos * $defsabot) - ($numguard * $ataguard));

//ronda 2 (atacan los atacantes)
if($numsabos>0){
$damageofsabot = $numsabot * $atasabot;
$damageofgang = $num000 * $ata000;
$damageofatackerstot = $damageofsabot + $damageofgang;
if($numantidist > 0){             //posiblemente separar esto a una función externa, aquí calculamos el tanto por uno de daño que reciben los antidisturbios, el resto lo absorben los guardias.
$damagetoantidist = (($numantidist * 1.1)/($numguard+$numantidist));
}else{
$damagetoantidist = 0;
}
$damagetoguard = 1 - $damagetoantidist; 

$numantdist = int((($numantidist * $defantidist) - ($damagetoantidist * $damageofatackerstot)) / $defantidist);
$numguard = int((($numguard * $defguard) -  ($damagetoguard * $damageofatackerstot)) / $defguard);
}else{
//defensor gana
calculofama($variable,$variable2);
}
//ronda 3 (atacan defensores otra vez)
if($numguard>0){
$numsabos = int(($numsabot * $defsabot) - ($numguard * $ataguard));
}else{
//atacante gana
calculoedificios($numsabot,$edifobjetivo);
}
//ronda 4 (atacante ataca por última vez)
if($numsabos>0){
$numguard = int(($numguard * $defguard) - ($numsabos * $atasabot));
//calcular daño a edificios, botín etc
}else{
//defensor gana
}
?>
NiciusB commented 11 years ago

Francotiradores yo creo que estaba bien...

Manuestaire commented 11 years ago

Necesito saber como quereís que vayan las investigaciones, si por unidades, por ataque/defensa o como...

NiciusB commented 11 years ago

Yo digo una general y otra de unidad, la cosa está en ir subiendolas juntas para obtener el mayor rendimiento... o si envias muchas de una subir la general y la de esa nose xD que pensais?

Manuestaire commented 11 years ago

Todos de acuerdo en llamar gangsters a los actuales saboteadores y a la nueva unidad saboteadores?

Quedaría así: Guardias -> Policías Nueva unidad de defensa mejorada -> Antidisturbios

Saboteadores -> Gángsters Nueva unidad de ataque -> Saboteadores

NiciusB commented 11 years ago

Okey me parece bien xD

DamageESP commented 11 years ago

Perfectos los nombres. En cuanto a las invest, estaría bien que la investigacion se dividiera en general y especifica, ataque (general) y despues como los lideres de MM, con una salud y fuerza que tendria cada tipo de tropa.

Manuestaire commented 11 years ago

A ver concretad un poco más que no os estoy entendiendo.

Yo lo que quiero saber es como van a influir al ataque y a la defensa de cada unidad cada inves.

NiciusB commented 11 years ago

Digamos que la fuerza que ahora se calcula por la investigacion de sabotaje, será la mitad mas otra mitad de la investigacion de tropa (por ejemplo, entrenar gangsters)

Manuestaire commented 11 years ago

Vale entonces resumidme que investigaciones habría en total? Y qué afecta cada una

NiciusB commented 11 years ago

Sabotaje: Mitad de los atributos de las tropas de ataque Entrenar gangsters: Mitad de los atributos de los gangsters Entrenar saboteadores: Mitad de los atributos de los saboteadores

Esa es mi propuesta xD

Manuestaire commented 11 years ago

coño sed específicos, quiero decir

Sabotaje: Afecta al ataque de todas las tropas/ de las tropas de ataque etc etc etc

NiciusB commented 11 years ago

Pues eso xDD Sabotaje: Afecta a la Mitad de los atributos de las tropas de ataque Entrenar gangsters: Afecta a la Mitad de los atributos de los gangsters Entrenar saboteadores: Afecta a la Mitad de los atributos de los saboteadores Defensa: Afecta a la Mitad de los atributos de las tropas de defensa Entrenar policias: Afecta a la Mitad de los atributos de los policias Entrenar antidisturbios: Afecta a la Mitad de los atributos de los antidisturbios

No se a que te refieres

Manuestaire commented 11 years ago

coño que no me hables de atributos, hablame de ataque, de defensa o de ambos, para la unidad o para todas

DamageESP commented 11 years ago

Creo que lo que Nuno dice es :

Investigacion de ataque (general): 50% de las investigaciones de ataque de TODAS las tropas de ataque. Lo de los modificadores no lo he entendido muy bien, pero básicamente sería más o menos así:

<?php

//Nivel ataque = 30
//Nivel gángsters = 20
$atageneral = 30/2 //El nivel de ataque GENERAL representa la mitad de los artibutos totales de todas las tropas.
$defgeneral = 15/2 //El nivel de ataque GENERAL representa la mitad de los artibutos totales de todas las tropas.
$atagang = 20/2 //El nivel de ataque DE GANGSTER representa la mitad de los artibutos totales de los GANGSTERS.
$defgang = 10/2 //El nivel de ataque DE GANGSTER representa la mitad de los artibutos totales de los GANGSTERS.

$ata = $atageneral + $atagang
$def = $defgeneral + $defgang

?>

Espero que sea esto lo que quieras saber.

Manuestaire commented 11 years ago

Osea que las investigaciones generales se dividen entre el tipo de tropas (de ataque o de defensa)

La otra opción que es decía es que afecten sólo al ataque o sólo a la defensa es decir cada unidad tiene un ataque y una defensa, que son los que al final se ven influídos por las investigaciones.

DamageESP commented 11 years ago

También podrían sumarse las investigaciones, y que cada x niveles de gangster tuviese el valor de un nivel de general. Me explico:

<?php

//Nivel ataque = 30;
//Nivel gángsters = 20;
$atageneral = 30; //El nivel de ataque GENERAL representa la mitad de los artibutos totales de todas las tropas.
$defgeneral = 15; //El nivel de ataque GENERAL representa la mitad de los artibutos totales de todas las tropas.
$atagang = 20; //El nivel de ataque DE GANGSTER representa la mitad de los artibutos totales de los GANGSTERS.
$defgang = 10; //El nivel de ataque DE GANGSTER representa la mitad de los artibutos totales de los GANGSTERS.

$ata = $atageneral + ($atagang*0.25); // 30 + 5
$def = $defgeneral + ($defgang*0.25); // 15 + 2.5, que sería redondeado a 3.

?>

Esto te daría un "extra" a tu ataque general. Que te parece? Es que hay muchisimas maneras de hacerlo..

NiciusB commented 11 years ago

Me parece bien la ultima jaja :)

Manuestaire commented 11 years ago

Nuno a ver si esta tarde puedo hablar contigo, necesito que me aclares unas cosas de php.

Manuestaire commented 11 years ago

Estoy trabajando en ordenar y organizar el código, sobretodo en vista de poder optimizarlo:

<?php

//calculamos los modificadores para el daño y la defensa
$mod_ata = ((3*($lvlsabot^1.3635))/(2*$lvlsabot)); //se calcula el modificador respecto al nivel de sabotage
$mod_def = ((3*($lvldefen^1.3635))/(2*$lvldefen)); //se calcula el modificador respecto al nivel de defensa

//calculamos el daño y defensa de cada tipo de unidad
$ata_sabot = ($sabot_base_ata * $mod_ata); //se calcula el ataque de cada saboteador
$def_sabot = ($sabot_base_def * $mod_def); //se calcula la defensa de cada saboteador
$ata_gang = ($gang_base_ata * $mod_ata);
$def_gang = ($gang_base_def * $mod_ata);
$ata_guard = ($guard_base_ata * $mod_def); //se calcula el ataque de cada guardia
$def_guard = ($guard_base_def * $mod_def); //se calcula la defensa de cada guardia
$ata_antidist = ($antitist_base_ata * $mod_def);
$def_antidist = ($antidist_base_def * $mod_def);

function distribute_damage($num_unidad1,$num_unidad2) // ATENCIÓN: la primera unidad siempre recibe más daño que la segunda.
{
    if (!($num_unidad1 + $num_unidad2)) { //en php 0 se evalua como FALSE.
        throw new Exception('División por cero.'); //al lanzar una excepción, la ejecución se para hasta llegar a un catch.
    }
    else {
    return (($num_unidad1 * 1.1)/($num_unidad1 + $num_unidad2));
    //$damagetoguard = 1 - $damagetoantidist;
    }
}

//en caso de ataque tipo 1 (sabotaje > defensores atacan primero)
//ronda 1 (atacan los defensores)
$numgang =
$numsabos = int(($numsabos * $defsabot) - ($numguard * $ataguard));

//ronda 2 (atacan los atacantes)
if($numsabos>0){
$damageofsabot = $numsabot * $atasabot;
$damageofgang = $num000 * $ata000;
$damageofatackerstot = $damageofsabot + $damageofgang;
if($numantidist > 0)
{//posiblemente separar esto a una función externa, aquí calculamos el tanto por uno de daño que reciben los antidisturbios, el resto lo absorben los guardias.
    $damagetoantidist = distribute_damage($num_antidist,$num_guard);
}else{
}

$numantdist = int((($numantidist * $defantidist) - ($damagetoantidist * $damageofatackerstot)) / $defantidist);
$numguard = int((($numguard * $defguard) -  ($damagetoguard * $damageofatackerstot)) / $defguard);
}else{
//defensor gana
calculofama($variable,$variable2);
}
//ronda 3 (atacan defensores otra vez)
if($numguard>0){
$numsabos = int(($numsabot * $defsabot) - ($numguard * $ataguard));
}else{
//atacante gana
calculoedificios($numsabot,$edifobjetivo);
}
//ronda 4 (atacante ataca por última vez)
if($numsabos>0){
$numguard = int(($numguard * $defguard) - ($numsabos * $atasabot));
//calcular daño a edificios, botín etc
}else{
//defensor gana
}
?>
Manuestaire commented 11 years ago

@NiciusB

$damagetoantidist = distribute_damage($num_antidist,$num_guard);

Es esto correcto?, hay alguna forma de pasarle a la función distribute_damage también,los nombres de las dos variables dónde quiero que se guarden los resultados?? (es decir $damagetoguard y $damagetoantidist)

Manuestaire commented 11 years ago

@DamageESP @NiciusB Vamos a ver si aclaramos los tipos de ataques:

Tened en cuenta que si el atacante ataca primero, obtiene una clara ventaja.

Tipo 1 (Robo)

Tipo 2 (sabotage)

DamageESP commented 11 years ago

Creo que Nuno dijo que se ganaba más dinero con los robos que con los sabotajes, lo demás creo que está bien.

Manuestaire commented 11 years ago

Vale lo acabo de editar mira a ver ahora...

DamageESP commented 11 years ago

Ahora creo que sí está bien. Y creo que directamente no se gana fama con los robos. Simplemente atacan primero y roban dinero al usuario atacado, (CREO).

Manuestaire commented 11 years ago

No debemos trabajar nunca con el dinero en cuenta del defensor, porque se puede meter a préstamos y a fichas de casinos... No tendría mucha práctica creo...

DamageESP commented 11 years ago

¿? No entiendo.