Bug Reports

Até que tenhamos um bug tracker, postarei aqui todos os bugs que encontrar no Horus Eye.

Aqui vai o primeiro:
SEGFAULT enquanto jogava uma das fases. Não lembro de estar fazendo nada de estranho ou fora do comum quando travou.

0   org.uspgamedev.Horus_Eye      	0x0000000100034346 scene::SpreadLight(std::vector<std::vector<utils::Tile*, std::allocator<utils::Tile*> >, std::allocator<std::vector<utils::Tile*, std::allocator<utils::Tile*> > > >&, utils::TilePos const&, float) + 1430 (tile.h:71)
1   org.uspgamedev.Horus_Eye      	0x0000000100034556 scene::World::UpdateVisibility() + 134 (world.cc:191)
2   org.uspgamedev.Horus_Eye      	0x00000001000346a9 scene::World::Update(float) + 313 (world.cc:212)
3   org.uspgamedev.Horus_Eye      	0x000000010005d58c ugdk::Engine::Run() + 684
4   org.uspgamedev.Horus_Eye      	0x00000001000359d7 SDL_main + 391 (levelmanager.h:19)

Edit: O erro acima ocorreu novamente. Foi na fase turtle.

Não é bem um bug, é mais uma melhoria que pode ser feita na versão para Linux.
Podemos fazer algo assim para encontrar o caminho do executável e, consequentemente, da pasta data.

On Linux, the file /proc/self/exe is a symbolic link to the application executable. The readlink() function will return the full path of the link target. You can use this to extract the folder pathname:

#include <iostream>
#include <string>
#include <unistd.h>
#include <limits.h>

std::string getpath() {
    char buf[PATH_MAX + 1];
    if (readlink("/proc/self/exe", buf, sizeof(buf) - 1) == -1)
        throw std::string("readlink() failed");
    std::string str(buf);
    return str.substr(0, str.rfind('/'));
}

int main() {
    std::cout << "This program resides in " << getpath() << std::endl;
    return 0;
}

apaga msg antiga
Tem a linha do culpado, e fica no tile.h.
Tinha um segfault relacionado ao SpreadLight no tile.h que acontecia quando tentava espalhar luz para fora do mapa. Não faz sentido isso acontecer em qualquer uma das fases normais, mas provavelmente é isso. Eu ja arrumei esse código mas fui ver e o fix ficou na graphic_revamp.

Mais um bug (segfault).
Este foi encontrado na branch de scripts, mas parece não estar relacionado a isso, e sim ao sistema de gráficos.

0 libugdk.dylib 0x00000001000f4dad ugdk::graphic::VideoManager::PushAndApplyModifier(ugdk::graphic::Modifier const*) + 61 1 libugdk.dylib 0x00000001000f8de9 ugdk::graphic::Node::Render(float) + 89 2 libugdk.dylib 0x00000001000f4d2e ugdk::graphic::VideoManager::Render(std::list<ugdk::Scene*, std::allocator<ugdk::Scene*> >&, std::list<ugdk::graphic::Node*, std::allocator<ugdk::graphic::Node*> >&, float) + 174 3 libugdk.dylib 0x00000001000ff391 ugdk::Engine::Run() + 593 4 org.uspgamedev.Horus_Eye 0x00000001000330cd SDL_main + 413 (levelmanager.h:22)

Ocorreu ao carregar o Editor de mapas. A UGDK está compilada como biblioteca dinâmica (libugdk.dylib).

[quote=“Jeff, post:4, topic:203”]Mais um bug (segfault).
Este foi encontrado na branch de scripts, mas parece não estar relacionado a isso, e sim ao sistema de gráficos.

0 libugdk.dylib 0x00000001000f4dad ugdk::graphic::VideoManager::PushAndApplyModifier(ugdk::graphic::Modifier const*) + 61 1 libugdk.dylib 0x00000001000f8de9 ugdk::graphic::Node::Render(float) + 89 2 libugdk.dylib 0x00000001000f4d2e ugdk::graphic::VideoManager::Render(std::list<ugdk::Scene*, std::allocator<ugdk::Scene*> >&, std::list<ugdk::graphic::Node*, std::allocator<ugdk::graphic::Node*> >&, float) + 174 3 libugdk.dylib 0x00000001000ff391 ugdk::Engine::Run() + 593 4 org.uspgamedev.Horus_Eye 0x00000001000330cd SDL_main + 413 (levelmanager.h:22)

Ocorreu ao carregar o Editor de mapas. A UGDK está compilada como biblioteca dinâmica (libugdk.dylib).[/quote]
Consegue repetir o problema? Além do mais, o dump diz que é PushAndApplyModifier + 61, tem como dizer que linha da função é essa?
Particularmente eu não tenho muitas ideias do motivo desse erro, nessa função em particular…

@Henrique: não sei como descobrir qual foi a linha…

Mais dois bugs (segfault), ambos em modo debug ao pular de fase e atirar ao mesmo tempo (com sandstorm):

0 libugdk.dylib 0x00000001000d9084 ugdk::time::TimeManager::TimeElapsed() + 4 1 libugdk.dylib 0x00000001000d8ebf ugdk::time::TimeAccumulator::Restart() + 31 2 org.uspgamedev.Horus_Eye 0x000000010002f5bd sprite::Hero::Update(double) + 861 (hero.cc:223) 3 libugdk.dylib 0x00000001000c52ee ugdk::Scene::Update(double) + 46 4 org.uspgamedev.Horus_Eye 0x0000000100028d8b scene::World::Update(double) + 107 (world.cc:206) 5 libugdk.dylib 0x00000001000c8646 ugdk::Engine::Run() + 534 6 org.uspgamedev.Horus_Eye 0x000000010001ddf4 SDL_main + 660 (levelmanager.h:22)

0 libSystem.B.dylib 0x00007fff80df70b6 __kill + 10 1 libSystem.B.dylib 0x00007fff80e091ba _sigtramp + 26 2 libugdk.dylib 0x00000001000c52ec ugdk::Scene::Update(double) + 44 3 org.uspgamedev.Horus_Eye 0x0000000100028d8b scene::World::Update(double) + 107 (world.cc:206) 4 libugdk.dylib 0x00000001000c8646 ugdk::Engine::Run() + 534 5 org.uspgamedev.Horus_Eye 0x000000010001ddf4 SDL_main + 660 (levelmanager.h:22)

Mais info do mesmo erro:

Horus Eye.exe!ugdk::time::TimeAccumulator::Restart() Line 27 + 0x3 bytes C++ Horus Eye.exe!entities::EmitterEntity::Renew() Line 20 + 0x2e bytes C++ Horus Eye.exe!skills::Sandstorm::Use() Line 40 C++ Horus Eye.exe!sprite::Hero::Update(double delta_t) Line 223 + 0x1d bytes C++ *snip*