Entrar
Últimos assuntos
» Colisões não funcionandopor RastaMaan Hoje à(s) 19:49
» Como ajustar velocidade de cada frame da animação no game maker
por pequetux Hoje à(s) 16:45
» Preciso de ajuda
por AftonDuGrau Dom 21 Abr 2024, 20:18
» Como faz o evento drawn GUI, não se repetir?
por aminaro Sex 19 Abr 2024, 20:30
» PROBLEMAS COM FÍSICAS DE ÁGUA
por aminaro Ter 16 Abr 2024, 10:07
» Retorno da GMBR!!!
por Ralphed Sex 12 Abr 2024, 22:45
» JOGADOR PARANDO NO AR QUANDO ATACA
por aminaro Qua 10 Abr 2024, 13:51
» Problemas com texto interativo
por Kaaru72 Dom 07 Abr 2024, 11:31
» Erro escondido e indecifrável
por dev_gabize.azv Qui 04 Abr 2024, 10:11
» Mudar cor de apenas uma palavra
por Ralphed Sáb 30 Mar 2024, 00:39
» Procuro Programador de game maker
por Wou Sex 15 Mar 2024, 10:27
» Mod APK
por gamerainha Qua 13 Mar 2024, 06:30
» Aceito pedidos de sprites (Com exemplos meus)
por Sevilha Qua 28 Fev 2024, 12:17
» Inventário simples
por Isquilo_Roedor Qui 22 Fev 2024, 15:18
» Problemas na programaçnao de inimigo [jogo DOOM LIKE]
por Black Mirror Dom 11 Fev 2024, 13:34
» ANDROID MULTI TOUCH
por DiegoBr Dom 04 Fev 2024, 12:13
» Servidor de Discord do fórum?
por Lighter Sáb 27 Jan 2024, 17:18
» Save e Load Json
por Klinton Rodrigues Qui 25 Jan 2024, 11:12
» Colisão com mais de um objeto
por aminaro Seg 22 Jan 2024, 15:02
» Oi sou novo aqui
por Thiago Silveira Alexandre Sáb 20 Jan 2024, 20:55
» Como acessar conteudo comprado no marketplace
por macmilam Sex 19 Jan 2024, 07:42
» Devlogs em vídeos do Block Room
por Joton Seg 15 Jan 2024, 16:56
» Alguém aqui já ganha dinheiro com seus games?
por Joton Seg 15 Jan 2024, 16:49
» ACERVO GMBR MAGAZINE
por Joton Qui 11 Jan 2024, 19:21
» como aumentar o obj sem aumentar a colisão??
por GabrielXavier Qua 10 Jan 2024, 07:21
[Ideia] .EXE? Não cara, .GAME!
+4
theguitarmester
Overflow
All-x
luiz_eldorado
8 participantes
GMBR :: Projetos :: Idéias e Enredos
Página 1 de 1
[Ideia] .EXE? Não cara, .GAME!
Não queria postar isso, mas à pedido do moisesBR, vou postar.
Cada exe que você baixa de jogos tem 2mb à mais do que o próprio jogo. Se você baixar esses 2mb apenas uma vez nesse programa, e depois baixar apenas os jogos mesmo, estará economizando 2mb por cada jogo. Isso é um bom alívio para os que tem internet 3g (que na verdade é 2g, mas isso não vem ao caso).
Porém estou com problemas, estou procurando ajuda masninguém me ajuda não tive muitos sucessos. Preciso de ajuda com coisas como: Como será a organização dos arquivos dentro do arquivo? Lembrando que o jogo será carregado dentro do executável, no Creation Code da primeira room sem nome.
Ah, eu já vi o jogo genérico do saim.
Arquivos .game
O usuário baixaria um programa exe que eu mesmo fiz, que executa arquivos .game (não fiz ainda...). Então ele baixaria arquivos .game (que são zip com extensão mudada) de algum lugar, nesses arquivos teriam jogos criados no Game Maker - não o exe, mas sim os objetos, sprites, room espalhados em arquivos dentro deste zip.Cada exe que você baixa de jogos tem 2mb à mais do que o próprio jogo. Se você baixar esses 2mb apenas uma vez nesse programa, e depois baixar apenas os jogos mesmo, estará economizando 2mb por cada jogo. Isso é um bom alívio para os que tem internet 3g (que na verdade é 2g, mas isso não vem ao caso).
Porém estou com problemas, estou procurando ajuda mas
Ah, eu já vi o jogo genérico do saim.
Re: [Ideia] .EXE? Não cara, .GAME!
Cara a ideia é legal, só que não.
Resumindo teriamos que ter um programa para rodar os jogos. Seria como o Game Maker 1. Iria perder a praticidade.
Economizar apenas 2 Mb não é o bastante para a ser atrativo, mesmo que isso seja pra vários jogos. 2G baixa rápido:
2G - EDGE - 256 Kbits /s - 32 Kbytes /s: baixaria em 1 m e 04 segundos;
2G - GPRS - 56 Kbits /s - 7 Kbytes /s: baixaria em 4 m e 45 segundos;
Lógicamente existe o limite de tráfego que limita a velocidade, mas mesmo assim não demora muito não.
É teoricamente fácil fazer isso que você quer (Usando funções binárias). Mas isso implicaria diretamente na velocidade do jogo, pois teriamos que descompactar os arquivos e logo também teriamos que carrega-los.
Edit: Olhe o esquema que fiz para tu entender como é "facil":
FLWS!
Resumindo teriamos que ter um programa para rodar os jogos. Seria como o Game Maker 1. Iria perder a praticidade.
Economizar apenas 2 Mb não é o bastante para a ser atrativo, mesmo que isso seja pra vários jogos. 2G baixa rápido:
2G - EDGE - 256 Kbits /s - 32 Kbytes /s: baixaria em 1 m e 04 segundos;
2G - GPRS - 56 Kbits /s - 7 Kbytes /s: baixaria em 4 m e 45 segundos;
Lógicamente existe o limite de tráfego que limita a velocidade, mas mesmo assim não demora muito não.
É teoricamente fácil fazer isso que você quer (Usando funções binárias). Mas isso implicaria diretamente na velocidade do jogo, pois teriamos que descompactar os arquivos e logo também teriamos que carrega-los.
Edit: Olhe o esquema que fiz para tu entender como é "facil":
FLWS!
Re: [Ideia] .EXE? Não cara, .GAME!
acho que com um registro no sistema operacional do usuario, daria para executar sem precisar de um programa, ou seja, pelo DOS (cmd) do sistema operacional, assim o computador entenderia a extensão...
Overflow- Data de inscrição : 22/03/2012
Reputação : 1
Número de Mensagens : 42
Prêmios :
x 0 x 0 x 0
x 0 x 0 x 0
x 0 x 0 x 0
Re: [Ideia] .EXE? Não cara, .GAME!
Acho que você não entendeu o que está sendo debatido, ele quer fazer um Arquivo/jogo/projeto que exexuta outros, esse outros que seriam jogos feitos com base no GameMaker, ou algo assim.Overflow escreveu:acho que com um registro no sistema operacional do usuario, daria para executar sem precisar de um programa, ou seja, pelo DOS (cmd) do sistema operacional, assim o computador entenderia a extensão...
Vou Ver se consigo Fazer Algo do Tipo.
Re: [Ideia] .EXE? Não cara, .GAME!
Eu andei pensando, acho que aquilo que falei por mensagem funcionaria.
Cada arquivo .game pode ter um arquivo com nome padronizado, que vou chamar de "principal". O executável procuraria esse arquivo e veria as instruções dentro dele, que seriam transformadas em uma string e executadas. Nessas instruções estariam as localizações dos demais arquivos dentro do .game, que seriam acessados e transformados em strings, na ordem definida pelo arquivo principal.
Aí, essas strings seriam executadas na ordem correta, o que adicionaria objetos, eventos, recursos, tudo de dentro do .game. A restrição que você comentou das aspas acaba não comprometendo muito a programação. Falo por experiência própria - o meu game genérico tem essa restrição e eu me viro numa boa.
Claro que há mais restrições, também.
Cada arquivo .game pode ter um arquivo com nome padronizado, que vou chamar de "principal". O executável procuraria esse arquivo e veria as instruções dentro dele, que seriam transformadas em uma string e executadas. Nessas instruções estariam as localizações dos demais arquivos dentro do .game, que seriam acessados e transformados em strings, na ordem definida pelo arquivo principal.
Aí, essas strings seriam executadas na ordem correta, o que adicionaria objetos, eventos, recursos, tudo de dentro do .game. A restrição que você comentou das aspas acaba não comprometendo muito a programação. Falo por experiência própria - o meu game genérico tem essa restrição e eu me viro numa boa.
Claro que há mais restrições, também.
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: [Ideia] .EXE? Não cara, .GAME!
Teria um jeito de entender como o GM compila os arquivos .gmk, seria mais fácil fazer isso em Delphi.
Não sei se estou falando besteira, mas seria como um GMK compactado em um arquivo de extensão personalizada (.game no caso) dai você extraía ele para uma pasta temporária e dava um jeito de compilar e executar o .gmk.
Seria isso que seu programa faria?
Você quer ele em GML?
Posso dar uma pesquisada, você sabe como se chama programas que fazem isso?
Não sei se estou falando besteira, mas seria como um GMK compactado em um arquivo de extensão personalizada (.game no caso) dai você extraía ele para uma pasta temporária e dava um jeito de compilar e executar o .gmk.
Seria isso que seu programa faria?
Você quer ele em GML?
Posso dar uma pesquisada, você sabe como se chama programas que fazem isso?
Re: [Ideia] .EXE? Não cara, .GAME!
@Alex FC: Não sei, mas pra mim parece que 2mb é muita coisa. Deve ser porque, quando o download é muito grande, ele dá falhar no meio, tendo que reiniciar. E pra mim, 5 minutos valem outro. Esse esquema que você fez, é meio estranho. Pelo jeito você pensa no arquivo .game como um arquivo com vários arquivos. Isso pode ser mais simples usando .zip. Mesmo assim, o que siginifica um "arquivo objeto"? O que teria dentro dele, exatamente?
PS: "Roons"
@Overflow e @theguitarmester: É o que o theguitarmester disse. Se conseguir fazer, me avisa >)
@saim: Sim, sim, isso mesmo que eu pensei... Mas que restrição que comentei entre aspas?
@luiz_100juizo: É difícil entender como GM faz estes arquivos, e não tem nenhum tipo de informação na internet. Não adianta nada mascarar o .gmk por .game. Assim isso meio que perderia a utilidade. Meu programa vai ter um tipo de arquivo próprio, contendo todas as informações que encontraria num .gmk, porém de forma "diferente". Acho que não vai achar nada na net.
Por enquanto nenhum progresso. Se quiserem ver o GMK do executador do .game...
!siam étA
PS: "Roons"
@Overflow e @theguitarmester: É o que o theguitarmester disse. Se conseguir fazer, me avisa >)
@saim: Sim, sim, isso mesmo que eu pensei... Mas que restrição que comentei entre aspas?
@luiz_100juizo: É difícil entender como GM faz estes arquivos, e não tem nenhum tipo de informação na internet. Não adianta nada mascarar o .gmk por .game. Assim isso meio que perderia a utilidade. Meu programa vai ter um tipo de arquivo próprio, contendo todas as informações que encontraria num .gmk, porém de forma "diferente". Acho que não vai achar nada na net.
Por enquanto nenhum progresso. Se quiserem ver o GMK do executador do .game...
!siam étA
Re: [Ideia] .EXE? Não cara, .GAME!
Tentei aprender sobre seu projeto, mas não entendi muito, Resolvi Criar um EXE meu, depois se funcionar algo, postarei aqui, mas ele por enquanto vai ser bem testes mesmo.
Re: [Ideia] .EXE? Não cara, .GAME!
Uma ferramenta interessante que poderia ajudá-lo é:
https://gmbr.forumeiros.com/t21709-gmk-splitter
Com ela você extrai o conteúdo do GMK para uma pasta e vice-versa.
Desse modo, você pode ler os arquivos sem estes estarem compilados ou salvos de algum outro modo.
Editado:
Continuando a ideia, você pode fazer assim:
Ao escolher o GMK, o seu programa via linha de comando extrai tudo para uma pasta. Então ele compacta em um arquivo com senha. Ele gera também um código e salva num arquivo de texto. Quando a pessoa distribuir, só o programa poderá decifrar o código e então saberá a senha para descriptografar. Então você precisa agora é ler os arquivos XML, que são de texto, gerando assim os objetos. Essa é a parte mais complicada. Existe uma DLL, a Ether, que lê esses arquivos mais facilmente.
Essa é apenas uma ideia, que pode ou não dar certo.
https://gmbr.forumeiros.com/t21709-gmk-splitter
Com ela você extrai o conteúdo do GMK para uma pasta e vice-versa.
Desse modo, você pode ler os arquivos sem estes estarem compilados ou salvos de algum outro modo.
Editado:
Continuando a ideia, você pode fazer assim:
Ao escolher o GMK, o seu programa via linha de comando extrai tudo para uma pasta. Então ele compacta em um arquivo com senha. Ele gera também um código e salva num arquivo de texto. Quando a pessoa distribuir, só o programa poderá decifrar o código e então saberá a senha para descriptografar. Então você precisa agora é ler os arquivos XML, que são de texto, gerando assim os objetos. Essa é a parte mais complicada. Existe uma DLL, a Ether, que lê esses arquivos mais facilmente.
Essa é apenas uma ideia, que pode ou não dar certo.
Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.
Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.
Aprenda a calcular a velocidade de suas animações
Entre para o Clube do Inglês:
Re: [Ideia] .EXE? Não cara, .GAME!
Não, você não comentou entre aspas... você comentou A RESPEITO das aspas!luiz_eldorado escreveu:Mas que restrição que comentei entre aspas?
É que ao acrescentar eventos usando object_event_add a gente entra com o evento na forma de uma string. Essa string, claro usa aspas (' ou ") pra ser considerada string. Como nós queremos incluir strings muitos eventos (como, digamos, o draw_event), precisamos colocar aspas dentro dessa string, o que o game maker consideraria como o fechamento da string anteriormente aberta.
Um exemplo, pra não enlouquecermos:
- Código:
object_event_add(objeto, ev_draw, 0, 'draw_text(x, y, 'olá mundo');');
Claro que sempre tem a string dentro da string dentro da string, até a loucura. Pra isso, eu costumo armazenar as strings em variáveis e usá-las. Dá um trabalho maior, não dá pra generalizar a solução, mas resolve.
- Código:
globalvar texto; texto = 'olá mundo';
object_event_add(objeto, ev_draw, 0, 'draw_text(x, y, texto);');
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: [Ideia] .EXE? Não cara, .GAME!
Saim, essa é uma Questão Muito chata Mesmo, estava um dia a Fazer um Projeto que soltava arquivos, daí testei fazer com uma Foto, mas daí no Texto da foto Contem aspas dos 2 tipos, e então dava erro.
Será que não existe nem um Modo dele entender algo como só STRING, ou senão um modo em que para fechar o ASPAS aberto, teria de ter o Mesmo numero de Aspas?
Por exemplo:
varivaveltexto = """"""""""asdbjhzbdfkjad fasdhfo\s 2' 'bhlbl2 e32h1o '''i l'glui' ' uyg'' ' 'lui'gi'lg "IL"UG """""gui xxx x 200
3872912b 1 12ib3 //continua texto da variavel y y 22 iç2 2hb222 i
1 1 *.*+* * // edoqw qb23 432 2 1
1li GH""""kjç GHGH'" kjsdblkjsa """""""""" //texto já fechado
Será que não existe nem um Modo dele entender algo como só STRING, ou senão um modo em que para fechar o ASPAS aberto, teria de ter o Mesmo numero de Aspas?
Por exemplo:
varivaveltexto = """"""""""asdbjhzbdfkjad fasdhfo\s 2' 'bhlbl2 e32h1o '''i l'glui' ' uyg'' ' 'lui'gi'lg "IL"UG """""gui xxx x 200
3872912b 1 12ib3 //continua texto da variavel y y 22 iç2 2hb222 i
1 1 *.*+* * // edoqw qb23 432 2 1
1li GH""""kjç GHGH'" kjsdblkjsa """""""""" //texto já fechado
Re: [Ideia] .EXE? Não cara, .GAME!
@PedroX: Hmmm, interessante esse GMK Spliter. Sim, seu edit é uma boa idéia, mas ler todos esses arquivos em xml... dá trabalho, vou tentar um pouco aqui, gostei dessa Ether, talvez dê pra criar um navegador com ela!
@saim:
@theguitarmester: Acho que não há comos sobre isso.
Bem, não estou nada animado com o projeto, está aí:
Aleatorizador.game:
@saim:
Ri nessa parte! XD Esse code que deu de exemplo é loucura. O jeito é ler todos os eventos de arquivos mesmo. Algo assim:saim escreveu:Não, você não comentou entre aspas... você comentou A RESPEITO das aspas!luiz_eldorado escreveu:Mas que restrição que comentei entre aspas?
- Código:
object_event_add(objeto,ev_draw,0,execute_file("lerarquivo.gml","objeto_draw.objev"));
@theguitarmester: Acho que não há comos sobre isso.
Bem, não estou nada animado com o projeto, está aí:
- Código:
/*** Simples sistema de carregamento de arquivos ".game" ***/
//Tela de "Loading"
draw_set_color(c_white); draw_set_halign(1); draw_set_valign(1);
screen_redraw(); draw_text(room_width/2,room_height/2,'Waiting user...'); screen_refresh();
//Executar arquivo se for aberto com o programa ("Abrir com...", etc).
//Caso aberto diretamente, perguntar pelo arquivo.
var fname;
fname=parameter_string(1);
if fname="" {
fname=get_open_filename("Game file (*.game)|*.game","");
if fname="" {game_end(); exit;}
}
//Para evitar problemas
if !file_exists(fname) {show_message("The file not exists."); game_end(); exit;}
//Recriar pasta
if !directory_exists(working_directory+"\temp")
{directory_create(working_directory+"\temp");}
screen_redraw(); draw_text(room_width/2,room_height/2,'Unziping...'); screen_refresh();
//Necessário para o VBSZIP (o arquivo tem que ser ".zip")
file_copy(fname,working_directory+'\temp.zip');
//Começo do "VBSZIP" (por Ninja8086)
//Foi modificado um pouco por razões de espaço, e etc.
//E não está em scripts, pois não se pode para este programa.
var Script, ZipFile, ZipDir, VBScript, TempFile;
ZipFile = working_directory+'\temp.zip';
ZipDir = working_directory+"\temp";
Script = file_text_open_write(environment_get_variable('TEMP')+'\gmzip.vbs');
VBScript = '
Set GMZIP = CreateObject("Shell.Application")
GMZIP.NameSpace("' + ZipDir + '").CopyHere GMZIP.NameSpace("' + ZipFile + '").Items
';
file_text_write_string(Script, VBScript);
file_text_close(Script);
TempFile = environment_get_variable('TEMP')+'\gmzip.vbs';
execute_program('wscript', TempFile, true);
file_delete(TempFile);
//Fim do "VBSZIP"
//Não preciso mais disto
file_delete(working_directory+'\temp.zip');
//Configurações globais do jogo
screen_redraw(); draw_text(room_width/2,room_height/2,'Loading Global Game Settings');
screen_refresh();
var a;
a=file_text_open_read(working_directory+'\temp\global_game_settings');
var fullscreen,scale,color,sizeable,stayontop,showborder,showicons,cursor,colordepth,w,h,
frequency,syn,priority;
fullscreen=real(string_digits(file_text_read_string(a)));
file_text_readln(a); scale=real(string_digits(file_text_read_string(a)));
file_text_readln(a); color=real(string_digits(file_text_read_string(a)));
file_text_readln(a); sizeable=real(string_digits(file_text_read_string(a)));
file_text_readln(a); stayontop=real(string_digits(file_text_read_string(a)));
file_text_readln(a); showborder=not real(string_digits(file_text_read_string(a)));
file_text_readln(a); showicons=not real(string_digits(file_text_read_string(a)));
file_text_readln(a); cursor=real(string_digits(file_text_read_string(a)))+1;
file_text_readln(a); colordepth=real(string_digits(file_text_read_string(a)));
file_text_readln(a); w=real(string_digits(file_text_read_string(a)));
file_text_readln(a); h=real(string_digits(file_text_read_string(a)));
file_text_readln(a); frequency=real(string_digits(file_text_read_string(a)));
file_text_readln(a); syn=real(string_digits(file_text_read_string(a)));
file_text_readln(a); priority=real(string_digits(file_text_read_string(a)));
file_text_close(a);
window_set_fullscreen(fullscreen); window_set_region_scale(scale,0); window_set_color(color);
window_set_sizeable(sizeable); window_set_stayontop(stayontop);
window_set_showborder(showborder); window_set_showicons(showicons); window_set_cursor(cursor);
display_set_all(w,h,frequency,colordepth); set_synchronization(syn);
set_program_priority(priority);
//Objetos
screen_redraw(); draw_text(room_width/2,room_height/2,'Loading Objects'); screen_refresh();
//begin; Créditos ao Jiraya, modificado por mim para fazer o que eu realmente queria
var i,f,pastas,dir,arquivos;
pastas=ds_list_create();
arquivos=ds_list_create();
dir=working_directory+"\Objects";
for(i=file_find_first(dir+"\*",fa_directory);i!="";i=file_find_next();)
{
if(i=="."||i=="..")continue;
if(directory_exists(dir+"\"+i)) {
ds_list_add(pastas,dir+"\"+i);
execute_string('globalvar '+i+';');
res=object_add();
variable_global_set(i,res);
a=file_text_open_read(dir+"\"+i+'\settings');
object_set_sprite(res,real(file_text_read_string(a))); file_text_readln(a);
object_set_visible(res,real(file_text_read_string(a))); file_text_readln(a);
object_set_solid(res,real(file_text_read_string(a))); file_text_readln(a);
object_set_depth(res,real(file_text_read_string(a))); file_text_readln(a);
object_set_persistent(res,real(file_text_read_string(a))); file_text_readln(a);
object_set_parent(res,real(file_text_read_string(a))); file_text_readln(a);
object_set_mask(res,real(file_text_read_string(a))); file_text_close(a);
}
}
file_find_close();
while(ds_list_size(pastas))
{
dir=ds_list_find_value(pastas,0);
ds_list_delete(pastas,0);
for(i=file_find_first(dir+"\*.*",fa_directory);i!="";i=file_find_next();)
{
if(i=="."||i=="..")continue;
if(directory_exists(dir+"\"+i))ds_list_add(pastas,dir+"\"+i);
if(file_exists(dir+"\"+i)) {
ds_list_add(arquivos,dir+"\"+i);
s='';
a=file_text_open_read(dir+"\"+i);
while !file_text_eof(a) {
s+=file_text_read_string(a)+chr(13)+chr(10);
file_text_readln(a);
}
file_text_close(a);
object_event_add(res,string_copy(i,1,string_pos(' ',i)),
string_copy(i,string_pos(' ',i)+1,string_length(i)-string_pos(' ',i)+1),s);
}
}
file_find_close();
}
ds_list_destroy(arquivos);
ds_list_destroy(pastas);
//Rooms
screen_redraw(); draw_text(room_width/2,room_height/2,'Loading Rooms'); screen_refresh();
var i,f,pastas,dir,arquivos;
pastas=ds_list_create();
arquivos=ds_list_create();
dir=working_directory+"\Rooms";
for(i=file_find_first(dir+"\*.*",fa_directory);i!="";i=file_find_next();)
{
if(i=="."||i=="..")continue;
if(directory_exists(dir+"\"+i)) {
ds_list_add(pastas,dir+"\"+i);
execute_string('globalvar '+i+';');
res=room_add();
variable_global_set(i,res);
a=file_text_open_read(dir+"\"+i+'\settings');
room_set_caption(res,file_text_read_string(a)); file_text_readln(a);
room_set_width(res,real(file_text_read_string(a))); file_text_readln(a);
room_set_height(res,real(file_text_read_string(a))); file_text_readln(a);
room_set_code(res,"room_speed="+file_text_read_string(a)+";"); file_text_readln(a);
room_set_persistent(res,real(file_text_read_string(a)));
file_text_close(a);
a=file_text_open_read(dir+"\"+i+'\background');
var col, show;
show=real(file_text_read_string(a)); file_text_readln(a);
col=real(file_text_read_string(a)); file_text_readln(a);
room_set_background_color(res,col,show); file_text_close(a);
var xx,yy,oo;
a=file_text_open_read(dir+"\"+i+'\instances');
while !file_text_eof(a) {
s=file_text_read_string(a)+' '; file_text_readln(a);
xx=real(string_copy(s,1,string_pos(' ',s))); s=string_delete(s,1,string_pos(' ',s)+1);
yy=real(string_copy(s,1,string_pos(' ',s))); s=string_delete(s,1,string_pos(' ',s)+1);
oo=real(string_copy(s,1,string_pos(' ',s)));
room_instance_add(res,xx,yy,oo);
}
//Futuramente terá tiles e backgrounds! Ou não! XD
}
}
file_find_close();
ds_list_destroy(arquivos);
ds_list_destroy(pastas);
//end;
if directory_exists(working_directory+"\temp") {
screen_redraw();
draw_text(room_width/2,room_height/2,'Deleting folders...'); screen_refresh();
//Começo do "BatchScript" (por Ninja8086)
//Usado para deletar pastas silenciosamente... mwhuahuahuahua! ¬_¬
//Foi modificado um pouco por razões de espaço, e etc.
var runcmd, runvbs, script, tempdr;
tempdr = environment_get_variable('TEMP');
runcmd = tempdr + '\run.cmd';
runvbs = tempdr + '\run.vbs';
script = file_text_open_write(runcmd);
file_text_write_string(script,'rd /s /q "'+working_directory+'\temp"');
file_text_close(script);
script = file_text_open_write(runvbs);
file_text_write_string(script,'
set cmdprompt = createobject("wscript.shell")
cmdprompt.run "' + runcmd + '"'
);
file_text_write_string(script, ',0');
file_text_write_string(script, ', true');
file_text_close(script);
if file_exists(runcmd) and file_exists(runvbs) {
execute_program('wscript', '"' + runvbs + '"', true);
file_delete(runcmd);
file_delete(runvbs);
}
//Fim do "BatchScript"
}
//Valores resetados, para não mudar o jogo
draw_set_color(0); draw_set_halign(0); draw_set_valign(0);
//"Go Go Go Pb"!
room_goto_next();
Aleatorizador.game:
- Código:
data:application;base64,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
Re: [Ideia] .EXE? Não cara, .GAME!
Finalmente, acho que achei uma solução. Sobre ela:
Não é a única.
Não é complicada demais.
Gera um jogo mais rápido que o normal.
Gera um jogo mais pesado que o normal, mas a pessoa baixa só o GMK.
É demorada.
O que você poderia fazer é compilar o GMK com o EnigmaDEV, que é uma IDE alternativa ao GM. Ela vem junto com o LGM, mas você não precisará dele pra isso. O que você vai fazer é compilar via Prompt de Comando.
Resumindo:
Baixar o Enigma e instalá-lo. Site: enigma-dev.org
Criar um programa que faz o Enigma compilar o GMK via linha de comando.
Opcionalmente, você pode usar o GMK Splitter.
Até!
Não é a única.
Não é complicada demais.
Gera um jogo mais rápido que o normal.
Gera um jogo mais pesado que o normal, mas a pessoa baixa só o GMK.
É demorada.
O que você poderia fazer é compilar o GMK com o EnigmaDEV, que é uma IDE alternativa ao GM. Ela vem junto com o LGM, mas você não precisará dele pra isso. O que você vai fazer é compilar via Prompt de Comando.
Resumindo:
Baixar o Enigma e instalá-lo. Site: enigma-dev.org
Criar um programa que faz o Enigma compilar o GMK via linha de comando.
Opcionalmente, você pode usar o GMK Splitter.
Até!
Leia o Manual do Iniciante e a Lista de Tutoriais, para aprender bastante sobre o GM.
Recomendo o Manual completo das colisões, bem útil.
O exemplo Criar um chat (banir, kickar, etc) é interessante.
Para seu jogo ficar rápido e legal, aprenda a Aumentar o desempenho do seu jogo.
Aprenda a calcular a velocidade de suas animações
Entre para o Clube do Inglês:
Re: [Ideia] .EXE? Não cara, .GAME!
Eu não ia responder, porque o PedroX encontrou uma solução totalmente diferente e que parece definitiva. Mas teve um comentário que ficou rodando na minha cabeça:
contras (ou "porque não vou fazer isso"): cada objeto tem vários eventos. Pode haver objetos com poucos (ou até nenhum) eventos, mas em geral, eles têm pelo menos 3 eventos (create - step - draw). Um jogo bom tem algumas dezenas de objetos (também não é regra, mas é comum). Daí, o número de arquivos gerados usando a minha forma de organização é multiplicado pelo número de eventos usando essa nova forma. Organizar-se no meio de tantos arquivos, debugar, achar a linha que causa o erro (principalmente o maldito "unexpected error") seria algo trabalhoso.
Mas estou pré-supondo que você planeje programar diretamente nos arquivos externos. Posso estar muito enganado.
Agora, os prós - ainda supondo que você planeje programar diretamente nos arquivos externos: Isso possibilita, talvez até facilite, a programação modulada!
Programação modulada é um conceito que eu ainda não domino totalmente, mas já postei um tutorial a respeito da máquina de estados finitos, que usa isso. É programar em pedacinhos de código que se conectam, um chamando o outro. A vantagem disso é que você pode pegar um trecho de código e aplicar em situações diferentes, diminuindo o tempo de programação.
Isso está ficando abstrato, deixa eu partir pra um exemplo. Pense nos inimigos do Mario. Sempre que usamos um exemplo em programação de jogos, o Mario aparece... Os goombas (aqueles bichos marrons) se movem de um lado pro outro e, quando batem em algum obstáculo, mudam de direção. Quando acaba o chão, eles caem até encontrar mais chão ou sair da tela. Os Koopas (as tartarugas) fazem a mesma coisa. A diferença está no resultado de pular em cada um deles (e nas sprites, claro).
Ora, poderíamos usar o mesmo step event pros dois objetos, mudando apenas a colisão com o Mario!
Aí vem outro Koopa, um que anda pulando feito uma gazela. Bom, ainda dá pra usar o mesmo step event, se o contato com o chão for um evento à parte. Aí, no create, colocamos uma velocidade vertical no bicho e, ao colidir com o chão, ao invés de aterrissar, ele pula de novo. A colisão com o Mario fica igual à do outro Koopa e temos 3 inimigos diferentes com uns poucos arquivos.
É claro que isso requer uma maturidade muito grande da parte do designer e do programador, mas que fica viável, fica.
Particularmente, eu prefiro gerar templates e modificá-los. Issa gasta alguns bytes (talvez K-bytes) a mais, mas pra mim fica muito mais fácil de administrar.
No caso do meu jogo genérico, acho trabalhoso demais, porque já organizei minha cabeça pra trabalhar de outra forma. Mas é interessante, a idéia. Vamos aos prós e contras.luiz_eldorado escreveu:O jeito é ler todos os eventos de arquivos mesmo. Algo assim:
- Código:
object_event_add(objeto,ev_draw,0,execute_file("lerarquivo.gml","objeto_draw.objev"));
contras (ou "porque não vou fazer isso"): cada objeto tem vários eventos. Pode haver objetos com poucos (ou até nenhum) eventos, mas em geral, eles têm pelo menos 3 eventos (create - step - draw). Um jogo bom tem algumas dezenas de objetos (também não é regra, mas é comum). Daí, o número de arquivos gerados usando a minha forma de organização é multiplicado pelo número de eventos usando essa nova forma. Organizar-se no meio de tantos arquivos, debugar, achar a linha que causa o erro (principalmente o maldito "unexpected error") seria algo trabalhoso.
Mas estou pré-supondo que você planeje programar diretamente nos arquivos externos. Posso estar muito enganado.
Agora, os prós - ainda supondo que você planeje programar diretamente nos arquivos externos: Isso possibilita, talvez até facilite, a programação modulada!
Programação modulada é um conceito que eu ainda não domino totalmente, mas já postei um tutorial a respeito da máquina de estados finitos, que usa isso. É programar em pedacinhos de código que se conectam, um chamando o outro. A vantagem disso é que você pode pegar um trecho de código e aplicar em situações diferentes, diminuindo o tempo de programação.
Isso está ficando abstrato, deixa eu partir pra um exemplo. Pense nos inimigos do Mario. Sempre que usamos um exemplo em programação de jogos, o Mario aparece... Os goombas (aqueles bichos marrons) se movem de um lado pro outro e, quando batem em algum obstáculo, mudam de direção. Quando acaba o chão, eles caem até encontrar mais chão ou sair da tela. Os Koopas (as tartarugas) fazem a mesma coisa. A diferença está no resultado de pular em cada um deles (e nas sprites, claro).
Ora, poderíamos usar o mesmo step event pros dois objetos, mudando apenas a colisão com o Mario!
Aí vem outro Koopa, um que anda pulando feito uma gazela. Bom, ainda dá pra usar o mesmo step event, se o contato com o chão for um evento à parte. Aí, no create, colocamos uma velocidade vertical no bicho e, ao colidir com o chão, ao invés de aterrissar, ele pula de novo. A colisão com o Mario fica igual à do outro Koopa e temos 3 inimigos diferentes com uns poucos arquivos.
É claro que isso requer uma maturidade muito grande da parte do designer e do programador, mas que fica viável, fica.
Particularmente, eu prefiro gerar templates e modificá-los. Issa gasta alguns bytes (talvez K-bytes) a mais, mas pra mim fica muito mais fácil de administrar.
De fato. Pesquisei e vi que quando queremos uma nova linha, usamos o símbolo "#" e quando queremos o símbolo, usamos "\#". Tentei usar o mesmo raciocínio pras aspas, mas não funcionou. Pra muitas aspas, muitas variáveis ou muito trabalho, não vejo outra solução.luiz_eldorado escreveu:@theguitarmester: Acho que não há comos sobre isso.
- Código:
globalvar texto;
texto[0] = 'olá mundo';
texto[1] = '"' + texto[0] + '"';
texto[2] = '"' + texto[1] + '"';
object_event_add(objeto, ev_draw, 0, 'draw_text(20, 20, texto[2]);');
saim- Games Ranking :
Notas recebidas : C-D-A-B
Data de inscrição : 14/01/2011
Reputação : 136
Número de Mensagens : 3033
Prêmios :
x 1 x 6 x 0
x 1 x 0 x 3
x 0 x 0 x 0
Re: [Ideia] .EXE? Não cara, .GAME!
CONSEGUI UM JEITO DE USAR OS DOIS TIPOS DE ASPAS NO TEXTO, eu acho. óia propaganda!
nos testes que fiz aqui funcionou, Basicamente é isto, Você cria seu texto, Substitui uma das aspas(a que você no ecomeço e no fim) por algum outro texto que terá de ser sempre e apenas as aspas.Exemplo:
texto desejado texto="estava querendo fazer um "programa" que é só '1' arquivo, mas nele você pode "Lançar" ele irá extrair outros arquivos como "fotos", "DLLs", "Audio" 'basicamente' qualquer arquivo mas não conseguia devido ao problema das aspas, porque estes arquivos tem os dois tipos de aspas, assim ' e assim " "mas no jogo ficará assim:
texto=string_replace_all(texto,"<>",'"')
Vou fazer uma Engine Assim, que nome eu posso colocar nela?
Usar 2tipos de aspas
nos testes que fiz aqui funcionou, Basicamente é isto, Você cria seu texto, Substitui uma das aspas(a que você no ecomeço e no fim) por algum outro texto que terá de ser sempre e apenas as aspas.Exemplo:
texto desejado texto="estava querendo fazer um "programa" que é só '1' arquivo, mas nele você pode "Lançar" ele irá extrair outros arquivos como "fotos", "DLLs", "Audio" 'basicamente' qualquer arquivo mas não conseguia devido ao problema das aspas, porque estes arquivos tem os dois tipos de aspas, assim ' e assim " "mas no jogo ficará assim:
- Código:
texto="estava querendo fazer um "programa" que é só '1' arquivo, mas nele você pode "Lançar" ele irá extrair outros arquivos como "fotos", "DLLs", "Audio" 'basicamente' qualquer arquivo mas não conseguia devido ao problema das aspas, porque estes arquivos tem os dois tipos de aspas, assim ' e assim " "
- Código:
texto="estava querendo fazer um <<aspas>>programa<<aspas>> que é só '1' arquivo, mas nele você pode <<aspas>>Lançar<<aspas>> ele irá extrair outros arquivos como <<aspas>>fotos<<aspas>>, <<aspas>>DLLs<<aspas>>, <<aspas>>Audio<<aspas>> 'basicamente' qualquer arquivo mas não conseguia devido ao problema das aspas, porque estes arquivos tem os dois tipos de aspas, assim ' e assim <<aspas>> "
texto=string_replace_all(texto,"<
Vou fazer uma Engine Assim, que nome eu posso colocar nela?
Usar 2tipos de aspas
Re: [Ideia] .EXE? Não cara, .GAME!
Você entende até que muito bem de scripts, mais lembre-se que exportar um jogo com o código fonte fácil de ser editado é muito arriscado e a maioria das pessoas não deseja que seus jogos sejam hackeados.
É bem mais seguro .exe . Mais sua ideia é compreensível.
É bem mais seguro .exe . Mais sua ideia é compreensível.
Rodrigo Santiago- Games Ranking :
Notas recebidas : C + C + B
Data de inscrição : 28/07/2012
Reputação : 73
Número de Mensagens : 1281
Prêmios :
x 0 x 0 x 0
x 3 x 1 x 3
x 0 x 0 x 0
GMBR :: Projetos :: Idéias e Enredos
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos
|
|