Na gladCode existe uma arena onde gladiadores virtuais batalham entre si até somente restar um vivo. Cada jogador, chamado mestre, possui a tarefa de programar o comportamento dos seus gladiadores, de modo que ele aja de maneira autônoma durante a batalha.
Os gladiadores são os representantes dos mestres dentro da arena. E como tal, irão obedecer sua programação fielmente com o objetivo de derrotar os gladiadores dos adversários. Eles possuem características que determinam suas forças e fraquezas. Estas características são chamadas de atributos do gladiador. Eles também possuem um nível. Este nível indica o quão experiente este gladiador já se tornou dentro da arena.
Todos gladiadores iniciam em nível 1. Cada nível adicional concede a eles poder adicional na forma de melhorias de atributos. Os gladiadores possui três atributos principais, descritos a seguir:
Cada um destes três atributos principais são responsáveis por atributos secundários, descritos a seguir:
Ao criar um gladiador, os competidores precisam definir a distribuição inicial dos atributos básicos. Cada gladiador precisa receber atributos básicos que somados custam 50 pontos. O custo de cada ponto de atributo é variável, conforme a tabela abaixo:
Valor | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Custo | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 2 | 3 | 3 | 3 | 3 | 3 | 3 | 4 | 4 |
Soma | 1 | 2 | 3 | 4 | 5 | 6 | 8 | 10 | 12 | 14 | 16 | 18 | 21 | 24 | 27 | 30 | 33 | 36 | 40 | 44 |
Não se preocupe, você não precisa memorizar estes custos, pois o editor de gladiadores cuida disto para você.
Os efeitos dos atributos básicos sobre os secundários estão descritos a seguir:
Existem também alguns atributos fixos dos gladiadores, que não sofrem mudanças em seus valores ao longo da simulação:
A página onde você personaliza a aparência, distribui os atributos e programa o comportamento de seu gladiador chama-se editor de gladiadores. Nela você começa com uma interface que lhe permite escolher entre diversas opções de itens que configuram a aparência de seu gladiador.
Após isso você passa para a distribuição dos pontos de atributos do gladiador, onde você possui 25 pontos para distribuir entre os atributos força, agilidade e inteligência do gladiador. Conforme explicado anteriormente, estes atributos irão influenciar o quão bom seu gladiador é em determinadas ações.
Por último você deve programar seu gladiador usando o editor da página. Para tal você possui a disposição dezenas de funções que permitem o gladiador interagir e perceber o ambiente. Mais sobre a programação dos gladiadores será explicado adiante.
Ao construir um gladiador, os competidores usarão as funções da API gladCode para fazer o gladiador interagir com o ambiente. O ambiente representa uma arena, que possui dimensões 25x25 passos. As funções que lidam com distância usam a unidade Passos (p), que é uma unidade de medida específica da GladCode. Ela é um número float que representa 1/25 do comprimento total da arena, ou seja, isto quer dizer que a arena mede 25p.
Dentro da arena utilizamos um sistema de coordenadas cartesianas, isto quer dizer que um ponto dentro da arena é definido por um par de valores X e Y, onde X significa a distância em relação ao eixo vertical (aumentando da esquerda para a direita) e o Y a distância em relação ao eixo horizontal (aumentando de cima para baixo).
A simulação transcorre em intervalos de tempo de 0.1 segundos.
As funções que lidam com ângulo usam graus (g) como unidade de referência, e tomam por base uma circunferência de 360g que começa no topo e aumenta no sentido horário, conforme a figura ao lado.
Os gladiadores irão batalhar dentro da arena utilizando sua própria programação, de forma autônoma até que somente um saia vivo. Caso uma batalha já esteja acontecendo por 45 segundos, das bordas da arena surgirá um gás tóxico. Esta nuvem mortal lentamente se espalha pela arena em direção ao seu centro, com velocidade 0.1 p/s. Todos gladiadores que estiverem dentro desta nuvem levam dano continuamente. Esta é uma maneira de garantir que a rodada não irá durar para sempre, além de incentivar que os gladiadores se direcionem para o centro da arena após certo tempo, aumentando as chances de um confronto direto.
Cada vez que algum gladiador causar dano a outro, ele ganhará pontos de experiência (xp) relativos a porcentagem do hp total que foi removido do gladiador atacado. Quando o gladiador atacante atingir uma quantidade de xp determinada (veja tabela ao lado), ele avançará de nível, concedendo a ele poder adicional.
O poder adicional recebido será 5 pontos de melhoria em qualquer atributo principal (STR, AGI ou INT), lembrando que ao melhorar os atributos principais, outros atributos secundários também serão melhorados, conforme explicado anteriormente. Além disso, o gladiador que subir de nível instantaneamente recuperará (35 + lvl * 5) hp e ap. Para realizar a melhoria dos atributos, o gladiador precisa chamar as funções de melhoria. Mais detalhes sobre a programação dos galdiadores será discutido adiante.
A tabela ao lado relaciona a quantidade de xp necessária para evoluir cada nível, bem como o xp total que será necessário para chegar no nível. Note que a cada nível, o xp necessário para passar para o próximo nível é acrescido de 20%. Embora a tabela só demonstre os valores até o nível 15, não há limite para o nível dos gladiadores.
Nível | Xp necessário | Xp total |
---|---|---|
1 | - | - |
2 | 25 | 25 |
3 | 30 | 55 |
4 | 36 | 91 |
5 | 43 | 134 |
6 | 52 | 186 |
7 | 62 | 248 |
8 | 75 | 323 |
9 | 90 | 412 |
10 | 107 | 520 |
11 | 129 | 649 |
12 | 155 | 804 |
13 | 186 | 990 |
14 | 223 | 1212 |
15 | 267 | 1480 |
Durante os confrontos, os gladiadores além de se movimentar, e utilizar ataques de curto e longo alcance, podem usar habilidades especiais. Cada habilidade possui um custo em pontos de habilidade (ap) ao ser executada, e causa um efeito específico, descrito na tabela abaixo:
Habilidade | Custo (ap) | Descrição |
---|---|---|
Fireball | 50 | Arremessa um projétil que causa 60% do poder mágico de dano num ponto central de impacto. Todos gladiadores num raio de impacto 2p sofrem 200% do poder mágico de dano de queimadura ao longo de 4s. Alvos mais distantes do centro do impacto sofrem menos dano de queimadura |
Teleport | 60 | O gladiador imediatamente se transporta para outra localização. A distância máxima percorrida é limitada em 5p + 1p por ponto de poder mágico. |
Charge | 30 | Corre em direção ao alvo com velocidade 4x. Ao alcançá-lo, realiza um ataque corpo-a-corpo que causa mais dano de acordo com a distância percorrida (entre 0% e 250% do dano físico), além de reduzir a velocidade de movimento do alvo por 5s. O valor da velocidade será alterado de acordo com a equação Vel=e-0.067 STR |
Block | 50 | Reduz todo dano levado em 10% * (0.1 + STR/(STR+16)) por 7s. Caso o atacante não esteja no raio de visão do gladiador, o efeito da habilidade é reduzido pela metade |
Assassinate | 30 | Realiza um ataque à distância contra o alvo. Ao acertar, caso o alvo não esteja lhe enxergando OU atordoado causa dano de 200% da Precisão. Caso o alvo não esteja lhe enxergando E esteja atordoado a habilidade causa dano 400% da Precisão. |
Ambush | 70 | Torna-se invisível por 1s + (0.1s x AGI). O efeito da habilidade é cancelado ao realizar um ataque ou lançar uma habilidade, e o gladiador não recupera ap enquanto estiver invisível. Ataques realizados enquanto invisível atordoam o alvo por 1.5s |
Ao usar suas habilidades, os gladiadores podem causar em si mesmos ou em outros gladiadores uma série de efeitos temporários, descritos a seguir:
Efeito | Descrição |
---|---|
Queimadura | Durante o tempo de duração do efeito, o gladiador continuamente recebe dano. O dano total da queimadura é dividido igualmente durante este tempo. |
Movimentação | O gladiador recebe um modificador que altera a velocidade de movimento, aumentando ou reduzindo-a. |
Proteção | O gladiador recebe proteção extra a danos, reduzindo o efeito de todo tipo de dano direto causado a ele. Caso o gladiador não enxergue a direção do ataque recebido, a eficácia da proteção é reduzida. |
Invisibilidade | Torna o gladiador invisível. Nenhum outro gladiador consegue detectar quem possuir este efeito. O efeito da invisibilidade acaba prematuramente caso o gladiador realize um ataque ou lance uma habilidade. |
Atordoamento | O gladiador com este efeito fica impossibilitado de realizar qualquer ação durante o tempo do atordoamento. |
Para dar vida aos gladiadores, os competidores devem programar seu comportamento utilizando a sintaxe de uma linguagem de programação, por isso é recomendável que você tenha pelo menos um conhecimento básico de lógica de programação.
Atualmente a gladCode possui suporte para programação utilizando as linguagens Python, C, e Blocos. Mas se você conhece as estruturas básicas de qualquer linguagem imperativa, não vai achar difícil se adaptar.
O ambiente da simulação foi criado especialmente para a gladCode portanto existem funções específicas de entrada, que fazem com que o gladiador perceba o que está acontecendo na arena, e funções de saída que fazem com que o gladiador interaja com os elementos presentes na arena.
Para programar um gladiador, o código-fonte do programa deverá conter a função loop. Utilize o editor de gladiadores para criar o código de seu gladiador
O funcionamento é bem simples. Na função loop será colocado todo o comportamento do gladiador. A cada intervalo de tempo (0.1s) o gladiador irá tentar executar todas as tarefas descritas dentro desta função:
// Exemplo linguagem C
loop(){
stepForward(); // função que faz mover para frente
}
# Exemplo linguagem Python
def loop():
stepForward() # função que faz mover para frente
No código acima, a cada intervalo de tempo (0.1s) o gladiador irá mover-se o quanto conseguir (depende de sua agilidade) para frente, resultando em sucessivas chamadas da função stepForward ao longo do tempo.
Porém, existem situações em que o gladiador não consegue executar todos os comando da função loop() em um único intervalo da simulação, como no caso abaixo:
// Exemplo linguagem C
loop(){
int i;
for (i=0 ; i<10 ; i++) // faz 10 chamadas da função stepForward
stepForward();
turnLeft(5); // função que rotaciona no sentido anti-horário
}
# Exemplo linguagem Python
def loop():
for i in range(10): # faz 10 chamadas da função stepForward
stepForward()
turnLeft(5) # função que rotaciona no sentido anti-horário
Neste caso o gladiador executa o que conseguir (1 chamada da função que move para frente), e a cada novo intervalo de tempo da simulação ele segue executando os próximos passos. Eventualmente, quando ele concluir todas as etapas descritas em sua função loop (as 10 chamadas de stepForward mais a chamada de turnLeft), ele irá começar novamente a função loop. Este processo somente encerrará quando o gladiador morrer, ou quando a simulação terminar.
Note que existem algumas funções que levam mais tempo para serem executadas, como por exemplo as funções de ataque (ex. attackMelee) e habilidade (ex. fireball). Neste caso o gladiador ficará esperando até que possa agir de novo para seguir a execução de seu código. Existem também as funções que não levam tempo algum de simulação para serem executadas, como as funções que detectam o ambiente (ex. getTargetX).
Para uma lista completa das funções existentes, suas finalidades e exemplos de utilização acesse a documentação.
Após criar seu primeiro gladiador você estará apto a participar das batalhas ranqueadas da gladCode. Através das batalhas ranqueadas seus gladiadores ganharão renome, que é a pontuação utilizada para classificação dos gladiadores.
A decisão de quais serão seus oponentes em uma batalha é feita através da posição no ranking que o gladiador ocupa. Para cada batalha, são selecionados os 10 gladiadores cujas posições no ranking geral são mais próximas do gladiador selecionado, e destes 10, 4 são sorteados aleatoriamente para a composição de seus oponentes na batalha.
Após cada batalha ranqueada, de acordo com o desemprenho que seu gladiator ovteve na mesma, ele ganhará uma determinada quantidade de renome. A quantidade de renome que um gladiador ganhará se baseia nos seguintes critérios:
A recompensa em renome obtida segue a seguinte fórmula:
rewardBase = ( (Ntime + 1.5 * win) - avgReward ) / bestReward * 10
reward = ( rewardBase / mmr * avgmmr ) * ( 1 + ((0.001 * mmr - 1) * lowmmr) )
Onde:
rewardBase = recompensa obtida, considerando somente o desempenho na batalha.
Ntime = tempo que o gladiador sobreviveu, normalizado (entre 0 e 1).
win = 1 caso o gladiador foi o vencedor, 0 caso contrário.
avgReward = rewardBase médio calculado entre todos gladiadores participantes.
bestReward = rewardBase obtido pelo gladiador vencedor da batalha.
reward = recompensa final obtida pelo gladiador.
mmr = renome que o gladiador possuia antes da batalha.
avgmmr = média de renome de todos gladiadores participantes, antes da batalha.
lowmmr = 0 caso o gladiador possua renome pelo menos 1000, 1 caso contrário.
Além da recompensa de renome, o mestre de um gladiador participante de uma batalha ranqueada ganha também uma quantidade de moedas de prata. Estas moedas servem para comprar itens no apotecário (loja de poções) que podem ser usados durante as batalhas.
A quantidade de prata ganha em uma batalha varia de acordo com o desempenho do gladiador durante a batalha, bem como o renome que aquele gladiador possui. A fórmula do ganho de prata é a seguinte:
silver = ( (190 + 0.21 * mmr) * (5 * win + 1) ) / 10 - 20
Onde:
silver = recompensa de moedas de prata obtida.
mmr = renome que o gladiador possuia antes da batalha.
win = 1 caso o gladiador foi o vencedor, 0 caso contrário.
Caso o mestre já tenha realizado mais de 20 batalhas nas últimas 24 horas, a recompensa de moedas de prata da batalha será de 1/10 da recompensa que normalmente seria recebida.
Renome | Vitória | Derrota |
---|---|---|
0 | 94 | 0 |
250 | 125 | 4 |
500 | 157 | 9 |
750 | 188 | 14 |
1000 | 220 | 20 |
1500 | 283 | 30 |
2000 | 346 | 41 |
2500 | 409 | 51 |
3000 | 472 | 62 |
3500 | 535 | 72 |
As moedas de prata adquiridas em batalhas ranqueadas podem ser usadas para permitir que os gladiadores utilizem itens consumíveis durante as batalhas.
No menu POÇÕES do perfil fica o apotecário, que é a loja de poções. Sua loja de poções começa com equipamentos básicos, e poderá subir de nível para preparar poções mais poderosas.
Você pode adquirir poções pagando moedas de prata. Uma vez adquiridas, você aluga o serviço do apotecário durante determinado tempo, de acordo com o nível da loja. Durante este tempo você poderá usar cada item adquirido uma vez em cada combate que algum de seus gladiadores participar.
Apotecário | ||
---|---|---|
Nível | Duração | Custo |
Ao encomendar os itens do apotecário, você precisa possuir espaços (ou compartimentos) de itens livres no seu perfil. Você possui quatro espaços de itens bloqueados a princípio, e estes compartimentos são automaticamente desbloqueadas conforme seu nível de mestre aumenta, nos níveis 5, 15, 25 e 35. Para cada espaço desbloqueado, você pode possuir um item encomendado. Tais itens ficam visíveis em seus compartimentos durante o tempo em que estão ativos.
Para usar um item durante o combate, seu gladiador precisa usar a função useItem. Como argumento você deve informar uma String com o identificador do item desejado. Cada item encomendado e ativo só poderá ser usado uma vez durante cada batalha.
// Linguagem C
loop(){
if (getHp() < 100){
useItem("pot-hp-1");
}
}
# Linguagem Python
def loop():
if getHp() < 100:
useItem("pot-hp-1")
Item | Nível | Identif. | Efeito | Custo |
---|