Crunchez vos adresses URL
|
Rejoignez notre discord
|
Hébergez vos photos
Page 84 sur 147 PremièrePremière ... 3474767778798081828384858687888990919294134 ... DernièreDernière
Affichage des résultats 2 491 à 2 520 sur 4386
  1. #2491
    Il y a des grands malades quand même. Ça tue un peu le fun ce genre de planification extrême je trouve. Moi j'embauche à la tête du client

  2. #2492
    Citation Envoyé par Flyingbob Voir le message
    C'est pas mal pour comprendre certaines mécaniques, mais je dois manquer d'imagination mais je vois pas trop quels genre de mod pourrait vraiment amener un plus au jeu, à part des tweaks d'armes et des trucs à la marge je vois pas.


    Un mec sur redit a profité de la nouvelle méthode d’attaque du code pour pondre un nouveau spreedsheat mis à jour avec les stats (et la répartition de stats) liés aux différents background :
    https://docs.google.com/spreadsheets...gid=1055317325

    C'est toujours bien pratique pour planifier les embauches .
    Idem, je vois pas trop ce qu'on peut modder facilement et qui apporte vraiment un plus au jeu tel qu'il est actuellement .
    ( à part peut être mettre plus d'interactions avec certaines factions ( autres bandes de mercs notamment, je verrai bien qqchose ou ponctuellement on recrute du renfort pour une mission difficile ) ou alors envisager d'autres scénars fin de campagne ( j'ai vu un fil là dessus ailleurs, y en a 2 qui tiennent la côte, l'attaque généralisée de bêtes sauvages et une invasion hors-monde par d'autres peuples plus exotiques ) mais je pense pas que ce soit faisable.
    Pour les recrutements, je pense que les joueurs chevronnés connaissent déjà très bien les avantages / inconvénients par profil suivant ce qu'ils recherchent .

  3. #2493
    Les mods "visuels" devraient être largement facilités, en fait. Si les "assets" et leurs chemins sont bien decryptés aussi, celà signifie que l'ont peut transposer le moteur de BB dans n'importe quel univers. Envie de gérer une Compagnie Noire dans un univrs plus proche de celui de Glen Cook? Ou plus classiquement dans un univers à la Warhammer? Ou une bande de croisés? ^^

    Mais bon. Je ne suis pas sur que des modders de talents soient intéressés par passer du temps sur BB aujourd'hui.

  4. #2494
    Wow.
    On a un Champollion moderne qui réussit à la pogne à décrypter les fichiers du jeu (loin d'être une promenade de santé) et qui ouvre grand les portes du modding en exposant l'intégralité des fichiers sources du jeu, et tout ce que vous trouvez à dire c'est "ah, bof, je vois pas trop quoi modder...".
    Va falloir arrêter le lexomil, vous me faites de la peine là.

    En attendant je vais me modder mon propre jeu au petit oignons, en augmentant la taille des bros sur le champ de bataille, changeant les fréquences d'uniques, modifiant certains events et tutti quanti qui seront des changements de qualité de vie. J'adore le jeu mais je le trouve hautement imparfait surtout de ce point de vue.

  5. #2495
    Ben... Fais-toi plaisir. Mais on est pas tous obligés de partager ton enthousiasme débordant

  6. #2496
    Tu as sous la main le code source intégral du jeu. Il t'est désormais possible pour ce jeu sur lequel tu as passé des dizaines et des dizaines d'heures de faire n'importe quel modification, de corriger tout ce qui t'a toujours gêné, de rajouter tout ce dont tu rêvais, de répondre à toutes les questions qui te brûlaient les lèvres.
    Et je n’exagère pas, c'est réellement tout le code source du jeu auquel on a accès en lecture et en écriture. C'est excessivement rare comme situation, surtout quand on sait que les devs n'ont jamais considéré ouvrir le jeu au modding. La plupart des jeux qui sont taillés dès leur conception pour supporter le modding n'offrent qu'une fraction de ce que l'on a là. BB est un jeu assez particulier, une sorte d’énorme script avec de l'interface utilisateur. Là tu as accès à tout sous forme de script en squirrel, plus de l'UI en (de mémoire) html et css.

    Donc oui j'avoue que je ne comprends que certains ne montrent que de l'apathie. Bien sur il faudra attendre un certain temps avant de voir des mods structurés sortir et pour l'instant on est dans la période de découverte et de mains dans le cambouis et ce n'est pas le trip de tout le monde. Mais d'ici quelques mois ou plus on devrait commencer à voir des choses fort intéressantes apparaître.

  7. #2497
    Une réaction des devs d'ailleurs ? J'imagine que les mecs ont pas forcément le sourire au bec.

  8. #2498
    Bon bilan je sais que les meilleurs types de perso du jeu c'est
    Spoiler Alert!
    ork slayer et crusader
    ! PB j'en ai jamais croisé (arf arf) des comme-ça .

  9. #2499
    Citation Envoyé par Grosnours Voir le message
    Tu as sous la main le code source intégral du jeu. Il t'est désormais possible pour ce jeu sur lequel tu as passé des dizaines et des dizaines d'heures de faire n'importe quel modification, de corriger tout ce qui t'a toujours gêné, de rajouter tout ce dont tu rêvais, de répondre à toutes les questions qui te brûlaient les lèvres.
    Et je n’exagère pas, c'est réellement tout le code source du jeu auquel on a accès en lecture et en écriture. C'est excessivement rare comme situation, surtout quand on sait que les devs n'ont jamais considéré ouvrir le jeu au modding. La plupart des jeux qui sont taillés dès leur conception pour supporter le modding n'offrent qu'une fraction de ce que l'on a là. BB est un jeu assez particulier, une sorte d’énorme script avec de l'interface utilisateur. Là tu as accès à tout sous forme de script en squirrel, plus de l'UI en (de mémoire) html et css.

    Donc oui j'avoue que je ne comprends que certains ne montrent que de l'apathie. Bien sur il faudra attendre un certain temps avant de voir des mods structurés sortir et pour l'instant on est dans la période de découverte et de mains dans le cambouis et ce n'est pas le trip de tout le monde. Mais d'ici quelques mois ou plus on devrait commencer à voir des choses fort intéressantes apparaître.
    Je comprends. C'est vrai que j'en suis encore à la phase découverte et perplexités Alors forcément je n'ai pas du tout besoin de ça pour l'instant. J'imagine que si tu maîtrises à fond le jeu c'est un outil assez excitant effectivement.

  10. #2500
    Comme rodriguez j'attends de voir la réaction de Overhype studio; je me rappelle qu'ils ne voulaient pas rendre leur code publique.
    perso je ne toucherai sans doute pas à mon jeu, parce que je l'aime comme ça (typiquement pouvoir combattre à plus de 12 bros ou changer les taux de drops ne m'intéressaient pas), après s'il y a de très bons mods qui voient le jour, why not ?
    faut aussi voir si les devs ne vont pas rajouter encore du contenu...d’ailleurs, une citation de l'artiste du jeu et qui date d'hier : "By the way, we got a little something in the works. First hints will be dropped on friday, so look forward to that "

  11. #2501
    Citation Envoyé par Lucioleman Voir le message
    faut aussi voir si les devs ne vont pas rajouter encore du contenu...d’ailleurs, une citation de l'artiste du jeu et qui date d'hier : "By the way, we got a little something in the works. First hints will be dropped on friday, so look forward to that "
    Ils ont pas fait de dragon dans leur bestiaire. Un dragon coincé dans une caverne (pour éviter le blabla sur le fait que ce genre de bestiole vol), assis sur un tas d'or. Le 101 du bestiaire fantastique. L'acheivement ultime.

  12. #2502
    les lindwurms ressemblent beaucoup à des dragons (sans ailes)

  13. #2503
    Citation Envoyé par rodriguezCIA Voir le message
    Une réaction des devs d'ailleurs ? J'imagine que les mecs ont pas forcément le sourire au bec.
    Ils ont félicité le gars sur le forum steam dans un thread sur le mod 18 bros. Ils avaient déjà aidé le gars qui avait fait le mod d'origine, donc je pense qu'ils ont peut-être même donné un coup de main à celui-ci.
    C'est par là:
    https://steamcommunity.com/app/36536...31705670711650
    Ils ont toujours dit qu'ils feraient pas un jeu modable parce qu'ils n'avaient pas le temps, et uniquement pour ça.
    Donc, non, ils sont plutôt contents.
    Je vois pas vraiment pourquoi ils feraient la gueule, en vrai. Civ 4 a, à mon avis, largement profité d'avoir donné tout son code source. J'aurais pas acheté le jeu 3 fois sans FfH2. Bon, c'est vrai qu'aujourd'hui, on perd et casse mon ses CD de jeu vu qu'on n'en a plus, mais quand même.

    De mon côté, les mods m'intéressent pas trop, mais les gens qui veulent jouer sans alps, avec 18 bros, des flèches qui perforent les armures, etc. etc. peuvent le faire maintenant.

    - - - Mise à jour - - -

    Encore que, non. Y a un mod qui serait bien:

    Adam has Battle Brothers 21 hours ago
    Originally posted by Iberian Wolf:
    Is it possible for you to create a mod for auto-pause after leaving a settlement? I hate the fact it resumes the game as I leave making me losing precious seconds...
    It also bothers me that it doesn't auto-pause upon leaving a settlement. When I get some free time, I'll look into it.

    En fait, mettre en pause quand on sort d'une ville, mettre en pause quand on détecte un ennemi. Tous les trucs qui font qu'on peut aller pisser tranquillement sans être forcé de mettre en pause quand on se déplace d'un point à un autre de la carte.

  14. #2504
    Il est déjà faisable ce mod, adam indique comment dans ce thread justement.
    La réaction des devs est là : https://www.reddit.com/r/BattleBroth...evs_what_they/
    En gros le cheval s'est échappé de l'écurie, il n'y a rien d'autres à faire que de souhaiter le meilleur au moddeurs mais bien sur ils ne feront pas de support technique pour ceux-ci, les mods doivent être gratuits et interdiction de lever les verrous liés aux DLC.
    Très belle réaction je pense.

  15. #2505
    Citation Envoyé par Grosnours Voir le message
    La plupart des jeux qui sont taillés dès leur conception pour supporter le modding n'offrent qu'une fraction de ce que l'on a là.
    Oui, alors, il y a une raison à ça et ce n'est pas qu'un choix commercial

    "Taillé pour supporter le modding" = il est alors "facile" de modder si on est motivé et a du temps à passer, et surtout les modifications possibles sont "blindées": ie: ne devraient pas causer de bugs ou faire planter le jeu. Basiquement, le gars qui modde n'a que du paramétrage et un seul langage de script à écrire, qui seras interprété par le moteur.

    Mettre les mains dans le code directement c'est un autre cambouis comme tu dis, et c'est du boulot d'une équipe de développeurs. Les modders devrons passer bien plus de temps et avoir bien plus de compétences pour sortir quelque chose, et encore plus pour que ce soit stable, et ne parlons même pas de la compatibilité entre les mods. Ce qui réduit d'autant les modders intéressées. Ce qui est un loisir abordable deviens un travail.

  16. #2506
    Modder a toujours été un "travail", je pense.
    Pour la compatibilité entre les mods, c'est le même refrain pour tous les jeux du monde : si deux mods touchent à la même donnée dans le même fichier source alors ils sont incompatibles et il faut un patch qui consiste tout bonnement en ce dit fichier source portant les mêmes modifs (en arrivant à résoudre le conflit entre les modifications contradictoires).
    Pour ce qui est de la compatibilité avec les patchs officiels, là encore pas de miracle c'est exactement le même refrain partout. Cela revient tout simplement à ce que je décrivais ci-dessus avec deux mods, à la différence que les devs ne vont pas t'indiquer quels fichiers sources ils ont modifié, eux. D'où besoin de patcher tous les mods qui touchaient au même données que le patch officiel.

    Je me rappelle du bon vieux temps de Mount&Blade où ce qui était exposé était un langage de scripts (pas très différent de ce qu'on a ici), la différence était que l'intégration au jeu était native, càd que les mods étaient faciles à gérer, charger et décharger. Je te rassure tout de suite : à partir du moment où tu exposes un langage de script quelconque, tu va potentiellement planter grave le jeu. Pareil pour les assets d'ailleurs, les exposer peut amener à de sacrés bugs.
    En d'autres termes je ne crois pas en cette vision romantique d'un modding propre et pur, qui ne risque en rien l'intégrité du jeu. Modder a toujours été un travail de goret, et s'apparente comme deux gouttes de miel à du vrai dev de jeu vidéo. La seule différence avec du dév c'est que tu as déjà l'immense partie du boulot de faite pour toi et que tu n'as aucune doc sur le fonctionnement interne du schmilblick.

    L'utilisation des mods elle est moins crade, mais il faut toujours installer le mod (parfois non trivival), jongler avec les différents mods, savoir lesquels sont incompatibles et ne pas oublier de les mettre à jour. Pas une sinécure non plus.

    Bien entendu tous ces soucis d'un côté ou de l'autre de la barrière valent largement la peine puisqu'on accède alors à une version personnalisé ou améliorée ou carrément nouvelle du jeu.
    Dernière modification par Grosnours ; 23/01/2019 à 07h51.

  17. #2507
    Apres quelques séances de "save scum", j'ai enfin réussi à obtenir l'armure de Davkul tout en répondant à quelques réponse qui étaient en attente sur les discussions steam.
    comme le sujet est un spoil très fort, tout sera rédigé sous balise.
    Spoiler Alert!
    Tout d'abord un condensé des informations concernant les event en général et ceux liés à Davkul :
    -Un event se déclenche tous les 3/4 jours
    -Un event se passe entre le début de la periode "afternoon" (le soleil sur 6 heures), sa période se termine le matin (morning)
    -Un event peut se passer en mouvement, en camp, personnellement je ne bouge pas et reste sur de la prairie
    -Il est déconseillé d’être en territoire peaux verts pour save scum car cela attire un événement qui va polluer la séance
    -l'event est fonction de la classe de nos perso (ex conversion cultiste), de leur trait (event de l'alcoolique), de la période du jeu (avant ou au début d'une crise), de la ou l'on se situe (ex territoire orc), du "cooldown entre 2 event "
    -L'event de l'armure de Davkul nécessite 2 cultistes et 4 convertis au minimum donc un total de 6 (pas confirmé ces chiffres car j'en avais plus )
    -L'event de la conversion d'un bro en cultiste par un de nos cultistes à un cooldown d'environ 20-30 jours

    J'ai commencé à faire quelques séances jours 111 et ait espacé celles ci de 20 à 30 jours.
    J'ai pu obtenir l’événement jour 233, alors que ma compagnie était de renom Légendaire (lors de ma recherche sur le ne je n'ai jamais trouvé ces informations car la plupart des joueurs commencent tardivement)
    Je n'ai jamais eu l’événement du casque de Davkul, ni celui du sacrifié

    Quelques considérations:
    Il ne sert à rien d'insister, si un événement pop plus que les autres (hormis perte de nourriture / chien de combat) c'est que toutes les conditions son réunies et qu'il faut le faire passer (ex début de crise, crise, conversion ....).
    Arrivé jour 233 j'ai fait 23 tentatives avant d'avoir l'event de l'armure et du sacrifice
    Ayant perdu une grosse partie de ma compagnie pour départ après le sacrifice j'ai décide de reprendre un sauvegarde antérieure et d'aller crafter de la poussière qui faire rire "happy powder" (merci Luciole pour le truc).
    Riche de ma poudre, j'ai relancé une séance : l'event est venu après 19 tentative, j'en déduit donc que quand tous les éléments sont réunis, qu'il n'y a pas d'event pollueur cela arrive très vite.
    Il me manquait 1 happy powder donc au total j'ai perdu 2 bros, un pour le sacrifice (bro de départ archer) + un autre choisi pour manque de poudre.
    le bro mécontent quitte l’équipe, je n'ai pas réussi à le garder (les garder lors de ma première tentative) en payant des tournées , peut être que leur moral était déjà trop bas avant l'event ?.
    Bien entendu les cultistes ne sont pas affecté par ce mécontentement, à l'opposée sacrifier leur bro leur à renforcé le moral.


    Voilà, je vais réessayer d'ici 50 jours pour cette fois ci tenter le glimpse de Davkul (casque)

  18. #2508
    Si je comprends bien, des mecs très motivés pourraient complètement changer le jeu et faire un truc style troupe mercenaires dans l'Europe du XVème siècle avec des classes complètement différentes, moins aléatoires etc. ? On pourrait aussi imaginer des formations de combat qui donneraient des bonus, un peu comme le font deux shieldwall côte à côte ?

    Moi c'est peut-être déjà ça comme moding simple qui me tenterait : un peu moins d'aléatoire sur les classes. Parce que le sellsword avec épée que tu engages et qui en fait a deux étoiles en tir et rien en mêlée, c'est un peu dommage. Perso je mitige ça en ne jouant plus en Ironman et en rechargeant, parce que sinon finalement c'est juste une façon un peu artificielle de rallonger un jeu déjà extrêmement long.
    Citation Envoyé par Big Bear Voir le message
    Je suis totalement d'accord avec le canardpcnaute M. Cacao.

  19. #2509
    Citation Envoyé par Yeun Voir le message
    Voilà, je vais réessayer d'ici 50 jours pour cette fois ci tenter le glimpse de Davkul (casque)
    Je te conseille fortement de regarder la page précédente, j'y avais posté le code source de l'event de Davkul. On a plus besoin de tester les choses, si on comprend la logique du jeu et interprète ce qui est écrit dans le code source on aura très exactement tous les mécanismes qui sous-tendent les events quels qu'ils soient.

    Citation Envoyé par Bah Voir le message
    Si je comprends bien, des mecs très motivés pourraient complètement changer le jeu et faire un truc style troupe mercenaires dans l'Europe du XVème siècle avec des classes complètement différentes, moins aléatoires etc. ? On pourrait aussi imaginer des formations de combat qui donneraient des bonus, un peu comme le font deux shieldwall côte à côte ?
    Oui.
    Ça en fait du taf, mais oui.

    Citation Envoyé par Bah Voir le message
    Moi c'est peut-être déjà ça comme moding simple qui me tenterait : un peu moins d'aléatoire sur les classes. Parce que le sellsword avec épée que tu engages et qui en fait a deux étoiles en tir et rien en mêlée, c'est un peu dommage. Perso je mitige ça en ne jouant plus en Ironman et en rechargeant, parce que sinon finalement c'est juste une façon un peu artificielle de rallonger un jeu déjà extrêmement long.
    Il y a un moule de base pour tous les bros qui possède des stats qui obéissent toutes à un certain moule. Par exemple les HP sont toujours entre 30 et 50 (chiffres inventés). Puis ensuite tu as un second moule qui est passé au-dessus et qui correspond au background. Si tu prend un wildman, il aura +15/+10 (chiffres inventés) ce qui veut dire que les HP seront au final entre 45 et 60. Le chiffre exact est déterminé de manière aléatoire entre les deux bornes définies.
    Le moule de base correspond à un fichier de code, les moules pour chaque background ont aussi leur propre fichier chacun. Bref, effectuer la modif que tu veux reviendrait à uniquement modifier le moule de base pour réduire l'écart entre valeurs min et max de chaque stat. Dans mon exemple, tu changerais le 30/50 en un 35/45 ce qui donnerait un wildman avec 50/50 càd 50 HP quoi qu'il arrive.
    C'est faisable en une dizaine de minutes.

    Par contre pour les étoiles c'est je crois entièrement aléatoire, mais rien n’empêche de rajouter du code pour diminuer cet aléatoire.

  20. #2510
    Citation Envoyé par Grosnours Voir le message
    Je te conseille fortement de regarder la page précédente, j'y avais posté le code source de l'event de Davkul. On a plus besoin de tester les choses, si on comprend la logique du jeu et interprète ce qui est écrit dans le code source on aura très exactement tous les mécanismes qui sous-tendent les events quels qu'ils soient.

    .
    Merci, je n'avais pas vu que tu avais édité ton message
    Ceci parle de l'armure et non du casque donc je ne sais pas les pré requis
    Par contre pour l'armure celà corrige une erreur de steam et confirme d'autres besoin pour faire apparaître l’événement :
    5 bro mini cultistes+ convertis dont 2 cultistes de base (sur steam mentionné 5 ou 6 suivant les posts)
    Jour supérieur à 200, pour moi 233
    se déroule la nuit
    il faut une équipe supérieure à 12 bro

    si d'occasion tu trouves le script pour le glimse de davkul suis preneur
    Dernière modification par Yeun ; 23/01/2019 à 10h50. Motif: faute

  21. #2511
    Dans le doute je te mets le code pour les trois events qui sont liés aux cultistes :
    cultist_finale_event
    Code:
    this.cultist_finale_event <- this.inherit("scripts/events/event", {
    	m = {
    		Cultist = null,
    		Sacrifice = null
    	},
    	function create()
    	{
    		this.m.ID = "event.cultist_finale";
    		this.m.Title = "During camp...";
    		this.m.Cooldown = 999999,00000000.0 * this.World.getTime().SecondsPerDay;
    		this.m.Screens.push({
    			ID = "A",
    			Text = "[img]gfx/ui/events/event_33.png[/img]%cultist% enters your tent and a strong, brisk wind chases in after him, rearing up your scrolls and other notes. He walks forward, hands crossed before him, a rather priestly look to his approach.%SPEECH_ON%Sir, I\'ve been spoken to and it is a grave matter which I\'ve been given responsibility for.%SPEECH_OFF%You ask the man who the hell he\'s talking about. The cultist bows forward as though the words weighed his tongue down just so.%SPEECH_ON%Davkul, sir.%SPEECH_OFF%Ah, of course, who else? You tell the man to explain what it is he needs. The man responds.%SPEECH_ON%No, not I, Davkul. Davkul is the one in need - and he needs blood, a sacrifice.%SPEECH_OFF%You tell the man the company can stop at the next town and get some chickens, lambs, or whatever else he needs if it\'s so important. %cultist% shakes his head.%SPEECH_ON%The blood of some impish beast? No, he demands the blood of a warrior. A true fighting spirit and he has trusted me to find a man of such import - and that I have.%SPEECH_OFF%The cultist straightens up, the tent\'s candlelight suddenly fickle and uneasy.%SPEECH_ON%Davkul demands the blood of %sacrifice%.%SPEECH_OFF%",
    			Image = "",
    			List = [],
    			Characters = [],
    			Options = [
    				{
    					Text = "And what if I do or don\'t agree to this insanity?",
    					function getResult( _event )
    					{
    						return "B";
    					}
    
    				}
    			],
    			function start( _event )
    			{
    				this.Characters.push(_event.m.Cultist.getImagePath());
    			}
    
    		});
    		this.m.Screens.push({
    			ID = "B",
    			Text = "[img]gfx/ui/events/event_33.png[/img]Walking to a flickering candle, %cultist% holds his hand over the flame and the fire comes to a standstill, pointing upright and unmoving. You\'ve seen icicles more animated than it. He speaks as he stares into the glow.%SPEECH_ON%If we do this, Davkul will be most happy. If not, well, we shall see. Not even I know what may happen then.%SPEECH_OFF%You tell the cultist that he\'s asking you to kill one of your own men. He\'ll need to do better than that. Hearing this, he walks over and grabs you by the shoulders. The tent melts away, slipping into the folds of an immense and immutable darkness. The cultist is gone. In his place is a black cloak, its arms to your shoulders, a slate of granite for a head, its edges chipped and cracking. It appears there is something behind this mask, behind this futile effort to keep your mind safe from its true visage. A voice speaks, a guttural, booming voice that is yet narrowed into a brutish whisper only for you to hear.%SPEECH_ON%I\'ll give you Death, mortal, and warmed in its comforts, Death shall be visited upon your enemies. %sacrifice% will not be lost, he will be with you always, this I promise you.%SPEECH_OFF%A whiteness snaps back over you, a rush of wind, tent flaps curling outward, candleflames tilting impossibly without going out, and a frigid coolness that has your first breath seen floating across the air. %cultist% is nowhere to be seen. You quickly get up and touch your face and skin, making sure that you are all that you\'re supposed to be. The vision remains, though, and its pulsing imprint has left behind a grisly reality that what the cultist has suggested is something to be measured seriously.",
    			Image = "",
    			List = [],
    			Characters = [],
    			Options = [
    				{
    					Text = "Do what must be done.",
    					function getResult( _event )
    					{
    						return "C";
    					}
    
    				},
    				{
    					Text = "Absolutely not!",
    					function getResult( _event )
    					{
    						return "D";
    					}
    
    				}
    			],
    			function start( _event )
    			{
    				this.Characters.push(_event.m.Cultist.getImagePath());
    			}
    
    		});
    		this.m.Screens.push({
    			ID = "C",
    			Text = "[img]gfx/ui/events/event_33.png[/img]You decide to fall to the undeniable impression that Davkul would be most unhappy with your failure to obey. But %sacrifice% also has earned a departing word from you. Clearing up your face, you step out of your tent and go to speak to the man. Perhaps just hearing his voice will knock some sense into you before you step off the ledge into an insane void from which this act has no doubt been beckoned.\n\n When you get to his tent, you notice that its flap is already open and gently waving in the wind. You step inside and find the sellsword in bed, his blanket tossed over him. You take a seat, speak a few words, hoping deep down that he\'ll wake up in the middle of them.%SPEECH_ON%You\'ve been good, %sacrifice_short%, better than I could have asked for. A true brother to the %companyname% and the sort of fighter any captain would be proud to have.\n\nHey, don\'t leave me rambling here. I know you\'re awake, you lark.%SPEECH_OFF%You reach over to the blanket and draw it back. You jump to your feet and nearly knock the whole tent over. In the bed is not %sacrifice%, but a torso, its flesh torn asunder and stretched around armor made of unknown metal, teeth for rivets, tendons for strappings, bones for pauldrons, a cuirass of absolute carnage. %cultist% stands in the tent\'s opening.%SPEECH_ON%Davkul is most pleased and has graced us with an aspect of Death.%SPEECH_OFF%This... this is not what you were expecting. You don\'t even know what you were expecting, but this could never have been imagined or prepared for. What\'s done is done, and may the soul of %sacrifice% rest in peace. It is unlikely you ever will.",
    			Image = "",
    			List = [],
    			Characters = [],
    			Options = [
    				{
    					Text = "May the old gods not be watching me on this night.",
    					function getResult( _event )
    					{
    						return 0;
    					}
    
    				}
    			],
    			function start( _event )
    			{
    				this.Characters.push(_event.m.Sacrifice.getImagePath());
    				local dead = _event.m.Sacrifice;
    				local fallen = {
    					Name = dead.getName(),
    					Time = this.World.getTime().Days,
    					TimeWithCompany = this.Math.max(1, dead.getDaysWithCompany()),
    					Kills = dead.getLifetimeStats().Kills,
    					Battles = dead.getLifetimeStats().Battles,
    					KilledBy = "Sacrificed to Davkul"
    				};
    				this.World.Statistics.addFallen(fallen);
    				this.List.push({
    					id = 13,
    					icon = "ui/icons/kills.png",
    					text = _event.m.Sacrifice.getName() + " has died"
    				});
    				_event.m.Sacrifice.getItems().transferToStash(this.World.Assets.getStash());
    				this.World.getPlayerRoster().remove(_event.m.Sacrifice);
    				this.World.Assets.getStash().makeEmptySlots(1);
    				local item = this.new("scripts/items/armor/legendary/armor_of_davkul");
    				item.m.Description = "A grisly aspect of Davkul, an ancient power not from this world, and the last remnants of " + _event.m.Sacrifice.getName() + " from whose body it has been fashioned. It shall never break, but instead keep regrowing its scarred skin on the spot.";
    				this.World.Assets.getStash().add(item);
    				this.List.push({
    					id = 10,
    					icon = "ui/items/" + item.getIcon(),
    					text = "You gain the " + item.getName()
    				});
    				local brothers = this.World.getPlayerRoster().getAll();
    
    				foreach( bro in brothers )
    				{
    					if (bro.getBackground().getID() == "background.cultist" || bro.getBackground().getID() == "background.converted_cultist")
    					{
    						bro.improveMood(2,00000000.0, "Appeased Davkul");
    
    						if (bro.getMoodState() >= this.Const.MoodState.Neutral)
    						{
    							this.List.push({
    								id = 10,
    								icon = this.Const.MoodStateIcon[bro.getMoodState()],
    								text = bro.getName() + this.Const.MoodStateEvent[bro.getMoodState()]
    							});
    						}
    					}
    					else
    					{
    						bro.worsenMood(3,00000000.0, "Horrified by the death of " + _event.m.Sacrifice.getName());
    
    						if (bro.getMoodState() < this.Const.MoodState.Neutral)
    						{
    							this.List.push({
    								id = 10,
    								icon = this.Const.MoodStateIcon[bro.getMoodState()],
    								text = bro.getName() + this.Const.MoodStateEvent[bro.getMoodState()]
    							});
    						}
    					}
    				}
    			}
    
    		});
    		this.m.Screens.push({
    			ID = "D",
    			Text = "[img]gfx/ui/events/event_33.png[/img]Despite the horror which you have just been witness to, you decide that %sacrifice% shall live. Just as you stand to go tell %cultist% of this, half the candles in the room suddenly blow out. Tendrils of smoke waft upward, a twisting haze through which, for but a moment, you swear you see a hard edged and angry visage turn and fade away. You get the feeling that %cultist% already knows what choice you\'ve made. You stay in the tent and light those candles back up.",
    			Image = "",
    			List = [],
    			Characters = [],
    			Options = [
    				{
    					Text = "Somewhere along the road, this company took a wrong turn.",
    					function getResult( _event )
    					{
    						return 0;
    					}
    
    				}
    			],
    			function start( _event )
    			{
    				this.Characters.push(_event.m.Cultist.getImagePath());
    				local brothers = this.World.getPlayerRoster().getAll();
    
    				foreach( bro in brothers )
    				{
    					if (bro.getBackground().getID() == "background.cultist" || bro.getBackground().getID() == "background.converted_cultist")
    					{
    						bro.worsenMood(2,00000000.0, "Was denied the chance to appease Davkul");
    
    						if (bro.getMoodState() < this.Const.MoodState.Neutral)
    						{
    							this.List.push({
    								id = 10,
    								icon = this.Const.MoodStateIcon[bro.getMoodState()],
    								text = bro.getName() + this.Const.MoodStateEvent[bro.getMoodState()]
    							});
    						}
    					}
    				}
    			}
    
    		});
    	}
    
    	function onUpdateScore()
    	{
    		if (this.World.getTime().IsDaytime)
    		{
    			return;
    		}
    
    		if (this.World.getTime().Days <= 200)
    		{
    			return;
    		}
    
    		local brothers = this.World.getPlayerRoster().getAll();
    
    		if (brothers.len() < 12)
    		{
    			return;
    		}
    
    		if (!this.World.Assets.getStash().hasEmptySlot())
    		{
    			return;
    		}
    
    		local sacrifice_candidates = [];
    		local cultist_candidates = [];
    		local bestCultist;
    
    		foreach( bro in brothers )
    		{
    			if (bro.getBackground().getID() == "background.cultist" || bro.getBackground().getID() == "background.converted_cultist")
    			{
    				cultist_candidates.push(bro);
    
    				if ((bestCultist == null || bro.getLevel() > bestCultist.getLevel()) && bro.getBackground().getID() == "background.cultist")
    				{
    					bestCultist = bro;
    				}
    			}
    			else if (bro.getLevel() >= 11)
    			{
    				sacrifice_candidates.push(bro);
    			}
    		}
    
    		if (cultist_candidates.len() <= 5 || bestCultist == null || bestCultist.getLevel() < 11 || sacrifice_candidates.len() == 0)
    		{
    			return;
    		}
    
    		this.m.Cultist = bestCultist;
    		this.m.Sacrifice = sacrifice_candidates[this.Math.rand(0, sacrifice_candidates.len() - 1)];
    		this.m.Score = 3;
    	}
    
    	function onPrepare()
    	{
    	}
    
    	function onPrepareVariables( _vars )
    	{
    		_vars.push([
    			"cultist",
    			this.m.Cultist.getName()
    		]);
    		_vars.push([
    			"sacrifice",
    			this.m.Sacrifice.getName()
    		]);
    		_vars.push([
    			"sacrifice_short",
    			this.m.Sacrifice.getNameOnly()
    		]);
    	}
    
    	function onClear()
    	{
    		this.m.Cultist = null;
    		this.m.Sacrifice = null;
    	}
    
    });
    cultist_vs_old_gods_event
    Code:
    this.cultist_vs_old_gods_event <- this.inherit("scripts/events/event", {
    	m = {
    		Cultist = null,
    		OldGods = null
    	},
    	function create()
    	{
    		this.m.ID = "event.cultist_vs_old_gods";
    		this.m.Title = "During camp...";
    		this.m.Cooldown = 30,00000000.0 * this.World.getTime().SecondsPerDay;
    		this.m.Screens.push({
    			ID = "A",
    			Text = "[img]gfx/ui/events/event_06.png[/img]While enjoying a slice of bacon, you hear wind of a quarrel going on. You ignore it for a time, but the shouts only get louder, quickly rising over your ability to enjoy a good meal. Angered, you stand up and head toward the disturbance. You find %cultist% and %oldgods% facing off, the cultist and follower of the gods having apparently discovered some differences.",
    			Image = "",
    			List = [],
    			Characters = [],
    			Options = [
    				{
    					Text = "Let\'s get godly with the goriest!",
    					function getResult( _event )
    					{
    						return "B";
    					}
    
    				},
    				{
    					Text = "Stop this nonsense.",
    					function getResult( _event )
    					{
    						return "C";
    					}
    
    				}
    			],
    			function start( _event )
    			{
    				this.Characters.push(_event.m.OldGods.getImagePath());
    				this.Characters.push(_event.m.Cultist.getImagePath());
    			}
    
    		});
    		this.m.Screens.push({
    			ID = "B",
    			Text = "[img]gfx/ui/events/event_06.png[/img] You step off to the side, letting the men hash out their differences as men with great differences do. Fists for arguments, the follower of the old gods makes his case, battering the cultist again and again. But the man with the scarred head only grins in return. His eyes are puffing up, the lids purpled and puckering over his eyesight. Yet, still, he grins, and there is bloody laughter spewing out of his reddened mouth.%SPEECH_ON%Such darkness! Davkul is most pleased!%SPEECH_OFF%With an anxious look, %oldgods% steps off %cultist% and backs away. He\'s rubbing his bloodied knuckles, realizing he may have broken a few in the seemingly one-sided scuffle. But it\'s the cultist\'s words that hurt him most of all.%SPEECH_ON%Man isn\'t tempted by the darkness, he is called to it! Lost without it! Gleeful in its return!%SPEECH_OFF%Almost afraid to look back, %oldgods% hurries away as the cultist remains behind, laughing and chuckling on the grass, nobody daring to get near him.",
    			Image = "",
    			List = [],
    			Characters = [],
    			Options = [
    				{
    					Text = "I didn\'t know %oldgods% had it in him.",
    					function getResult( _event )
    					{
    						return 0;
    					}
    
    				}
    			],
    			function start( _event )
    			{
    				this.Characters.push(_event.m.OldGods.getImagePath());
    				this.Characters.push(_event.m.Cultist.getImagePath());
    				_event.m.OldGods.worsenMood(1,00000000.0, "Lost composure and resorted to violence");
    				this.List.push({
    					id = 10,
    					icon = this.Const.MoodStateIcon[_event.m.OldGods.getMoodState()],
    					text = _event.m.OldGods.getName() + this.Const.MoodStateEvent[_event.m.OldGods.getMoodState()]
    				});
    				_event.m.OldGods.getBaseProperties().Bravery += -1;
    				_event.m.OldGods.getSkills().update();
    				this.List.push({
    					id = 16,
    					icon = "ui/icons/bravery.png",
    					text = _event.m.OldGods.getName() + " loses [color=" + this.Const.UI.Color.NegativeEventValue + "]-1[/color] Resolve"
    				});
    				local injury = _event.m.Cultist.addInjury(this.Const.Injury.Brawl);
    				this.List.push({
    					id = 10,
    					icon = injury.getIcon(),
    					text = _event.m.Cultist.getName() + " suffers " + injury.getNameOnly()
    				});
    				_event.m.Cultist.getBaseProperties().Bravery += 2;
    				_event.m.Cultist.getSkills().update();
    				this.List.push({
    					id = 16,
    					icon = "ui/icons/bravery.png",
    					text = _event.m.Cultist.getName() + " gains [color=" + this.Const.UI.Color.PositiveEventValue + "]+2[/color] Resolve"
    				});
    			}
    
    		});
    		this.m.Screens.push({
    			ID = "C",
    			Text = "[img]gfx/ui/events/event_03.png[/img] The way things are going, you\'ve hardly a man to spare. Just as fists are about to start flying, you step in between the two men and put an end to it. You tell %oldgods% he is better than this, and you tell %cultist% nothing, for the cultist is almost bowled over in fits of laughter. He points, grinning madly.%SPEECH_ON%The light steps in, but darkness is patient. Davkul awaits you all.%SPEECH_OFF%",
    			Image = "",
    			List = [],
    			Characters = [],
    			Options = [
    				{
    					Text = "And work is waiting for you, get moving.",
    					function getResult( _event )
    					{
    						return 0;
    					}
    
    				}
    			],
    			function start( _event )
    			{
    				this.Characters.push(_event.m.OldGods.getImagePath());
    				this.Characters.push(_event.m.Cultist.getImagePath());
    				_event.m.OldGods.worsenMood(1,00000000.0, "Was denied the chance to enlighten a cultist");
    				this.List.push({
    					id = 10,
    					icon = this.Const.MoodStateIcon[_event.m.OldGods.getMoodState()],
    					text = _event.m.OldGods.getName() + this.Const.MoodStateEvent[_event.m.OldGods.getMoodState()]
    				});
    				_event.m.Cultist.worsenMood(1,00000000.0, "Was denied the chance to break a follower of the old gods");
    				this.List.push({
    					id = 10,
    					icon = this.Const.MoodStateIcon[_event.m.Cultist.getMoodState()],
    					text = _event.m.Cultist.getName() + this.Const.MoodStateEvent[_event.m.Cultist.getMoodState()]
    				});
    			}
    
    		});
    	}
    
    	function onUpdateScore()
    	{
    		local brothers = this.World.getPlayerRoster().getAll();
    
    		if (brothers.len() < 3)
    		{
    			return;
    		}
    
    		local cultist_candidates = [];
    
    		foreach( bro in brothers )
    		{
    			if (bro.getBackground().getID() == "background.cultist" || bro.getBackground().getID() == "background.converted_cultist")
    			{
    				cultist_candidates.push(bro);
    			}
    		}
    
    		if (cultist_candidates.len() == 0)
    		{
    			return;
    		}
    
    		local oldgods_candidates = [];
    
    		foreach( bro in brothers )
    		{
    			if (bro.getBackground().getID() == "background.monk" || bro.getBackground().getID() == "background.flagellant" || bro.getBackground().getID() == "background.pacified_flagellant" || bro.getBackground().getID() == "background.monk_turned_flagellant")
    			{
    				oldgods_candidates.push(bro);
    			}
    		}
    
    		if (oldgods_candidates.len() == 0)
    		{
    			return;
    		}
    
    		this.m.Cultist = cultist_candidates[this.Math.rand(0, cultist_candidates.len() - 1)];
    		this.m.OldGods = oldgods_candidates[this.Math.rand(0, oldgods_candidates.len() - 1)];
    		this.m.Score = (cultist_candidates.len() + oldgods_candidates.len()) * 5;
    	}
    
    	function onPrepare()
    	{
    	}
    
    	function onPrepareVariables( _vars )
    	{
    		_vars.push([
    			"cultist",
    			this.m.Cultist.getName()
    		]);
    		_vars.push([
    			"oldgods",
    			this.m.OldGods.getName()
    		]);
    	}
    
    	function onDetermineStartScreen()
    	{
    		return "A";
    	}
    
    	function onClear()
    	{
    		this.m.Cultist = null;
    		this.m.OldGods = null;
    	}
    
    });
    cultist_vs_uneducated_event
    Code:
    this.cultist_vs_uneducated_event <- this.inherit("scripts/events/event", {
    	m = {
    		Cultist = null,
    		Uneducated = null
    	},
    	function create()
    	{
    		this.m.ID = "event.cultist_vs_uneducated";
    		this.m.Title = "During camp...";
    		this.m.Cooldown = 30,00000000.0 * this.World.getTime().SecondsPerDay;
    		this.m.Screens.push({
    			ID = "A",
    			Text = "[img]gfx/ui/events/event_05.png[/img]A few brothers come to you looking rather worried. They say %cultist% has been sitting with %uneducated% for a few hours now. When you ask what\'s the worry, they remind you that the cultist has a scarred forehead and speaks of incredibly strange things. Ah, right.\n\nYou go and see the two men. %uneducated% looks up at you, smiling, and says the cultist actually has a lot to teach him. Grimacing, you wonder if you should put a stop to these.. lessons.",
    			Image = "",
    			List = [],
    			Characters = [],
    			Options = [
    				{
    					Text = "Do as you wish, as long as you don\'t forget what I hired you to do.",
    					function getResult( _event )
    					{
    						return "B";
    					}
    
    				},
    				{
    					Text = "Stop this nonsense.",
    					function getResult( _event )
    					{
    						return "C";
    					}
    
    				}
    			],
    			function start( _event )
    			{
    				this.Characters.push(_event.m.Cultist.getImagePath());
    				this.Characters.push(_event.m.Uneducated.getImagePath());
    			}
    
    		});
    		this.m.Screens.push({
    			ID = "B",
    			Text = "[img]gfx/ui/events/event_05.png[/img]You nod and turn away. The rest of the brothers shake their heads. By next morning, %uneducated% is found with a fresh wound on his forehead, the blood of conversion. When you ask how he is doing, he only says a few words.%SPEECH_ON%Davkul is coming.%SPEECH_OFF%Well, great.",
    			Image = "",
    			List = [],
    			Characters = [],
    			Options = [
    				{
    					Text = "Suit yourself.",
    					function getResult( _event )
    					{
    						return 0;
    					}
    
    				}
    			],
    			function start( _event )
    			{
    				this.Characters.push(_event.m.Cultist.getImagePath());
    				this.Characters.push(_event.m.Uneducated.getImagePath());
    				local background = this.new("scripts/skills/backgrounds/converted_cultist_background");
    				_event.m.Uneducated.getSkills().removeByID(_event.m.Uneducated.getBackground().getID());
    				_event.m.Uneducated.getSkills().add(background);
    				background.buildDescription();
    				background.onSetAppearance();
    				this.List = [
    					{
    						id = 13,
    						icon = background.getIcon(),
    						text = _event.m.Uneducated.getName() + " has been converted to a Cultist"
    					}
    				];
    				_event.m.Cultist.getBaseProperties().Bravery += 2;
    				_event.m.Cultist.getSkills().update();
    				this.List.push({
    					id = 16,
    					icon = "ui/icons/bravery.png",
    					text = _event.m.Cultist.getName() + " gains [color=" + this.Const.UI.Color.PositiveEventValue + "]+2[/color] Resolve"
    				});
    			}
    
    		});
    		this.m.Screens.push({
    			ID = "C",
    			Text = "[img]gfx/ui/events/event_05.png[/img]You separate the two men, telling %uneducated% to go count some inventory. When he leaves, the cultist sneers at you.%SPEECH_ON%Davkul awaits. You see him in your sleep. You see him in the nights. His darkness is coming. No light burns forever.%SPEECH_OFF%",
    			Image = "",
    			List = [],
    			Characters = [],
    			Options = [
    				{
    					Text = "Yeah, well, until then you work for me.",
    					function getResult( _event )
    					{
    						return 0;
    					}
    
    				}
    			],
    			function start( _event )
    			{
    				this.Characters.push(_event.m.Cultist.getImagePath());
    				this.Characters.push(_event.m.Uneducated.getImagePath());
    				_event.m.Cultist.worsenMood(2,00000000.0, "Was denied the chance to convert " + _event.m.Uneducated.getName());
    
    				if (_event.m.Cultist.getMoodState() < this.Const.MoodState.Neutral)
    				{
    					this.List.push({
    						id = 10,
    						icon = this.Const.MoodStateIcon[_event.m.Cultist.getMoodState()],
    						text = _event.m.Cultist.getName() + this.Const.MoodStateEvent[_event.m.Cultist.getMoodState()]
    					});
    				}
    			}
    
    		});
    	}
    
    	function onUpdateScore()
    	{
    		local brothers = this.World.getPlayerRoster().getAll();
    
    		if (brothers.len() < 4)
    		{
    			return;
    		}
    
    		local cultist_candidates = [];
    		local uneducated_candidates = [];
    
    		foreach( bro in brothers )
    		{
    			if (bro.getBackground().getID() == "background.cultist" || bro.getBackground().getID() == "background.converted_cultist")
    			{
    				cultist_candidates.push(bro);
    			}
    			else if (bro.getBackground().isLowborn() && !bro.getSkills().hasSkill("trait.bright") || !bro.getBackground().isNoble() && bro.getSkills().hasSkill("trait.dumb"))
    			{
    				uneducated_candidates.push(bro);
    			}
    		}
    
    		if (cultist_candidates.len() == 0 || uneducated_candidates.len() == 0)
    		{
    			return;
    		}
    
    		this.m.Cultist = cultist_candidates[this.Math.rand(0, cultist_candidates.len() - 1)];
    		this.m.Uneducated = uneducated_candidates[this.Math.rand(0, uneducated_candidates.len() - 1)];
    		this.m.Score = cultist_candidates.len() * 5;
    	}
    
    	function onPrepare()
    	{
    	}
    
    	function onPrepareVariables( _vars )
    	{
    		_vars.push([
    			"cultist",
    			this.m.Cultist.getName()
    		]);
    		_vars.push([
    			"uneducated",
    			this.m.Uneducated.getName()
    		]);
    	}
    
    	function onDetermineStartScreen()
    	{
    		return "A";
    	}
    
    	function onClear()
    	{
    		this.m.Cultist = null;
    		this.m.Uneducated = null;
    	}
    
    });
    Si le casque ne correspond à aucun d'entre eux, je continuerai à chercher (il y a des centaines d'events).

  22. #2512
    Et bien non ... dsl, il n'y a pas l'event du casque
    En fait le premier est celui de l'armure, le second d'un event si l'on a un moine / flagellant dans l'equipe et le 3eme est celui de la conversion.
    c'est marrant, les prérequis de la conversion sont : "uneducated" donc classes type wildman, fermier, journalier ...., avoir un cultiste et il y a un cool down de 30 jours (j'estimait entre 20 et 30).

    Merci à toi, je serait incapable d'aller chercher les infos

  23. #2513
    Mmm, vu que les events sont nommés via leur effet je ne sais pas trop lequel est lié au casque.

    Mais je peux me rendre utile autrement en écrivant un guide pour que tout le monde puisse accéder facilement aux fichiers.

    1) Ouvrir cet URL : http://www.adammil.net/blog/v133_Bat...it.html#modkit

    2) Télécharger le fichier bbros.zip qui est indiqué en lien sur cette page. (Ou passer l'étape 1 et cliquer direct sur mon lien)

    3) Décompresser le zip obtenu dans un répertoire quelconque, appelons le "BB mods"

    4) Ouvrir Steam

    5) Faire un clic droit sur Battle Brothers dans la liste des jeux et cliquer sur Propriétés

    6) Aller dans l'onglet fichiers locaux et cliquer sur voir les fichiers locaux (ou un bouton de ce genre, c'est le tout premier de l'onglet)

    7) Une fenêtre d'explorateur Windows s'est ouverte et on se trouve désormais dans le répertoire d'installation de Battle Brothers. Aller dans le répertoire "data"

    8) Il y a là un (gros) fichier appelé data_001.dat

    9) Copier ce fichier et le coller dans le répertoire "BB mods" où on avait déjà installé les outils de modding

    10) Si on ne veut pas modder le jeu et juste regarder le code source on a plus besoin d'accéder au jeu du tout. Rendons nous dans le répertoire "BB mods".

    11) Renommons data_001.dat en data_001.zip

    12) Extrayons ce zip où on se trouve, on va donc avoir maintenant un sous-répertoire qui s'appelle "data_001" dans le répertoire "BB mods" (cas A). Si on se retrouve à la place avec une pelleté de répertoires (gfx, brushes, music, preload, etc...) ce n'est pas grave cela fonctionnera aussi (cas B).

    13) On se trouve toujours dans le répertoire "BB mods", on va sélectionner le répertoire "bin" qui s'y trouve avec un clic droit de la souris tout en maintenant la touche SHIFT enfoncée. Ceci ouvre le menu contextuel habituel qu'on obtient avec le clic droit, plus une option qui s'appelle "ouvrir une fenêtre PowerShell ici" ou un truc du genre.

    14) Cliquons sur cette option

    15) Une fenêtre bleue powershell est maintenant ouverte, avec la première ligne indiquant l'endroit où on se trouve, un truc du genre c:\bureau\BB mods\bin (cela peut varier). On devrait toujours avoir "bin" à la fin cependant puisque c'est le répertoire où on se trouve. Si ce n'est pas le cas, taper cd bin.

    16) On va maintenant taper le text suivant dans cette fenêtre, vous pouvez le copier coller de ce que j'écris ici : ./massdecompile ../data_001/scripts (si vous avez un répertoire data_001, cas A) ou ./massdecompile ../scripts (si vous avez une demi-tonne de répertoire lors du dé-zippage, cas B).

    17) La décompilation commence, elle va prendre un peu de temps.

    18) Une fois que plus rien ne bouge dans la fenêtre, bravo vous avez fini de décompiler les scripts. Fermer la fenêtre bleue.

    19) Avec un explorateur windows, se rendre dans le répertoire "BB mods" (il devrait y avoir toujours une fenêtre qui traîne avec, sinon l'ouvrir). Puis ouvrir le répertoire "data_001" puis "scripts" (cas A) ou uniquement le répertoire "scripts" (cas B). Vous avez devant les yeux l'arborescence entière de tous les scripts du jeu. Par exemple pour les events, il faut aller dans le répertoire "events" puis dans le sous-répertoire "events".

    20) Vous remarquerez que les fichiers qui sont là semble exister en double. Il y a toujours nom_du_ficher.cnut et nom_du_fichier.nut. C'est normal, le premier est la version compilée (illisible) et le second la version décompilée (lisible). Ouvrez donc les fichiers .nut dans votre éditeur de texte préféré (je recommande Notepad++) et vous pourrez lire tranquillement ce qui se cache sous le capot de Battle Brothers.


    Modder le jeu à partir de là n'est pas très compliqué (il suffit de réinjecter le fichier modifié dans le répertoire du jeu qui va bien) et je pourrais expliquer comment si des gens sont intéressés.

  24. #2514
    Plutôt que les scripts a proprement parler, je serait interressé par les assets: si je veux par exemple, remplacer toutes les têtes, chevelure, ect possibles par leur version lolita nazi japonaise, je fais comment?

  25. #2515
    Tu suis les instructions ci-dessus jusqu'à l'étape 12. Puis tu va dans le répertoire gfx où tous les graphismes se trouvent, certains sous forme de spritesheet, certains sous forme indépendante.
    Tu remplaces/modifies ce que tu veux puis ensuite tu va dans le répertoire du jeu battlebrothers, dans data, et là tu copies-colle dans le répertoire gfx déjà existant ton œuvre en respectant l'arborescence. Genre si tu as modifié gfx/skills/active_01.png, alors il faut que copie/colle ce fichier dans répertoire du jeu/data/gfx/skills/.

  26. #2516
    Yeun, il y a un cooldown sur les events de davkul, si tu viens d'avoir l'armure, il va falloir patienter au moins 100 jours (connais pas la valeur exacte)pour provoquer le casque.

  27. #2517
    Citation Envoyé par Yeun Voir le message
    Et bien non ... dsl, il n'y a pas l'event du casque
    En fait le premier est celui de l'armure, le second d'un event si l'on a un moine / flagellant dans l'equipe et le 3eme est celui de la conversion.
    c'est marrant, les prérequis de la conversion sont : "uneducated" donc classes type wildman, fermier, journalier ...., avoir un cultiste et il y a un cool down de 30 jours (j'estimait entre 20 et 30).

    Merci à toi, je serait incapable d'aller chercher les infos
    Ok, j'ai trouvé.

    Il suffisait de trouver le nom du casque, c'était mask_of_davkul. Ensuite il suffisait de chercher les occurrences de ce casque dans tous les fichiers script nut, et on arrive à l'event qui se nomme come_accross_ritual_event.
    Voici le code :
    Code:
    this.come_across_ritual_event <- this.inherit("scripts/events/event", {
    	m = {
    		Cultist = null
    	},
    	function create()
    	{
    		this.m.ID = "event.come_across_ritual";
    		this.m.Title = "Along the way...";
    		this.m.Cooldown = 999999.000 * this.World.getTime().SecondsPerDay;
    		this.m.Screens.push({
    			ID = "A",
    			Text = "[img]gfx/ui/events/event_33.png[/img]It\'s not a rare sight to find a dead body on your journey. This one, though, is rather unusual. %randombrother% takes a long look.%SPEECH_ON%What\'s that on his chest?%SPEECH_OFF%You crouch down and throw back the corpse\'s shirt. Scars run lengthwise all about his body, drawn in very familiar shapes: forests, rivers, mountains. %randombrother% walks up.%SPEECH_ON%Ain\'t that a sight. Wolves do that or something?%SPEECH_OFF%You stand back up.%SPEECH_ON%I think he did it to himself.%SPEECH_OFF%Bloody footprints lead away from the scene...",
    			Image = "",
    			List = [],
    			Characters = [],
    			Options = [
    				{
    					Text = "Let\'s follow these footprints.",
    					function getResult( _event )
    					{
    						return "Arrival";
    					}
    
    				},
    				{
    					Text = "This doesn\'t concern us.",
    					function getResult( _event )
    					{
    						return 0;
    					}
    
    				}
    			],
    			function start( _event )
    			{
    			}
    
    		});
    		this.m.Screens.push({
    			ID = "Arrival",
    			Text = "[img]gfx/ui/events/event_03.png[/img]As you follow the foosteps, you begin to hear the murmurs of a chant. You tell the company to rest while you sneak forward, eventually finding a large bonfire with cloaked men circling around it. They stomp their feet and throw their hands up, shouting some token words to their elder god, Davkul. It\'s a bestial ceremony, roaring and growling abound, and the men dance about with their oversized clothes like darkly spirits still angry at the world they\'d departed. %randombrother% crawls up beside you and shakes his head.%SPEECH_ON%Just what is going on down there? What should we do?%SPEECH_OFF%",
    			Image = "",
    			List = [],
    			Characters = [],
    			Options = [
    				{
    					Text = "We need to stop this now. Attack!",
    					function getResult( _event )
    					{
    						return "Attack1";
    					}
    
    				},
    				{
    					Text = "Let\'s wait and see what happens.",
    					function getResult( _event )
    					{
    						return "Observe1";
    					}
    
    				},
    				{
    					Text = "Time to leave. Now.",
    					function getResult( _event )
    					{
    						return 0;
    					}
    
    				}
    			],
    			function start( _event )
    			{
    			}
    
    		});
    		this.m.Screens.push({
    			ID = "Observe1",
    			Text = "[img]gfx/ui/events/event_03.png[/img]You decide to wait it out and see what happens. Just as you say that, the cultists drag an old man before the fire. He bows his head before the flames, opens his arms, and then falls in. There are no screams. Another man is pulled forward. He whispers words to a cultist, they both nod, and so too this man puts himself to the flame. A third is pushed forth, but unlike the others he is shackled and wild-eyed. He screams at the cultists.%SPEECH_ON%Fark your god, he means nothing! It\'s all a lie!%SPEECH_OFF%A face appears in the flames, its shape bulbous and churning in the smoke and fire. It is cruelty embodied, and could be no better painted by flames than by darkness itself. It turns and grins. One of the cultist shouts.%SPEECH_ON%Davkul awaits you!%SPEECH_OFF%But the prisoner kicks one of his imprisoners and tries to make a run for it.",
    			Image = "",
    			List = [],
    			Characters = [],
    			Options = [
    				{
    					Text = "I\'ve seen enough. We need to help him, now!",
    					function getResult( _event )
    					{
    						return "Attack2";
    					}
    
    				},
    				{
    					Text = "Hold on, let\'s see what happens next.",
    					function getResult( _event )
    					{
    						return "Observe2";
    					}
    
    				}
    			],
    			function start( _event )
    			{
    				if (_event.m.Cultist != null)
    				{
    					this.Options.push({
    						Text = "%cultist%, is this not your cult?",
    						function getResult( _event )
    						{
    							return "Cultist";
    						}
    
    					});
    				}
    
    				this.Options.push({
    					Text = "Time to leave. Now.",
    					function getResult( _event )
    					{
    						return 0;
    					}
    
    				});
    			}
    
    		});
    		this.m.Screens.push({
    			ID = "Observe2",
    			Text = "[img]gfx/ui/events/event_03.png[/img]You decide to wait and see what happens. The bonfire\'s face returns, a great magmatic maw opening up as the chained man is pushed forward. He screams and bends backward, but it\'s no use. His clothes burn away and the tatters fly backward in flailing orange ruin. His skin peels as though it were not fire, but a thousand scalpels running across his body. By sharpened white fire he is flayed. His skull is bored out, wriggling and shaking like a snake shedding its skin, and his eyes remain forever seeing though the rest of his body is stripped away by flesh and organs and bones. When he is but a skull with eyes, the face in the fire closes its mouth and the great howls of the sacrifice come to a snapping silence. The bonfire dies out in an instant, and the man, or what\'s left of him, falls to the earth. The eyes burn bright, slowly fading like a cooling hot iron.\n\n One of the cultists bends down and picks up the skull. He easily cracks it in half, dropping the brainpan while holding onto what used to be a face. As he holds the remains outward, the bones blacken and invert, creating a cruel visage of utter darkness wreathed by a rim of bone. He puts it on and begins to leave.",
    			Image = "",
    			List = [],
    			Characters = [],
    			Options = [
    				{
    					Text = "Now we attack!",
    					function getResult( _event )
    					{
    						local properties = this.World.State.getLocalCombatProperties(this.World.State.getPlayer().getPos());
    						properties.CombatID = "Event";
    						properties.Music = this.Const.Music.CivilianTracks;
    						properties.IsAutoAssigningBases = false;
    						properties.Entities = [];
    
    						for( local i = 0; i < 25; i = ++i )
    						{
    							local unit = clone this.Const.World.Spawn.Troops.Cultist;
    							unit.Faction <- this.Const.Faction.Enemy;
    							properties.Entities.push(unit);
    						}
    
    						properties.Loot = [
    							"scripts/items/helmets/legendary/mask_of_davkul"
    						];
    						this.World.State.startScriptedCombat(properties, false, false, true);
    						return 0;
    					}
    
    				},
    				{
    					Text = "We leave as well.",
    					function getResult( _event )
    					{
    						return 0;
    					}
    
    				}
    			],
    			function start( _event )
    			{
    			}
    
    		});
    		this.m.Screens.push({
    			ID = "Cultist",
    			Text = "[img]gfx/ui/events/event_03.png[/img]You ask %cultist% if he can do anything. He simply walks past you and down the hill. The group of cultists turn and look to him. He walks through the crowd to the prisoner. They talk. He whispers, the prisoner nods. When they finish, the %cultist% nods to the crowd of cultists. One member steps forward, disrobes, and pitches himself into the fire, screamless and without protest. Another cultist pitches a rake into the flames, tearing something out of it and handing it over to %cultist%. The prisoner, his life ostensibly spared in an exchange, is freed and you watch as %cultist% grabs him and takes him back up the hill. He pushes the man forward as he speaks.%SPEECH_ON%You have taken from Davkul, but the debt is paid.%SPEECH_OFF%You ask what it is he has in his hand. The cultist holds up what had been retrieved from the flames. It is a skull patched over in leathered flesh, and stretched taut over its face is a freshly singed visage, presumably of the man who had tossed himself into the fire. Slight hints of his face twist and turn, his mouth wringed ajar, misshapen by a cruel and murmuring darkness. Still holding it aloft like a native showing off a prized scalp, %cultist% speaks bluntly.%SPEECH_ON%Davkul awaits us all.%SPEECH_OFF%",
    			Image = "",
    			List = [],
    			Characters = [],
    			Options = [
    				{
    					Text = "What\'s this?",
    					function getResult( _event )
    					{
    						return 0;
    					}
    
    				}
    			],
    			function start( _event )
    			{
    				this.Characters.push(_event.m.Cultist.getImagePath());
    				this.World.Assets.getStash().makeEmptySlots(1);
    				local item = this.new("scripts/items/helmets/legendary/mask_of_davkul");
    				this.World.Assets.getStash().add(item);
    				this.List.push({
    					id = 10,
    					icon = "ui/items/" + item.getIcon(),
    					text = "You gain " + item.getName()
    				});
    			}
    
    		});
    		this.m.Screens.push({
    			ID = "Attack1",
    			Text = "[img]gfx/ui/events/event_03.png[/img]You give the order to attack. Your men arm themselves and rush forward. The fire dies in an instant, swirling down to nothing but ash which plumes out in a great cloud. Once it is gone, the eerie crowd opens their arms and speak in unison.%SPEECH_ON%Davkul awaits. Come and greet him.%SPEECH_OFF%",
    			Image = "",
    			List = [],
    			Characters = [],
    			Options = [
    				{
    					Text = "To arms!",
    					function getResult( _event )
    					{
    						local properties = this.World.State.getLocalCombatProperties(this.World.State.getPlayer().getPos());
    						properties.CombatID = "Event";
    						properties.Music = this.Const.Music.CivilianTracks;
    						properties.IsAutoAssigningBases = false;
    						properties.Entities = [];
    
    						for( local i = 0; i < 25; i = ++i )
    						{
    							local unit = clone this.Const.World.Spawn.Troops.Cultist;
    							unit.Faction <- this.Const.Faction.Enemy;
    							properties.Entities.push(unit);
    						}
    
    						this.World.State.startScriptedCombat(properties, false, false, true);
    						return 0;
    					}
    
    				}
    			],
    			function start( _event )
    			{
    			}
    
    		});
    		this.m.Screens.push({
    			ID = "Attack2",
    			Text = "[img]gfx/ui/events/event_03.png[/img]You won\'t stand for this injustice and decide to charge and save the man. As you stand and raise your sword to give the order, the bonfire whips forth a great magmatic tentacle that grabs the chained man and yanks him into the flames. There is but the briefest of screams and then he\'s gone. The fire condenses into a pillar that quickly collapses. A plume of ash explodes outward. The man is gone and it is as if there was no fire at all. There\'s not even smoke in the sky.\n\n The cultists turn to you and point and speak in unison.%SPEECH_ON%Bring death, yours or ours, for Davkul awaits us all.%SPEECH_OFF%You waiver a moment, then give the order to charge.",
    			Image = "",
    			List = [],
    			Characters = [],
    			Options = [
    				{
    					Text = "To arms!",
    					function getResult( _event )
    					{
    						local properties = this.World.State.getLocalCombatProperties(this.World.State.getPlayer().getPos());
    						properties.CombatID = "Event";
    						properties.Music = this.Const.Music.CivilianTracks;
    						properties.IsAutoAssigningBases = false;
    						properties.Entities = [];
    
    						for( local i = 0; i < 25; i = ++i )
    						{
    							local unit = clone this.Const.World.Spawn.Troops.Cultist;
    							unit.Faction <- this.Const.Faction.Enemy;
    							properties.Entities.push(unit);
    						}
    
    						this.World.State.startScriptedCombat(properties, false, false, true);
    						return 0;
    					}
    
    				}
    			],
    			function start( _event )
    			{
    			}
    
    		});
    	}
    
    	function onUpdateScore()
    	{
    		if (this.World.getTime().IsDaytime)
    		{
    			return;
    		}
    
    		if (this.World.getTime().Days <= 200)
    		{
    			return;
    		}
    
    		local playerTile = this.World.State.getPlayer().getTile();
    		local towns = this.World.EntityManager.getSettlements();
    		local nearTown = false;
    
    		foreach( t in towns )
    		{
    			local d = playerTile.getDistanceTo(t.getTile());
    
    			if (d >= 4 && d <= 10)
    			{
    				nearTown = true;
    				break;
    			}
    		}
    
    		if (!nearTown)
    		{
    			return;
    		}
    
    		if (!this.World.Assets.getStash().hasEmptySlot())
    		{
    			return;
    		}
    
    		local brothers = this.World.getPlayerRoster().getAll();
    		local candidates = [];
    
    		foreach( bro in brothers )
    		{
    			if (bro.getLevel() >= 11 && (bro.getBackground().getID() == "background.cultist" || bro.getBackground().getID() == "background.converted_cultist"))
    			{
    				candidates.push(bro);
    			}
    		}
    
    		if (candidates.len() < 2)
    		{
    			return;
    		}
    
    		if (candidates.len() != 0)
    		{
    			this.m.Cultist = candidates[this.Math.rand(0, candidates.len() - 1)];
    		}
    
    		this.m.Score = 3;
    	}
    
    	function onPrepare()
    	{
    	}
    
    	function onPrepareVariables( _vars )
    	{
    		_vars.push([
    			"cultist",
    			this.m.Cultist != null ? this.m.Cultist.getNameOnly() : ""
    		]);
    	}
    
    	function onClear()
    	{
    		this.m.Cultist = null;
    	}
    
    });

  28. #2518
    En une journée seulement on peut déjà trouver des mods intéressants sur le nexus : https://www.nexusmods.com/battlebrot...e_size=15&BH=0
    - 27 bros engageable, 18 déployable
    - fabrication d’armes légendaires
    - obtenir de la reconnaissance sur tous les endroits du jeu (sauf les légendaires)
    - montrer les talents et les étoiles lors de la phase tryout des recrues
    - nerf des alps ou des hexes
    - virer la bataille d'intro
    - vendre plus cher le loot
    - ne pas avoir d'event d'augmentation de soldes
    Vivement la suite...

  29. #2519
    Citation Envoyé par LDiCesare Voir le message
    Ils ont félicité le gars sur le forum steam dans un thread sur le mod 18 bros. Ils avaient déjà aidé le gars qui avait fait le mod d'origine, donc je pense qu'ils ont peut-être même donné un coup de main à celui-ci.
    C'est par là:
    https://steamcommunity.com/app/36536...31705670711650
    Ils ont toujours dit qu'ils feraient pas un jeu modable parce qu'ils n'avaient pas le temps, et uniquement pour ça.
    Donc, non, ils sont plutôt contents.
    Je vois pas vraiment pourquoi ils feraient la gueule, en vrai. Civ 4 a, à mon avis, largement profité d'avoir donné tout son code source. J'aurais pas acheté le jeu 3 fois sans FfH2. Bon, c'est vrai qu'aujourd'hui, on perd et casse mon ses CD de jeu vu qu'on n'en a plus, mais quand même.
    Plutôt cool qu'ils le prennent bien. Je me dis que c'est quand même pas rien de décompiler un jeu encore en vente et pour lequel les devs ont a priori encore des projets. En général les codes sources sont open bar une fois le jeu en fin de course. Après je dis peut-être de la merde, je ne suis pas dans la programmation.

    Pour le modding, ce n'est pas qu'ils ne le voulaient pas, c'est qu'ils ne le pouvaient pas, la faute à un développement qui ne l'a pas pris en compte, et trop de contrainte à refaire le code.

    Petite question du coup, ça veut dire que les attributs, perks, etc, de tous les ennemis sont disponibles quelque part ?

  30. #2520
    Merci gronours
    Si j’ai bien compris pour l’event du masque:
    Spoiler Alert!
    Pas de cooldown entre l’event du masque et de l’armure
    Toujours apres jours 200
    Ne pas etre proche ou dans une ville
    De nuit
    Et un cultiste niveau 11


    Sinon ca a l’ait d’avancer du coté des mods...
    Par contre sur steam j’ai un peu l’impression que beaucoup font leur liste du pere noel

Page 84 sur 147 PremièrePremière ... 3474767778798081828384858687888990919294134 ... DernièreDernière

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •