non serve usare il save del gioco, il comando dumpscen or dumpscenoob anche dati dalla linea di comando del salvataggio esportano lo odb di scenario a fine partita. La parte più onerosa è preparare un piccolo db con tutte le unità e ufficiali fino alla brigata delle unità di CoD e attribuirgli i valori e naturalmente le relative uniformi, dopo fare un software di export\import di un csv di scenario e degli altri file di battaglia non è eccessivamente complicato.
scusa la mia somma ignoranza mitra, ma dove devo dare questo comando dumpscen o dumpscenoob? Quando voglio salvare una partita in Campaigns on the Danube mi appare una finestra in cui l'unica cosa che posso fare è scegliere la cartella e scrivere il nome del file.
durante il match o dopo aver caricato il save, premi il tasto @ (fa apparire la linea di comando in alto a sinistra) e poi digiti dumpscen (che da il formato oob delle sandboxes) o dumpscenoob (che da il formato oob scenario degli scenari normali). E poi dai invio. nella cartella SOWWL del gioco in documenti trovi il file scenario.csv salvato della partita con i valori allo stato attuale (per essere più specifici lo trovi in \SowWL\Scenarios\ScenSave ). Con lo stesso sistema usando il comando dumpgamedb salvi il file delle statistiche di perdite di fine battaglia, con dumplocs salvi la posizione delle truppe sulla mappa, con dumpdead il file della posizione dei morti sul campo; tutti i file generati da questi comandi finiscono in \SowWL\.
Se davvero vi interessa, per gli sprites e gli oob potete contattare gunship sul forum di Scourge, lui aveva fatto il mod napoelonico road to wagram, quindi aveva oob e uniformi della campagna 1809 e poi ha lavorato con me per le statistiche degli oob di Waterloo, quindi conosce la scala che abbiamo usato. Poi semmai con i files vi do una mano, non conosco il tipo di dato che CoD esporta o importa ma non penso sia complicato se è pensato per le battaglie con le miniature.
Ciao Sinbad, attualmente in sow non ci sono ancora gli OdB austriaci, russi, bavaresi, etc. Tra un annetto forse ...... E' possibile comunque portare i risultati di una battaglia, in termini di perdite, dispersi etc, per ambientare un secondo scenario. Con l'editor non sarà affatto difficile.
sì, lo so la mia è una speranza per il futuro: Abbiamo un gran bel gioco a livello operazionale + gran bel gioco a livello tattico perché non unirli?
Ho preso CoD visto che c'era il coupon, l'ho appena sfiorato perchè non ho molto tempo adesso, però dal manuale mi sembra che il sistema di miniature implichi l'imputazione manuale dei dati della battaglia non c'è un sistema di file come per EiA.
SI però se CoD accetta solo l'imputazione manuale dei dati casca tutto; nulla si esporta nulla si importa
Premetto che non ho CoD... non ancora almeno... Per "imputazione manuale" intendete controlli di Win32 (editbox, buttons, sliders, etc.)? Potreste farmi qualche screen delle schermate interessate, per favore? Nel qual caso si potrebbe ricorrere ad un hook (anche da Python volendo) per riempirli con dati SOWWL / interrogarli per successivo impiego in SOWWL. La cosa più fastidiosa (e legalmente borderline), forse, è trovare gli HWND o gli id di finestra dei singoli elementi UI. Per quanto laborioso, penso sia fattibile, comunque. Saluti. Nicolò
https://www.sendspace.com/file/j277x5 Il processo è copio fuori le forze in campo (1ma immagine), la partita viene salvata, riapro dal salvataggio e mi compare la schermata 2; definisco chi ha vinto e le perdite (schermata 3). Anche nel 2004 un modo un po' più smart di procedere si poteva trovare
Grazie Davide. Sempre gentilissimo. Preso. Concordo ovviamente sulla valutazione del sistema di I/O risultati/oobs. Inadeguato. La situazione della schermata #1 dovrebbe essere la seguente: Code: ControlType: UIA_PaneControlTypeId (0xC371) Name: "MiniaturesForm" IsEnabled: true ClassName: "TMiniaturesForm" FirstChild: "" pannello (French Forces in screen 1) LastChild: "" pannello (Coalition Forces in screen 1) Next: "Campaigns on the Danube 1805/1809 version 3.03" finestra Previous: "" pannello Children: "" pannello Ancestors: "Desktop" pannello [ No Parent ] ControlType: UIA_PaneControlTypeId (0xC371) Name: "" ClassName: "TAdvSmoothPanel" FirstChild: "" Modifica LastChild: "" Modifica Next: [null] Previous: [null] Children: "" Modifica "OK" pannello "" Modifica Ancestors: "MiniaturesForm" pannello "Desktop" pannello [ No Parent ] ControlType: UIA_EditControlTypeId (0xC354) Name: "" ClassName: "TMemo" // French Forces in screen 1 Value.Value: "Brady Strength 18 Regular Fresh Steady Ulm Strength 28 Regular Fresh Confident II A Strength 3 Regular Fresh Confident " FirstChild: [null] LastChild: [null] Next: "OK" pannello Previous: [null] Children: Container has no children Ancestors: "" pannello // TAdvSmoothPanel "MiniaturesForm" pannello "Desktop" pannello [ No Parent ] ControlType: UIA_EditControlTypeId (0xC354) Name: "" ClassName: "TMemo" // Coalition Forces in screen 1 Value.Value: "Neubronn Strength 14 Regular Fresh Confident Wollwarth Strength 4 Regular Fresh Confident VII (A) Strength 2 Regular Fresh Confident " FirstChild: [null] LastChild: [null] Next: [null] Previous: "OK" pannello Children: Container has no children Ancestors: "" pannello // TAdvSmoothPanel "MiniaturesForm" pannello "Desktop" pannello [ No Parent ] Quindi, in teoria, con un FindWindowEx e fornendogli "TMiniaturesForm" (convenzione di nominazione Delphi?) come classe, si potrebbero prendere i dati delle forze in campo. Orario e terreno della battaglia sembrano più problematici, non avendo un controllo Win32 vero e proprio (mi sà che il testo è mostrato a video direttamente attraverso le GDI). Vedo due possibilità: fare un detour alle API di GDI (legalissimo ma non elegante) o leggere direttamente da memoria del processo il dato (altrettanto legale e fattibile, visto che non si tocca nulla, per quanto sgradevole senza l'autorizzazione di Frank Hunter). Le schermate #2 e #3 (importazione dati) non sono ancora riuscito ad analizzarle, purtroppo. Mi crasha ricaricando il savegame. Forse ho patchato male il gioco? Potreste condividere un savegame garantendomi che vi funziona, per favore? Grazie. Nicolò
Situazione 2^ / 3^ schermata (nessun problema qui): Code: #define UIA_ComboBoxControlTypeId 0xC353 #define UIA_EditControlTypeId 0xC354 #define UIA_ListItemControlTypeId 0xC357 #define UIA_ListControlTypeId 0xC358 #define UIA_WindowControlTypeId 0xC370 #define UIA_PaneControlTypeId 0xC371 // MiniRecoverForm - "", "TMiniRecoverForm" (UIA_WindowControlTypeId) - "", "TAdvSmoothPanel" (UIA_PaneControlTypeId) // Battle decision (1) - "Battle had no clear decision", "TAdvSmoothToggleButton" (UIA_PaneControlTypeId) - "Coalition victory", "TAdvSmoothToggleButton" (UIA_PaneControlTypeId) - "French victory", "TAdvSmoothToggleButton" (UIA_PaneControlTypeId) // Length of battle, in hours (2) - "", "TSpinEdit" (UIA_EditControlTypeId) - "", "TSpinButton" (UIA_PaneControlTypeId) // Side (3) - "French", "TAdvSmoothToggleButton" (UIA_PaneControlTypeId) - "Coalition", "TAdvSmoothToggleButton" (UIA_PaneControlTypeId) // Units (4) - "", "TListBox" (UIA_ListControlTypeId) - "Morand" (UIA_ListItemControlTypeId) - "Montbrun" (UIA_ListItemControlTypeId) - ... // Strength (5) - "", "TSpinEdit" (UIA_EditControlTypeId) - "", "TSpinButton" (UIA_PaneControlTypeId) // Fatigue (5) - "", "TSpinEdit" (UIA_EditControlTypeId) - "", "TSpinButton" (UIA_PaneControlTypeId) // Morale (5) - "", "TComboBox" (UIA_ComboBoxControlTypeId) // Value.Value = "Shattered" - "", "ComboLBox" (UIA_ListControlTypeId) - "Shattered" (UIA_ListItemControlTypeId) // SelectionItem.IsSelected = true - "Wavering" (UIA_ListItemControlTypeId) - "Brittle" (UIA_ListItemControlTypeId) - "Steady" (UIA_ListItemControlTypeId) - "Confident" (UIA_ListItemControlTypeId) - "" , "Edit" (UIA_EditControlTypeId) // Value.Value = "Shattered" // Update (5) - "Update", "TAdvSmoothButton" (UIA_PaneControlTypeId) // Finished (6) - "Finished", "TAdvSmoothButton" (UIA_PaneControlTypeId) Formato: Name, ClassName (ControlType).
Invece di lavorare sui controlli Win32, ho scelto l'approccio (totalmente esterno / non intrusivo) di I/O con la memoria del gioco. Et voilà! Code: <?xml version="1.0" encoding="UTF-8"?> <OutputBattleData date="1809-05-27" x="66" y="17" type="1" startTime="1"> <Army id="1" name="Allemagne" leader="1"> <Unit id="5" type="1" name="Morand" corps="2" strength="22" quality="2" fatigue="4" morale="12"/> <Unit id="6" type="1" name="Friant" corps="2" strength="18" quality="2" fatigue="4" morale="12"/> <Unit id="8" type="1" name="Demont" corps="2" strength="8" quality="2" fatigue="5" morale="12"/> <Unit id="11" type="1" name="Legrand" corps="3" strength="9" quality="2" fatigue="3" morale="12"/> <Unit id="12" type="1" name="Saint-Cyr" corps="3" strength="19" quality="2" fatigue="4" morale="12"/> <Unit id="17" type="3" name="IV (A)" corps="3" strength="5" quality="2" fatigue="4" morale="12"/> </Army> <Army id="2" name="Rhein" leader="19"> <Unit id="34" type="2" name="Klenau" corps="13" strength="4" quality="2" fatigue="0" morale="12"/> <Unit id="46" type="1" name="Hohenfeld" corps="12" strength="11" quality="2" fatigue="0" morale="12"/> <Unit id="47" type="1" name="Kottulinsky" corps="12" strength="10" quality="2" fatigue="0" morale="12"/> <Unit id="48" type="2" name="Wallmoden" corps="12" strength="3" quality="2" fatigue="0" morale="12"/> <Unit id="49" type="3" name="VI A" corps="12" strength="3" quality="2" fatigue="0" morale="12"/> <Unit id="50" type="1" name="Aspre" corps="13" strength="11" quality="4" fatigue="0" morale="12"/> <Unit id="51" type="1" name="Prochaszka" corps="13" strength="12" quality="3" fatigue="0" morale="10"/> <Unit id="52" type="3" name="IR A" corps="13" strength="4" quality="2" fatigue="0" morale="12"/> <Unit id="53" type="2" name="Hessen-Hom." corps="13" strength="8" quality="3" fatigue="0" morale="12"/> <Unit id="54" type="2" name="Kienmayer" corps="13" strength="15" quality="2" fatigue="0" morale="12"/> </Army> <Corps id="2" name="IV" leader="5"/> <Corps id="3" name="VII" leader="6"/> <Corps id="12" name="I Rs" leader="27"/> <Corps id="13" name="Inn." leader="29"/> <Leader id="1" name="Napoleon" skills="8-9-9"/> <Leader id="5" name="Massena" skills="8-8-7"/> <Leader id="6" name="Lefebvre" skills="8-4-8"/> <Leader id="19" name="Charles" skills="7-8-7"/> <Leader id="27" name="Liechtenstein" skills="4-3-4"/> <Leader id="29" name="John" skills="4-3-4"/> </OutputBattleData> Prossimo step: l'ingresso dei risultati della battaglia da file XML. Poi le opportune conversioni output_cod -> input_sow e output_sow -> input_cod spero le possa fare qualcun'altro. Ciao.
Stò cercando di rendere possibile un'interazione automatizzata tra COD e SOWWL. Mi sembrava sottointeso e chiedo scusa se non si era capito. Attraverso files XML nel caso specifico, dato che COD non contempla(va) alcuna possibilità di input / output se non manualmente da controlli Win32. Così invece si potrebbe, in linea del tutto teorica, relazionare con un semplice click persino la posizione x/y nella griglia esagonale di COD ad una porzione di archivio di dati elevazionali satellitari / contenuti procedurali (fiumi, strade, boschi, villaggi, etc.) da cui attingere per generare il campo di battaglia di SOWWL. Per il momento mi accontenterei di poter giocare consistentemente con OOB ed un set di mappe predefinito. Ciao.
CODPlus, versione 0.9: http://www68.zippyshare.com/v/EBxPu3aL/file.html Permette di esportare i dati delle battaglie e di importare successivamente i risultati delle medesime via XML (ci sono files di esempio allegati), passando per le schermate "Miniature". Se avete installato in directory alternative, dovete cambiare il primo argomento a CODPlus nel batch. Il gioco è fatto partire automaticamente. Saluti. Nicolò
l'attuale basso prezzo, la semplicità, la simulazione della catena di comando, la scala, e il non aver mai giocato un napoleonico a parte gli hps, mi invogliano all'acquisto...