Aprendendo PHP

Categories Blog

Olá, mundo!

Hoje eu acabo de completar o curso de PHP básico do Curso em Vídeo, yay! Eu fiz as aulas em uns 2 dias e agora me sinto mais preparado pra começar alguns projetos com a linguagem.

Prova final

Eu fiz 2 vezes a prova final. A primeira vez eu tive apenas 30% de precisão, mas na segunda tentativa eu fui melhor com 90% de precisão, assim conseguindo meu certificado.

Aprendendo a programar o NES

Categories Blog

Olá, mundo!

Faz bastante tempo que venho me interessando por fazer jogos para o NES, vi um vídeo muito bom do canal Morphcat Games sobre como eles fizeram o jogo de NES deles, mas só agora realmente comecei a fazer meus programinhas pro Nintendinho. Ainda não são jogos, mas estou caminhando para isso.

Recursos que eu utilizei

Eu utilizei o curso da Pikuma, um ótimo curso, e também utilizei a wiki do NesDev, que é uma comunidade de programadores, artistas e músicos que fazem coisas pro NES. Eu tive que aprender mais sobre o assembly de 6502 e muito sobre a arquitetura do Nintendinho em si para sequer começar a desenhar coisas na tela.

Aprendendo sobre o 6507

Categories Blog

Olá, mundo!

Hoje vou tentar ensinar sobre o 6507 pois eu comprei ele e não tenho nada melhor pra fazer e principalmente pois eu estou participando da Learning Jam 2024 da Handmade Network. Eu poderia fazer esse post em inglês mas acho que prefiro na nossa língua nativa (se você for brasileiro ou de algum outro país falante da língua portuguesa).

Introdução

O 6507 é um microprocessador feito originalmente pela MOS como uma versão mais acessível (e consequentemente mais limitada) do seu popular 6502.
Sendo utilizado no Atari 2600, ele tem:

  • 28 pinos
  • Um clock interno de 1.19MHz
  • Capacidade de endereçar até 8KB de ROM

Inicialização da CPU

Essa CPU inicia procurando por um endereço de entrada nos endereços FFFC e FFFD. Isso é um pouco complicado, mas quando ele lê os 2 bytes guardados nessas posições ele pula para o endereço formado ao juntar os bytes e começa a executar. Por exemplo, se eu guardar 00 do endereço FFFC e 60 no endereço FFFD o processador irá começar a executar no endereço 6000.

Como os bytes são interpretados?

Os bytes podem ser interpretados como um de dois tipos: um opcode e um argumento de um opcode. Opcodes são instruções para a CPU representadas por 1 byte, por exemplo, o byte A9 pode ser interpretado como a instrução que carrega um valor imediato no registrador A (mais sobre registradores depois).
Quando a CPU inicializa, ela automaticamente vai ler o byte no endereço especificado como um opcode, então tendo o primeiro byte como opcode podemos escrever o programa completo apenas entrando bytes e o 6507 irá interpretar corretamente se o programa estiver correto.

Registradores

O 6507 tem 3 registradores de uso geral: A, X e Y. Registradores são como containers de bytes, não necessariamente variáveis pois eles são compartilhados por todos os programas, são mais containers temporários mesmo. O Registrador A é usado para operações complexas com a Unidade Lógica e Aritmética (ALU), que é a unidade responsável por fazer as operações logicas como comparações de valores e aritméticas como adições e subtrações complexas. Ele é o único que tem acesso direto à ALU assim, podemos considerar ele o mais importante dos 3.
O X e o Y são usados geralmente para guardar valores que complementam o funcionamento do A. Vale ressaltar que apesar de não ter acesso à ALU, eles podem ser operados com adições/subtrações e podem até ser comparados. Um exemplo de uso dos registradores X e Y como auxiliares do A é na hora de fazer um loop:

LDX #3
Loop:
STA $0,X
DEX
BNE Loop

O código acima começa iniciando X com o decimal 3, logo após disso eu decidi criar uma label, o Loop. Labels são literalmente rótulos para um endereço da memória. Ao chamar Loop o assembler irá traduzir a palavra Loop para o endereço onde ela está. Depois de declarar essa label, eu guardo o valor que está no registrador A (o valor não importa) no endereço de memória 0 + X. Depois disso eu subtraio 1 de X e volto para o endereço de memória com a label Loop se for igual a 0. Um fato interessante é que quando uma adição ou subtração ocorre em qualquer registrador, o 6507 guardara um valor chamado de Zero Flag, que diz se a última operação aritmética teve o resultado de 0 assim salvando alguns bits de espaço e tempo de processamento neste caso que queremos saber se X for 0.

O que eu aprendi?

Nessa jam, eu aprendi sobre muitas coisas, mas eu sei que não sei nem um pouco sobre esse processador! Ainda preciso aprender sobre flags, sobre a stack, sobre como a ALU funciona entre outras coisas. Eu aprendi que eu gosto de anotar de uma maneira que ensina quem estiver lendo e não somente um lembrete da pesquisa. Eu gosto de aprender e ensinar, por isso quero ser professor 🙂

Conclusão

Com essa pequena introdução ao 6507 espero ter te mostrado o funcionamento básico dele. Espero que isso tenha te inspirado a fazer suas próprias perguntas e buscar suas próprias respostas sobre essa CPU. Muito obrigado!

Lendo: Sete breves lições de física

Categories Blog

Olá, mundo!

Hoje eu comprei o livro indicado no título do post e eu estou muito fazer lendo ele. Eu li os dois primeiros capítulos e gostaria de compartilhar sobre eles.

Ciência por meio do storrytelling

Este livro (até agora) não é um livro educativo. É um livro de pop science que explica de forma simples sobre a ciência mas, principalmente, sobre a história dos cientistas citados.

Eu estou achando isso um ótimo jeito de me interessar mais sobre ciência. Não que eu não me interesso, mas sempre foi um interesse superficial e agora, conhecendo sobre os cientistas eu estou querendo me aprofundar mais!

Voltei e me desculpe!

Categories Blog

Olá, mundo!

Quanto tempo, hein? Sim, eu sou o Gabriel e agora esse é o novo endereço do meu blog 🙂
Quero dizer que eu estou arrependido do último post, eu falei coisas apenas para ofender e provar uma ideia mesmo que não fosse a ideia que eu acreditasse. Porém, eu não vou remover pois esse blog NUNCA apaga a história, mesmo que falha.

Jogos artísticos

Categories Blog

 

Jogos artísticos são jogos feitos para serem contemplados e feitos para que o jogador sinta uma sensação ou entenda uma ideia. Meus amigos mais próximos fazem outro tipo de jogo: o jogo como produto.

A diferença é que o jogo como produto tem como principal objetivo lucrar. Agora, não é porque o jogo tem um objetivo de lucrar que ele não pode ter elementos artísticos, mas só tô falando que a arte é deixada de lado ou pelo menos filtrada para tirar as partes que os jogadores vão odiar ao ponto de reembolsar. A mesma coisa funciona para os jogos artísticos: o lucro é desejado, porém fica em segundo plano.

A minha maior inspiração nesse quesito é o Braid do Jonathan Blow, um game designer genial mas que geralmente é taxado como elitista por ter uma baixa tolerância com erros, o que eu não gosto, mas também não faz dele um elitista, ok? Ok.

O Braid foi um sucesso de vendas, e ainda sim é um jogo artístico. Agora, uma confusão comum que eu tive é falar que jogos artísticos não tem game design, isto é: não é divertido ou não tem uma estrutura definida. Muito pelo contrário, os jogos artísticos tem o puro suco do game design, que na minha opinião é a quebra de expectativa sobre o jogo. Se o seu jogo é previsível, provavelmente ele é ruim. Eu não digo previsível nas regras, mas digo um jogo que seja vazio de surpresas ou estímulos.

Um jogo feito apenas para vender pode ser bom, mas eu não concordo com isso nem no pior caso. A maioria das pessoas desejam uma experiência que vai além de:

  1. Gastar 2,29 no jogo

  2. Jogar até acabar

  3. Dar review

  4. Repetir

E eu acho que, até no ponto de vista do mercado, estão faltando jogos realmente artísticos e que focam em dar experiências e não receber dinheiro. Jogos que são artísticos são normalmente feitos por pessoas que não tem nada a perder porque estão no fundo do poço. Eu não tenho capacidade de explicar isso, então, se você souber inglês eu recomendo o canal Design Theory e o seu vídeo sobre como a sociedade mata a criatividade.

Eu tenho um projeto, o sausage cat. É um jogo sobre um gato que pode esticar e tem o formato de uma salsicha. Antes de refletir, eu queria muito fazer um jogo como produto, pois eu gosto de dinheiro, mas percebi que: esse jogo seria uma bosta se fosse um puzzle sokoban genérico com 100 fases. Então por isso eu decidi fazer uma versão expandida dele, o jogo ainda vai ser lançado e ainda vai se chamar sausage cat.

Primeiro mês de trabalho!!!

Categories Blog

Olá, mundo!

Hoje eu vou falar sobre como foi meu primeiro mês de trabalho na empresa, como está sendo o meu desempenho e o que eu imagino para meu futuro dentro e fora dela.

Bem, continuando a história (veja o post “Primeira semana de trabalho” para ter um contexto melhor) eu continuei programando o projeto. Nesse meio tempo o ClickUp atualizou para a versão 3.0 (e ainda estou tentando me adaptar a ela) e aconteceram muitas coisas na minha escola também. Caso não saiba eu estou no segundo ano do ensino médio noturno e por isso fica bem difícil gerenciar o meu tempo.

Eu diria que a primeira etapa do projeto, a pré-produção, está quase pronta. Na empresa temos duas boards de tarefas: a produção e a pré-produção. 

A board de pré-produção engloba todo o código necessário para fazer o jogo rodar como software e para que o game designer possa mexer no projeto confortavelmente. 

Já a board de produção é a produção final do jogo. Aqui entra o polimento dos visuais, do código, da UI/UX e muito playtesting. Eu espero chegar na produção até a segunda semana de dezembro.

Porém, eu estou considerando a possibilidade de sair da empresa (depois de terminar esse projeto, claro) para focar nos estudos. Eu fico triste em dizer isso pois eu estou gostando bastante de trabalhar aqui, mas eu preciso passar em alguma universidade para aprender/fazer networking e possivelmente voltar à empresa depois 😉

 

Aprendendo C com o Handmade Hero!

Categories Blog

 

Olá, mundo!

Recentemente eu
venho acompanhando a incrível série de vídeos Handmade Hero feita
pelo Casey Muratori no seu canal Molly Rocket e eu quero falar sobre
o que eu estou aprendendo e como estou aprendendo isso.

Eu tenho que dizer
que pulei as streams introdutórias pois eu já sabia o básico de C
(ou, pelo menos, eu achava que sabia). Foi um erro, pois eu perderia
bem menos tempo caso eu tivesse assistido todos os episódios
introdutórios. Mas okay, vamos direto para o real primeiro episódio
da série. Bem, na verdade eu pulei ele também pois eu usaria o
Visual Studio. Esse primeiro episódio era sobre configurar o
compilador, mas com o Visual Studio ele já vem configurado.

Okay, no segundo
episódio eu aprendi a como abrir uma janela usando a API do Windows.
Foi um pouco difícil de fazer, mas, e isso vai se repetir, eu só
aprendi quando decidi fazer sem acompanhar o vídeo. Quando eu saio
do tutorial, seja reimplementando algo visto nele ou implementando
algo novo, eu definitivamente aprendo.

Outra dica é usar o
Visual Studio e seu Debugger, pois ele vai te ajudar a entender as
variáveis e seus tipos que, acredite, não são nomeadas de forma
intuitiva. Por exemplo, você não saberia o que é um LPCSTR no seu
primeiro dia, pois é uma abreviação para “Large Pointer to a
Constant String”.

Depois disso, parti
para alocar um buffer de bitmap usando o GDI, que hoje em dia não é
mais utilizado porém para propósitos educacionais é uma benção.
Aprendi como funcionou só depois de refletir no código que escrevi.
Basicamente, o Casey usa o 32 bits para cada pixel, 2 para vermelho,
2 para verde, 2 para azul e 2 que servem apenas para preencher o
espaço vazio. Inclusive, no dia que escrevo esse roteiro é o dia
que eu consegui fazer esse buffer sem ver o tutorial. Foi complicado,
mas foi.

No sexto episódio o
Casey mostrou como carregar o Xinput para gamepads. Aprendi por conta
própria como carregar essa biblioteca dinamicamente com uma DLL e
senti que de fato eu estava ficando melhor.

Depois disso, decidi
divergir um pouco do tutorial pois ele usava DirectSound, que é
velho e ruim. Um membro do Handmade Network, uma comunidade que foi
criada com base no Handmade Hero mas agora é independente, me disse
para usar WASAPI. Desde então eu venho tentando implementar isso,
parece que eu consegui iniciar tudo certinho porém não consigo dar
o output no buffer de som. Edit: Consegui! Eu não estava pensando no
hardware. O som só é produzido se tiver vibração e eu estava
escrevendo um valor constante.

E é basicamente
isso, espero que tenham gostado e até mais!

Primeira semana de trabalho

Categories Blog

Olá, mundo!

Dia 23/10/2023 foi o meu primeiro dia no meu primeiro emprego. Sou um Desenvolvedor de jogos júnior e hoje venho aqui contar sobre minha primeira semana de emprego.
No primeiro dia eu fui apresentado à pipeline de produção da empresa. Fui apresentado ao sistema de daily reports. No fim de cada dia eu faço pelo menos um commit no repositório do projeto e faço um resumo do que eu fiz no dia. Eu gosto bastante desse sistema e minha média de tarefas é de cinco (médias) por dia. Desejo aumentar essa média.
No segundo dia eu comecei de fato a programar, comecei os sistemas básicos do jogo. No terceiro dia, além de desenvolver, comecei a socializar com os meus colegas, eles são bem legais. O quarto foi a mesma coisa que o segundo. No quinto eu fui apresentado ao Producer, ele é muito capacitado e também é novo na empresa. Nos dias 6 e 7 eu fiz o padrão do dia 2.

Potion: o meu clone de Notion

Categories Blog

Olá, mundo!

Venho aqui compartilhar meu novo projeto: o Potion. Ele é um clone de Notion feito pra web sem frameworks (até porque eu não sei nenhum)
Por enquanto ele tem apenas a função de escrever, apagar e criar headings usando sintaxe markdown. Além disso, ele tem vários bugs ao deletar caracteres.