--[[
Rei dos Ratos - Um RPG baseado em texto
Um jogo medieval com fantasia, onde o jogador pode tomar suas próprias decisões
e moldar sua jornada através de um mundo cheio de reis, rainhas, princesas,
comerciantes e criaturas mágicas.
]]
-- Variáveis globais
local jogador = {}
local inventario = {}
local quests = {}
local mundo = {}
local inimigos = {}
local npcs = {}
local localizacaoAtual = ""
local gameRunning = true
local saveFile = "[Link]"
-- Cores para o terminal (ANSI escape codes)
local cores = {
reset = "\27[0m",
vermelho = "\27[31m",
verde = "\27[32m",
amarelo = "\27[33m",
azul = "\27[34m",
magenta = "\27[35m",
ciano = "\27[36m",
branco = "\27[37m"
}
-- Funções de utilidade
function limparTela()
[Link]("clear || cls")
end
function esperarTecla()
print("\nPressione ENTER para continuar...")
[Link]()
end
function salvarJogo()
local arquivo = [Link](saveFile, "w")
if arquivo then
arquivo:write("nome=" .. [Link] .. "\n")
arquivo:write("vida=" .. [Link] .. "\n")
arquivo:write("vidaMaxima=" .. [Link] .. "\n")
arquivo:write("mana=" .. [Link] .. "\n")
arquivo:write("manaMaxima=" .. [Link] .. "\n")
arquivo:write("forca=" .. [Link] .. "\n")
arquivo:write("defesa=" .. [Link] .. "\n")
arquivo:write("inteligencia=" .. [Link] .. "\n")
arquivo:write("nivel=" .. [Link] .. "\n")
arquivo:write("experiencia=" .. [Link] .. "\n")
arquivo:write("ouro=" .. [Link] .. "\n")
arquivo:write("localizacao=" .. localizacaoAtual .. "\n")
-- Salvar inventário
arquivo:write("inventario_tamanho=" .. #inventario .. "\n")
for i, item in ipairs(inventario) do
arquivo:write("item_" .. i .. "_nome=" .. [Link] .. "\n")
arquivo:write("item_" .. i .. "_tipo=" .. [Link] .. "\n")
arquivo:write("item_" .. i .. "_valor=" .. [Link] .. "\n")
arquivo:write("item_" .. i .. "_equipado=" ..
tostring([Link]) .. "\n")
end
-- Salvar quests
arquivo:write("quests_tamanho=" .. #quests .. "\n")
for i, quest in ipairs(quests) do
arquivo:write("quest_" .. i .. "_id=" .. [Link] .. "\n")
arquivo:write("quest_" .. i .. "_completa=" .. tostring([Link])
.. "\n")
arquivo:write("quest_" .. i .. "_ativa=" .. tostring([Link]) .. "\
n")
end
arquivo:close()
print([Link] .. "Jogo salvo com sucesso!" .. [Link])
else
print([Link] .. "Erro ao salvar o jogo!" .. [Link])
end
end
function carregarJogo()
local arquivo = [Link](saveFile, "r")
if arquivo then
local linhas = {}
for linha in arquivo:lines() do
[Link](linhas, linha)
end
arquivo:close()
-- Processar linhas
for _, linha in ipairs(linhas) do
local chave, valor = linha:match("(.+)=(.+)")
if chave == "nome" then [Link] = valor
elseif chave == "vida" then [Link] = tonumber(valor)
elseif chave == "vidaMaxima" then [Link] = tonumber(valor)
elseif chave == "mana" then [Link] = tonumber(valor)
elseif chave == "manaMaxima" then [Link] = tonumber(valor)
elseif chave == "forca" then [Link] = tonumber(valor)
elseif chave == "defesa" then [Link] = tonumber(valor)
elseif chave == "inteligencia" then [Link] =
tonumber(valor)
elseif chave == "nivel" then [Link] = tonumber(valor)
elseif chave == "experiencia" then [Link] =
tonumber(valor)
elseif chave == "ouro" then [Link] = tonumber(valor)
elseif chave == "localizacao" then localizacaoAtual = valor
end
-- Processar inventário e quests seria mais complexo
-- e será implementado posteriormente
end
print([Link] .. "Jogo carregado com sucesso!" .. [Link])
return true
else
print([Link] .. "Nenhum jogo salvo encontrado!" .. [Link])
return false
end
end
function exibirMenu()
limparTela()
print([Link] .. [[
╔═══════════════════════════════════════════════╗
║ ║
║ REI DOS RATOS ║
║ ║
║ Um RPG medieval de fantasia ║
║ ║
╚═══════════════════════════════════════════════╝
]] .. [Link])
print([Link] .. "1. Novo Jogo" .. [Link])
print([Link] .. "2. Carregar Jogo" .. [Link])
print([Link] .. "3. Sobre" .. [Link])
print([Link] .. "4. Sair" .. [Link])
local escolha = [Link]()
if escolha == "1" then
iniciarNovoJogo()
elseif escolha == "2" then
if not carregarJogo() then
esperarTecla()
exibirMenu()
else
continuarJogo()
end
elseif escolha == "3" then
exibirSobre()
elseif escolha == "4" then
print([Link] .. "Obrigado por jogar Rei dos Ratos!" .. [Link])
gameRunning = false
else
print([Link] .. "Opção inválida!" .. [Link])
esperarTecla()
exibirMenu()
end
end
function exibirSobre()
limparTela()
print([Link] .. [[
╔═══════════════════════════════════════════════╗
║ SOBRE ║
╚═══════════════════════════════════════════════╝
]] .. [Link])
print([Link] .. "Rei dos Ratos é um RPG baseado em texto ambientado")
print("em um mundo medieval de fantasia. Você embarcará em uma")
print("jornada épica, enfrentando criaturas mágicas, interagindo")
print("com reis, rainhas e comerciantes, e descobrindo segredos")
print("obscuros que podem mudar o destino do reino.")
print("\nSuas escolhas importam e moldarão o mundo ao seu redor.")
print("Escolha sabiamente..." .. [Link])
esperarTecla()
exibirMenu()
end
function iniciarNovoJogo()
limparTela()
print([Link] .. [[
╔═══════════════════════════════════════════════╗
║ CRIAÇÃO DE PERSONAGEM ║
╚═══════════════════════════════════════════════╝
]] .. [Link])
print([Link] .. "Qual é o seu nome, aventureiro?" .. [Link])
[Link] = [Link]()
-- Inicializar atributos do jogador
[Link] = 100
[Link] = 100
[Link] = 50
[Link] = 50
[Link] = 10
[Link] = 5
[Link] = 8
[Link] = 1
[Link] = 0
[Link] = 50
[Link] = {}
[Link] = {}
-- Inicializar inventário com itens básicos
inventario = {
{nome = "Espada Enferrujada", tipo = "arma", valor = 5, dano = 3, equipado
= true},
{nome = "Túnica de Pano", tipo = "armadura", valor = 3, defesa = 1,
equipado = true},
{nome = "Poção de Cura", tipo = "consumível", valor = 10, efeito = "cura",
quantidade = 3}
}
-- Inicializar quests
quests = {
{id = "inicio", titulo = "O Chamado do Rei", descricao = "Descubra por que
o Rei está convocando aventureiros.", completa = false, ativa = true},
{id = "ratos", titulo = "Infestação de Ratos", descricao = "Elimine os
ratos que estão infestando o celeiro do fazendeiro.", completa = false, ativa =
false}
}
-- Inicializar mundo
inicializarMundo()
-- Começar na aldeia
localizacaoAtual = "aldeia_entrada"
print([Link] .. "\nBem-vindo ao mundo de Rei dos Ratos, " ..
[Link] .. "!" .. [Link])
esperarTecla()
-- Iniciar prólogo
exibirPrologo()
end
function exibirPrologo()
limparTela()
print([Link] .. [[
╔═══════════════════════════════════════════════╗
║ PRÓLOGO ║
╚═══════════════════════════════════════════════╝
]] .. [Link])
print([Link] .. "O Reino de Rodenmar, outrora próspero e pacífico,")
print("agora enfrenta tempos sombrios. Rumores de uma antiga maldição")
print("começaram a se espalhar quando estranhos acontecimentos")
print("começaram a ocorrer nas terras do reino.")
esperarTecla()
print("\nRatos, em números nunca antes vistos, começaram a infestar")
print("vilas e cidades. Mas estes não são ratos comuns - são maiores,")
print("mais inteligentes, e alguns dizem que podem até mesmo falar.")
esperarTecla()
print("\nO Rei Aldric IV emitiu um chamado a todos os aventureiros")
print("dispostos a investigar esta estranha ocorrência e descobrir")
print("a verdade por trás do que as pessoas estão chamando de")
print("'A Ascensão do Rei dos Ratos'.")
esperarTecla()
print("\nVocê, " .. [Link] .. ", um aventureiro em busca de fama e
fortuna,")
print("decidiu atender ao chamado do rei. Sua jornada começa na pequena")
print("aldeia de Whiskerfall, o último local a reportar atividade incomum")
print("dos ratos...")
esperarTecla()
-- Iniciar o jogo propriamente dito
continuarJogo()
end
function continuarJogo()
while gameRunning do
processarLocalizacao()
end
end
-- Função para inicializar o mundo do jogo
function inicializarMundo()
-- Definir localizações
mundo = {
aldeia_entrada = {
nome = "Entrada da Aldeia de Whiskerfall",
descricao = "Você está na entrada da pequena aldeia de Whiskerfall. Um
portão de madeira simples marca a entrada, e você pode ver algumas casas de palha e
madeira mais adiante. Um guarda sonolento está de pé próximo ao portão.",
opcoes = {
{texto = "Entrar na aldeia", destino = "aldeia_praca"},
{texto = "Falar com o guarda", destino = "aldeia_guarda"},
{texto = "Examinar os arredores", destino = "aldeia_arredores"}
}
},
aldeia_guarda = {
nome = "Guarda da Aldeia",
descricao = "Você se aproxima do guarda, que parece entediado. Ele é um
homem de meia-idade com uma barba por fazer e uma lança que parece não ter sido
usada em combate há anos.",
dialogo = {
{texto = "Olá, viajante. Bem-vindo a Whiskerfall. Não recebemos
muitos visitantes ultimamente, especialmente com esses problemas de ratos que
estamos tendo."},
{texto = "Se você veio pelo chamado do rei, deveria falar com o
Prefeito Whiskers na praça central. Ele pode te dar mais informações sobre o que
está acontecendo por aqui."},
{texto = "Ah, e tome cuidado à noite. Os ratos parecem ser mais
ativos depois que o sol se põe. Estranho, não é?"}
},
opcoes = {
{texto = "Agradecer e entrar na aldeia", destino = "aldeia_praca"},
{texto = "Perguntar mais sobre os ratos", destino =
"aldeia_guarda_ratos"},
{texto = "Voltar para a entrada", destino = "aldeia_entrada"}
}
},
aldeia_guarda_ratos = {
nome = "Guarda da Aldeia - Sobre os Ratos",
descricao = "O guarda parece um pouco nervoso quando você pergunta mais
sobre os ratos.",
dialogo = {
{texto = "Os ratos? Bem, começou há cerca de um mês. Primeiro, eram
apenas alguns, nada fora do comum."},
{texto = "Mas então começaram a aparecer mais e mais. Maiores
também. E inteligentes, muito inteligentes."},
{texto = "Alguns moradores juram que os viram organizados, como se
estivessem seguindo ordens. E há rumores... rumores de um rato gigante que os
comanda."},
{texto = "Mas isso é bobagem, claro. Ratos não podem ter um rei...
podem?"}
},
opcoes = {
{texto = "Agradecer e entrar na aldeia", destino = "aldeia_praca"},
{texto = "Voltar para a entrada", destino = "aldeia_entrada"}
}
},
aldeia_arredores = {
nome = "Arredores da Aldeia",
descricao = "Você examina os arredores da aldeia. Campos de trigo se
estendem a perder de vista, mas você nota que muitos parecem ter sido danificados.
Há pequenas trilhas cortando através das plantações, como se pequenas criaturas
tivessem passado por ali repetidamente.",
opcoes = {
{texto = "Seguir uma das trilhas", destino = "trilha_ratos"},
{texto = "Voltar para a entrada da aldeia", destino =
"aldeia_entrada"}
}
},
trilha_ratos = {
nome = "Trilha dos Ratos",
descricao = "Você segue uma das trilhas através do campo de trigo. Após
alguns minutos, a trilha leva a uma pequena toca no chão, grande o suficiente para
um rato de tamanho considerável. Há marcas de garras ao redor da entrada e um
cheiro estranho emanando de dentro.",
opcoes = {
{texto = "Examinar a toca mais de perto", destino =
"toca_examinar"},
{texto = "Voltar para os arredores da aldeia", destino =
"aldeia_arredores"}
},
inimigos = {"rato_comum"}
},
toca_examinar = {
nome = "Examinando a Toca",
descricao = "Você se ajoelha para examinar a toca mais de perto. O
cheiro é mais forte aqui, uma mistura de mofo e algo mais... metálico, como sangue.
De repente, você ouve um chiado e um rato do tamanho de um gato pequeno salta da
toca!",
combate = true,
inimigo = "rato_grande",
aposVitoria = "toca_apos_combate"
},
toca_apos_combate = {
nome = "Após o Combate",
descricao = "Com o rato derrotado, você pode examinar a toca com mais
calma. Dentro, você encontra pequenos ossos, pedaços de comida roubada e,
estranhamente, um pequeno medalhão de prata com o símbolo de uma coroa.",
opcoes = {
{texto = "Pegar o medalhão", destino = "toca_pegar_medalhao", acao
= function() adicionarItemInventario({nome = "Medalhão Misterioso", tipo =
"acessório", valor = 50, descricao = "Um medalhão de prata com o símbolo de uma
coroa. Parece importante."}) end},
{texto = "Deixar o medalhão e voltar", destino =
"aldeia_arredores"}
}
},
toca_pegar_medalhao = {
nome = "Medalhão Misterioso",
descricao = "Você pega o medalhão e o examina. É um trabalho fino,
certamente não algo que você esperaria encontrar em uma toca de rato. Quando você o
segura, sente uma estranha sensação de estar sendo observado.",
opcoes = {
{texto = "Guardar o medalhão e voltar", destino =
"aldeia_arredores"}
}
},
aldeia_praca = {
nome = "Praça Central de Whiskerfall",
descricao = "Você está na praça central da aldeia. É um espaço aberto
com um poço no centro. Várias casas e estabelecimentos cercam a praça. Você vê uma
taverna, uma loja de suprimentos, a casa do prefeito e alguns moradores realizando
suas tarefas diárias, embora todos pareçam um pouco nervosos.",
opcoes = {
{texto = "Visitar a taverna", destino = "aldeia_taverna"},
{texto = "Ir à loja de suprimentos", destino = "aldeia_loja"},
{texto = "Visitar a casa do prefeito", destino =
"aldeia_prefeito"},
(Content truncated due to size limit. Use line ranges to read in chunks)