{"id":20504678,"url":"https://github.com/lostdusty/filosofighters","last_synced_at":"2025-04-13T20:50:29.609Z","repository":{"id":195896920,"uuid":"693906260","full_name":"lostdusty/filosofighters","owner":"lostdusty","description":"Mod do antigo jogo \"Filosofighters\" para que possa ser jogado atualmente","archived":false,"fork":false,"pushed_at":"2023-09-20T20:50:23.000Z","size":32294,"stargazers_count":9,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-27T11:12:17.130Z","etag":null,"topics":["actionscript","filosofighters","flashgame","go","mod","ruffle-rs"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lostdusty.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2023-09-20T00:33:37.000Z","updated_at":"2025-02-18T17:13:18.000Z","dependencies_parsed_at":"2024-02-23T16:36:27.637Z","dependency_job_id":null,"html_url":"https://github.com/lostdusty/filosofighters","commit_stats":null,"previous_names":["princessmortix/filosofighters","lostdusty/filosofighters"],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lostdusty%2Ffilosofighters","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lostdusty%2Ffilosofighters/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lostdusty%2Ffilosofighters/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lostdusty%2Ffilosofighters/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lostdusty","download_url":"https://codeload.github.com/lostdusty/filosofighters/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248782278,"owners_count":21160716,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["actionscript","filosofighters","flashgame","go","mod","ruffle-rs"],"created_at":"2024-11-15T19:39:35.736Z","updated_at":"2025-04-13T20:50:29.573Z","avatar_url":"https://github.com/lostdusty.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Filosofighters\nMod do jogo Filosofighters para que ainda possa ser jogado hoje em dia.\n\nÍndice:\n- [A parte principal](#a-parte-principal)\n- [A parte entediante](#a-parte-entediante)\n\n## A parte principal\nFiz esse mod do jogo a pedido da minha professora de filosofia, que queria mostrar para os alunos o jogo Filosofighters, [mas que foi retirado do ar](https://super.abril.com.br/multimidia/filosofighters-631063.shtml).\n\nEntão, com um pouco de paciência e conhecimento de computadores, consegui fazer com que o jogo seja pelo menos parcialmente jogavel.\n\n### Downloads\n#### [**Clique em mim para baixar.**](https://github.com/princessmortix/filosofighters/releases/latest)\n\n### AVISO\n\u003e [!NOTE]  \n\u003e Leia com atenção essa parte. Não lendo as linhas abaixo pode resultar em um jogo totalmente congelado!\n\nNão foi possível recuperar todos os arquivos do jogo, abaixo tem uma tabela com os personagens jogáveis:\n\n| **Personagens jogaveis** | Você pode jogar contra |\n|--------------------------|------------------------|\n| Marx                     | Platão                 |\n| Platão                   | Marx                   |\n| Sto. Agostinho           | Platão e Marx          |\n| Maquiavel                | Marx e Platão          |\n\nEm resumo, **você pode jogar sendo Marx, Platão, Santo Agostinho ou Maquiavel**, porém você pode **lutar contra apenas Platão e Marx**.\n\nIgnorar esta recomendação fazerá com que o jogo trave, sendo necessário reiniciar o aplicativo.\n\n***\n\n## A parte entediante\nAqui, explicarei como fiz o mod do jogo.\n\n### Informações básicas\n- A porta 4444 é usada;\n- Um servidor local http com os arquivos extra do jogo é necessário (criado e fechado automaticamente);\n- Usar o Flash Player Standalone não funciona;\n- Ruffle é necessário.\n\n### A caçada\nMinha primeira ação depois de me oferecer para tentar fazer o jogo funcionar foi inspecionar [a página no Wayback](http://web.archive.org/web/20160214191742/https://super.abril.com.br/multimidia/filosofighters-631063.shtml). Encontrei a referencia do site \"http://filosofighters.super.abril.com.br/filosofighters.php\" que carregava o arquivo swf principal do jogo, então joguei a url no Wayback machine novanente, que levou ao [download do arquivo original](http://web.archive.org/web/20160214191742/http://filosofighters.super.abril.com.br/filosofighters.php), então pensei que era somente jogar no Flash Player e partir para o abraço.\n\nInfelizmente não foi tão simples: As lutas ficavam carregando infinitamente. Então, depois de resolver olhar o console do DevTools no Opera, vi que o jogo tentava enviar requisições para o mesmo servidor onde foi baixado o jogo principal, com o formato `url+personagem+.swf`. Então eu pensei em 3 opções: \n- Fazer um servidor DNS local, apontando o servidor `filosofighters.super.abril.com.br` para algum outro lugar (como um servidor local);\n- Fazer uma proxy http, injetando os arquivos necessários de volta (impossível já que o servidor original está morto);\n- Modificar o jogo para enviar as requisições para um servidor local.\nA última opção era a melhor.\n\n### O velho Actionscript\nAntes de eu começar a fazer qualquer coisa, [baixei os outros arquivos](http://web.archive.org/web/*/filosofighters.super.abril.com.br*) no Wayback, já que eles seriam necessários.\n\nEntão, baixei também o [decompilador de flash](https://github.com/jindrapetrik/jpexs-decompiler) e fui atrás de referencias no código, procurando por `http`. Inicialmente não achei nada de importante, mas depois, com ajuda de uma amiga, ela apontou que essas linhas eram as principais a serem modificadas:\n\u003e \"here's relevant lines:\"\n\u003e \n\u003e `FightGame.as:99` `(setPlayers) this.loadP1.load(new URLRequest(Main.getInstance().SERVER + param1));`\n\u003e\n\u003e `FightGame.as:109` `(setPlayers) this.loadP2.load(new URLRequest(Main.getInstance().SERVER + param2));` \n\u003e\n\u003e `Main.as:259` `(onAddedToStage) this.SERVER = this.loaderInfo.parameters.server != undefined ? String(this.loaderInfo.parameters.server) : \"\";`\n\nEntão bingo! Era apenas colocar a url do servidor e pronto, certo? Infelizmente não.\nUsando o FPS (Irei abreviar Flash Player Standalone assim) o jogo não fazia nenhuma request para o [simple-http-server](https://github.com/TheWaWaR/simple-http-server), e depois de muitas dores de cabeça, resolvi mexer com isso no dia seguinte, pois estava tarde.\n***\nNo dia seguinte, lembrei que o [Ruffle](https://ruffle.rs/) existia, e tentei usá-lo, que por sinal funcionou muito bem, chegando até a fazer a requisição para o servidor, porém, o path (imagem abaixo) estava junto com o endereço do servidor, algo que fiquei algum tempo tentando arrumar, até descobrir que o AS precisava de por uma `/` no fim do endereço do servidor para funcionar. Dito e feito, o jogo conseguiu fazer as requisições, porém o simple-http-server as recusava.\n\n![1](./imagens/1.png)\n\n\nEntão criei um site html simples e usei o [Five Server](https://marketplace.visualstudio.com/items?itemName=yandeu.five-server) como servidor http, e após configuração, ele funcionou perfeitamente. So que não, por algum motivo que eu não entendi muito bem, o jogo só não quis rodar, como na imagem abaixo\n\n![2](./imagens/2.png)\n\nPeguei o arquivo original, e modifiquei novamente as linhas necessárias, e o jogo quase funcionou novamente.\n\nResolvi usar o Ruffle na versão de desktop, para ficar mais fácil recarregar o jogo quando necesário. Dessa vez outro erro apareceu, no Tweener, como mostrado a seguir. A melhor solução que encontrei foi forçar o carregamento da luta.\n\n![3](./imagens/3.png)\n\nCódigo com o erro:\n\n![4](./imagens/4.png)\n\nAparentemente o erro estava no trecho `\"onComplete\":function callback:*`, removendo a linha, e colocando `startFight();` no final funcionou tudo perfeitamente.\n\n![game](./imagens/game_demo.gif)\n\n### Criando o servidor\nImaginei que a melhor opção era criar um servidor http usando go, e ainda por cima carregar o jogo com (quase) todos os arquivos necessários. Felizmente criar servidor http de arquivos é muito simples, e testando novamente, tudo correu bem.\n\n#### Compilando\nCaso tenha interesse em compilar o projeto, siga os seguintes passos:\n1. Baixe [go](https://go.dev/dl).\nVocê também pode usar um package manager como o [scoop.sh](https://scoop.sh)\n\n2. Clone o repositório com o git\n\n3. Rode o comando `go build -ldflags \"-s -w -H=windowsgui\"`, isso irá compilar o aplicativo para o diretório atual.\nCaso queira apenas executar, sem compilar, você tambem pode usar `go run .`\n\n### Modificações feitas \u0026 Considerações finais\nNo fim, poucos trechos foram modificados:\n\n```diff\n- FightGame.as:99 (setPlayers) this.loadP1.load(new URLRequest(Main.getInstance().SERVER + param1));\n+ FightGame.as:99 (setPlayers) this.loadP1.load(new URLRequest(\"http://127.0.0.1:4444/\" + param1));\n\n- FightGame.as:109 (setPlayers) this.loadP2.load(new URLRequest(Main.getInstance().SERVER + param2));\n+ FightGame.as:109 (setPlayers) this.loadP2.load(new URLRequest(\"http://127.0.0.1:4444/\" + param2));\n\n- Main.as:259 (onAddedToStage) this.SERVER = this.loaderInfo.parameters.server != undefined ? String(this.loaderInfo.parameters.server) : \"\";\n+ Main.as:259 (onAddedToStage) this.SERVER = this.loaderInfo.parameters.server != undefined ? String(this.loaderInfo.parameters.server) : \"http://127.0.0.1:4444/\";\n\nFightGame.as:430::435 (checkLoaded)\n    if(this.loaderCounter == 4)\n         {\n            trace(\"PLAYER NAME \" + Main.getInstance().myPlayer);\n            trace(\"OPPONENT NAME \" + Main.getInstance().opponentPlayer);\n-            Tweener.addTween(Main.getInstance(),{\n-\t            \"alpha\":1,\n-\t            \"time\":7,\n-\t            \"onComplete\":function callback():*\n-\t                {\n-\t                \tstartFight():\n-\t                }\n- });\n+            startFight();\n         }\n```\n\n_Presentinho para quem trabalhar na área de T.I em escola: É possivel usar a pasta [assets](./assets/assets.zip) (que é extraída ao iniciar o aplicativo) para um servidor estático simples http, caso você queira evitar que um executável rodando nas máquinas ;)_","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flostdusty%2Ffilosofighters","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flostdusty%2Ffilosofighters","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flostdusty%2Ffilosofighters/lists"}