/* Autor: Leandro Bernsmuller
Declara constantes nao usadas pelo editor de recursos do Windows */



// REDE (comunicacao usando DirectPlay)

// servidor ou cliente: mensagem de chat
#define APPMSG_CHATSTRING 0
// servidor avisa dados para cliente sobre inicio da fase
#define APPMSG_DADOS_SERVIDOR 1
// cliente envia dados para servidor sobre inicio de fase
#define APPMSG_DADOS_CLIENTE 2
// servidor envia terminou partida
#define APPMSG_SERVIDOR_TERMINOU_PARTIDA 3
// servidor ou cliente terminaram
#define APPMSG_TERMINEI_EXECUCAO 4
// servidor ou cliente: comando (botao pressionado) para o outro
#define APPMSG_COLEGA_COMANDOU 5
// servidor envia - nao espera mais por escolha de cliente
#define APPMSG_SERVIDOR_DESISTIU_ESPERA_PERSONAGEM 6
// servidor envia posicao dos seus objetos para cliente
#define APPMSG_DADOS_OBJETOS_GRUPO 7



// REDE - SOCKETS (comunicacao com kernel cognitivo)

#define STR_PORTA_DEFAULT_SOCK "6999"



// PERSONAGENS (quem os usuarios podem ser)

// IDs
#define ID_PERS_MAE_NATUREZA 0
#define ID_PERS_PESCADOR 1
#define ID_PERS_PREFEITO 2
#define ID_PERS_TURISTA 3

// strings
#define STR_PERS_MAE_NATUREZA "Mãe Natureza"
#define STR_PERS_PESCADOR "Pescador"
#define STR_PERS_PREFEITO "Prefeito"
#define STR_PERS_TURISTA "Turista"



// MENSAGENS PARA USUARIO E STRINGS EM GERAL

// titulos de janelas
// principal
#define STR_NOMEAPL "MCOE - Multi-agent Co-operative Enviroment 1.0"
#define STR_NOMEPEQ "MCOE"
// caixa de mensagens
#define STR_TITULO_CAIXA_MSG "Aviso"

// erros no jogo
#define STR_ERRO_INICIO_PARTIDA_DURANTE "Para iniciar uma nova partida é necessário primeiro terminar a anterior."

// erros nos arquivos de configuracao e fase
#define STR_ERRO_ARQCONFIGURACAO "Arquivo de configuração não encontrado"
#define STR_ERRO_ARQFASE "Arquivo de fase não encontrado"
#define STR_ERRO_ARQPARAMETROS "Arquivo com parametros não encontrado"

// erros com DirectX
// 2d
#define STR_ERRO_DD "Problemas ao iniciar DirectDraw"
// 3d
#define STR_ERRO_D3D "Problemas ao iniciar Direct3D"
#define STR_ERRO_CRIANDOVIEW "Impossível criar janela de visualização para exibir grafícos 3D."
#define STR_ERRO_ARQUIVO_NAO_ENCONTRADO "Arquivo '%s' não encontrado."
#define STR_ERRO_MODELO_INDEFINIDO "Modelo indefinido."
// som
#define STR_ERRO_CRIAR_DSOUND "Impossível tocar sons."
#define STR_ERRO_FORMATO_WAV "Formato de arquivo WAV não suportado."
#define STR_ERRO_ALOCAR_WAV "Impossível terminar de carregar som."
// rede
#define STR_ERRO_VERSAO_DX "Esta aplicação requer DirectX 5 ou outra versão mais atual."
#define STR_ERRO_TIPO_CONEXAO "Impossível usar tipo de conexão escolhido, código do erro: 0x%08X"
#define STR_ERRO_SERVIR_SESSAO "Não pode atuar como servidor da sessão, código de erro: 0x%08X"

// geral
#define STR_INDEFINIDO "indefinido"
#define STR_NENHUMDISP "(nenhum)"
#define STR_ERRO "Erro"
#define STR_DESCONHECIDO "desconhecido"
#define STR_ESCOLHER_PERSONAGEM_COLEGA "A seguir o seu colega escolhe o personagem."
#define STR_RESOLUCAO_BAIXA "A resolução do seu monitor está muito baixa,\neste programa foi projetado para funcionar na resolução 800x600 ou uma maior;\npode não funcionar corretamente agora.\n\nContinuar a executar o programa?\n\nEscolha SIM para continuar, NÃO para terminar.\n\nÉ possível alterar a resolução de vídeo pelo Painel de Controle."

// rede
// dialogos:
#define STR_OUTRO_TERMINOU "Seu colega saiu do jogo.\nÉ melhor você também sair."
#define STR_JOGAR_EM_REDE "Jogar em rede?\n\nPara jogar em conjunto com um colega escolha SIM.\nPara jogar sem rede escolha NÃO."
#define STR_JOGAR_COM_TUTOR "Jogar com tutor?"
#define STR_TERMINAR_SEM_CONECXAO "Conexão com a rede não foi estabelecida, terminando programa."
#define STR_ESPERA_CLIENTE "Aguardando conexão do colega...\n\n(colega deve conectar como secundário)"
#define STR_ESPERA_PERSONAGEM_CLIENTE "\nEsperando colega escolher um personagem..."
#define STR_TIPO_CONEXAO "<Selecione um tipo de conexão clicando aqui>"
#define STR_SESSAO "Sessão"
// barra de titulo
#define STR_TITCLIENTE " - Secundário"
#define STR_TITSERVIDOR " - Primário"
// caixa de conexao e chat
#define STR_VOCE_SERVIDOR "\r\nAgora você é o servidor."
#define STR_TERMINOU_LIGACAO "\r\nSeu colega terminou a ligação."
#define STR_INICIOU_LIGACAO "\r\nSeu colega iniciou uma ligação. Vocês podem conversar."

// linha de comando a ser executada para chama ajuda
#define STR_ABRE_AJUDA ".\\ajuda.exe"
#define STR_ABRE_EDITOR ".\\editor.exe"

// arquivo de configuracao
#define STR_ARQ_CONFIGURACAO ".\\dp\\apl.cnf"

// arquivo com valores para programa
#define STR_ARQ_VALORES ".\\dp\\valores"

// tips dos controles
// indicadores e botoes em geral
#define STR_TIP_MENTAL "Estados Mentais"
#define STR_TIP_AJUDA "Ajuda"
#define STR_TIP_ECOMETRO "                      Ecômetro"
// personagens
#define STR_TIP_PERS_MAE_NATUREZA STR_PERS_MAE_NATUREZA
#define STR_TIP_PERS_PESCADOR STR_PERS_PESCADOR
#define STR_TIP_PERS_PREFEITO STR_PERS_PREFEITO
#define STR_TIP_PERS_TURISTA STR_PERS_TURISTA
// ferramentas mae natureza
#define STR_TIP_FERR_ABRIR_SOL "Abrir sol"
#define STR_TIP_FERR_COLOCAR_AGUAPES "Colocar Aguapés"
#define STR_TIP_FERR_TROCAR_FUNDO "Trocar o fundo do lago"
#define STR_TIP_FERR_ACELERAR_DEGRAD "Acelerar degradação"
// ferramentas pescador
#define STR_TIP_FERR_PESCA_PROIBIDA "Não pescar em área proibida"
#define STR_TIP_FERR_RECOLHER_LIXO "Recolher lixo das margens"
#define STR_TIP_FERR_PESCAR_ALIMENTAR "Pescar para se alimentar"
#define STR_TIP_FERR_PESCAR_EPOCA_PERM "Pescar em época permitida"
// ferramentas prefeito
#define STR_TIP_FERR_PROIB_POLUICAO_SONORA "Proibir poluição sonora"
#define STR_TIP_FERR_MULTA "Multa (campanha de conscientização)"
#define STR_TIP_FERR_COLOCAR_LIXEIRAS "Colocar lixeiras"
#define STR_TIP_FERR_LICENCA "Cobrar licença (filtro nas fábricas)"
// ferramentas turista
#define STR_TIP_FERR_NADAR_LAGO "Não nadar no lago"
#define STR_TIP_FERR_LIXO_CHAO "Recolher lixo do chão"
#define STR_TIP_FERR_LEMBRANCA_LAGO "Não levar lembrança do lago"
#define STR_TIP_FERR_FOTO "Fotografar"
 


// JANELAS E GRAFICOS 2D

// palette a ser carregada (usado em CGr)
#define STR_BMP_PAL "dp\\FUNDOJAN.bmp"

// maximo de bitmaps que um CGr pode exibir
#define MAX_BMPS 50

// tamanho default para janelas
#define JANX 600
#define JANY 450

// tamanho minimo das janelas
#define MINIMOJANX 600
#define MINIMOJANY 450

// porcentagens de uso de cada eixo cartesiano da tela (X e Y)
// pela janela principal
// (janela pode ser configurada para um dos valores)
// Exemplo: a janela pode usar 50% do X e Y (PORPEQUENA)
#define PORPEQUENA 50
#define PORMEDIA 70
#define PORGRANDE 90



// SONS

#define MAX_SONS 30
   


// ACOES

// Acoes possiveis para todos agentes:
// faz nada
#define ID_ACAO_NULA 0
// cria um agente fisico (que tem uma representacao fisica)
#define ID_ACAO_NASCE 1
// mata um agente fisico (que tem uma representacao fisica)
#define ID_ACAO_MORRE 2
// trata colisao de um agente fisico com a borda do cenario
#define ID_ACAO_MUDA_DIRECAO 3
// move agente durante um certo tempo para uma direcao
#define ID_ACAO_MOVE_LIVRE 4
// mata uma caça
#define ID_ACAO_MATA 5
// faz o metabolismo do agente
#define ID_ACAO_METABOLISMO 6
// absorve alimento (diminui fome)
#define ID_ACAO_ABSORVE_ALIMENTO 7
// executa reproducao de um ser organico
#define ID_ACAO_REPRODUZ 8
// faz um agente se mover para uma certa posicao do cenario
#define ID_ACAO_APROXIMA 9

// define quanto de energia o agente vai fornecer
#define ID_ACAO_FORNECE_ALIMENTO 12

// testa se agente deve se reproduzir
#define ID_ACAO_PREPARA_REPRODUZ 21

// Acoes para interventores:
// acao basica para agentes interventores
#define ID_ACAO_INTERVIR 10
// faz um agente dragar o leito do rio
#define ID_ACAO_DRAGA_LEITO 11
// ...ID 12 eh fornece alimento
// faz um agente lancar agrotoxicos
#define ID_ACAO_AGROTOXICO 13
// faz rede de arrastao
#define ID_ACAO_REDE 14
// faz lixo urbano
#define ID_ACAO_LIXO 15
// faz jetski
#define ID_ACAO_JETSKI 16
// faz pesca predatoria
#define ID_ACAO_PESCA_PREDATORIA 17
// faz esgoto pluvial
#define ID_ACAO_ESGOTO_PLUVIAL 18
// faz esgoto industrial
#define ID_ACAO_ESGOTO_INDUSTRIAL 19
// faz posto de gasolina
#define ID_ACAO_GASOLINA 20



// EVENTOS

// numero de eventos para agentes
#define NUM_EVENTOS 9

// eventos para agentes
// (numeracao comeca em 0 e soh soma 1 a cada novo evento)
#define NDX_EVENTO_NULO 0
#define NDX_EVENTO_NASCE 1
#define NDX_EVENTO_MORRE 2
#define NDX_EVENTO_COLISAO_BORDA 3
#define NDX_EVENTO_COLISAO_OUTRO 4
#define NDX_EVENTO_REPRODUZIR 5
#define NDX_EVENTO_ATIVIDADE_1 6
#define NDX_EVENTO_ATIVIDADE_2 7
#define NDX_EVENTO_ATIVIDADE_3 8

// Eventos temporais:

// numero de eventos temporais disponiveis
#define NUM_EVENTOS_TMP 3

// maximo de evetos numa fase
#define MAX_EVENTOS_FASE 100

// eventos temporais
// nada ocorre
#define EVENTO_TMP_NULO 0
// termina a partida
#define EVENTO_TMP_TERMINA_PARTIDA 1
// cria algum elemento interventor
#define EVENTO_TMP_CRIA_INTERVENTOR 2



// DADOS DOS AGENTES
// informa quais dados estao na area de dados do agente

// nao tem dados
#define TIPO_INDEFINIDO 0

// tem dados sobre parametros fisicos
#define TIPO_FISICO 1



// MODELOS

// ATENCAO:
// Alterar arquivo cenario.cpp, funcao mCriaModelosELuzes,
// para incluir novos modelos.
// Alterar, tambem, as macros CONFIG_TAXAS_* (estao mais abaixo)

// numero de modelos disponiveis (que tem malha de poligonos)
#define NUM_MODELOS 19
// quantos modelos existem, mas nao tem objeto
#define NUM_MODELOS_ESP 3

// identificadores dos modelos (ATUALIZAR NUM_MODELOS)
// (numeracao comeca em 0 e soh soma 1 a cada novo modelo)
// bola
#define NDX_MODELO_BOLA 0
#define STR_NOMEARQBOLA ".\\dp\\bola.x"
// peixe gordo
#define NDX_MODELO_PEIXE_GORDO 1
#define STR_NOMEARQGORDO ".\\dp\\gordo.x"
// peixe azul
#define NDX_MODELO_PEIXE_AZUL 2
#define STR_NOMEARQAZUL ".\\dp\\azul.x"
// peixe listrado
#define NDX_MODELO_PEIXE_LISTRADO 3
#define STR_NOMEARQLISTRADO ".\\dp\\listrado.x"
// alga verde
#define NDX_MODELO_ALGA_VERDE 4
#define STR_NOMEARQALGAVERDE ".\\dp\\algave.x"
// fundo lago
#define NDX_MODELO_FUNDO_LAGO 5
#define STR_NOMEARQFUNDOLAGO ".\\dp\\fundolag.x"
// microorganismo
#define NDX_MODELO_MICROORGANISMO 6
#define STR_NOMEARQMICROORGANISMO ".\\dp\\micro.x"
// draga
#define NDX_MODELO_DRAGA 7
#define STR_NOMEARQDRAGA ".\\dp\\draga.x"
// agrotoxico
#define NDX_MODELO_AGROTOXICO 8
#define STR_NOMEARQAGROTOXICO ".\\dp\\agrotox.x"
// rede de arrastao
#define NDX_MODELO_REDE 9
#define STR_NOMEARQREDE ".\\dp\\rede.x"
// partida terminou
#define NDX_MODELO_PARTIDA_TERMINOU 10
#define STR_NOMEARQPARTIDA_TERMINOU ".\\dp\\partterm.x"
// lixo
#define NDX_MODELO_LIXO 11
#define STR_NOMEARQLIXO ".\\dp\\lixo.x"
// jetski
#define NDX_MODELO_JETSKI 12
#define STR_NOMEARQJETSKI ".\\dp\\jetski.x"
// pesca predatoria
#define NDX_MODELO_PESCA_PREDATORIA 13
#define STR_NOMEARQPESCA_PREDATORIA ".\\dp\\pescap.x"
// reservatorio de gasolina do posto
#define NDX_MODELO_GASOLINA 14
#define STR_NOMEARQGASOLINA ".\\dp\\gasolina.x"
// detrito: esgoto pluvial
#define NDX_MODELO_DETRITO_ESGOTO_PLUVIAL 15
#define STR_NOMEARQDETRITO_ESGOTO_PLUVIAL ".\\dp\\esgpl-d.x"
// detrito: esgoto industrial
#define NDX_MODELO_DETRITO_ESGOTO_INDUSTRIAL 16
#define STR_NOMEARQDETRITO_ESGOTO_INDUSTRIAL ".\\dp\\esgin-d.x"
// detrito: gasolina
#define NDX_MODELO_DETRITO_GASOLINA 17
#define STR_NOMEARQDETRITO_GASOLINA ".\\dp\\gasol-d.x"
// detrito: agrotoxico
#define NDX_MODELO_DETRITO_AGROTOXICO 18
#define STR_NOMEARQDETRITO_AGROTOXICO ".\\dp\\agrot-d.x"

// especiais, nao tem malha, (ATUALIZAR NUM_MODELOS_ESP)
// nulo (eh especial):
#define NDX_MODELO_NULO 100000
// fundo lago (sem objeto especifico):
#define NDX_MODELO_FUNDO_LAGO_INVISIVEL 100001
// agua (sem objeto especifico):
#define NDX_MODELO_AGUA_INVISIVEL 100002



// TIPOS DE CORPOS FISICOS

#define ID_CORPO_INDEFINIDO 0
#define ID_CORPO_CARNE 1
#define ID_CORPO_VEGETAL 2



// AGENTES

// configuracoes para cada tipo de agente:
// a linha indica qual evento,
// primeiro valor: qual eh a acao atual, segundo:
// qual acao substitui a acao atual se necessario;
// outros dados:
// - a qual grupo de objetos do cenario o agente pertence (de 0 a 3);
// - modelo fisico (forma do corpo) do agente;
// - tipo do corpo;
// - velocidade de rotacao permanente * 100 (usado em microorganismos)
// - frequencia com que o agente deve entrar em epoca de reproducao
// - coordenadas do local de reproducao tipico (sao 3 valores: x,y,z)
// - quanto perde de energia ao se reproduzir

// numero de DWORDs em cada configuracao (matriz de configuracao)
#define TAM_CONFIG 27

// agente nulo (nao tem resposta as mensagens)
#define CONFIG_AGENTE_NULO \
{ ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  0,\
  NDX_MODELO_NULO,\
  ID_CORPO_INDEFINIDO,\
  0,\
  20000000,\
  0, 0, 0,\
  -5 }

// antes de nascer
#define CONFIG_AGENTE_PRENATAL \
{ ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NASCE, ID_ACAO_NASCE,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  0,\
  NDX_MODELO_NULO,\
  ID_CORPO_INDEFINIDO,\
  0,\
  20000000,\
  0, 0, 0,\
  -5 }

// bola (usado para testes em geral)
#define CONFIG_AGENTE_BOLA \
{ ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_MORRE, ID_ACAO_MORRE,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  0,\
  NDX_MODELO_BOLA,  \
  ID_CORPO_INDEFINIDO,\
  0,\
  20000000,\
  0, 0, 0,\
  -5 }

// o fundo do lago
#define CONFIG_AGENTE_FUNDO_LAGO \
{ ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  NDX_EVENTO_MORRE, NDX_EVENTO_MORRE,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_FORNECE_ALIMENTO, ID_ACAO_FORNECE_ALIMENTO,\
  0,\
  NDX_MODELO_FUNDO_LAGO_INVISIVEL,\
  ID_CORPO_INDEFINIDO,\
  0,\
  20000000,\
  0, 0, 0,\
  -5 }

// a agua
#define CONFIG_AGENTE_AGUA \
{ ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  NDX_EVENTO_MORRE, NDX_EVENTO_MORRE,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_FORNECE_ALIMENTO, ID_ACAO_FORNECE_ALIMENTO,\
  0,\
  NDX_MODELO_AGUA_INVISIVEL,\
  ID_CORPO_INDEFINIDO,\
  0,\
  20000000,\
  0, 0, 0,\
  -5 }

// peixe azul
#define CONFIG_AGENTE_PEIXE_AZUL \
{ ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_MORRE, ID_ACAO_MORRE, \
  ID_ACAO_MUDA_DIRECAO, ID_ACAO_MUDA_DIRECAO, \
  ID_ACAO_MATA, ID_ACAO_MATA,\
  ID_ACAO_REPRODUZ, ID_ACAO_REPRODUZ,\
  ID_ACAO_METABOLISMO, ID_ACAO_METABOLISMO, \
  ID_ACAO_MOVE_LIVRE, ID_ACAO_MUDA_DIRECAO, \
  ID_ACAO_PREPARA_REPRODUZ, ID_ACAO_PREPARA_REPRODUZ,\
  0,\
  NDX_MODELO_PEIXE_AZUL, \
  ID_CORPO_CARNE,\
  0,\
  265,\
  +60, -42, 0,\
  -3 }

// peixe listrado
#define CONFIG_AGENTE_PEIXE_LISTRADO \
{ ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_MORRE, ID_ACAO_MORRE, \
  ID_ACAO_MUDA_DIRECAO, ID_ACAO_MUDA_DIRECAO, \
  ID_ACAO_MATA, ID_ACAO_MATA,\
  ID_ACAO_REPRODUZ, ID_ACAO_REPRODUZ,\
  ID_ACAO_METABOLISMO, ID_ACAO_METABOLISMO, \
  ID_ACAO_MOVE_LIVRE, ID_ACAO_MUDA_DIRECAO, \
  ID_ACAO_PREPARA_REPRODUZ, ID_ACAO_PREPARA_REPRODUZ,\
  0,\
  NDX_MODELO_PEIXE_LISTRADO,\
  ID_CORPO_CARNE,\
  0,\
  245,\
  -55, -45, 0,\
  -4 }

// peixe gordo
#define CONFIG_AGENTE_PEIXE_GORDO \
{ ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_MORRE, ID_ACAO_MORRE, \
  ID_ACAO_MUDA_DIRECAO, ID_ACAO_MUDA_DIRECAO, \
  ID_ACAO_MATA, ID_ACAO_MATA,\
  ID_ACAO_REPRODUZ, ID_ACAO_REPRODUZ,\
  ID_ACAO_METABOLISMO, ID_ACAO_METABOLISMO, \
  ID_ACAO_MOVE_LIVRE, ID_ACAO_MUDA_DIRECAO, \
  ID_ACAO_PREPARA_REPRODUZ, ID_ACAO_PREPARA_REPRODUZ,\
  0,\
  NDX_MODELO_PEIXE_GORDO,     \
  ID_CORPO_CARNE,\
  0,\
  680,\
  0, +5, 0,\
  -24 }

// alga verde
#define CONFIG_AGENTE_ALGA_VERDE \
{ ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_MORRE, ID_ACAO_MORRE, \
  ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_REPRODUZ, ID_ACAO_REPRODUZ,\
  ID_ACAO_METABOLISMO, ID_ACAO_METABOLISMO, \
  ID_ACAO_ABSORVE_ALIMENTO, ID_ACAO_ABSORVE_ALIMENTO,\
  ID_ACAO_PREPARA_REPRODUZ, ID_ACAO_PREPARA_REPRODUZ,\
  0,\
  NDX_MODELO_ALGA_VERDE,     \
  ID_CORPO_VEGETAL,\
  0,\
  20000000,\
  0, 0, 0,\
  -15 }

// microorganismo
#define CONFIG_AGENTE_MICROORGANISMO \
{ ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_MORRE, ID_ACAO_MORRE, \
  ID_ACAO_MUDA_DIRECAO, ID_ACAO_MUDA_DIRECAO, \
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_REPRODUZ, ID_ACAO_REPRODUZ,\
  ID_ACAO_METABOLISMO, ID_ACAO_METABOLISMO, \
  ID_ACAO_MUDA_DIRECAO, ID_ACAO_ABSORVE_ALIMENTO, \
  ID_ACAO_PREPARA_REPRODUZ, ID_ACAO_PREPARA_REPRODUZ,\
  0,\
  NDX_MODELO_MICROORGANISMO,\
  ID_CORPO_CARNE,\
  10,\
  20000000,\
  0, 0, 0,\
  -5 }

#define CONFIG_AGENTE_DRAGA \
{ ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_MORRE, ID_ACAO_MORRE, \
  ID_ACAO_DRAGA_LEITO, ID_ACAO_DRAGA_LEITO, \
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_DRAGA_LEITO, ID_ACAO_DRAGA_LEITO, \
  ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_NULA, ID_ACAO_NULA,\
  1,\
  NDX_MODELO_DRAGA,\
  ID_CORPO_INDEFINIDO,\
  0,\
  20000000,\
  0, 0, 0,\
  0 }

#define CONFIG_AGENTE_AGROTOXICO \
{ ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_MORRE, ID_ACAO_MORRE, \
  ID_ACAO_AGROTOXICO, ID_ACAO_AGROTOXICO, \
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_AGROTOXICO, ID_ACAO_AGROTOXICO, \
  ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_NULA, ID_ACAO_NULA,\
  1,\
  NDX_MODELO_AGROTOXICO,\
  ID_CORPO_INDEFINIDO,\
  0,\
  20000000,\
  0, 0, 0,\
  0 }

#define CONFIG_AGENTE_REDE \
{ ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_MORRE, ID_ACAO_MORRE, \
  ID_ACAO_REDE, ID_ACAO_REDE, \
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_REDE, ID_ACAO_REDE, \
  ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_NULA, ID_ACAO_NULA,\
  1,\
  NDX_MODELO_REDE,\
  ID_CORPO_INDEFINIDO,\
  0,\
  20000000,\
  0, 0, 0,\
  0 }

#define CONFIG_AGENTE_LIXO \
{ ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_MORRE, ID_ACAO_MORRE, \
  ID_ACAO_LIXO, ID_ACAO_LIXO, \
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_LIXO, ID_ACAO_LIXO, \
  ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_NULA, ID_ACAO_NULA,\
  1,\
  NDX_MODELO_LIXO,\
  ID_CORPO_INDEFINIDO,\
  0,\
  20000000,\
  0, 0, 0,\
  0 }

#define CONFIG_AGENTE_JETSKI \
{ ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_MORRE, ID_ACAO_MORRE, \
  ID_ACAO_JETSKI, ID_ACAO_JETSKI, \
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_JETSKI, ID_ACAO_JETSKI, \
  ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_NULA, ID_ACAO_NULA,\
  1,\
  NDX_MODELO_JETSKI,\
  ID_CORPO_INDEFINIDO,\
  0,\
  20000000,\
  0, 0, 0,\
  0 }

#define CONFIG_AGENTE_PESCA_PREDATORIA \
{ ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_MORRE, ID_ACAO_MORRE, \
  ID_ACAO_PESCA_PREDATORIA, ID_ACAO_PESCA_PREDATORIA, \
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_PESCA_PREDATORIA, ID_ACAO_PESCA_PREDATORIA, \
  ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_NULA, ID_ACAO_NULA,\
  1,\
  NDX_MODELO_PESCA_PREDATORIA,\
  ID_CORPO_INDEFINIDO,\
  0,\
  20000000,\
  0, 0, 0,\
  0 }

#define CONFIG_AGENTE_ESGOTO_PLUVIAL \
{ ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_MORRE, ID_ACAO_MORRE, \
  ID_ACAO_ESGOTO_PLUVIAL, ID_ACAO_ESGOTO_PLUVIAL, \
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_ESGOTO_PLUVIAL, ID_ACAO_ESGOTO_PLUVIAL, \
  ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_NULA, ID_ACAO_NULA,\
  1,\
  NDX_MODELO_NULO,\
  ID_CORPO_INDEFINIDO,\
  0,\
  20000000,\
  0, 0, 0,\
  0 }

#define CONFIG_AGENTE_ESGOTO_INDUSTRIAL \
{ ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_MORRE, ID_ACAO_MORRE, \
  ID_ACAO_ESGOTO_INDUSTRIAL, ID_ACAO_ESGOTO_INDUSTRIAL, \
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_ESGOTO_INDUSTRIAL, ID_ACAO_ESGOTO_INDUSTRIAL, \
  ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_NULA, ID_ACAO_NULA,\
  1,\
  NDX_MODELO_NULO,\
  ID_CORPO_INDEFINIDO,\
  0,\
  20000000,\
  0, 0, 0,\
  0 }

#define CONFIG_AGENTE_GASOLINA \
{ ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_MORRE, ID_ACAO_MORRE, \
  ID_ACAO_GASOLINA, ID_ACAO_GASOLINA, \
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_NULA, ID_ACAO_NULA,\
  ID_ACAO_GASOLINA, ID_ACAO_GASOLINA, \
  ID_ACAO_NULA, ID_ACAO_NULA, \
  ID_ACAO_NULA, ID_ACAO_NULA,\
  1,\
  NDX_MODELO_GASOLINA,\
  ID_CORPO_INDEFINIDO,\
  0,\
  20000000,\
  0, 0, 0,\
  0 }

// numero maximo de agentes por cenario
#define MAX_AGENTES 100

// maximo de agente de um mesmo tipo (modelo de corpo fisico) que podem
// existir ao mesmo tempo
#define MAX_AGENTES_SEMELHANTES 15

// indice de alguns agentes "fixos" na tabela de agentes
// calcular indice no array usando: MAX_AGENTES - NDX_AGENTE_...
#define NDX_AGENTE_FUNDO_LAGO 1
#define NDX_AGENTE_AGUA 2
#define NDX_AGENTE_INTERVENTOR 3
// numero maximo de agentes interventores ao mesmo tempo
#define MAX_AGENTES_INTERVENTORES 20

// taxa de absorcao de energia pelas plantas
#define TX_ABSORVE_ALIMENTO 0.15

// maximo de energia que plantas podem acumular
// (relacionado com TX_BOM_REPRODUZIR_MONO)
#define TX_MAXIMO_ABSORVE_ALIMENTO 46

// taxa de gasto de energia pelos seres vivos
#define TX_PERDA_ENERGIA -0.03

// avanco do tempo nos relogios biologicos dos seres vivos
#define TX_AVANCO_TEMPO 1

// se a fome chegar a esse valor o ser morre
#define TX_MORRE_FOME 0

// se relogio biologico chegar a esse valor morre (outro 850)
#define TX_MORRE_IDADE 1100

// taxa inicial de fome do ser
#define TX_INICIAL_FOME 25

// nesse limite eh bom haver reproducao assexuada
// (vegetais e microorganismos)
#define TX_BOM_REPRODUZIR_MONO 45

// a partir desse nivel de energia eh possivel reproducao
// sexuada (peixes)
// tem que ser >= TX_BOM_MOVER 
#define TX_BOM_REPRODUZIR_BI 10

// a partir desse nivel de energia eh possivel mover (para peixes)
// tem que ser <= TX_BOM_REPRODUZIR_BI 
#define TX_BOM_MOVER 5

// peixe se alimentou, quanto reduz a fome
#define TX_PREDOU 10

// quando estah sem fome (nao mata)
#define TX_SEM_FOME 15



// D3D

// Cores:

// cor do fundo do aquario
#define CORFUNDO_R 0
#define CORFUNDO_G 0.15
#define CORFUNDO_B 0.25

// Sombreamento:

// para cada BPP quantos niveis de sombreamento
#define NIVEIS_SOMBREAMENTO_1 4
#define NIVEIS_SOMBREAMENTO_16 16
#define NIVEIS_SOMBREAMENTO_32 256

// Sistema:

// tipo de imagem que deve ser gerada:
#define CONFIGURACAO_IMAGEM D3DRMLIGHT_ON | D3DRMFILL_SOLID | D3DRMSHADE_GOURAUD

// numero maximo de drivers para D3D que sao esperados
#define MAX_DRIVERS 5

// maior tamanho para nome de um dispositivo e nome de arquivo
#define MAX_STR 50

// profundidade da viewport (para z-buffer?)
#define PROFUNDIDADE 5000.0

// distancia da camera ate plano da viewport (plano de projecao)
#define DIST_CAM 250



// CENARIO

// proporcao das margens da viewport principal (relativo a janela)
#define PROPMARGEMINFERIOR 0.25
#define PROPMARGEMDIREITA 0.0

// limites das bordas do cenario fisico (janela principal)
// acima vai a cidade
#define LIMSUP 0.68
// evitar problemas com plantas
#define LIMINF 0.15
#define LIMESQ 0.08
#define LIMDIR 0.08

// maximo de objetos num grupo de objetos
#define MAX_OBJETOS 75

// numero de grupos de objetos. Grupos:
// sub-aguaticos - peixes, plantas, microorganismos -,
// interventores,
// fontes de luz direcionais,
// mensagens e outros elementos
#define NUM_GRUPOS 4




// JOGO

// velocidade default para executar jogo
#define VELOCDEFAULT 130
