jueves, 6 de octubre de 2016

Reclutar unidades en otros asentamientos de M&BW






Este tutorial contiene el código necesario para agregar nuevos menús de reclutamiento en Mount&Blade Warband, permitiendo así reclutar tropas en otros asentamientos como castillos y ciudades, no solo en aldeas.


Antecedentes

En la versión nativa del juego solo es posible alistar unidades a nuestro ejercito desde las aldea; sin embargo, algunos modders prefieren poder disponer de la posibilidad de reclutar en otros asentamientos y según sus propias condiciones.

*Notas:
-El código aquí presente fue desarrollado por JBJ y está incluido en la programación de Hispania 1200, en este tutorial se dan los pasos para incluirlo con éxito en otros mods.
-Este tutorial no trata sobre el aprendizaje de la programación del MS; es más, fragmentos del código, en especial los scripts, deberán ser modificados por el interesado para poder adaptarlos a su mod, por esta razón hay que tener nociones básicas de programación con el MS si se desea implementar con éxito el código en un mod.


Etapas de diseño

Programación
Este es un tutorial sencillo en el que solo necesitaremos trabajar con la programación y necesitas conocer el 'Module System', ver aquí o aquí, para poder avanzar.


Descripción del proyecto

Diseñaremos dos nuevos menús, uno para los castillos y otros para las ciudades.
Se permitirá reclutar un tipo de unidad en ciudades y castillos, además de dos tipos en castillos de propiedad. La disponibilidad y el número de reclutas seguirá las mismas normas que el reclutamiento en aldeas y en los castillos dependerá también de la relación del jugador con el dueño del mismo. El tipo de recluta y el coste unitario será a nuestro antojo.


Solución paso a paso

Directamente nos vamos al MS y comenzamos añadiendo y modificando código en varios de sus archivos:

1º Programación

-En module_menus.py
Buscamos un buen lugar para colocar las nuevas opciones que aparecerán en los menús principales de los castillos y las ciudades. El lugar elegido será sobre la opción 'Salir' de dichos menús, puedes encontrar esta opción en el código como:
1
"town_leave",[],"Leave...",
En este lugar definimos los nuevos menús que hemos programado:


Ahora los submenus y sus acciones. Un buen lugar para colocarlo es tras el submenú de reclutar en las aldeas, puedes encontrarlo buscando este código:
1
"recruit_volunteers",0,
Este es el nuevo código:


En Hispania 1200 se contempla que la cantidad de tropas disponible a reclutar en un castillo dependa de la relación del dueño del castillo con el jugador, al igual que en las ciudades y aldeas depender de la relación con el populacho.
En los castillos debemos tener una relación >=1 para poder reclutar.
Modificaremos el menú del castillo para que en la parte superior informe de la relación con el dueño a semejanza con lo que sucede en aldeas y ciudades.
Para esto debemos ir a las operaciones que se ejecutan al inicio del menú "town", exactamente tras el siguiente código:
1
2
3
4
5
6
7
(try_begin),
  (party_slot_eq,"$current_town",slot_party_type, spt_town),
  (party_get_slot, ":center_relation", "$current_town", slot_center_player_relation),
  (call_script, "script_describe_center_relation_to_s3", ":center_relation"),
  (assign, reg9, ":center_relation"),
  (str_store_string, s12, "@{!} {s3} ({reg9})."),
(try_end),
Pegamos esto que hemos programado:



-En module_string.py
Como en el código anterior hicimos uso de una cadena, ahora debemos declararla al final del documento y antes del cierre global:



-En module_constant.py
Estos menús que hemos crado necesitan de un slot al que llamaremos slot_faction_tier_6_troop que contenga para cada facción el tipo de tropas que se reclutarán en el asentamiento.
Un buen sitio para colocarlo es tras el slot
1
slot_faction_tier_5_troop         = 45
Aquí la línea:


Debemos buscar también:
1
slot_center_volunteer_troop_amount= 93
Y añadir debajo este slot:



-En module_script.py
Estos slots deben ser inicializados y para ello buscamos la línea de código:
1
(faction_set_slot, "fac_culture_1", slot_faction_tier_5_troop,
Observamos como ahí se inicializan todas los otros slot_faction_tier_X_troop según la cultura .
Debemos añadir entonces una nueva línea tras de cada slot_faction_tier_5_troop, una por cultura de la forma:

Donde A es el identificador de la cultura y B el identificador de la unidad a reclutar.

Tambien debemos buscar la línea:
1
(faction_set_slot, ":faction_no", slot_faction_tier_5_troop, ":troop"),
y añadir justo después:


Para que todo funcione correctamente es necesario modificar algunos scripts por defecto del juego, el primero será script_village_recruit_volunteers_recruit
Tiene bastantes pequeñas modificaciones así que lo mejor es sustituirlo entero por esta nueva versión:


Otro script a modificar es el script_game_start , en concreto buscamos las siguientes líneas de código:
1
2
3
(try_for_range, ":village_no", villages_begin, villages_end),
(call_script, "script_update_volunteer_troops_in_village", ":village_no"),
(try_end),
Y las sustituimos por estas:


Ahora debemos ir al script_change_player_relation_with_center, casi al final del mismo se encuentra esta línea:
1
(party_slot_eq, ":center_no", slot_party_type, spt_village),
Pues hay que borrarla o convertirla en comentario.

En el scriptscript_update_volunteer_troops_in_village
hay que hacer muchas modificaciones de nuevo, así que lo sustituiremos entero:


Por último añadimos este script al final del documento:


Sino olvidé nada esto debe funcionar perfectamente, recuerda que este código está incluido en el MS liberado junto a Hispania 1200, con el tag 'reclutamiento', puede encontrar fácilmente el código referente a este tema. Los nuevos textos que hemos incluido están en inglés, si quieres traducirlos a otro idioma debes generar nuevos documentos de idiomas y traducir las frases.


Resultado

A continuación vemos dos impresiones de pantalla de los nuevos menús en el juego.

Opción de reclutar nuevos soldados en el menú del castillo propio

Opciones de reclutamiento disponibles tras el menú de la anterior imagen

0 comentarios:

Publicar un comentario