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

Yokais: as criaturas sobrenaturais do folclore japonês e sua história

O Tigre, de William Blake

Carmilla: a vampira de Karnstein

Katana Zero

Filtrando pelo campo TSK_STATUS

Halloween: qual a origem e curiosidades dessa festa cheia de gostosuras e travessuras?

A lenda do Mapinguari: tudo o que você precisa saber sobre o monstro da Amazônia

Nomes de gatos pretos: inspirações da literatura fantástica

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

Drácula: é capaz de controlar os lobos?

📮 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 Livros filosofia espada e feitiçaria Entretenimento Fantasia Sombria Poemas folclore Memorandos a rua dos anhangás histórias de mistério histórias de terror vampiros Contos literatura gótica Caravana Sombria diário halloween dicas Os Demônios de Ergatan histórias de aventura histórias de fantasma lobisomens Bram Stoker Oitocentos Aromas de Devaneio PODCASTS escrita games sagas Drácula O Governador das Masmorras O Leão de Aeris Psicotrápolas lendas lendas urbanas mitologia Atividade Física Conan o Bárbaro Histórias Sobrenaturais de Rudyard Kipling Rudyard Kipling Via Sombria conan exiles critica social kettlebell lua cheia micro contos natal paganismo resenha sociedade séries séries de tv Exercícios de Criatividade O Ventre de Pedra arqueologia feriado girevoy sport gyria inteligência artificial krampus krampusnacht masmorras papai noel xbox Robert Ervin Howard cultura pagã estrela negra folclore guarani ia indicação de séries liberdade melkor morte quadrinhos Capas Desenvolvimento de Jogos História Ilustrações Os Segredos dos Suna Mandís Passeios Space Punkers era hiboriana game designer harpia histórias de horror histórias góticas hq humanidade mangá netflix personagens poema gótico política prisão As Aventuras do Caça-Feitiço Conto Diana Haruki Murakami J.R.R.Tolkien Joseph Delaney O DIÁRIO DE IZZI O Homem Sem Memória Romancista como vocação Sandman V de Vingança Vampiros na literatura Wana anhangás animes aranhas arquivo umbra arte bruxaria bruxas chatgpt criação de histórias cultura gótica cultura japonesa cães estações do ano facismo fanfic fantasia fantasmas festividades gatos pretos godot jogos jurupari literatura magia mitologia brasileira outono paródia protheus sea of thieves sexta-feira 13 superstições totvs vida vingança A Fênix na Espada Aventura Café Holístico Carmilla: a vampira de Karnstein Cristianismo Joseph Conrad Joseph Sheridan Le Fanu O Chamado Selvagem O Coração das Trevas O Mentalista Terry Pratchett age of war anime animes de esporte anotações bokken cadernos capa castlevania ceticismo conto de terror cotia crenças criatividade criaturas fantásticas culto aos mortos demônios dia de todos os santos diabo drama educação engines espada espada de madeira espiritualidade evernote família farmer walk feitiçaria ficção ciêntifica ficção fantástica folclore indígena folclore japonês fotografias funcom hajime no ippo horror cósmico inverno leitores listas lobos lua azul matrix megafauna mitologia indígena monstros natureza notion objetos amaldiçoados opinião palácio da memória piratas podcast ratos reforma seres fantásticos sinopse sobrenatural série de terror templo zu lai tigre tutoriais utilidades viagem no tempo vila do mirante vlad tepes wicca xamanismo youkais Áudio-Drama A Arte da Guerra A Balada dos Dogmas Ancestrais A Cidade dos Sete Planetas A Cidadela Escarlate A Enciclopédia de Bars A Ilha do Tesouro A Sede do Viajante A Voz no Broche Adaptações do Zorro Age Of Sorcery Akira Toryama Amazon Prime Anne Rice Arthur C. Clarke As Mil e Uma Noites As Sombras do Mal Bad and Crazy Barad-dûr Berkely BlackSails Blog Breve encontro com Dracooh de Beltraam Bushido Caninos Brancos Canto Mordaz Carta Para um Sábio Engenheiro Cartas Chuck Hogan Clássicos Japoneses Sobrenaturais Daniel Handler Direitos Iguais Rituais Iguais Discworld Divulgação Doctor Who Dragon Ball Eiji Yoshikawa Elizabeth Kostova Elric de Melniboné Entrevista com o Vampiro Fantasia Épica Full Metal Alchemist Gaston Leroux Genghis Khan Grande A'Tuin Guillermo Del Toro Hoje é Sexta-Feira 13 e a Lua está Cheia Jack London Johann Wolfgang von Goethe Johnston McCulley Jornada de Autodescoberta 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 Feiticeiro de Terramar 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 October Faction Olga Soffer Os Incautos Os Livros da Selva Os Ratos Letrados Outono o Gênioso Oz Oz City Pedra do Teletransporte Pituxa Polo Noel Atan Red John Rei Ladrão & Lâmina Randômica Richard Gordon Smith Robert E. Howard Robert Louis Stevenson Robert William Chambers Rotbranch Safira Samhain Sarcosuchusimperator Simbad Sobre a Escrita Sociedade Blake Stephen King Stranger From Hell Série Zorro TI Tevildo Thomas Alva Edison Tik Tak Tomas Ward Tortuga Ursula K. Le Guin Valerio Evangelisti Vida e Morte Vó Mais Velha Wassily Wassilyevich Kandinsky William Blake Wyna daqui a três estrelas Yoshihiro Togashi Yu Yu Hakusho Zorro absinto aho aho akemi aleijadinho algoritmos alienígenas alquimia aluguel amazônia amor anagramas andarilhos animais de estimação animação ano novo aranha marrom aranha suprema arquétipo artesanato astronomia atalho atitudes autopublicação aves míticas azar balabolka baladas banho frio banho gelado bicicleta bienal do livro biografia blogger bokuto 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 corsários crianças criaturas lupinas crimes cultura brasileira cultura otaku cárcere dark rider dark side democracia deusa da lua e da caça devaneios dia das crianças dia de finados dia do saci dia dos mortos distopias diy doramas eclipse eclipse do sol eclipse solar ecologia el niño ema encantos esboços escultura escuridão espírito de luta espíritos exoplanetas falta de energia elétrica faça você mesmo feiticeiras feitiços felicidade felipe ferri fome fonte tipográfica fonógrafo fortuna fundação japão game pass gratidão greve gênero harpias histórias de pescador hitória hobby homenagem homens humor husky 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 katana kendo kraken kraken tinto labirintos labirintos 2D lealdade leitor cabuloso lenda guarani lendas antigas leste leviathan licantropia linguagem de programação literatura aventuresca literatura fantástica literatura inglesa live action livros infanto juvenis loop lua de morango lugares mal assombrados lógica de programação malaquias mandalas mangaká matemática mawé mazolata mboi-tui meio ambiente melancolia memorização mercado de trabalho meu rh microsoft midjourney mistério mitologia grega mitologia japonesa mitologia árabe mitra miyamoto musashi mizu moccoletto mochila modelo de linguagem modo escuro molossus monograma montanha morgoth morpheus moto motoqueiro mudança mudanças climáticas mulheres mundos método wim hof músicas narrativa navios piratas 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 piratas do caribe pluto pod cast poderes povo nômade povos aborígenes 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ê ritual robôs roc roca roda do ano roma antiga romantismo cósmico romênia roque sacerdotisas de zath samurai de olhos azuis sarcosuchus Imperator saturnalia saturnália saúde segredos serpente-papagaio sexo frágil sintetizador de voz sistema mágico smilodon sobrevivencialismo solstício solstício de inverno solstício de verão sonhar sophia perennis sorte suna mandís sustentabilidade série 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 treinameno 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 xintoísmo ymir yokai yokais youkai yule zath zoonoses águia ódio
Mostrar mais