lukanpeixe / projetocastleroid

Trabalhando em códigos para o mod/mapa de aventura para Terraria produzido pelo Idealizador e seguidores do canal Press key to play.
Apache License 2.0
8 stars 7 forks source link

5 - Mapa sem transição temporal e ocorrência de eventos. #21

Closed Gurigraphics closed 7 years ago

Gurigraphics commented 7 years ago
Main.time = 32400.1; // fica dia
Main.time = 0;  // fica noite
Outra opção
Main.dayTime = true; // fica dia

Se colocar isso na parte do código onde executa 60 FPS, vai paralisar o tempo em dia ou noite.

Os eventos:

Main.eclipse = false;
Main.bloodMoon = true;
Main.StartSlimeRain(true);
Main.StopSlimeRain(true);                           
Main.startSnowMoon();
Main.stopMoonEvent();
Main.startPumpkinMoon();
Main.stopPumpkinMoon();
Main.StartRain();
Main.StopRain();                            

Main.StartInvasion(3);
Main.invasionType = (__Null) 0;
Main.invasionX = (__Null) 0.0;
Main.invasionSize = (__Null) 0;
Main.invasionDelay = (__Null) 0;
Main.invasionWarn = (__Null) 0;
Main.invasionSizeStart = (__Null) 0;
Main.invasionProgressNearInvasion = (__Null) 0;
Main.invasionProgressMode = (__Null) 2;
Main.invasionProgressIcon = (__Null) 0;
Main.invasionProgress = (__Null) 0;
Main.invasionProgressMax = (__Null) 0;
Main.invasionProgressWave = (__Null) 0;
Main.invasionProgressDisplayLeft = (__Null) 0;
Main.invasionProgressAlpha = (__Null) 0.0;
lukanpeixe commented 7 years ago

Se colocar isso na parte do código onde executa 60 FPS, vai paralisar o tempo em dia ou noite.

Estava pensando, isso não deixa o mapa pesado? Porque parece que o tempo esta sendo resetado a cada frame. Eu tentei manipular o tempo com o mod do hero, e assim que coloquei para noite, ficou dia. A pergunta é, ele força dia só quando acontece noite, ou ele esta colocando aquela hora o tempo todo e por isso da a impressão de ele estar parado?

Embora esteja funcionando, talvez ter um comando de pause de verdade e dois itens wires com o comando "fica dia" e o comando "fica noite" me daria mais liberdade de design de fases...

Enfim, só uma reflexão rs

Kemado commented 7 years ago

Bom ao olhar o código da para disparar em um objeto wirelles, lógica: quando o jogador chegar no andar 8 a variável "Main.dayTime = false;" ou "Main.nightTime=true". Mudando assim o tempo...

Gurigraphics commented 7 years ago

O que altera a performance de um jogo é a manipulação de objetos: imagens, personagens, sons, etc. Objetos são "grandes conjuntos de dados e funções". Como aquela página inteira de código, que ele precisa ler e executar a todo instante. Por isso consome memória.

As variáveis elas são dados simples. Armazenam apenas true, false, número, palavra, etc. E servem justamente para ele saber o que deve ser executado ou não.

No nosso caso, se for 1 ele coloca dia, se for 0, coloca noite.

Alterar elas ou não, o programa precisa sempre verificar o valor delas para saber o que fazer. Por isso, praticamente não consome memória, uma vez que o CPU e GPU é capaz de lidar, e precisa lidar, com uma imensidão de variáveis a cada milésimo de segundo.

A pergunta é, ele força dia só quando acontece noite, ou ele esta colocando aquela hora o tempo todo e por isso da a impressão de ele estar parado?

Exato. Causa a impressão que está parado, mas é resetado a todo instante para impedir o tempo de avançar. E também para impedir o surgimento de eventos que também são determinados pela passagem do tempo.

Embora esteja funcionando, talvez ter um comando de pause de verdade e dois itens wires com o comando "fica dia" e o comando "fica noite" me daria mais liberdade de design de fases...

Ok. A primeira tarefa era descobrir como parar o tempo e eventos. Essa questão com wires acho que é o que o Samuel estava fazendo: https://github.com/lukanpeixe/projetocastleroid/issues/30

lukanpeixe commented 7 years ago

Obrigado pelo esclarecimento, acho que estou um pouco com aquele feeling de programador pré-histórico, que tinha que polir todo o código várias vezes para rodar liso no DOS haha

Vou deixar a parte de wire por enquanto com o Samuel no #30 mesmo :smile:

Gurigraphics commented 7 years ago

Isso continua igual. Os caras do Terraria que fizeram isso muito bem. Eu já tentei fazer jogo bem mais simples tipo Bomberman e travava tudo justamente por causa desses updates constantes.

Em javascript, por exemplo, existe o prototype que cria um objeto que herda as características do objeto principal. Assim, usar centenas de objetos é como usar um único objeto. O que é totalmente diferente que duplicar objetos e sobrecarregar a memória.

Terraria faz justamente isso. A diferença entre os NPCs são apenas aquelas configurações.

E além da estratégia de programação, também influência como a Engine lida com a memória, e também qual a plataforma, lógico. Porque o PC tem bem mais memória que um jogo web.