Você pode querer examinar o Design Orientado a Objetos . Python tem um bom suporte para isso.
Livros grossos são escritos sobre isso, o que pode ser assustador quando você é novo, mas os princípios principais são bastante fáceis.
O ponto principal é apenas que você identifica com que tipo de objetos está trabalhando. Você não diz que tipo de jogo está pensando, mas coisas como Jogador, Monstro, Item, Equipamento, Arma, Armadura e outros são objetos típicos.
Se você deseja diferentes tipos de jogos, provavelmente desejará um objeto de Jogo que cuide da condição de vitória e tal. Talvez um objeto Map também?
Às vezes, não está claro se algo merece ser um objeto ou não, por exemplo, danos. Se você não danificar um objeto, o código será mais simples, mas torná-lo um objeto facilita a personalização.
Subclassificação: Armas e Armaduras são Equipamentos. Equipamentos são itens. Provavelmente existem outros tipos de itens. Você provavelmente achará útil definir um Combatente de classe do qual jogadores e monstros sejam subclasses.
A idéia é que, por exemplo, as armas terão muitas coisas em comum com todos os outros tipos de itens, elas terão peso, tamanho e outras propriedades assim.
Portanto, a subclasse fornece uma maneira de dizer que "as armas são como outros itens, mas além disso você pode manejá-los, eles afetam o dano que você causa, etc. etc."
A subclasse também permite que seus criadores de mods digam "Meu novo tipo de arma é exatamente como as armas padrão, exceto que ..."
Então você tem que decidir qual objeto é responsável por quê. Isso não é tão fácil quanto parece e você deve pensar um pouco sobre isso. Fazer escolhas erradas não afetará muito o jogo básico, mas dificultará a personalização.
Contanto que você esteja apenas mexendo sozinho, você pode mudar as coisas, mas no momento em que lança algo ao público, fazer alterações se torna muito mais difícil! As pessoas farão mods que dependem das coisas serem exatamente como são agora. Até insetos. As pessoas escreverão mods que dependem de bugs que permanecem no código. Se você mudar as coisas, esses mods irão quebrar e lynch mobs aparecerão em sua casa.
Por exemplo:
Um jogador empunhando uma arma ataca um monstro usando várias armaduras. Isso ocorre em um modo de jogo específico e em um determinado mapa.
Ambos os Combatentes podem ter Habilidades como Golpe Crítico e Esquiva.
Agora, qual objeto é responsável por quê?
Não existe uma resposta certa para isso. Depende muito do tipo de personalização que você deseja permitir.
Se você nunca chamar um objeto (por exemplo, o Mapa), esse objeto não poderá alterar o ataque de forma alguma.
Depois de tomar todas essas decisões, documente-as . Escreva um "Manual do Modders" que lista exatamente quais métodos modáveis cada objeto possui, quais parâmetros eles usam, quais devem retornar e assim por diante ...
Boa sorte!