From 0a4148abaa2e3d47bb0ca2d4c2ae08ba52355181 Mon Sep 17 00:00:00 2001 From: Michal Tuszowski Date: Thu, 9 Oct 2025 20:55:30 +0200 Subject: [PATCH] sync: foundry v0.2 --- foundry/availability.csv | 9 + ...mponents_supplemental_xenos_archeotech.csv | 103 ++++ foundry/starship_weapons.csv | 60 ++- foundry/version.nfo | 2 +- help_scripts/generate_manifests.py | 118 +++++ help_scripts/generate_manifestsv2.py | 182 +++++++ .../investigation-board/assets/bluePin.webp | Bin 0 -> 3952 bytes .../assets/custom_photoFrame.webp | Bin 0 -> 934 bytes .../assets/fonts/rock_salt.ttf | Bin 0 -> 119328 bytes .../assets/futuristic_photoFrame.webp | Bin 0 -> 1956 bytes .../investigation-board/assets/greenPin.webp | Bin 0 -> 4418 bytes .../assets/note_index.webp | Bin 0 -> 794 bytes .../assets/note_white.webp | Bin 0 -> 9564 bytes .../assets/photoFrame.webp | Bin 0 -> 1326 bytes .../assets/placeholder.webp | Bin 0 -> 6102 bytes .../investigation-board/assets/redPin.webp | Bin 0 -> 4232 bytes .../investigation-board/assets/yellowPin.webp | Bin 0 -> 4504 bytes .../investigation-board/module.json | 15 + .../scripts/investigation-board.js | 471 ++++++++++++++++++ .../investigation-board/scripts/settings.js | 167 +++++++ .../investigation-board/styles/style.css | 134 +++++ .../templates/drawing-sheet.html | 37 ++ wg-voidships-builder/sample_universe.json | 130 ----- 23 files changed, 1285 insertions(+), 143 deletions(-) create mode 100644 foundry/availability.csv create mode 100644 help_scripts/generate_manifests.py create mode 100644 help_scripts/generate_manifestsv2.py create mode 100644 investigation-board_v13/investigation-board/assets/bluePin.webp create mode 100644 investigation-board_v13/investigation-board/assets/custom_photoFrame.webp create mode 100644 investigation-board_v13/investigation-board/assets/fonts/rock_salt.ttf create mode 100644 investigation-board_v13/investigation-board/assets/futuristic_photoFrame.webp create mode 100644 investigation-board_v13/investigation-board/assets/greenPin.webp create mode 100644 investigation-board_v13/investigation-board/assets/note_index.webp create mode 100644 investigation-board_v13/investigation-board/assets/note_white.webp create mode 100644 investigation-board_v13/investigation-board/assets/photoFrame.webp create mode 100644 investigation-board_v13/investigation-board/assets/placeholder.webp create mode 100644 investigation-board_v13/investigation-board/assets/redPin.webp create mode 100644 investigation-board_v13/investigation-board/assets/yellowPin.webp create mode 100644 investigation-board_v13/investigation-board/module.json create mode 100644 investigation-board_v13/investigation-board/scripts/investigation-board.js create mode 100644 investigation-board_v13/investigation-board/scripts/settings.js create mode 100644 investigation-board_v13/investigation-board/styles/style.css create mode 100644 investigation-board_v13/investigation-board/templates/drawing-sheet.html delete mode 100644 wg-voidships-builder/sample_universe.json diff --git a/foundry/availability.csv b/foundry/availability.csv new file mode 100644 index 0000000..20515ed --- /dev/null +++ b/foundry/availability.csv @@ -0,0 +1,9 @@ +Type,SP Tier,Availability +Supplemental,1,Scarce +Essential,Base,Scarce +Supplemental,2,Rare +Essential,Base+1 SP,Rare +Supplemental,3,Very Rare +Essential,Base+2 SP,Very Rare +Archeotech,Any,Extremely Rare +Xenotech,Any,Near Unique diff --git a/foundry/components_supplemental_xenos_archeotech.csv b/foundry/components_supplemental_xenos_archeotech.csv index a2748f3..aeb1837 100644 --- a/foundry/components_supplemental_xenos_archeotech.csv +++ b/foundry/components_supplemental_xenos_archeotech.csv @@ -65,3 +65,106 @@ Archeotech,Cogitator Interlink,All (unless noted),UNKN,UNKN,UNKN,Crew Rating +5 Archeotech,Energistic Conversion Matrix,All (unless noted),UNKN,UNKN,UNKN,Divert Power to Speed as Free Action (limit +5 Speed); can depower Components.,Into the Storm (Archeotech Components) Archeotech,Empyrean Mantle,All (unless noted),UNKN,0,UNKN,External; Silent Running detection is two steps harder; +50 EP to Criminal objectives.,Into the Storm (Archeotech Components) Archeotech,Teleportarium (Teleportation Array),All (unless noted),1,1,1,Enables Hit & Run vs targets with Void Shields down; per ItS usage rules.,Into the Storm (Archeotech Components) +Category,Component,Appropriate Hull Types,Power,Space,SP,Notes / Effects,Source +Cargo Holds and Passenger Compartments,Cargo Hold and Lighter Bay,Raider/Frigate/Light Cruiser/Cruiser,1,2,1,Standard cargo + lighter bay,Table 8-5 +Cargo Holds and Passenger Compartments,Compartmentalized Cargo Hold,Raider/Frigate/Light Cruiser/Cruiser,2,5,1,Segmented holds; safer cargo,Table 8-5 +Cargo Holds and Passenger Compartments,Main Cargo Hold,Transports,2,4,1,Primary cargo storage,Table 8-5 +Cargo Holds and Passenger Compartments,Luxury Passenger Quarters,All Ships,2,1,1,Passenger comfort/morale,Table 8-5 +Cargo Holds and Passenger Compartments,Barracks,All Ships,2,4,2,Troop capacity; boarding bonus,Table 8-5 + +Augments and Enhancements,Augmented Retro-thrusters,Raider/Frigate,3,0,2,Improved decel/turn,Table 8-5 +Augments and Enhancements,Augmented Retro-thrusters,Transports/Light Cruisers,4,0,2,Improved decel/turn,Table 8-5 +Augments and Enhancements,Augmented Retro-thrusters,Cruisers,5,0,2,Improved decel/turn,Table 8-5 +Augments and Enhancements,Reinforced Interior Bulkheads,Transports/Raiders/Frigates,0,2,2,Structural survivability,Table 8-5 +Augments and Enhancements,Reinforced Interior Bulkheads,Light Cruisers/Cruisers,0,3,2,Structural survivability,Table 8-5 +Augments and Enhancements,Armour Plating†,Transports/Raiders/Frigates,0,1,2,"† Once per vessel",Table 8-5 +Augments and Enhancements,Armour Plating†,Light Cruisers/Cruisers,0,2,2,"† Once per vessel",Table 8-5 +Augments and Enhancements,Armoured Prow†,Cruisers,0,4,2,"† Once per vessel",Table 8-5 +Augments and Enhancements,Tenebro-Maze†,Transports/Raiders/Frigates,1,2,2,"† Once per vessel",Table 8-5 +Augments and Enhancements,Tenebro-Maze†,Light Cruisers/Cruisers,2,3,2,"† Once per vessel",Table 8-5 + +Additional Facilities,Extended Supply Vaults,All Ships,1,4,2,Extended endurance,Table 8-5 +Additional Facilities,Crew Reclamation Facility,All Ships,1,1,1,Reclaims crew losses,Table 8-5 +Additional Facilities,Munitorium,Transports/Raiders/Frigates,2,3,2,Ordnance logistics,Table 8-5 +Additional Facilities,Munitorium,Light Cruisers/Cruisers,3,4,2,Ordnance logistics,Table 8-5 +Additional Facilities,Temple-shrine to the God Emperor,All Ships,1,1,1,Morale/Creed benefits,Table 8-5 +Additional Facilities,Librarium Vault,All Ships,1,1,1,Archives/intel,Table 8-5 +Additional Facilities,Trophy Room,All Ships,1,1,1,Social/renown,Table 8-5 +Additional Facilities,Observation Dome,All Ships,0,1,1,Observation/social,Table 8-5 +Additional Facilities,Murder-Servitors,All Ships,1,1,2,Boarding bonus,Table 8-5 + +Cargo and Passenger Compartments,Brig,All Ships,1,1,1,Prison cells,Table 1-10 +Cargo and Passenger Compartments,Ship’s Stores,Light Cruisers/Cruisers,1,5,2,Spares & supplies,Table 1-10 +Cargo and Passenger Compartments,Ship’s Stores,Transports/Grand Cruisers,1,10,2,Spares & supplies,Table 1-10 + +Augments and Enhancements,Defensive Countermeasures†,All Ships,1,1,2,"† Once per vessel",Table 1-10 +Augments and Enhancements,Flak Turrets†,All Ships,1,1,1,"† Once per vessel",Table 1-10 +Augments and Enhancements,Field Bracing,All Ships,"1-3",1,2,Variable power by scope,Table 1-10 +Augments and Enhancements,Fire Suppression System†,Transports/Raiders/Frigates,1,1,2,"† Once per vessel",Table 1-10 +Augments and Enhancements,Fire Suppression System†,Light Cruisers/Cruisers,2,2,2,"† Once per vessel",Table 1-10 +Augments and Enhancements,Fire Suppression System†,Grand Cruisers,3,3,2,"† Once per vessel",Table 1-10 +Augments and Enhancements,Lux Net,All Ships,"10 generated",2,2,Generates Power; special rules,Table 1-10 +Augments and Enhancements,Minelayer Bay,Transports/Light Cruisers/Cruisers,1,4,1,Deploys mines,Table 1-10 +Augments and Enhancements,Power Ram†,Light Cruisers/Cruisers,2,0,2,"† Once per vessel",Table 1-10 + +Additional Facilities,Cloudmining Facility†,Transports,3,4,1,"† Once per vessel",Table 1-10 +Additional Facilities,Hydraphuran Jamming System†,All Ships,4,0,1,"† Once per vessel",Table 1-10 +Additional Facilities,Manufactorum†,Light Cruisers/Cruisers,2,1,2,"† Once per vessel",Table 1-10 +Additional Facilities,Medicae Deck†,All Ships,2,1,1,"† Once per vessel",Table 1-10 +Additional Facilities,Melodium†,All Ships,1,1,1,"† Once per vessel",Table 1-10 +Additional Facilities,Plasma Scoop†,Raiders/Frigates,2,3,3,"† Once per vessel",Table 1-10 +Additional Facilities,Plasma Scoop†,Light Cruisers/Cruisers,3,4,3,"† Once per vessel",Table 1-10 +Additional Facilities,Pilot’s Chamber†,All Ships,1,1,1,"† Once per vessel",Table 1-10 +Additional Facilities,Salvage Systems†,Transport/Light Cruiser/Cruiser,5,3,3,"† Once per vessel",Table 1-10 +Additional Facilities,Small Craft Repair Deck†,Light Cruisers/Cruisers,2,2,1,"† Once per vessel",Table 1-10 +Additional Facilities,Spacedock Piers†,Transports (50+ Space)/Grand Cruisers,7,14,4,"† Once per vessel",Table 1-10 + +Cargo Holds and Passenger Compartments,Shadowblind Bays,All Ships,3,4,2,Stealth berths,Table 4-3 +Cargo Holds and Passenger Compartments,Xenos Habitats,All Ships,2,1,1,Accommodations for xenos,Table 4-3 + +Augments and Enhancements,Auxiliary Plasma Banks,Transports/Raiders/Frigates,"8 generated",5,1,Generates Power; special rules,Table 4-3 +Augments and Enhancements,Auxiliary Plasma Banks,Light Cruisers/Cruisers,"10 generated",6,1,Generates Power; special rules,Table 4-3 +Augments and Enhancements,Drop Pod Launch Bays,All Ships,1,3,2,Assault insertion bays,Table 4-3 +Augments and Enhancements,Empyrean Mantle,Transports/Raiders/Frigates,3,0,2,External; stealth vs detection,Table 4-3 +Augments and Enhancements,Empyrean Mantle,Light Cruisers/Cruisers,5,0,2,External; stealth vs detection,Table 4-3 +Augments and Enhancements,Reinforced Prow,Transports/Raiders/Frigates,0,2,1,Strengthened prow,Table 4-3 +Augments and Enhancements,Reinforced Prow,Light Cruisers/Cruisers,0,3,1,Strengthened prow,Table 4-3 + +Additional Facilities,Arboretum,Transports/Raiders/Frigates,2,2,1,Life-supporting gardens,Table 4-3 +Additional Facilities,Arboretum,Light Cruisers/Cruisers,2,3,1,Life-supporting gardens,Table 4-3 +Additional Facilities,Asteroid Mining Facility,All Ships,6,10,3,Onboard mining/refinery,Table 4-3 +Additional Facilities,Astropathic Choir-chambers,All Ships,1,1,1,Astropathic communications,Table 4-3 +Additional Facilities,Broadband Hymn-casters,All Ships,3,0,1,Long-range vox-hymn projectors,Table 4-3 +Category,Component,Appropriate Hull Types,Power,Space,SP,Notes / Effects,Source +Archeotech,Castellan Shield,All Ships,5,1,2,Archeotech void-shield variant.,Table 4-4 +Archeotech,Castellan Shield Array,Cruisers,7,2,2,Counts as multiple shields; archeotech array.,Table 4-4 +Archeotech,Cogitator Interlink†,All Ships,1,1,2,"† Once per vessel; advanced cogitator network.",Table 4-4 +Archeotech,Energistic Conversion Matrix†,All Ships,1,1,1,"† Once per vessel; convert Power to Speed per rules.",Table 4-4 +Archeotech,Gyro-stabilisation Matrix†,All Ships,1,1,1,"† Once per vessel; enhanced targeting stabilisation.",Table 4-4 +Archeotech,Staravar Laser Macrobattery,All Ships,4,4,2,Archeotech laser macrobattery (see weapon statline in Table 4-5),Table 4-4 +Archeotech,Star-flare Lance,Light Cruisers/Cruisers,12,6,3,Archeotech lance (see weapon statline in Table 4-5),Table 4-4 + +Archeotech,Cypra-pattern Class 1 Drive,Transports,"30 Generated",10,2,Archeotech plasma drive.,Table 1-11 +Archeotech,Cypra-pattern Class 2 Drive,Raiders/Frigates,"40 Generated",12,2,Archeotech plasma drive.,Table 1-11 +Archeotech,Jovian-pattern Nova Cannon,Cruisers,6,7,5,Component entry for Nova Cannon mount (see weapon on Table 1-12),Table 1-11 +Archeotech,Plasma Accelerated Torpedo Tubes,All Ships,2,6,2,Archeotech torpedo tubes (see weapon on Table 1-12),Table 1-11 +Archeotech,Warp Antenna,All Ships,1,1,2,Archeotech warp comms augment.,Table 1-11 +Archeotech,Warp Sextant,All Ships,4,1,2,Archeotech warp navigation aid.,Table 1-11 + +Archeotech,Ancient Life Sustainer,Transports/Raiders/Frigates,2,1,2,Archeotech life support.,Table 8-6 +Archeotech,Ancient Life Sustainer,Light Cruisers/Cruisers,2,2,2,Archeotech life support.,Table 8-6 +Archeotech,Modifified Jovian Pattern Class 1 Drive,Transports,"35 Generated",4,3,Archeotech/modified drive.,Table 8-6 +Archeotech,Modifified Lathe Pattern Class 1 Drive,Transports,"40 Generated",8,3,Archeotech/modified drive.,Table 8-6 +Archeotech,Modifified Jovian Pattern Class 2 Drive,Raiders/Frigates,"45 Generated",6,3,Archeotech/modified drive.,Table 8-6 +Archeotech,Modifified Jovian Pattern Class 3 Drive,Light Cruisers,"60 Generated",8,3,Archeotech/modified drive.,Table 8-6 +Archeotech,Modifified Jovian Pattern Class 4 Drive,Cruisers,"75 Generated",10,3,Archeotech/modified drive.,Table 8-6 +Archeotech,Bridge of Antiquity,Transports/Raiders/Frigates,1,1,2,Archeotech bridge.,Table 8-6 +Archeotech,Bridge of Antiquity,Light Cruisers/Cruisers,2,1,2,Archeotech bridge.,Table 8-6 +Archeotech,Auto-stabilised Logis-targeter,All ships,5,0,2,Archeotech targeting augmentation.,Table 8-6 +Archeotech,Teleportarium,All ships,1,1,1,Archeotech teleport array (component entry),Table 8-6 +Xenotech,Ghost Field,All ships,8,4,3,Xenos equivalent of advanced stealth shielding.,Table 8-7 +Xenotech,Shard Cannon Battery,All ships,0,3,2,Xenos macrobattery analogue.,Table 8-7 +Xenotech,Runecaster,All ships,0,1,2,Xenos augury/warding device.,Table 8-7 +Xenotech,Micro Laser Defence Grid,All ships,2,0,2,Xenos PD grid.,Table 8-7 +Xenotech,Gravity Sails,Transports/Raiders/Frigates,3,0,3,Ancient gravity sail rig.,Table 8-7 +Xenotech,Gravity Sails,Light cruisers/Cruisers,5,0,3,Ancient gravity sail rig.,Table 8-7 diff --git a/foundry/starship_weapons.csv b/foundry/starship_weapons.csv index e765bca..7dc8789 100644 --- a/foundry/starship_weapons.csv +++ b/foundry/starship_weapons.csv @@ -1,13 +1,49 @@ component_name,category,mount,scale,strength,damage,crit_rating,range_vu,power,space,sp,availability,special_rules_notes,book_sources,needs_review -Mars-pattern Macrocannon Broadside (Frigate Scale),Macrocannon,Dorsal,Raider/Frigate,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,Standard macrobattery for escorts; broadside-equivalent on dorsal for small hulls.,Core,check_table;check_desc;check_presence -Mars-pattern Macrocannon Broadside (Cruiser Scale),Macrocannon,Port/Starboard,Cruiser/Battlecruiser,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,Standard cruiser macrobroadside component.,Core,check_table;check_desc;check_presence -Sunsear Laser Battery (Frigate Scale),Laser Battery,Dorsal,Raider/Frigate,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,High accuracy laser macrobattery used by escorts.,Core,check_table;check_desc;check_presence -Sunsear Laser Battery (Cruiser Scale),Laser Battery,Port/Starboard,Cruiser/Battlecruiser,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,Cruiser-grade laser macrobattery.,Core,check_table;check_desc;check_presence -Dorsal Lance Battery (Frigate Grade),Lance,Dorsal,Frigate,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,Single/double lance mount for escorts.,Core,check_table;check_desc;check_presence -Prow Lance Battery (Light Cruiser),Lance,Prow,Light Cruiser,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,Iconic Dauntless prow lance fit.,Core,check_table;check_desc;check_presence -Port/Starboard Lance Battery (Cruiser),Lance,Port/Starboard,Cruiser/Battlecruiser,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,Heavy lance broadside for line ships.,Core,check_table;check_desc;check_presence -Voss-pattern Torpedo Tubes,Torpedo Tubes,Prow,Escort/Light Cruiser/Cruiser,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,"As seen on Falchion (prow slot pre-equipped; half ammo, +1 Power).",BFK/Core,check_table -Standard Torpedo Tubes (Cruiser Pattern),Torpedo Tubes,Prow,Cruiser/Battlecruiser,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,Generic torpedo tube component for cruiser-sized hulls.,Core,check_table;check_desc;check_presence -Jovian-pattern Launch Bay,Launch Bay,Port/Starboard,Light Cruiser/Cruiser/Battlecruiser,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,Carrier component for attack craft (Fury/Starhawk wings).,Core/BFK,check_table;check_presence -Nova Cannon,Nova Cannon,Prow,Cruiser/Battlecruiser,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,Superheavy prow weapon; unique ammo rules.,Core/BFK,check_table;check_desc;check_presence -Plasma Battery (Cruiser Grade),Plasma Battery,Port/Starboard,Cruiser/Battlecruiser,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,UNKN,If present in BFK as a distinct macrobattery type; verify exact name/statline.,BFK,check_table;check_desc;check_presence +Mars-pattern Macrocannon Broadside (Frigate Scale),Macrocannon,Dorsal,Raider/Frigate,3,1d10+2,5,6,4,2,1,UNKN,"Standard macrobattery for escorts; broadside-equivalent on dorsal for small hulls.",Core (Table 8-4), +Mars-pattern Macrocannon Broadside (Cruiser Scale),Macrocannon,Port/Starboard,Cruiser/Battlecruiser,6,1d10+2,5,6,4,5,1,UNKN,Standard cruiser macrobroadside component.,Core (Table 8-4), +Sunsear Laser Battery (Frigate Scale),Laser Battery,Dorsal,Raider/Frigate,4,1d10+2,4,9,6,4,1,UNKN,High accuracy laser macrobattery used by escorts.,Core (Table 8-4), +Sunsear Laser Battery (Cruiser Scale),Laser Battery,Port/Starboard,Cruiser/Battlecruiser,6,1d10+2,4,9,9,6,1,UNKN,Cruiser-grade laser macrobattery.,Supplemental Table 4-2, +Dorsal Lance Battery (Frigate Grade),Lance,Dorsal,Frigate,1,1d10+2,3,5,6,4,2,UNKN,Single/double lance mount for escorts.,Core (Table 8-4), +Prow Lance Battery (Light Cruiser),Lance,Prow,Light Cruiser,1,1d10+4,3,6,9,4,2,UNKN,Iconic Dauntless prow lance fit.,Core (Table 8-4), +Port/Starboard Lance Battery (Cruiser),Lance,Port/Starboard,Cruiser/Battlecruiser,2,1d10+4,3,6,13,6,2,UNKN,Heavy lance broadside for line ships.,Core (Table 8-4), +Voss-pattern Torpedo Tubes,Torpedo Tubes,Prow,Escort/Light Cruiser/Cruiser,2,UNKN,UNKN,UNKN,1,5,1,UNKN,"As seen on Falchion (prow slot pre-equipped; half ammo, +1 Power).",Core (Table 1-9), +Standard Torpedo Tubes (Cruiser Pattern),Torpedo Tubes,Prow,Cruiser/Battlecruiser,6,UNKN,UNKN,UNKN,2,8,2,UNKN,Generic torpedo tube component for cruiser-sized hulls.,Core (Table 1-9), +Jovian-pattern Launch Bay,Launch Bay,Port/Starboard,Light Cruiser/Cruiser/Battlecruiser,2,UNKN,UNKN,UNKN,1,6,2,UNKN,"Carrier component for attack craft (Fury/Starhawk wings).",Core (Table 1-9), +Nova Cannon,Nova Cannon,Prow,Cruiser/Battlecruiser,SPECIAL,2d5+4,SPECIAL,6–40,3,7,3,UNKN,"Superheavy prow weapon; unique ammo rules.",Core (Table 1-9),check_table +Plasma Battery (Cruiser Grade),Plasma Battery,Port/Starboard,Cruiser/Battlecruiser,4,1d10+4,4,5,7,4,2,UNKN,"If present in BFK as a distinct macrobattery type; verify exact name/statline.",Core (Table 8-4), +Bombardment Cannons,Macrocannon,Port/Starboard,Light Cruiser/Cruiser,3,1d10+6,2,4,5,5,3,UNKN,Heavy bombardment macrobattery.,Core (Table 1-9), +Disruption Macrocannons,Macrocannon,Any,All Ships,3,1d10+1,0,5,4,2,2,UNKN,"Mount varies by hull: Dorsal on escorts; Port/Starboard on larger hulls.",Core (Table 1-9), +Disruption Macrocannon Broadside,Macrocannon,Port/Starboard,Light Cruiser/Cruiser,6,1d10+1,0,5,6,5,2,UNKN,Broadside variant.,Core (Table 1-9), +Stygies-pattern Macrocannons,Macrocannon,Any,All Ships,3,1d10+2,5,5,4,3,1,UNKN,"Mount varies by hull: Dorsal on escorts; Port/Starboard on larger hulls.",Core (Table 1-9), +Hecutor-pattern Plasma Battery,Plasma Battery,Port/Starboard,Light Cruiser/Cruiser,3,1d10+2,4,11,8,3,2,UNKN,High-velocity plasma battery.,Core (Table 1-9), +Hecutor-pattern Plasma Broadside,Plasma Battery,Port/Starboard,Battlecruiser/Grand Cruiser,5,1d10+2,4,11,12,5,2,UNKN,Heavy plasma broadside.,Core (Table 1-9), + +Godsbane Lance,Lance,Any,Battlecruiser/Grand Cruiser,1,1d10+2,3,12,9,4,3,UNKN,Single long-range lance.,Core (Table 1-9), +Godsbane Lance Battery,Lance,Port/Starboard,Battlecruiser/Grand Cruiser,2,1d10+2,3,12,13,6,3,UNKN,Broadside lance battery.,Core (Table 1-9), +Las-burner,Lance,Any,All Ships,2,1d5+1,3,3,7,3,2,UNKN,Short-range cutting lance.,Core (Table 1-9), +Mezoa Lance Weapon,Lance,Any,All Ships,1,1d10+5,4,4,9,4,3,UNKN,High-output lance emitter.,Core (Table 1-9), +Mezoa Lance Battery,Lance,Port/Starboard,Light Cruiser/Cruiser,2,1d10+5,4,4,13,6,3,UNKN,Heavy lance battery.,Core (Table 1-9), +Voidsunder Lance Battery,Lance,Port/Starboard,Light Cruiser/Cruiser,1,1d10+4,3,6,15,8,3,UNKN,Shield-piercing lance battery.,Core (Table 1-9), + +Ryza-pattern Nova Cannon,Nova Cannon,Prow,Cruisers,SPECIAL,2d5+5,SPECIAL,6–36,4,7,4,UNKN,"Nova weapon; special blast/aiming rules apply.",Core (Table 1-9),check_table + +Fortis-pattern Torpedo Tubes,Torpedo Tubes,Prow,Light Cruiser/Cruiser,6,UNKN,UNKN,UNKN,2,8,3,UNKN,Standard cruiser/LC torpedo system.,Core (Table 1-9), +Gryphonne-pattern Torpedo Tubes,Torpedo Tubes,Prow,Raider/Frigate/Light Cruiser/Cruiser,4,UNKN,UNKN,UNKN,2,6,1,UNKN,Escort-through-cruiser compatible tubes.,Core (Table 1-9), +Mars-pattern Torpedo Tubes,Torpedo Tubes,Prow,Light Cruiser/Cruiser,6,UNKN,UNKN,UNKN,2,8,2,UNKN,Standard Navy cruiser torpedo fit.,Core (Table 1-9), + +Hold Landing Bay,Launch Bay,Internal,Transports,2,UNKN,UNKN,UNKN,1,0,2,UNKN,"Cargo-hold conversion; Space shown as 0 for '—' per CSV convention.",Core (Table 1-9), +Jovian-pattern Escort Bay,Launch Bay,Port/Starboard,Light Cruiser/Cruiser,1,UNKN,UNKN,UNKN,1,4,1,UNKN,Escort-grade launch bay.,Core (Table 1-9), +Lathe-pattern Landing Bay,Launch Bay,Port/Starboard,Cruiser,2,UNKN,UNKN,UNKN,1,5,2,UNKN,Cruiser-grade launch bay (Lathe),Core (Table 1-9), + +Jovian Missile Battery,Macrocannon,Any,All Ships,5,1d10+1,6,6,3,1,1,UNKN,"Missile-based macrobattery; mount varies by hull.",Supplemental Table 4-2, +Lathe Grav-culverin Broadside,Macrocannon,Port/Starboard,Light Cruiser/Cruiser,6,1d10+3,6,5,5,5,1,UNKN,High-velocity gravitic broadside.,Supplemental Table 4-2, +Mezoa Macrocannons,Macrocannon,Any,All Ships,4,1d10+3,5,5,4,4,1,UNKN,"Mount varies by hull: Dorsal on escorts; Port/Starboard on larger hulls.",Supplemental Table 4-2, +Pyros Melta-cannons,Macrocannon,Any,All Ships,3,1d10+4,4,4,4,3,2,UNKN,Short-range melta macrobattery.,Supplemental Table 4-2, +Sunhammer Lance,Lance,Any,All Ships,1,1d10+3,3,9,9,4,2,UNKN,Long-range lance emitter.,Supplemental Table 4-2, +Sunhammer Lance Battery,Lance,Port/Starboard,All Ships,2,1d10+3,3,9,13,6,2,UNKN,Long-range lance battery.,Supplemental Table 4-2, +Mars-pattern Nova Cannon,Nova Cannon,Prow,Cruisers,SPECIAL,2d5+4,SPECIAL,6–40,3,7,3,UNKN,"Nova weapon; special blast/aiming rules apply.",Core (Table 1-9),check_table +Staravar Laser Macrobattery,Macrocannon,Any,All Ships,4,1d10+2,4,12,4,4,2,Extremely Rare,"Archeotech laser macro; mount depends on hull (Dorsal/Port-Starboard).",Table 4-5, +Star-flare Lance,Lance,Any,Light Cruiser/Cruiser,3,1d10+3,3,7,12,6,3,Extremely Rare,Archeotech lance emitter.,Table 4-5, + +Jovian-pattern Nova Cannon†,Nova Cannon,Prow,Cruisers,SPECIAL,2d5+7,SPECIAL,6–35,5,7,5,Extremely Rare,"† Special rules for Strength/Crit (see page 16).",Table 1-12,check_table +Plasma Accelerated Torpedo Tubes (Archeotech Weapon),Torpedo Tubes,Prow,All Ships,4,UNKN,UNKN,UNKN,1,4,4,Extremely Rare,"Archeotech torpedo mount; torpedo warhead stats handled separately.",Table 1-12, diff --git a/foundry/version.nfo b/foundry/version.nfo index 49d5957..3b04cfb 100644 --- a/foundry/version.nfo +++ b/foundry/version.nfo @@ -1 +1 @@ -0.1 +0.2 diff --git a/help_scripts/generate_manifests.py b/help_scripts/generate_manifests.py new file mode 100644 index 0000000..f1febc3 --- /dev/null +++ b/help_scripts/generate_manifests.py @@ -0,0 +1,118 @@ +# generate_manifests.py +# Fortel Trappa — pełne manifesty ładunkowe (HOLD I/II/III) w ZIP +# Uruchom: python generate_manifests.py -> powstaną dwa pliki ZIP w bieżącym katalogu. + +import random, zipfile, datetime + +random.seed(40000) # deterministyczny „smak” + +WORLDS = ["Ostia","Avachrus","Enoch","Gilead Prime","Nethreus","Ryza","Vostroya","Scintilla","Footfall"] +INN_NOTES = [ + "Zwykły wyrób, zgodny z normą diecezjalną.", + "Do użytku cywilnego; dokumentacja pełna.", + "Na potrzeby konserwacji/edukacji polowej.", + "Brak zasilania, brak funkcji specjalnych.", + "Wersja eksportowa; gwinty zgodne z PL-3.", + "Na morale i porządek; bez cech bojowych.", + "Próbki kontrolne — wynik negatywny na scrapcode.", + "Rekwizyty katechetyczne; brak statusu kultowego.", + "Puste, czyste, opieczętowane.", + "Zabezpieczone audytem Ministorum.", + "Składane; bez ostrych krawędzi w papierach.", + "Zwykła jakość magazynowa; brak niespodzianek.", + "Brak reakcji psionicznej (pomiar: tło).", + "Standard przemysłowy; kompatybilność wysoka.", + "Do ekspozycji; nieotwierane przy inspekcji.", + "Zestaw muzealny; kojąco nudny.", + "Oznaczenie ‘cywilne’; instrukcja w komplecie.", + "Zgodne z przepisem P-77 (ładownie ogólne).", + "Pieczęć diecezjalna aktualna; datowanie bieżące.", + "Bezpieczne dla chóru i czytników vox." +] +INN_NAMES = [ + "Ziarno kultywacyjne ‘Święty Oset’","Mąka ‘Hostia’","Kasza jęczmienna ‘Pielgrzym’","Groch ‘Kocioł’","Fasola ‘Pilgrim’", + "Sól żywnościowa","Olej lampowy","Smary maszynowe ‘Stałość’","Farba kadłubowa ‘Mgła’","Pasy mocujące ‘Ordo Cargo’", + "Złącza heksowe","Zawory nadciśnieniowe","Łożyska baryłkowe ‘Wytrwałość’","Łożyska kulkowe precyzyjne", + "Taśmy stalowe ‘Krzyżowe’","Plandeki światłochłonne ‘Cień’","Pudła ciszy (obudowy wygłuszające)","Lampiony procesyjne", + "Witraże polowe (składane)","Zwoje pergaminowe ‘Sztywna Karta’","Maski nabożne ‘Neutral’","Relikwie podręczne (skrzynki)", + "Szkatuły dewocyjne (stal miękka)","Szkła ochronne ‘Błękit Służbowy’","Barwniki okienne (błękit/purpura)", + "Kity hermetyczne ‘Głuchy Spaw’","Rury segmentowe PL-7","Kable PL-3 ‘Uniwersalne’","Siatki zabezpieczające ‘Drobne Oczko’", + "Zasuwy grodziowe PL-10","Zaczepy stalowe ‘Cierpliwość’","Kątowniki ciężkie ‘Prosto’","Nity kadłubowe ‘Amen’", + "Skrzynki na dźwięk (wygłuszenie)","Szkła różnobarwne (mix)","Amfory gliniane ‘E-Seria’","Szaty ‘Pokora’ (robocze)", + "Kopułki modlitewne (mini)","Płaszcze przeciwdeszczowe ‘Wachta’","Świece czarne ‘Negocjacje’","Świece woskowe ‘Cisza Nocna’", + "Zwoje kabli heksowych (ekranowane)","Sprężyny powrotne","Zawiesia wielokrążkowe","Przekaźniki proste ‘Miedź’", + "Łożyska stożkowe ‘Kierunek’","Szkatuły na krople (apteczne)","Ołtarze polowe (składane)","Figurki pobożne", + "Piety miniaturowe","Popiół posypny (liturgiczny)","Kleje statkowe ‘Głuchy Spaw’","Klemy zasilające ‘Moc’", + "Kołnierze izolacyjne PL-5","Beczki puste ‘Gotowość’","Rolki transportowe ‘Gładkie’","Słód jasny ‘Nocny’", + "Skrzydła drzwiowe ‘Jedność’","Skarbonki parafialne","Księgi wizualne (albumy)","Zegary harmoniczne (niski ton)", + "Baldachimy małe ‘Krem’","Puchar kapłański (rekwizyt)","Księgi zakładkowe","Pasy transmisyjne ‘Ciągłość’", + "Pudła akustyczne (puste)","Rękawice robocze ‘Skóra+’", +] +XENO_REAL = [ + "fragmenty wraithbone Aeldari (martwe, obrobione ‘na szkło’)", + "odpryski spirit-stone (pozbawione ładunku)", + "ukryty vox-scrambler xeno (obudowa cywilna)", + "mikrofiolki po jadu Lhamaean (dokładnie wyparzone)", + "moduł holo-emisyjny Aeldari (matryca wycięta, nieaktywny)", + "kaseta rozliczeń cold trade (podwójne dno)", + "nekrotech — fragment stele ‘bezcielesnej’ (kamień ‘ozdobny’)", + "obudowy tłumiące sygnał (technologia nieidentyfikowana)", + "orb psioniczny — tłumik nastroju (źródło Aeldari)", + "halo-device: element oprawy (niekompletne, bez rdzenia)", + "resztki proscribed tomes (okładki, wkład wymieniony na blanki)", + "zegar-pikietaż dla transakcji cold trade (ukryty znacznik czasu)", + "ampułki po obscura klasy ceremonialnej (umyte; testy czyste)", + "fiolki po ‘ichorze’ drukhari (sterylnie czyste)", + "masker polowy Drukhari — tkanina z włóknem ziggurat (zdezaktywowana)", +] + +def inn_note(): return random.choice(INN_NOTES) +def name(): return random.choice(INN_NAMES) +def world(): return random.choice(WORLDS) +def qty(): return random.randint(1, 8) + +def make_line(idx, suspicious_ratio=0.34): + q = qty(); nm = name(); ow = world(); note = inn_note() + if random.random() < suspicious_ratio: + paren = f"({random.choice(XENO_REAL)})" + else: + paren = f"({random.choice(['zwykły ładunek cywilny','materiały szkoleniowe/rekonstrukcja','zestaw konserwatorski','komplet części serwisowych','puste i czyste','standard magazynowy','produkt spożywczy','wyposażenie pomocnicze','materiały dekoracyjne','narzędzia warsztatowe'])})" + return f"{idx}) {q}× — {nm} — {ow} — [{note}] {paren}", q + +def make_section_text(hold_label, s_idx, s_cnt): + header = f"=== FORTEL TRAPPA — MANIFEST ŁADUNKOWY ===\n{hold_label} / SEKCJA {s_idx} z {s_cnt}\n(Format: [Liczba 1–10] × Standardowy Imperialny Kontener — Nazwa — Pochodzenie — [Uwaga kapitańska] (co to naprawdę jest))\n\n" + total = 0; entries = [] + for i in range(1, 124): + line, q = make_line(i, suspicious_ratio=0.34) + entries.append([line, q]); total += q + if total > 1000: + excess = total - 1000 + for i in range(len(entries)-1, -1, -1): + if excess <= 0: break + q = entries[i][1] + if q > 1: + red = min(q-1, excess); entries[i][1] -= red; excess -= red + prefix, rest = entries[i][0].split("× —", 1) + idx_str = prefix.split(")")[0] + ")" + entries[i][0] = f"{idx_str} {entries[i][1]}× —{rest}" + body = "\n".join(e[0] for e in entries) + footer = f"\n\n— KONIEC: {hold_label} / SEKCJA {s_idx}/{s_cnt} —" + return header + body + footer + +def write_full_zip(path_full, path_hold1): + with zipfile.ZipFile(path_full, "w", compression=zipfile.ZIP_DEFLATED) as z: + for s in range(4, 17): # HOLD I 04–16 + z.writestr(f"HOLD_I_SEKCJA_{s:02d}.txt", make_section_text("HOLD I", s, 16)) + for s in range(1, 16): # HOLD II 01–15 + z.writestr(f"HOLD_II_SEKCJA_{s:02d}.txt", make_section_text("HOLD II", s, 15)) + for s in range(1, 16): # HOLD III 01–15 + z.writestr(f"HOLD_III_SEKCJA_{s:02d}.txt", make_section_text("HOLD III", s, 15)) + z.writestr("README.txt", f"FORTEL TRAPPA — MANIFESTY ({datetime.datetime.utcnow().isoformat()}Z)\nHOLD I: 04–16; HOLD II: 01–15; HOLD III: 01–15\n~1/3 pozycji w ( ) ma real-tożsamość (xeno/kontrabanda), [ ] — noty ‘urzędowo niewinne’.\n") + with zipfile.ZipFile(path_hold1, "w", compression=zipfile.ZIP_DEFLATED) as z: + for s in range(4, 17): + z.writestr(f"HOLD_I_SEKCJA_{s:02d}.txt", make_section_text("HOLD I", s, 16)) + z.writestr("README_HOLD_I.txt", f"HOLD I (04–16) — {datetime.datetime.utcnow().isoformat()}Z\n") + +if __name__ == "__main__": + write_full_zip("FORTEL_HOLD_I_II_III_MANIFESTS.zip", "FORTEL_HOLD_I_SEKCJE_04-16.zip") + print("OK: FORTEL_HOLD_I_II_III_MANIFESTS.zip | FORTEL_HOLD_I_SEKCJE_04-16.zip") diff --git a/help_scripts/generate_manifestsv2.py b/help_scripts/generate_manifestsv2.py new file mode 100644 index 0000000..8fa13c8 --- /dev/null +++ b/help_scripts/generate_manifestsv2.py @@ -0,0 +1,182 @@ +# generate_manifests_v2.py +# Fortel Trappa — manifesty o wysokiej różnorodności (HOLD I/II/III) w dwóch ZIP-ach. +# Uruchom: python generate_manifests_v2.py +# Wynik: FORTEL_MANIFESTS_v2_FULL.zip oraz FORTEL_MANIFESTS_v2_HOLD_I.zip + +import random, zipfile, datetime + +# ===== USTAWIENIA ===== +SEED = None # ustaw np. na liczbę, jeśli chcesz powtarzalny wynik +SUSP_RATIO = 0.34 # ~1/3 pozycji ma „prawdę” w ( ) o xeno/kontrabandzie +QTY_MIN, QTY_MAX = 1, 10 +LINES_PER_SECTION = 123 +CAP_PER_SECTION = 1000 + +if SEED is None: + random.seed() # świeża losowość +else: + random.seed(SEED) + +# ===== PULI I KOMPONENTY NAZW ===== +WORLDS = [ + "Ostia","Avachrus","Enoch","Gilead Prime","Nethreus","Ryza","Vostroya","Scintilla","Footfall", + "Hydraphur","Malfi","Port Wander","Voss Prime","Lucius","Graia","Metalica","Sollex","Sibellus" +] + +FOODS = [ + "Ziarno kultywacyjne","Pszenica","Owies","Jęczmień","Mąka","Kasza jęczmienna","Kasza owsiana", + "Groch","Fasola","Ciecierzyca","Słód jasny","Słód ciemny","Suszone jarzyny","Sól żywnościowa","Olej lampowy" +] +INDUSTRY = [ + "Złącza heksowe","Zawory nadciśnieniowe","Łożyska baryłkowe","Łożyska kulkowe","Łożyska stożkowe", + "Taśmy stalowe","Plandeki światłochłonne","Pudła ciszy (wygłuszenie)","Rury segmentowe PL","Kable PL", + "Siatki zabezpieczające","Zasuwy grodziowe","Zaczepy stalowe","Kątowniki ciężkie","Nity kadłubowe", + "Skrzynki na dźwięk (wygłuszenie)","Filtry rebreatherów","Transpondery nawigacyjne","Przekaźniki proste", + "Zawiesia wielokrążkowe","Sprężyny powrotne","Kołnierze izolacyjne","Kleje statkowe","Klemy zasilające", + "Rolki transportowe","Farba kadłubowa","Żywica naprawcza","Kity hermetyczne","Szkła ochronne", + "Panele grodziowe","Uszczelki retencyjne","Siłowniki serwo (obudowy)" +] +DEVOTION = [ + "Lampiony procesyjne","Witraże polowe (składane)","Zwoje pergaminowe","Maski nabożne", + "Relikwie podręczne (skrzynki)","Szkatuły dewocyjne (stal miękka)","Amfory gliniane", + "Szaty ‘Pokora’ (robocze)","Kopułki modlitewne (mini)","Płaszcze ‘Wachta’", + "Świece czarne ‘Negocjacje’","Świece woskowe ‘Cisza Nocna’","Figurki pobożne", + "Piety miniaturowe","Popiół posypny (liturgiczny)","Ołtarze polowe (składane)", + "Skarbonki parafialne","Księgi wizualne (albumy)","Księgi zakładkowe", + "Ikony ścienne (odlewy)","Reliefy miedziane","Baldachimy ‘Krem’","Puchary kapłańskie (rekwizyt)" +] + +ADJ = [ + "‘Hostia’","‘Pielgrzym’","‘Kocioł’","‘Pilgrim’","‘Stałość’","‘Ordo Cargo’","‘Mgła’","‘Cień’", + "‘Błękit Służbowy’","‘Sztywna Karta’","‘Jedność’","‘Głuchy Spaw’","‘Kierunek’","‘Gotowość’","‘Neutral’", + "‘Mk II’","‘Mk III’","‘Mk IV’","‘Mk V’","‘Plus’","‘Premium’","‘Export’","‘Seria V’","‘Seria IX’","‘Nocny’" +] + +INN_NOTES = [ + "Zwykły wyrób, zgodny z normą diecezjalną.", + "Do użytku cywilnego; dokumentacja pełna.", + "Na potrzeby konserwacji/edukacji polowej.", + "Brak zasilania, brak funkcji specjalnych.", + "Wersja eksportowa; gwinty zgodne z PL-3.", + "Na morale i porządek; bez cech bojowych.", + "Próbki kontrolne — wynik negatywny na scrapcode.", + "Rekwizyty katechetyczne; brak statusu kultowego.", + "Puste, czyste, opieczętowane.", + "Zabezpieczone audytem Ministorum.", + "Składane; bez ostrych krawędzi w papierach.", + "Zwykła jakość magazynowa; brak niespodzianek.", + "Brak reakcji psionicznej (pomiar: tło).", + "Standard przemysłowy; kompatybilność wysoka.", + "Do ekspozycji; nieotwierane przy inspekcji.", + "Zestaw muzealny; kojąco nudny.", + "Oznaczenie ‘cywilne’; instrukcja w komplecie.", + "Zgodne z przepisem P-77 (ładownie ogólne).", + "Pieczęć diecezjalna aktualna; datowanie bieżące.", + "Bezpieczne dla chóru i czytników vox." +] + +HARMLESS = [ + "zwykły ładunek cywilny","materiały szkoleniowe/rekonstrukcja","zestaw konserwatorski", + "komplet części serwisowych","puste i czyste","standard magazynowy","produkt spożywczy", + "wyposażenie pomocnicze","materiały dekoracyjne","narzędzia warsztatowe" +] + +XENO_REAL = [ + "fragmenty wraithbone Aeldari (martwe, obrobione ‘na szkło’)", + "odpryski spirit-stone (pozbawione ładunku)", + "ukryty vox-scrambler xeno (obudowa cywilna)", + "mikrofiolki po jadu Lhamaean (dokładnie wyparzone)", + "moduł holo-emisyjny Aeldari (matryca wycięta, nieaktywny)", + "kaseta rozliczeń cold trade (podwójne dno)", + "nekrotech — fragment stele ‘bezcielesnej’ (kamień ‘ozdobny’)", + "obudowy tłumiące sygnał (technologia nieidentyfikowana)", + "orb psioniczny — tłumik nastroju (źródło Aeldari)", + "halo-device: element oprawy (niekompletne, bez rdzenia)", + "resztki proscribed tomes (okładki, wkład wymieniony na blanki)", + "zegar-pikietaż dla transakcji cold trade (ukryty znacznik czasu)", + "ampułki po obscura klasy ceremonialnej (umyte; testy czyste)", + "fiolki po ‘ichorze’ drukhari (sterylnie czyste)", + "masker polowy Drukhari — tkanina z włóknem ziggurat (zdezaktywowana)", + "matryca soniczna Laer (obudowana ‘pudłem ciszy’)", + "półprzezroczysta łuska necron — fragment dekoracyjny (brak reakcji)", +] + +def compose_name(): + # wybór kategorii z wagami + genre = random.choices(["food","industry","devotion"], [4,5,3])[0] + base = random.choice({"food":FOODS, "industry":INDUSTRY, "devotion":DEVOTION}[genre]) + # modyfikacje wersji/serii + if "PL" in base: + base = base.replace("PL", f"PL-{random.randint(3,12)}") + if "Kable PL" in base and random.random()<0.7: + base = base.replace("Kable PL", f"Kable PL-{random.randint(2,8)}") + flair=[] + if random.random()<0.7: flair.append(random.choice(ADJ)) + if random.random()<0.25: flair.append(f"‘Seria {random.randint(2,12)}’") + return base if not flair else f"{base} " + " ".join(flair) + +def make_line(idx, suspicious_ratio=SUSP_RATIO): + q = random.randint(QTY_MIN, QTY_MAX) + nm = compose_name() + ow = random.choice(WORLDS) + note = random.choice(INN_NOTES) + paren = f"({random.choice(XENO_REAL)})" if random.random()7: + seen.add(name_part) + break + tries+=1 + entries.append([line,q]); total+=q + # przytnij sumę kontenerów do CAP_PER_SECTION + if total>CAP_PER_SECTION: + excess=total-CAP_PER_SECTION + for i in range(len(entries)-1,-1,-1): + if excess<=0: break + q=entries[i][1] + if q>1: + red=min(q-1,excess); entries[i][1]-=red; excess-=red + prefix,rest=entries[i][0].split("× —",1) + idx_str=prefix.split(")")[0]+")" + entries[i][0]=f"{idx_str} {entries[i][1]}× —{rest}" + body="\n".join(e[0] for e in entries) + footer=f"\n\n— KONIEC: {hold_label} / SEKCJA {s_idx}/{s_cnt} —" + return header+body+footer + +def build_zip(full_path, hold1_path): + # FULL: HOLD I 04–16; HOLD II 01–15; HOLD III 01–15 + with zipfile.ZipFile(full_path,"w",compression=zipfile.ZIP_DEFLATED) as z: + for s in range(4,17): # HOLD I + z.writestr(f"HOLD_I_SEKCJA_{s:02d}.txt", make_section_text("HOLD I", s, 16)) + for s in range(1,16): # HOLD II + z.writestr(f"HOLD_II_SEKCJA_{s:02d}.txt", make_section_text("HOLD II", s, 15)) + for s in range(1,16): # HOLD III + z.writestr(f"HOLD_III_SEKCJA_{s:02d}.txt", make_section_text("HOLD III", s, 15)) + z.writestr("README.txt", + f"FORTEL TRAPPA — MANIFESTY v2 ({datetime.datetime.utcnow().isoformat()}Z)\n" + "HOLD I: 04–16; HOLD II: 01–15; HOLD III: 01–15\n" + f"~{int(SUSP_RATIO*100)}% pozycji w ( ) ujawnia real-tożsamość (xeno/kontrabanda); [ ] — noty urzędowo niewinne.\n" + "123 pozycji/sekcję; 1–10 kontenerów/pozycję; suma ≤1000/sekcję.\n") + # HOLD I only + with zipfile.ZipFile(hold1_path,"w",compression=zipfile.ZIP_DEFLATED) as z: + for s in range(4,17): + z.writestr(f"HOLD_I_SEKCJA_{s:02d}.txt", make_section_text("HOLD I", s, 16)) + z.writestr("README_HOLD_I.txt", f"HOLD I (04–16) v2 — {datetime.datetime.utcnow().isoformat()}Z\n") + +if __name__ == "__main__": + build_zip("FORTEL_MANIFESTS_v2_FULL.zip","FORTEL_MANIFESTS_v2_HOLD_I.zip") + print("OK -> FORTEL_MANIFESTS_v2_FULL.zip | FORTEL_MANIFESTS_v2_HOLD_I.zip") diff --git a/investigation-board_v13/investigation-board/assets/bluePin.webp b/investigation-board_v13/investigation-board/assets/bluePin.webp new file mode 100644 index 0000000000000000000000000000000000000000..68f73e35c8e0158a71559e4c62a10d5fe3ca8644 GIT binary patch literal 3952 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�r6`tL4zQORM|!lUWoF`PS&qU8I@jPM^zz&nwE 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 z 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

PKpMpZ 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 v!GZz|9zdFrfeA)~7nZP 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 IS^xk5060Zn5&!@I literal 0 HcmV?d00001 diff --git a/investigation-board_v13/investigation-board/assets/note_index.webp b/investigation-board_v13/investigation-board/assets/note_index.webp new file mode 100644 index 0000000000000000000000000000000000000000..1528bb1f9813f01f5f6610a5fc63dfb417d45462 GIT binary patch literal 794 zcmWIYbaNA8W?%?+bqWXzu!!JdfPio&hJHo{poqdeCI*H8TZXxeS`kbW80`$jI$V?# zIRXS2o1&t3#NKeL|HuD#``?NEuMLfue=rE&+gtVZ_4V~}L{p~SzdyZ+$*v$CM;xdw z`zu6SGt(&LDdFq1 zmG%}!ioWhTu|6iuwd&C(gd}tI|GRr{70j$ZXq>l1{Q=`SZPA4VpW73CIUmmDGG6Fb zqH(TO^1@;(k#wh?7lB}*ViOK%y2M5W1Uq{A0VOP)Jbjtpf>j7GcmQce1|}E{l4H>T g%kcn7Ci@RyHdqgfGnma6kdzwED8RtR5C!4`0Ka=eq5uE@ literal 0 HcmV?d00001 diff --git a/investigation-board_v13/investigation-board/assets/note_white.webp b/investigation-board_v13/investigation-board/assets/note_white.webp new file mode 100644 index 0000000000000000000000000000000000000000..53d23be209e475d86d2eb1602cff1e3eb09f5ca6 GIT binary patch literal 9564 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 XSPzRcn9UcElp4+`z`({31>yq$)#hv- literal 0 HcmV?d00001 diff --git a/investigation-board_v13/investigation-board/assets/placeholder.webp b/investigation-board_v13/investigation-board/assets/placeholder.webp new file mode 100644 index 0000000000000000000000000000000000000000..3053e0106783ba1906cfa9c1934a806f8e473ecd GIT binary patch literal 6102 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 literal 0 HcmV?d00001 diff --git a/investigation-board_v13/investigation-board/assets/redPin.webp b/investigation-board_v13/investigation-board/assets/redPin.webp new file mode 100644 index 0000000000000000000000000000000000000000..5dc4a2f545d47ecb28074e692b7c1516ba9302f6 GIT binary patch literal 4232 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 { + ev.preventDefault(); + // Open Foundry's FilePicker for images; adjust the "current" directory if needed. + new FilePicker({ + type: "image", + current: "modules/investigation-board/assets/", + callback: path => { + // Update the readonly input with the chosen image path. + const input = element.querySelector("input[name='image']"); if (input) input.value = path; + } + }).browse(); + }); + } + + +} + +class CustomDrawing extends Drawing { + constructor(...args) { + super(...args); + this.bgSprite = null; + this.pinSprite = null; + this.noteText = null; + this.photoImageSprite = null; + this.identityNameText = null; + this.futuristicText = null; + } + + // Ensure sprites are created when the drawing is first rendered. + async draw() { + await super.draw(); + await this._updateSprites(); + return this; + } + + // Ensure sprites update correctly on refresh. + async refresh() { + await super.refresh(); + await this._updateSprites(); + return this; + } + + async _updateSprites() { + const noteData = this.document.flags[MODULE_ID]; + if (!noteData) return; + + const isPhoto = noteData.type === "photo"; + const isIndex = noteData.type === "index"; + const mode = game.settings.get(MODULE_ID, "boardMode"); + + // FUTURISTIC PHOTO NOTE LAYOUT + if (isPhoto && mode === "futuristic") { + const fullWidth = game.settings.get(MODULE_ID, "photoNoteWidth"); + const margin = 10; + const photoImgWidth = fullWidth * 0.4; + const photoImgHeight = photoImgWidth * (4 / 3); + const textAreaX = margin + photoImgWidth + margin; + const fullHeight = photoImgHeight + margin * 2; + + // --- Background Frame --- + if (!this.bgSprite) { + this.bgSprite = new PIXI.Sprite(); + this.addChildAt(this.bgSprite, 0); + } + try { + // Always use the fixed photo frame image. + this.bgSprite.texture = PIXI.Texture.from("modules/investigation-board/assets/photoFrame.webp"); + } catch (err) { + console.error("Failed to load photo frame texture", err); + this.bgSprite.texture = PIXI.Texture.EMPTY; + } + this.bgSprite.width = fullWidth; + this.bgSprite.height = fullHeight; + + // --- Foreground (User-Assigned) Photo --- + if (!this.photoImageSprite) { + this.photoImageSprite = new PIXI.Sprite(); + this.addChild(this.photoImageSprite); + } + try { + // Use a fallback if no image is assigned. + const imagePath = noteData.image || "modules/investigation-board/assets/placeholder.webp"; + this.photoImageSprite.texture = PIXI.Texture.from(imagePath); + } catch (err) { + console.error(`Failed to load user photo: ${noteData.image}`, err); + this.photoImageSprite.texture = PIXI.Texture.EMPTY; + } + // Position the user photo inside the frame. + this.photoImageSprite.width = fullWidth * 0.9; + this.photoImageSprite.height = fullHeight * 0.9; + this.photoImageSprite.position.set(fullWidth * 0.05, fullHeight * 0.05); + + // --- Identity Name and Additional Text (Futuristic) --- + const font = game.settings.get(MODULE_ID, "font"); + const baseFontSize = game.settings.get(MODULE_ID, "baseFontSize"); + const fontSize = (fullWidth / 200) * baseFontSize; + const textStyle = new PIXI.TextStyle({ + fontFamily: font, + fontSize: fontSize, + fill: "#000000", + wordWrap: true, + wordWrapWidth: fullWidth - textAreaX - margin, + align: "left", + }); + if (!this.identityNameText) { + this.identityNameText = new PIXI.Text("", textStyle); + this.addChild(this.identityNameText); + } + this.identityNameText.text = noteData.identityName || "Name"; + this.identityNameText.style = textStyle; + this.identityNameText.position.set(textAreaX, margin); + + if (!this.futuristicText) { + this.futuristicText = new PIXI.Text("", textStyle); + this.addChild(this.futuristicText); + } + this.futuristicText.text = noteData.text || ""; + this.futuristicText.style = textStyle; + this.futuristicText.position.set(textAreaX, margin + this.identityNameText.height + 5); + + // Remove default note text if present. + if (this.noteText) { + this.removeChild(this.noteText); + this.noteText.destroy(); + this.noteText = null; + } + + // --- Pin Handling (Futuristic) --- + const pinSetting = game.settings.get(MODULE_ID, "pinColor"); + if (pinSetting === "none") { + if (this.pinSprite) { + this.removeChild(this.pinSprite); + this.pinSprite.destroy(); + this.pinSprite = null; + } + } else { + if (!this.pinSprite) { + this.pinSprite = new PIXI.Sprite(); + this.addChild(this.pinSprite); + } + let pinColor = noteData.pinColor; + if (!pinColor) { + pinColor = (pinSetting === "random") + ? PIN_COLORS[Math.floor(Math.random() * PIN_COLORS.length)] + : `${pinSetting}Pin.webp`; + if (this.document.isOwner) { + await this.document.update({ [`flags.${MODULE_ID}.pinColor`]: pinColor }); + } + } + const pinImage = `modules/investigation-board/assets/${pinColor}`; + try { + this.pinSprite.texture = PIXI.Texture.from(pinImage); + } catch (err) { + console.error(`Failed to load pin texture: ${pinImage}`, err); + this.pinSprite.texture = PIXI.Texture.EMPTY; + } + this.pinSprite.width = 40; + this.pinSprite.height = 40; + this.pinSprite.position.set(fullWidth / 2 - 20, 3); + } + return; // End early for futuristic photo notes. + } + + // STANDARD LAYOUT (Modern photo notes, sticky, index, etc.) + const width = isPhoto + ? game.settings.get(MODULE_ID, "photoNoteWidth") + : isIndex + ? game.settings.get(MODULE_ID, "indexNoteWidth") || 600 + : game.settings.get(MODULE_ID, "stickyNoteWidth"); + + const height = isPhoto + ? Math.round(width / (225 / 290)) + : isIndex + ? Math.round(width / (600 / 400)) + : width; + + // Background Image based on board mode. + const getBackgroundImage = (noteType, mode) => { + if (mode === "futuristic") { + if (noteType === "photo") return "modules/investigation-board/assets/futuristic_photoFrame.webp"; + if (noteType === "index") return "modules/investigation-board/assets/futuristic_note_index.webp"; + return "modules/investigation-board/assets/futuristic_note_white.webp"; + } else if (mode === "custom") { + if (noteType === "photo") return "modules/investigation-board/assets/custom_photoFrame.webp"; + if (noteType === "index") return "modules/investigation-board/assets/custom_note_index.webp"; + return "modules/investigation-board/assets/custom_note_white.webp"; + } + // Default "modern" mode: + if (noteType === "photo") return "modules/investigation-board/assets/photoFrame.webp"; + if (noteType === "index") return "modules/investigation-board/assets/note_index.webp"; + return "modules/investigation-board/assets/note_white.webp"; + }; + const bgImage = getBackgroundImage(noteData.type, mode); + + if (!this.bgSprite) { + this.bgSprite = new PIXI.Sprite(); + this.addChild(this.bgSprite); + } + try { + this.bgSprite.texture = PIXI.Texture.from(bgImage); + } catch (err) { + console.error(`Failed to load background texture: ${bgImage}`, err); + this.bgSprite.texture = PIXI.Texture.EMPTY; + } + this.bgSprite.width = width; + this.bgSprite.height = height; + + // --- Foreground (User-Assigned) Photo for Modern Mode --- + // (This is the code missing from your current version.) + if (isPhoto) { + const fgImage = noteData.image || "modules/investigation-board/assets/placeholder.webp"; + if (!this.photoImageSprite) { + this.photoImageSprite = new PIXI.Sprite(); + this.addChild(this.photoImageSprite); + } + try { + this.photoImageSprite.texture = PIXI.Texture.from(fgImage); + } catch (err) { + console.error(`Failed to load foreground texture: ${fgImage}`, err); + this.photoImageSprite.texture = PIXI.Texture.EMPTY; + } + // Use offsets similar to your old code. + const widthOffset = width * 0.13333; + const heightOffset = height * 0.30246; + this.photoImageSprite.width = width - widthOffset; + this.photoImageSprite.height = height - heightOffset; + this.photoImageSprite.position.set(widthOffset / 2, heightOffset / 2); + this.photoImageSprite.visible = true; + } else if (this.photoImageSprite) { + this.photoImageSprite.visible = false; + } + + // --- Pin Handling (Standard) --- + { + const pinSetting = game.settings.get(MODULE_ID, "pinColor"); + if (pinSetting === "none") { + if (this.pinSprite) { + this.removeChild(this.pinSprite); + this.pinSprite.destroy(); + this.pinSprite = null; + } + } else { + if (!this.pinSprite) { + this.pinSprite = new PIXI.Sprite(); + this.addChild(this.pinSprite); + } + let pinColor = noteData.pinColor; + if (!pinColor) { + pinColor = (pinSetting === "random") + ? PIN_COLORS[Math.floor(Math.random() * PIN_COLORS.length)] + : `${pinSetting}Pin.webp`; + if (this.document.isOwner) { + await this.document.update({ [`flags.${MODULE_ID}.pinColor`]: pinColor }); + } + } + const pinImage = `modules/investigation-board/assets/${pinColor}`; + try { + this.pinSprite.texture = PIXI.Texture.from(pinImage); + } catch (err) { + console.error(`Failed to load pin texture: ${pinImage}`, err); + this.pinSprite.texture = PIXI.Texture.EMPTY; + } + this.pinSprite.width = 40; + this.pinSprite.height = 40; + this.pinSprite.position.set(width / 2 - 20, 3); + } + } + + // Default text layout for non-futuristic notes. + const font = game.settings.get(MODULE_ID, "font"); + const baseFontSize = game.settings.get(MODULE_ID, "baseFontSize"); + const fontSize = (width / 200) * baseFontSize; + const textStyle = new PIXI.TextStyle({ + fontFamily: font, + fontSize: fontSize, + fill: "#000000", + wordWrap: true, + wordWrapWidth: width - 15, + align: "center", + }); + const truncatedText = this._truncateText(noteData.text || "Default Text", font, noteData.type, fontSize); + if (!this.noteText) { + this.noteText = new PIXI.Text(truncatedText, textStyle); + this.noteText.anchor.set(0.5); + this.addChild(this.noteText); + } else { + this.noteText.style = textStyle; + this.noteText.text = truncatedText; + } + this.noteText.position.set(width / 2, isPhoto ? height - 25 : height / 2); + } + + + + + _truncateText(text, font, noteType, currentFontSize) { + const limits = getDynamicCharacterLimits(font, currentFontSize); + const charLimit = limits[noteType] || 100; + return text.length <= charLimit ? text : text.slice(0, charLimit).trim() + "..."; + } +} + + + +async function createNote(noteType) { + const scene = canvas.scene; + if (!scene) { + console.error("Cannot create note: No active scene."); + return; + } + + // Retrieve width settings (or use defaults) + const stickyW = game.settings.get(MODULE_ID, "stickyNoteWidth") || 200; + const photoW = game.settings.get(MODULE_ID, "photoNoteWidth") || 225; + const indexW = game.settings.get(MODULE_ID, "indexNoteWidth") || 600; + + const width = noteType === "photo" ? photoW + : noteType === "index" ? indexW + : stickyW; + const height = noteType === "photo" ? Math.round(photoW / (225 / 290)) + : noteType === "index" ? Math.round(indexW / (600 / 400)) + : stickyW; + + const dims = canvas.dimensions; + const x = dims.width / 2; + const y = dims.height / 2; + + // Get default text from settings (fallback if missing) + const defaultText = game.settings.get(MODULE_ID, `${noteType}NoteDefaultText`) || "Notes"; + + // Determine board mode and include identityName if note is a futuristic photo note + const boardMode = game.settings.get(MODULE_ID, "boardMode"); + const extraFlags = {}; + if (noteType === "photo" && boardMode === "futuristic") { + extraFlags.identityName = ""; + } + + await canvas.scene.createEmbeddedDocuments("Drawing", [ + { + type: "r", + author: game.user.id, + x, + y, + shape: { width, height }, + fillColor: "#ffffff", + fillAlpha: 1, + strokeColor: "transparent", + strokeAlpha: 0, + locked: false, + flags: { + [MODULE_ID]: { + type: noteType, + text: defaultText, + ...extraFlags + }, + }, + "flags.core.sheetClass": "investigation-board.CustomDrawingSheet", + "ownership": { default: 3 }, + }, + ]); + + canvas.drawings.activate(); +} + + + +Hooks.on("getSceneControlButtons", (controls) => { + const journalControls = controls.find((c) => c.name === "notes"); + if (!journalControls) return; + + journalControls.tools.push( + { name: "createStickyNote", title: "Create Sticky Note", icon: "fas fa-sticky-note", onClick: () => createNote("sticky"), button: true }, + { name: "createPhotoNote", title: "Create Photo Note", icon: "fa-solid fa-camera-polaroid", onClick: () => createNote("photo"), button: true }, + { name: "createIndexCard", title: "Create Index Card", icon: "fa-regular fa-subtitles", onClick: () => createNote("index"), button: true } + ); +}); + +Hooks.once("init", () => { + registerSettings(); + CONFIG.Drawing.objectClass = CustomDrawing; + + DocumentSheetConfig.registerSheet(DrawingDocument, "investigation-board", CustomDrawingSheet, { + label: "Note Drawing Sheet", + types: ["base"], + makeDefault: false, + }); + + console.log("Investigation Board module initialized."); +}); + + +export { CustomDrawing, CustomDrawingSheet }; diff --git a/investigation-board_v13/investigation-board/scripts/settings.js b/investigation-board_v13/investigation-board/scripts/settings.js new file mode 100644 index 0000000..f86bc65 --- /dev/null +++ b/investigation-board_v13/investigation-board/scripts/settings.js @@ -0,0 +1,167 @@ +export const MODULE_ID = "investigation-board"; + +export const registerSettings = function() { + + const refreshAllDrawings = () => { + if (canvas.drawings) { + canvas.drawings.placeables.forEach(drawing => { + if (drawing.document.flags[MODULE_ID]) { + drawing.refresh(); + } + }); + } + }; + + // Update the pinColor setting to include a "No Pins" option. + game.settings.register(MODULE_ID, "pinColor", { + name: "Pin Color", + hint: "Choose the color of the pin for notes. Selecting 'Random' will randomly assign a pin color. Select 'No Pins' to disable pin display.", + scope: "world", + config: true, + type: String, + choices: { + random: "Random", + red: "Red", + blue: "Blue", + yellow: "Yellow", + green: "Green", + none: "No Pins" + }, + default: "random", + onChange: () => { + if (canvas.drawings) { + canvas.drawings.placeables.forEach(drawing => drawing.refresh()); + } + } + }); + + // Register a new setting for board mode selection. + game.settings.register(MODULE_ID, "boardMode", { + name: "Board Mode", + hint: "Select the board mode to change the styling of notes.", + scope: "world", + config: true, + type: String, + choices: { + modern: "Modern", + futuristic: "Futuristic", + custom: "Custom" + }, + default: "modern", + onChange: () => refreshAllDrawings() + }); + + + // Register existing settings + game.settings.register(MODULE_ID, "stickyNoteWidth", { + name: "Sticky Note Width", + hint: "The width (in pixels) for all newly created sticky notes (default: 200).", + scope: "world", + config: true, + type: Number, + default: 200, + onChange: () => refreshAllDrawings() + }); + + game.settings.register(MODULE_ID, "photoNoteWidth", { + name: "Photo Note Width", + hint: "The width (in pixels) for all newly created photo notes (default: 225).", + scope: "world", + config: true, + type: Number, + default: 225, + onChange: () => refreshAllDrawings() + }); + + game.settings.register(MODULE_ID, "indexNoteWidth", { + name: "Index Note Width", + hint: "The width (in pixels) for all newly created index cards (default: 600).", + scope: "world", + config: true, + type: Number, + default: 600, + onChange: () => refreshAllDrawings() + }); + + game.settings.register(MODULE_ID, "baseFontSize", { + name: "Base Font Size", + hint: "The font size (in pixels) for text when the note width is at its default size (default: 16).", + scope: "world", + config: true, + type: Number, + default: 16, + onChange: () => refreshAllDrawings() + }); + + game.settings.register(MODULE_ID, "font", { + name: "Font", + hint: "Choose the font to be used in notes.", + scope: "world", + config: true, + type: String, + choices: { + "Rock Salt": "Rock Salt", + "Courier New": "Courier New", + "Times New Roman": "Times New Roman", + "Signika": "Signika", + "Arial": "Arial" + }, + default: "Rock Salt", + onChange: () => refreshAllDrawings() + }); + + game.settings.register(MODULE_ID, "characterNameKey", { + name: "Character Name Key", + hint: "Specify the key path to retrieve the name (e.g., 'prototypeToken.name' or 'system.alias' for Blades in the Dark). If empty, defaults to 'name'.", + scope: "world", + config: true, + default: "prototypeToken.name", + type: String, + }); + + game.settings.register(MODULE_ID, "stickyNoteDefaultText", { + name: "Default Sticky Note Text", + hint: "The default text to use for new sticky notes.", + scope: "world", + config: true, + type: String, + default: "Clue", + onChange: () => refreshAllDrawings() + }); + + game.settings.register(MODULE_ID, "photoNoteDefaultText", { + name: "Default Photo Note Text", + hint: "The default text to use for new photo notes.", + scope: "world", + config: true, + type: String, + default: "Suspect/Place", + onChange: () => refreshAllDrawings() + }); + + game.settings.register(MODULE_ID, "indexNoteDefaultText", { + name: "Default Index Note Text", + hint: "The default text to use for new index notes.", + scope: "world", + config: true, + type: String, + default: "Notes", + onChange: () => refreshAllDrawings() + }); + + // Register base font size and character limits + game.settings.register(MODULE_ID, "baseCharacterLimits", { + name: "Base Character Limits", + hint: "The base character limits for each font and note type. Edit this JSON to customize.", + scope: "world", + config: false, // Hidden from the settings UI + type: Object, + default: { + "Rock Salt": { sticky: 90, photo: 20, index: 210 }, + "Courier New": { sticky: 250, photo: 30, index: 580 }, + "Times New Roman": { sticky: 200, photo: 30, index: 800 }, + "Signika": { sticky: 200, photo: 30, index: 650 }, + "Arial": { sticky: 200, photo: 30, index: 650 } + } + }); +}; diff --git a/investigation-board_v13/investigation-board/styles/style.css b/investigation-board_v13/investigation-board/styles/style.css new file mode 100644 index 0000000..b72e4d6 --- /dev/null +++ b/investigation-board_v13/investigation-board/styles/style.css @@ -0,0 +1,134 @@ +@font-face { + font-family: 'Rock Salt'; + src: url('../assets/fonts/rock_salt.ttf') format('ttf'); + font-weight: normal; + font-style: normal; +} + +.custom-drawing-text { + font-family: 'Rock Salt', Arial, sans-serif; + color: #000000; /* Black text */ +} + +.sticky-note { + background-image: url("modules/investigation-board/assets/note_white.webp"); + width: 200px; + height: 200px; +} + +.photo-note { + background-image: url("modules/investigation-board/assets/photoFrame.webp"); + width: 250px; + height: 310px; +} + +/* EDIT FORM */ +/* +.note-config-wrapper { + position: relative; + width: 400px; + min-height: 310px; + background-repeat: no-repeat; + background-position: center; + background-size: cover; + box-shadow: 0 0 10px rgba(0,0,0,0.5); + border: none; +} + +.note-config-wrapper.sticky-mode { + background-image: url("../assets/note_white.webp"); + background-repeat: no-repeat; + background-size: contain; +} + +.note-config-wrapper.photo-mode { + background-image: url("../assets/photoFrame.webp"); + background-repeat: no-repeat; + background-size: cover; +} + +.note-config-wrapper .window-content { + background: none; + border: none; +} + +.note-config-wrapper form { + position: relative; + width: 100%; + height: 100%; + overflow: hidden; +} + +.note-type-group { + position: absolute; + top: 10px; + left: 10px; + width: 150px; +} + +.note-text-group { + position: absolute; + left: 20px; + width: 360px; +} + +.note-config-wrapper.sticky-mode .note-text-group { + top: 100px; +} + +.note-config-wrapper.photo-mode .note-text-group { + top: 220px; +} + +.note-image-group { + position: absolute; + top: 50px; + right: 20px; + width: 200px; +} + +.note-save-group { + position: absolute; + bottom: 10px; + right: 10px; +} + +.note-config-wrapper input, +.note-config-wrapper textarea, +.note-config-wrapper select { + background: rgba(255, 255, 255, 0.9); + border: 1px solid #ccc; + border-radius: 2px; + padding: 4px; + font-size: 14px; + font-family: Arial, sans-serif; +} + +.note-config-wrapper label { + font-size: 12px; + font-weight: bold; + color: #333; + margin-bottom: 3px; + display: inline-block; +} + +.file-picker-button { + margin-left: 5px; + background: #eee; + border: 1px solid #ccc; + padding: 2px 4px; + cursor: pointer; +} + +.save-button { + background: #3f51b5; + color: #fff; + border: none; + padding: 5px 10px; + cursor: pointer; + font-size: 14px; + border-radius: 2px; +} +.save-button i { + margin-right: 5px; +} */ diff --git a/investigation-board_v13/investigation-board/templates/drawing-sheet.html b/investigation-board_v13/investigation-board/templates/drawing-sheet.html new file mode 100644 index 0000000..9073631 --- /dev/null +++ b/investigation-board_v13/investigation-board/templates/drawing-sheet.html @@ -0,0 +1,37 @@ +

+
+ + +
+ + {{!-- Only show the Image Path field for photo notes --}} + {{#if (eq noteType "photo")}} +
+ +
+ + +
+
+ {{else}} + + {{/if}} + + {{!-- If boardMode is futuristic and noteType is photo, show the extra Identity Name field --}} + {{#if (eq noteType "photo")}} + {{#if (eq boardMode "futuristic")}} +
+ + +
+ {{/if}} + {{/if}} + +
+ +
+
diff --git a/wg-voidships-builder/sample_universe.json b/wg-voidships-builder/sample_universe.json deleted file mode 100644 index 8652255..0000000 --- a/wg-voidships-builder/sample_universe.json +++ /dev/null @@ -1,130 +0,0 @@ -{ - "name": "Universe-class Mass Conveyor", - "type": "vehicle", - "img": "icons/svg/ship.svg", - "folder": null, - "ownership": { "default": 0 }, - "flags": { - "core": { "sheetClass": "wg-voidships-builder.VoidshipSheet" }, - "wg-voidships-builder": { - "isVoidship": true, - "hull": { - "class": "Universe-class Mass Conveyor", - "size": "Cruiser", - "slots": { "prow": 0, "dorsal": 0, "port": 1, "starboard": 1, "keel": 0 }, - "requirements": [ - { "tag": "cargo-bay", "min": 4, "label": "Cargo Holds" }, - { "tag": "aux-plasma", "min": 1, "label": "Auxiliary Plasma Generator" } - ] - }, - "base": { "armour": 12, "integrity": 36, "manoeuvre": -1, "detection": 0, "speed": 8, "space": 60, "power": 55 }, - "crew": { "command": 1, "pilot": 1, "sensors": 1, "engineering": 2, "gunnery": 2, "security": 2, "flightDeck": 0, "passengers": 0 }, - "rtRaw": { - "mnvr": -1, - "notes": "Super-massive hauler for colony loads and crusade materiel; logistics linchpin.", - "combat": { "size": "colossal", "speed": 8, "wounds": { "value": 0, "bonus": 0, "max": 36 }, "resilience": { "bonus": 0, "total": 12 }, "defence": { "bonus": 2 }, "fly": 0 }, - "rt": { - "speed": 8, - "manoeuvrability": -10, - "detection": 0, - "armour": 12, - "hullIntegrity": 36, - "space": 60, - "power": 55, - "weapons": { "prow": 0, "dorsal": 0, "port": 1, "starboard": 1, "keel": 0 }, - "turret": 1, - "source": "Battlefleet Koronus p.31 — to verify" - }, - "source": "Battlefleet Koronus, p. 31" - } - } - }, - "system": {}, - "effects": [], - "items": [ - { - "_id": "ABCD1234EFGH5678", - "name": "Command Bridge (Civilian)", - "type": "gear", - "img": "icons/svg/book.svg", - "flags": { "wg-voidships-builder": { "component": { "kind": "bridge", "subtype": "civilian", "tags": ["bridge"] }, "voidOnly": true } }, - "system": { "voidship": { "slot": "Internal", "use": { "space": 2, "power": 2 }, "mods": { "armour": 0, "integrity": 0, "manoeuvre": 1, "detection": 1, "speed": 0, "space": 0, "power": 0 } } } - }, - { - "_id": "IJKL9012MNOP3456", - "name": "Gellar Field Projector", - "type": "gear", - "img": "icons/svg/temple.svg", - "flags": { "wg-voidships-builder": { "component": { "kind": "gellar", "subtype": "standard", "tags": ["gellar"] }, "voidOnly": true } }, - "system": { "voidship": { "slot": "Internal", "use": { "space": 2, "power": 3 }, "mods": { "armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0 } } } - }, - { - "_id": "QRST7890UVWX1234", - "name": "Miloslav Warp Drive (Civilian)", - "type": "gear", - "img": "icons/svg/wing.svg", - "flags": { "wg-voidships-builder": { "component": { "kind": "drive", "subtype": "warp", "tags": ["drive", "warp"] }, "voidOnly": true } }, - "system": { "voidship": { "slot": "Internal", "use": { "space": 3, "power": 6 }, "mods": { "armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 0 } } } - }, - { - "_id": "YZAB5678CDEF9012", - "name": "Augur Array (Civilian)", - "type": "gear", - "img": "icons/svg/mystery-man.svg", - "flags": { "wg-voidships-builder": { "component": { "kind": "sensor", "subtype": "augur", "tags": ["sensor", "auspex"] }, "voidOnly": true } }, - "system": { "voidship": { "slot": "Aetherics", "use": { "space": 1, "power": 2 }, "mods": { "armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 2, "speed": 0, "space": 0, "power": 0 } } } - }, - { - "_id": "GHIJ3456KLMN7890", - "name": "Reinforced Hull Plating", - "type": "gear", - "img": "icons/svg/armor.svg", - "flags": { "wg-voidships-builder": { "component": { "kind": "armour", "subtype": "plating", "tags": ["hull", "armour"] }, "voidOnly": true } }, - "system": { "voidship": { "slot": "Internal", "use": { "space": 1, "power": 0 }, "mods": { "armour": 2, "integrity": 4, "manoeuvre": -1, "detection": 0, "speed": 0, "space": 0, "power": 0 } } } - }, - { - "_id": "PQRS9012TUVW3456", - "name": "Cargo Hold & Lighter Bay", - "type": "gear", - "img": "icons/svg/crate.svg", - "flags": { "wg-voidships-builder": { "component": { "kind": "cargo-bay", "subtype": "standard", "tags": ["cargo-bay", "hold"] }, "voidOnly": true } }, - "system": { "voidship": { "slot": "Internal", "use": { "space": -5, "power": 1 }, "mods": { "armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": -5, "power": 0 } } } - }, - { - "_id": "WXYZ1234ABCD5678", - "name": "Cargo Hold & Lighter Bay", - "type": "gear", - "img": "icons/svg/crate.svg", - "flags": { "wg-voidships-builder": { "component": { "kind": "cargo-bay", "subtype": "standard", "tags": ["cargo-bay", "hold"] }, "voidOnly": true } }, - "system": { "voidship": { "slot": "Internal", "use": { "space": -5, "power": 1 }, "mods": { "armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": -5, "power": 0 } } } - }, - { - "_id": "EFGH9012IJKL3456", - "name": "Cargo Hold & Lighter Bay", - "type": "gear", - "img": "icons/svg/crate.svg", - "flags": { "wg-voidships-builder": { "component": { "kind": "cargo-bay", "subtype": "standard", "tags": ["cargo-bay", "hold"] }, "voidOnly": true } }, - "system": { "voidship": { "slot": "Internal", "use": { "space": -5, "power": 1 }, "mods": { "armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": -5, "power": 0 } } } - }, - { - "_id": "MNOP5678QRST9012", - "name": "Cargo Hold & Lighter Bay", - "type": "gear", - "img": "icons/svg/crate.svg", - "flags": { "wg-voidships-builder": { "component": { "kind": "cargo-bay", "subtype": "standard", "tags": ["cargo-bay", "hold"] }, "voidOnly": true } }, - "system": { "voidship": { "slot": "Internal", "use": { "space": -5, "power": 1 }, "mods": { "armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": -5, "power": 0 } } } - }, - { - "_id": "UVWX3456YZAB7890", - "name": "Auxiliary Plasma Generator", - "type": "gear", - "img": "icons/svg/energy.svg", - "flags": { "wg-voidships-builder": { "component": { "kind": "plasma", "subtype": "aux-generator", "tags": ["aux-plasma"] }, "voidOnly": true } }, - "system": { "voidship": { "slot": "Internal", "use": { "space": 2, "power": -6 }, "mods": { "armour": 0, "integrity": 0, "manoeuvre": 0, "detection": 0, "speed": 0, "space": 0, "power": 6 } } } - } - ], - "prototypeToken": { "name": "Universe-class Mass Conveyor", "actorLink": true, "texture": { "src": "icons/svg/ship.svg" }, "disposition": 1, "displayName": 0 }, - "_id": "6836e238cce8d9fc", - "systemId": "wrath-and-glory", - "systemVersion": "7.1.1" -}