DevLog 2022.10.27 do Game Space Punkers: Galactic Wars

Tela do jogo Space Punkers
Estação Espacial gerada randômicamente

🎮💻🎮

DevLog 2022.10.27

Alguns dos meus projetos entraram em um pequeno iato esse ano. Um desses projetos é o game 2d cuja versão demo batizei de Space Punkers; um space shooter 2D bem clássico. Essa versão demo está disponível na loja da Microsoft e pode ser jogado no Xbox e no PC.

Resolvi dar continuidade a esse projeto, agora criando uma versão comercial desse game.

A primeira coisa que me veio à cabeça é que um jogo precisa passar uma noção de evolução para o Player. Uma forma clássica de fazer isso é gravar a quantidade de Naves Inimigas que foram abatidas e desafiar o Player a bater seu próprio record. Aliás, a versão demo já possui esse mecanismo quase pronto. Eu digo "quase" porque o jogo ainda não salva essa informação para ser usada em uma nova sessão e nem permite vincular um nome ao record em questão. Mas isso é algo fácil de implementar e com certeza estará na versão comercial do jogo.

Mas ainda assim eu queria criar uma mecânica mais complexa do que essa. Aliás, eu adoro complicar as coisas. Eu diria até que tenho um talento nato para isso; talento esse que constantemente preciso controlar.

Então pensei um pouco e tive uma ideia: implementar um sistema de Fases Procedurais. Cada fase possui um numero de desafios e, após completada a Fase, uma nova é gerada com desafios cada vez mais difíceis.

Como se trata de um Space Shooter, a ideia de fase que veio na minha cabeça é a seguinte:

O jogo irá gerar um determinado numero de "lugares" espalhados pela "galáxia" em que o Player se encontra. Para marcar estes lugares os pontos de referências serão estrelas (e às vezes buracos negros) que ficarão navegando pelo espaço em círculos. Em torno dessas estrelas haverão planetas e também as Estações Espaciais inimigas. O Player deverá destruir as Estações Espaciais, que além de combater o Player com seus canhões, irão dropar frotas de naves inimigas para atacar o Player e até mesmo caçá-lo.
Neste cenário, cada Galáxia que o Player livrar das Estações Espaciais inimigas será uma "fase" concluída. Daí o subtítulo provisório "Galactic Wars" ou Guerras Galacticas.

Pretendo ainda enriquecer essa dinâmica adicionando outros desafios mais estratégicos, como áreas bloqueadas que o player só conseguirá acessar em uma fase após conseguir itens especiais, que poderão ser adquiridos ao se destruir Estações Espaciais específicas ou realizando outros desafios. Missões que envolvam mais do que destruir as Estações Espaciais inimigas; como levar carregamento de uma área X para uma área Y.

Ainda há muito o que ser feito, certamente. Por enquanto implementei os seguintes recursos:

  • Estações Espaciais;
  • Sistema de Vida;
  • Radar para detectar a aproximação do Player;
  • Capacidade de Gerar Frotas Inimigas para proteger as Estações Espaciais dos ataques do Player (este tipo de inimigo é chamado de Guardian e nunca deixa os limites da Estação Espacial) e às vezes frotas de caçadores que buscam o Player por toda a Fase (não se importando em se afastar da Estação Espacial que o gerou);
  • Gerador de Fases;
  • Gera Estrelas e/ou Buracos Negros;
  • Cada Estrela possui um Gerador de Planetas;
  • Cada Planeta possui um gerador de "Luas" (satélites naturais);
  • Um sistema gravitacional que prende o Player em sua órbita e, caso este se aproxime do Horizonte de Eventos, ele é arrastado até o corpo celeste (estrela, buraco negro, planeta e/ou satélite natural);
  • Uma Bussola que indica a localização das Estações Espaciais que o Player precisará enfrentar para "Zerar" uma fase.

Além dessas novas criações eu resolvi alguns problemas antigos na codificação original; como a criação de polígonos inválidos na codificação que gera a aparência randômica das naves. Eu já havia tentado anteriormente, mas não tinha encontrado qual função a Godot disponibiliza para validar se um polígono é válido ou não. Mas finalmente descobri qual função usar. Trata-se da Geometry.triangulate_polygon( ARRAY ).empty() onde ARRAY é a matriz que armazena as coordenadas do polígono a ser testado. Caso essa função retorne "verdadeiro", então o array não é válido (sendo uma forma geométrica inválida ou vazia).

Eu encontrei a dica sobre essa função no link:

https://godotengine.org/qa/76081/error-invalid-polygon-data-triangulation-failed

Com essa função eu valido se as formas geometricas de cada parte/camada da Nave são válidas e, caso não sejam, gero uma nova até obter um polígono válido.

Desde que retomei o projeto tenho usado a versão 3.5 da Godot Engine (eu sempre tenho o hábito de usar as versões mais recentes da engine, ainda que isso signifique ter que mudar alguma coisa no código ou ter que enfrentar algum eventual novo bug). Felizmente não tive muita dor de cabeça com essa versão da engine; na verdade o único problema que enfrentei foi com alguma váriaveis numéricas retornando o valor "nan". Pesquisei um pouco sobre o assunto e não consegui descobrir o que ocasiona esse erro.

No meu código eu percebi que esse erro ocorre, fazendo as variáveis retornarem esses valores estranhos, quando os obejtos presentes na cena principal possuem diferenças de escala muito grandes. Mas, no geral, o porque disso continua sendo um mistério para mim. Abaixo deixo um link que encontrei falando sobre esse problema do Nan:

https://godotengine.org/qa/138490/variables-are-nan-for-some-reason

Mas, neste artigo, a situação que provocou o retorno Nan é outra. Eu até suspeitei que quando os objetos na minha cena principal possuem tamanhos (escalas) muito discrepantes, os calculos de distância que eu efetuo retornam numeros muito grandes e em um dado momento isso extrapola a limitação das variáveis numéricas. Mas para testar essa tese eu criei um código simples para realizar uns calculos que retornam numeros muito grandes (absurdos até) e o erro não foi provocado. Então percebi que a minha pista estava equivocada (quanto ao problema ser provocado pela limitação de memoria das variaveis) e deixei de investigar (ao menos por hora) essa situação.

Bom, vou ficando por aqui. Retorno quando for possível trazer novidades sobre o Space Punkers e/ou quando conseguir gravar um vídeo de teste dessa nova versão do jogo.

Comentários

Minha foto
Éder S.P.V. Gonçalves
Osasco, SP, Brazil
É um ficcionista trevoso; escreve poema, romance e também conto. Mescla tom sério com humor ao falar sobre fantasia, mistério e terror. Mantém um blog onde posta textos por vezes sombrios e temperados com ácido humor.

Postagens mais visitadas deste blog

O Tigre, de William Blake

Filtrando pelo campo TSK_STATUS

Carmilla: a vampira de Karnstein

Hajime no Ippo e o Espírito de Desafiante

Drácula: é capaz de controlar os lobos?

Como configurar os níveis de aprovação no app Meu RH da Totvs?

Testando o MidJourney para criar uma capa para a Rua dos Anhangás

Sea Of Thieves: Skin do Kraken Tinto

Telhas de PVC: como evitar problemas na instalação

Ticê: a feiticeira que se tornou a deusa do submundo

📮 Formulário de contato

Nome

E-mail *

Mensagem *

👁‍🗨 MARCADORES

Curiosidades Leituras crônicas de escritor crônicas de um autor independente O Conde de Monte Cristo Alexandre Dumas filosofia Livros Entretenimento espada e feitiçaria Poemas Memorandos a rua dos anhangás histórias de mistério histórias de terror vampiros Fantasia Sombria folclore literatura gótica Caravana Sombria Contos halloween dicas diário Os Demônios de Ergatan histórias de fantasma lobisomens Bram Stoker Oitocentos Aromas de Devaneio PODCASTS escrita games histórias de aventura sagas Drácula O Leão de Aeris Psicotrápolas lendas lendas urbanas Histórias Sobrenaturais de Rudyard Kipling O Governador das Masmorras Rudyard Kipling Via Sombria conan exiles critica social kettlebell lua cheia micro contos natal sociedade Atividade Física Conan o Bárbaro Exercícios de Criatividade O Ventre de Pedra arqueologia feriado girevoy sport gyria inteligência artificial krampus krampusnacht masmorras paganismo papai noel séries xbox Robert Ervin Howard estrela negra folclore guarani ia liberdade melkor mitologia morte resenha séries de tv Capas Desenvolvimento de Jogos Ilustrações Os Segredos dos Suna Mandís Passeios Space Punkers cultura pagã era hiboriana game designer harpia histórias de horror histórias góticas hq humanidade personagens poema gótico política prisão quadrinhos As Aventuras do Caça-Feitiço Conto Diana Haruki Murakami História J.R.R.Tolkien Joseph Delaney O DIÁRIO DE IZZI Romancista como vocação Sandman V de Vingança Vampiros na literatura Wana anhangás animes aranhas arquivo umbra arte bruxas chatgpt criação de histórias cultura gótica estações do ano facismo fanfic fantasmas festividades gatos pretos godot jogos jurupari mangá mitologia brasileira netflix outono paródia protheus sexta-feira 13 superstições totvs vida vingança A Fênix na Espada Café Holístico Carmilla: a vampira de Karnstein Cristianismo Joseph Conrad Joseph Sheridan Le Fanu O Coração das Trevas O Homem Sem Memória O Mentalista Terry Pratchett age of war animes de esporte anotações bruxaria cadernos capa castlevania ceticismo conto de terror cotia crenças criatividade culto aos mortos demônios dia de todos os santos diabo drama educação engines evernote fantasia farmer walk ficção ciêntifica ficção fantástica folclore indígena fotografias funcom hajime no ippo horror cósmico indicação de séries inverno leitores listas lobos lua azul matrix megafauna mitologia indígena natureza notion objetos amaldiçoados opinião palácio da memória podcast ratos reforma sea of thieves sinopse templo zu lai tigre tutoriais utilidades viagem no tempo vila do mirante vlad tepes wicca Áudio-Drama A Arte da Guerra A Balada dos Dogmas Ancestrais A Cidade dos Sete Planetas A Sede do Viajante A Voz no Broche Age Of Sorcery Anne Rice Arthur C. Clarke As Sombras do Mal Bad and Crazy Barad-dûr Berkely Blog Breve encontro com Dracooh de Beltraam Bushido Canto Mordaz Carta Para um Sábio Engenheiro Cartas Chuck Hogan Daniel Handler Direitos Iguais Rituais Iguais Discworld Divulgação Doctor Who Eiji Yoshikawa Elizabeth Kostova Elric de Melniboné Entrevista com o Vampiro Full Metal Alchemist Gaston Leroux Genghis Khan Grande A'Tuin Guillermo Del Toro Hoje é Sexta-Feira 13 e a Lua está Cheia Johann Wolfgang von Goethe Joseph Smith Katana Zero Lemony Snicket Lestat de Lioncourt Lord Byron Lord Ruthven Louis de Pointe du Lac Mapinguari Michael Moorcock Michelly Mordor Musashi Na Casa de Suddhoo Na toca dos ratos letrados Nergal Novela O Escrínio de Pooree O Fabuloso Maurício e seus Roedores Letrados O Historiador O Hobbit O Jirinquixá Fantasma O Lobo O Lobo das Planícies O Mar O Mundo de Sofia O Ogro Montês O Primeiro Rato Letrado O Rei de Amarelo O Senhor dos Anéis O Sexo Invisível O Sonho de Duncan Parrennes O Tigre O Tigre e o Pescador Obras das minhas filhas Olga Soffer Os Incautos Os Livros da Selva Os Ratos Letrados Outono o Gênioso Oz Oz City Pedra do Teletransporte Polo Noel Atan Red John Rei Ladrão & Lâmina Randômica Robert William Chambers Rotbranch Samhain Sarcosuchusimperator Sobre a Escrita Sociedade Blake Stephen King Stranger From Hell TI Tevildo Thomas Alva Edison Tik Tak Tomas Ward Vida e Morte Wassily Wassilyevich Kandinsky William Blake Wyna daqui a três estrelas Yoshihiro Togashi Yu Yu Hakusho absinto aho aho akemi aleijadinho algoritmos alienígenas aluguel amazônia amor anagramas andarilhos animais de estimação animação anime ano novo aranha marrom aranha suprema arquétipo astronomia atalho atitudes autopublicação azar balabolka baladas banho frio banho gelado bicicleta bienal do livro biografia blogger boxe bugs caderno de lugar comum calçados militares caminhos escuros carlos ruas carnaval carta do chefe Seatle casa nova casas mal assombradas castelos castelos medievais categorias cavaleiro da lua celebrações pagãs chalupa chonchu chrome cidadania cientista civilização ciência condessa G condomínio configuração consciência conto epistolar coragem cordilheira dos andes crianças criaturas lupinas crimes cultura brasileira cultura otaku cárcere cães dark rider democracia deusa da lua e da caça dia das crianças dia de finados dia do saci dia dos mortos distopias doramas ecologia el niño ema encantos esboços escuridão espada espírito de luta espíritos exoplanetas falta de energia elétrica feiticeiras feitiçaria feitiços felicidade felipe ferri fome fonte tipográfica fonógrafo fortuna fundação japão game pass gratidão greve gênero hitória homens humor hábitos saudáveis ia para geração de imagens idealismo identidade igualdade de gênero imaginação imaterialismo inquisição jaci jaterê japão japão feudal jogos 2d jogos de plataforma jornada kami kraken kraken tinto labirintos labirintos 2D lealdade leitor cabuloso lenda guarani leste leviathan licantropia linguagem de programação literatura inglesa live action livros infanto juvenis loop lua de morango lugares mal assombrados lógica de programação malaquias mandalas matemática mawé mazolata mboi-tui meio ambiente melancolia memorização mercado de trabalho meu rh microsoft midjourney mitologia grega mitra mizu moccoletto mochila modelo de linguagem modo escuro molossus monograma monstros montanha morgoth morpheus moto motoqueiro mudança mudanças climáticas mulheres mundos método wim hof músicas neil gaiman noite eterna nomes de gatos pretos nona arte nostalgia o que é vida objetos mágicos ogros oração os sete monstros osamu tezuka patriarcado pena pensamentos perpétuos pesadelos pescador piedade pluto pod cast poderes povo nômade predadores prefácio primavera primeiras impressões problemas profecia pterossauro publicação independente qualidade de vida quarta parede reclamação reflorestamento religião religião de zath rio Pinheiros rio Tietê robôs roda do ano roma antiga romantismo cósmico romênia sacerdotisas de zath samurai de olhos azuis sarcosuchus Imperator saturnalia saturnália saúde segredos seres fantásticos serpente-papagaio sexo frágil sintetizador de voz smilodon sobrevivencialismo solstício solstício de inverno solstício de verão sonhar sophia perennis sorte suna mandís sustentabilidade série de terror tau e kerana teclado telhado telhas de pvc templo de hachiman tempo teoria das cores terror texto em fala ticê tigre dente de sabre totvs carol transilvânia travessão treinamento treino trevas trickster tumba de gallaman tv título um sábado qualquer universidades van helsing varacolaci vendaval verão vida em condomínio vigília da nevasca windows wombo art xamanismo xintoísmo ymir yule zath zoonoses águia ódio
Mostrar mais