Git Product home page Git Product logo

tm-project's Introduction

TMProject

Este projeto é baseado em uma descompilação do cliente do jogo With Your Destiny. Nós não reindividicamos nenhum direito autoral do projeto. Este projeto foi criado apenas para fins de estudo sendo todos os direitos reservados exclusivamente e inteiramente a Hanbitsoft.

Este código é uma descompilação fiel ao original, isto é, o código que aqui consta não remete ao que nós, desenvolvedores, faríamos. Como o projeto como um todo já foi completamente finalizado, tendo todas as funções necessárias para que o jogo seja jogável, o mesmo pode ser alterado como quiser.

Compilação

O projeto pode ser compilado apenas para Windows utilizando Visual Studio (o projeto está preparado para a versão 2019, mas o mesmo não há limitação quanto a versão mínima ou máxima).

A compilação para x64 é possível, basta que seja utilizado a dependência para x64 do DirectX assim como corrigir problemas quanto a compilação para esta arquitetura.

Dependências

Visual Studio

Para compilar o projeto você precisará ter o Visual Studio com os seguintes componentes instalados:

  • Desenvolvimento para desktop com C++
  • ATL do C++ para a versão da toolchain que está sendo utilizada

A única dependência externa do projeto é o DirectX porém o mesmo está incluida no repositório e devidamente configurada.

Bugs

Este projeto é uma descompilação e o mesmo pode e contém problemas.

Sinta-se a vontade para reportá-los e abrir um pull request para o projeto (esperamos que você faça isso).

Pull-request

Para manter o código mais organizado, o padrão de código que consta atualmente deverá ser seguido, como por exemplo:

  • Variáveis com estilo hungarian, e.g: pPointer, nInt, bBoolean, sz para sized string e etc.
  • Nome de classes em PascalCase
  • entre outros...

Como não temos um documento que dite todas as regras, caso surja uma dúvida, procure no código algum exemplo do que você está tentando fazer.

Contribuidores

Este projeto foi desenvolvido por:

  • Eric Santos (SKEWED)
  • Wed Souza (FREEDOM)
  • Kevin Kouketsu (shepher)

General Public License:

The code is under the GNU GPL v3, so you can be feel free to study and contribute.

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.

tm-project's People

Contributors

bitou2k avatar ericsantos00 avatar kevinkouketsu avatar thefeelipe avatar wsphantom avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

tm-project's Issues

Mudar leitura de arquivos para usar raii

Descrição:
Fazer com que todas as leituras de arquivos sejam feitas através de uma implementação de std::fstream: std::ostream para output e std::istream para input.
Isto nos garantirá que os arquivos sejam fechados mesmo em caso de exceção ou um early return. Isto é apenas uma forma de deixar o código melhor.

Para realizar esta tarefa, deverá ser checado todas as leituras e escritas de arquivos, e alterado para o respectivo no C++.

Problemas na Interface

Algumas opções da janela de composição está com problema na exibição das informações, está exibindo o itemhelp do último item exibido.

Acredito que o problema possa ser parecido com o do issue #17 sobre os teleports.

Segue abaixo uma captura de tela

Criar action para checar compilação

Devemos criar uma action para buildar o projeto antes de merger qualquer tipo de PR.

Isto deve ser feito para evitarmos mergear código quebrado. Isto pode nos evitar um pouco de dor de cabeça.

Nesta tarefa também devemos fazer com uqe possa apenas ser mergeada com a build funcionando corretamente.

Teleports com problema

Alguns teleports não foram adicionados em g_TeleportTable, fazendo com que o client puxe a última MessageBox exibida.

Como replicar o bug:
Deletar um item e então subir em um dos teleports:
Noatun -> Khepra
Khepra -> Noatun
Khepra -> KhepraBoss

Correção sugerida no pull #16

Refactor on loading data files

The goal here is to refactor how the client handles the errors while loading the data files.

I mean instead of directly calling the MessageBox (see an example on #14), we could use a C++ way of doing stuff, using exceptions.

Something like:

class LoadConfigurationError : public std::runtime_error
{
public: 
	LoadConfigurationError(const std::string& config, const std::string& extraData)
	: std::runtime_error{"Failed to load file "s + config + ". " + extraData}
	{}
};

With that, we can concentrate the loading stuff in one place (as is currently) and have a single way of warning the user that something went wrong. For example, in debug mode, we can just assert and when deploying we can write to a log and exit asap.

Of course, there is lazy loading happening on the client and we need to check the possibilities in these scenarios.

This needs to be discussed further.

Trajes de Montaria[ Pogbol, Cavalinho de Madeira]

Estava testando e me deparei com esses problemas... confesso que fiquei muito tempo neles.

PogBol: Consiste em bugar o frame de movimento da montaria estilo PogBol:
Video demonstrativo

Possível Correção: No arquivo TMSkinMesh.cpp, procurar por "m_nBoneAniIndex == 49"

if (m_nBoneAniIndex == 49) dwMod -= 2;

Ainda no FrameMove
Comente:

/*ori = (float*)&NewMat; int offset_ = 10 - dwOffset; for (int k = 0; k < 16; ++k) { *ori = (float)((float)((float)dwOffset * *ori) + (float)((float)offset_ * *before)) / 10.0f; ++ori; ++before; } m_pframeToAnimate[j]->m_matRot = NewMat;*/

Basta Comentar (Eu acho) Pode haver uma forma mais coerente de se fazer.

Cavalinho de Madeira: Consiste em não renderizar o personagem sobre o traje:
Print Demonstrativa

Possível Correção: No arquivo CFrame.cpp procurar por "m_nBoneAniIndex == 50"

Substituir o metódo de Renderização por:
m_pParentSkin->m_OutMatrix = m_matCombined; m_pParentSkin->m_OutMatrix._11 = m_matCombined._11 * -1.0f; m_pParentSkin->m_OutMatrix._12 = m_matCombined._12 * -1.0f; m_pParentSkin->m_OutMatrix._13 = m_matCombined._13 * -1.0f; m_pParentSkin->m_OutMatrix._14 = m_matCombined._14 * -1.0f; m_pParentSkin->m_OutMatrix._21 = m_matCombined._31 * -1.0f; m_pParentSkin->m_OutMatrix._22 = m_matCombined._32 * -1.0f; m_pParentSkin->m_OutMatrix._23 = m_matCombined._33 * -1.0f; m_pParentSkin->m_OutMatrix._24 = m_matCombined._34 * -1.0f; m_pParentSkin->m_OutMatrix.m[2][0] = m_matCombined.m[1][0]; m_pParentSkin->m_OutMatrix.m[2][1] = m_matCombined.m[1][1]; m_pParentSkin->m_OutMatrix.m[2][2] = m_matCombined.m[1][2]; m_pParentSkin->m_OutMatrix.m[2][3] = m_matCombined.m[1][3];

No arquivo TMHuman.cpp procurar por "m_nMountSkinMeshType == 50"

Substituir o metódo de renderização por:
vecPosScale.x = vecPosScale.x - 0.6f; vecPosScale.z = vecPosScale.z + 0.5f;

Logo acima disto existe um switch com os skinsmeshtype, não me recordo da existência desse código contudo inserir o case:

case 50: vecPosScale.x = -0.35f * m_fMountScale; vecPosScale.y = 1.0f / m_fMountScale; vecPosScale.z = -0.60000002f * m_fMountScale;

Peço perdão caso essas "correções" causem problemas, não são a maneira mais profissional de serem feitas.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.