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:
"town_leave",[],"Leave...",
En este lugar definimos los nuevos menús que hemos programado:
##########################################################
#hispania 1200, reclutamiento
("Mrecruit_volunteers_town", #hispania 1200, reclutamiento en ciudad
[
(party_slot_eq,"$current_town",slot_party_type, spt_town),
(call_script, "script_cf_village_recruit_volunteers_cond"),
]
,"Recruit Volunteers.",
[
(try_begin),
(call_script, "script_cf_enter_center_location_bandit_check"),
(else_try),
(jump_to_menu, "mnu_recruit_volunteers_town"),
(try_end),
]),
("Mrecruit_volunteers_castle", #hispania 1200, reclutamiento en castillo
[
(party_slot_eq,"$current_town",slot_party_type, spt_castle),
(party_slot_ge,"$current_town",slot_center_player_relation,1), #El juego por defecto desactiva los menus de reclutamiento para relaciones menores a 0 pero no para iguales a 0, en el castillo este caso tambien debe deshabilitarse.
(call_script, "script_cf_village_recruit_volunteers_cond"),
]
,"Recruit Volunteers.",
[
(jump_to_menu, "mnu_recruit_volunteers_castle"),
]),
##########################################################
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:
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:
################################################################
#hispania 1200, reclutamiento (actualiza e informa de la relacion con el castillo)
#Esto solo se usa para code al jugador el valor actualizado de la relacion lord/castillo hacia el jugador
#La actualizacion de tropas voluntarias atendiendo a la relacion se hace comun a todos los asentamientos, cada 72 horas se activa el trigger que llama a script_update_volunteer_troops_in_village
(try_begin),
(party_slot_eq,"$current_town",slot_party_type, spt_castle),
(call_script, "script_center_relation_is_lord_relation", "$current_town"),
(neg|eq, ":center_lord", "trp_player"),
(str_clear, s12),
(party_get_slot, ":center_relation", "$current_town", slot_center_player_relation),
(assign, reg9, ":center_relation"),
(str_store_string, s12, "str_relation_castle"), #nueva string
(try_end),
################################################################
-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:
################################################################
("relation_castle", " Your relationship with the lord of this castle is ({reg9})"), #hispania 1200, reclutamiento
################################################################
-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
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:
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:
Por último añadimos este script al final del documento:
#################################
#script_center_relation_is_lord_relation
#por JBJ
#Descripcion: Iguala la relacion del asentamiento->jugador a la relacion del propietario->jugador)
#Entradas: arg1 = center_no
#Salidas: ninguna
("center_relation_is_lord_relation",
[
(store_script_param_1, ":center_no"),
(party_get_slot, ":center_lord", ":center_no", slot_town_lord),
(try_begin), #Si el asentamiento pertence al jugador
(eq, ":center_lord", "trp_player"),
(assign, reg0, 100),
(else_try), #Si el asentamiento pertenece a un lord
(ge, ":center_lord", 0),
(call_script, "script_troop_get_player_relation", ":center_lord"),
(else_try),
(assign, reg0, 0), #Si el asentamiento no tiene lord
(try_end),
(party_set_slot, ":center_no", slot_center_player_relation, reg0),
#Otros scripts de cambio de relaciones
#script_change_player_relation_with_troop
#script_change_player_relation_with_center
]),
#################################
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