Compare commits
11 Commits
e10a3cfa72
...
73ff7da0ca
Author | SHA1 | Date |
---|---|---|
Jaka Perovšek | 73ff7da0ca | |
Jaka Perovšek | 5d4d2288c4 | |
Jaka Perovšek | 10cead2dd3 | |
Jaka Perovšek | 058e0b6214 | |
Jaka Perovšek | a5f586f1be | |
Jaka Perovšek | a1d5c81a06 | |
Jaka Perovšek | 6f99bb7c2e | |
Jaka Perovšek | 8a11f2ef15 | |
Jaka Perovšek | 3f3ada8d56 | |
Jaka Perovšek | ee7adf0f63 | |
Jaka Perovšek | 02d25f8cd9 |
44
deploy.py
|
@ -9,6 +9,7 @@ import sys
|
|||
import time
|
||||
import logging
|
||||
import certifi
|
||||
import math
|
||||
from PIL import Image
|
||||
from mutagen.oggvorbis import OggVorbis
|
||||
from distutils.dir_util import copy_tree
|
||||
|
@ -127,27 +128,40 @@ def fetch_and_cut_song(tape, ffmpeg_version):
|
|||
"or download the latest release version manually.")
|
||||
sys.exit()
|
||||
|
||||
walkman = ["./utils/ffmpeg-" + ffmpeg_version + "-full_build/bin/ffmpeg.exe",
|
||||
"-i", f"./build/music/{tape['identifier']}.ogg",
|
||||
"-af", f"highpass=f=300,lowpass=f=12000",
|
||||
f"./build/music/{tape['identifier']}-walkman.ogg"]
|
||||
|
||||
try:
|
||||
subprocess.call(walkman)
|
||||
except FileNotFoundError:
|
||||
print("ffmpeg not in utils directory. Run python install_dependencies.py "
|
||||
"or download the latest release version manually.")
|
||||
sys.exit()
|
||||
|
||||
|
||||
def assemble_png_image(tapes, icons=False):
|
||||
if icons:
|
||||
img_names = [f"./source/images/{tape['identifier']}_icon.png" for tape in tapes]
|
||||
images = [Image.open("./source/images/boombox_icon.png")]
|
||||
else:
|
||||
img_names = [f"./source/images/{tape['identifier']}.png" for tape in tapes]
|
||||
images = []
|
||||
|
||||
images += [Image.open(x) for x in img_names]
|
||||
images = [Image.open(x) for x in img_names]
|
||||
widths, heights = zip(*(i.size for i in images))
|
||||
|
||||
total_width = max(widths)
|
||||
max_height = sum(heights)
|
||||
columns = int((len(images))**0.5)
|
||||
rows = int(math.ceil(len(images) / columns))
|
||||
|
||||
total_width = max(widths) * columns
|
||||
max_height = max(heights) * rows
|
||||
|
||||
new_im = Image.new('RGBA', (total_width, max_height))
|
||||
|
||||
y_offset = 0
|
||||
for im in images:
|
||||
new_im.paste(im, (0, y_offset))
|
||||
y_offset += im.size[1]
|
||||
for i, im in enumerate(images):
|
||||
x_offset = max(widths) * (i % columns)
|
||||
y_offset = max(heights) * math.floor(i / columns)
|
||||
new_im.paste(im, (x_offset, y_offset))
|
||||
|
||||
if icons:
|
||||
new_im.save("./build/icons.png")
|
||||
|
@ -167,7 +181,7 @@ def prepare_music(data):
|
|||
|
||||
logging.info("downloading and cutting the songs")
|
||||
for i, tape in enumerate(data):
|
||||
if not os.path.exists(f"./build/music/{tape['identifier']}.ogg"):
|
||||
if not (os.path.exists(f"./build/music/{tape['identifier']}.ogg") or os.path.exists(f"./build/music/{tape['identifier']}-walkman.ogg")):
|
||||
logging.info(f"{i + 1}/{len(data)} Downloading: {tape['name']}")
|
||||
fetch_and_cut_song(tape, ffmpeg_version)
|
||||
else:
|
||||
|
@ -187,6 +201,7 @@ def prepare_images(data, config):
|
|||
|
||||
logging.info(f"copying other images")
|
||||
shutil.copy("./source/images/boombox.png", "./build/boombox.png")
|
||||
shutil.copy("./source/images/boombox_icon.png", "./build/boombox_icon.png")
|
||||
shutil.copy("./source/images/PreviewImage.png", "./build/PreviewImage.png")
|
||||
|
||||
|
||||
|
@ -201,6 +216,9 @@ def build_xml_code(data, config):
|
|||
condition_delta = [f"{1 / use_length:0.5f}" for use_length in use_lengths]
|
||||
affliction_delta = [100 / song_length for song_length in song_lengths]
|
||||
|
||||
columns = int((len(data))**0.5)
|
||||
positions = [{"column": i % columns, "row": math.floor(i / columns)} for i in range(len(data))]
|
||||
|
||||
logging.info(f"creating jinja environment")
|
||||
# create jinja2 environment
|
||||
j2env = j2.Environment(loader=j2.FileSystemLoader(Path(".")))
|
||||
|
@ -224,11 +242,13 @@ def build_xml_code(data, config):
|
|||
# render the template
|
||||
output_file.write(template1.render(tapes=data, config=config,
|
||||
condition_delta=condition_delta,
|
||||
affliction_delta=affliction_delta))
|
||||
affliction_delta=affliction_delta,
|
||||
song_lengths=song_lengths,
|
||||
positions=positions))
|
||||
|
||||
with open(f"./build/{config['slug']}_style.xml", "w+", encoding="utf8") as output_file:
|
||||
# render the template
|
||||
output_file.write(template2.render(tapes=data, config=config))
|
||||
output_file.write(template2.render(tapes=data, config=config, positions=positions))
|
||||
|
||||
|
||||
def deploy(config):
|
||||
|
|
|
@ -5,8 +5,10 @@
|
|||
<UIStyle file="Mods/{{ config['name'] }}/{{ config['slug'] }}_style.xml" />
|
||||
<None file="Mods/{{ config['name'] }}/icons.png" />
|
||||
<None file="Mods/{{ config['name'] }}/covers.png" />
|
||||
<None file="Mods/{{ config['name'] }}/boombox.png" />{% for tape in tapes %}
|
||||
<None file="Mods/{{ config['name'] }}/music/{{ tape["identifier"] }}.ogg" />{% endfor %}
|
||||
<None file="Mods/{{ config['name'] }}/boombox.png" />
|
||||
<None file="Mods/{{ config['name'] }}/boombox_icon.png" />{% for tape in tapes %}
|
||||
<None file="Mods/{{ config['name'] }}/music/{{ tape["identifier"] }}.ogg" />
|
||||
<None file="Mods/{{ config['name'] }}/music/{{ tape["identifier"] }}-walkman.ogg" />{% endfor %}
|
||||
<None file="Mods/{{ config['name'] }}/sound_effects/boombox_insert_cassette.ogg" />
|
||||
<None file="Mods/{{ config['name'] }}/sound_effects/boombox_play_cassette.ogg" />
|
||||
<None file="Mods/{{ config['name'] }}/sound_effects/cassette_drop.ogg" />
|
||||
|
|
After Width: | Height: | Size: 249 KiB |
After Width: | Height: | Size: 6.1 KiB |
After Width: | Height: | Size: 240 KiB |
After Width: | Height: | Size: 5.2 KiB |
After Width: | Height: | Size: 300 KiB |
After Width: | Height: | Size: 6.6 KiB |
After Width: | Height: | Size: 177 KiB |
After Width: | Height: | Size: 5.2 KiB |
After Width: | Height: | Size: 163 KiB |
After Width: | Height: | Size: 4.8 KiB |
After Width: | Height: | Size: 234 KiB |
After Width: | Height: | Size: 5.6 KiB |
After Width: | Height: | Size: 203 KiB |
After Width: | Height: | Size: 5.4 KiB |
After Width: | Height: | Size: 170 KiB |
After Width: | Height: | Size: 5.1 KiB |
After Width: | Height: | Size: 287 KiB |
After Width: | Height: | Size: 6.2 KiB |
After Width: | Height: | Size: 215 KiB |
After Width: | Height: | Size: 6.0 KiB |
After Width: | Height: | Size: 286 KiB |
After Width: | Height: | Size: 5.8 KiB |
After Width: | Height: | Size: 279 KiB |
After Width: | Height: | Size: 6.1 KiB |
After Width: | Height: | Size: 342 KiB |
After Width: | Height: | Size: 6.7 KiB |
After Width: | Height: | Size: 302 KiB |
After Width: | Height: | Size: 6.5 KiB |
After Width: | Height: | Size: 274 KiB |
After Width: | Height: | Size: 6.2 KiB |
|
@ -198,7 +198,7 @@
|
|||
</TitleText>
|
||||
{% for tape in tapes %}
|
||||
<{{ config['slug'] }}_cover_{{ tape.identifier }} color="255,255,255,255" textcolor="0,0,0,255">
|
||||
<Sprite name="{{ config['slug'] }}_cover_{{ tape.identifier }}" texture="Mods/{{ config['name'] }}/covers.png" size="0.0, 0.0" sourcerect="0,{{ loop.index0*328 }},512,328" origin="0.5,0.5" compress="false" tile="false"/>
|
||||
<Sprite name="{{ config['slug'] }}_cover_{{ tape.identifier }}" texture="Mods/{{ config['name'] }}/covers.png" size="0.0, 0.0" sourcerect="{{ 512 * positions[loop.index0]['column'] }},{{ 328 * positions[loop.index0]['row'] }},512,328" origin="0.5,0.5" compress="false" tile="false"/>
|
||||
</{{ config['slug'] }}_cover_{{ tape.identifier }}>{% endfor %}
|
||||
|
||||
<ita_document1 color="255,255,255,255" textcolor="0,0,0,255">
|
||||
|
|
|
@ -200,7 +200,7 @@
|
|||
</TitleText>
|
||||
{% for tape in tapes %}
|
||||
<{{ config['slug'] }}_cover_{{ tape.identifier }} color="255,255,255,255" textcolor="0,0,0,255">
|
||||
<Sprite name="{{ config['slug'] }}_cover_{{ tape.identifier }}" texture="Mods/{{ config['name'] }}/covers.png" size="0.0, 0.0" sourcerect="0,{{ loop.index0*328 }},512,328" origin="0.5,0.5" compress="false" tile="false"/>
|
||||
<Sprite name="{{ config['slug'] }}_cover_{{ tape.identifier }}" texture="Mods/{{ config['name'] }}/covers.png" size="0.0, 0.0" sourcerect="{{ 512 * positions[loop.index0]['column'] }},{{ 328 * positions[loop.index0]['row'] }},512,328" origin="0.5,0.5" compress="false" tile="false"/>
|
||||
</{{ config['slug'] }}_cover_{{ tape.identifier }}>{% endfor %}
|
||||
<InnerGlow color="255,255,255,204" hovercolor="255,255,255,204" selectedcolor="255,255,255,204">
|
||||
<Sprite texture="Content/UI/InnerGlow.png" sourcerect="0,0,512,384" slice="128,128,384,256" />
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
{% if config['slug'] != "sunken_tapes" %}<!--This mod is based on Sunken Tapes. See https://git.kompot.si/jaka/barotrauma-sunken-tapes and https://steamcommunity.com/sharedfiles/filedetails/?id=2616577901 for the source material and code generator.-->{% else %}<!--Code licensed under GPLv3 and generated with a script available at https://git.kompot.si/jaka/barotrauma-sunken-tapes-->{% endif %}
|
||||
<Items>
|
||||
<Item name="Boombox" cargocontaineridentifier="metalcrate" identifier="{% if config['slug'] != "sunken_tapes" %}{{ config["slug"] }}-{% endif %}boombox" category="Equipment" Tags="mediumitem,boombox" scale="0.5" description="" price="850" impactsoundtag="impact_metal_light" isshootable="true">
|
||||
<Item name="Boombox" cargocontaineridentifier="metalcrate" identifier="{% if config['slug'] != "sunken_tapes" %}{{ config["slug"] }}-{% endif %}boombox" category="Equipment" Tags="mediumitem,boombox,sunken-tapes-player" scale="0.5" description="" price="850" impactsoundtag="impact_metal_light" isshootable="true" HideConditionBar="true">
|
||||
<PreferredContainer primary="abandonedcrewcab" spawnprobability="0.1"/>
|
||||
<PreferredContainer primary="outpostcrewcabinet" spawnprobability="0.1"/>
|
||||
<Price baseprice="500" soldeverywhere="false">
|
||||
|
@ -11,52 +11,44 @@
|
|||
<Price locationtype="military" multiplier="1.5" sold="false"/>
|
||||
<Price locationtype="mine" multiplier="1.5" sold="false"/>
|
||||
</Price>
|
||||
<Deconstruct time="20">
|
||||
<Item identifier="aluminium" />
|
||||
<Item identifier="copper" />
|
||||
</Deconstruct>
|
||||
<Fabricate suitablefabricators="fabricator" requiredtime="45">
|
||||
<RequiredSkill identifier="mechanical" level="45" />
|
||||
<RequiredSkill identifier="electrical" level="55" />
|
||||
<RequiredItem identifier="aluminium" />
|
||||
<RequiredItem identifier="copper" />
|
||||
<RequiredItem identifier="plastic" />
|
||||
<RequiredItem identifier="fpgacircuit" />
|
||||
</Fabricate>
|
||||
<Upgrade gameversion="0.9.2.0" scale="0.5" />
|
||||
<InventoryIcon texture="Mods/{{ config['name'] }}/icons.png" sourcerect="0,0,64,64" origin="0.5,0.5" />
|
||||
<InventoryIcon texture="Mods/{{ config['name'] }}/boombox_icon.png" sourcerect="0,0,64,64" origin="0.5,0.5" />
|
||||
<Sprite texture="Mods/{{ config['name'] }}/boombox.png" sourcerect="0,0,100,60" depth="0.55" origin="0.5,0.5" />
|
||||
<Body width="100" height="60" />
|
||||
<LightComponent LightColor="0.78,0.04,0.235,0.59" range="10" powerconsumption="0" blinkfrequency="1" IsOn="false" canbeselected="false">
|
||||
<LightComponent LightColor="0.0,0.85,0.0,0.7" range="4" powerconsumption="0" blinkfrequency="0" IsOn="false" canbeselected="false">
|
||||
</LightComponent>
|
||||
<CustomInterface canbeselected="true" drawhudwhenequipped="true" allowuioverlap="true">
|
||||
<GuiFrame relativesize="0.10,0.07" anchor="CenterLeft" pivot="BottomLeft" relativeoffset="0.006,-0.05" style="ItemUI" />
|
||||
<TickBox text="Play">
|
||||
<StatusEffect type="OnUse" targettype="This" IsOn="true">
|
||||
<Conditional IsOn="false" />
|
||||
<sound file="Mods/{{ config['name'] }}/sound_effects/boombox_play_cassette.ogg" type="OnUse" range="500" volume="1.0" />
|
||||
<sound file="Mods/{{ config['name'] }}/sound_effects/boombox_play_cassette.ogg" type="OnUse" range="300" volume="1.0" />
|
||||
</StatusEffect>
|
||||
<!--StatusEffect type="OnUse" targettype="Contained" comparison="And">
|
||||
<Conditional condition="lte 50.0" />
|
||||
<Conditional condition="gt 25.0" />
|
||||
<RequiredItem items="cassette" type="Contained" />
|
||||
<sound file="Content/Sounds/FireSmall.ogg" type="OnUse" range="1000" loop="true" volume="1.0" />
|
||||
</StatusEffect>
|
||||
<StatusEffect type="OnUse" targettype="Contained" comparison="And">
|
||||
<Conditional condition="lte 25.0" />
|
||||
<Conditional condition="gt 10.0" />
|
||||
<RequiredItem items="cassette" type="Contained" />
|
||||
<sound file="Content/Sounds/FireSmall.ogg" type="OnUse" range="1000" loop="true" volume="1.0" />
|
||||
</StatusEffect>
|
||||
<StatusEffect type="OnUse" targettype="Contained">
|
||||
<Conditional condition="lte 10.0" />
|
||||
<RequiredItem items="cassette" type="Contained" />
|
||||
<sound file="Content/Sounds/FireSmall.ogg" type="OnUse" range="1000" loop="true" volume="1.0" />
|
||||
</StatusEffect-->
|
||||
{% for tape in tapes %}
|
||||
<StatusEffect type="OnUse" targettype="Contained" condition="-{{ condition_delta[loop.index0] }}">
|
||||
<RequiredItem items="{% if config['slug'] != "sunken_tapes" %}{{ config["slug"] }}-{% endif %}cassette-{{ tape.identifier }}" type="Contained" />
|
||||
<SpawnItem identifiers="{% if config['slug'] != "sunken_tapes" %}{{ config["slug"] }}-{% endif %}song-{{ tape.identifier }}" spawnposition="ContainedInventory" />
|
||||
</StatusEffect>{% endfor %}
|
||||
|
||||
<StatusEffect type="OnSecondaryUse" targettype="This" IsOn="false" >
|
||||
<Conditional IsOn="true" />
|
||||
<sound file="Mods/{{ config['name'] }}/sound_effects/boombox_play_cassette.ogg" type="OnUse" range="500" volume="1.0" />
|
||||
<sound file="Mods/{{ config['name'] }}/sound_effects/boombox_play_cassette.ogg" type="OnUse" range="300" volume="1.0" />
|
||||
<Use />
|
||||
</StatusEffect>
|
||||
</TickBox>
|
||||
</CustomInterface>
|
||||
<Holdable slots="RightHand,LeftHand" selectkey="Use" pickkey="Select" attachable="false" aimable="false" holdpos="5,-65" holdangle="0" aimpos="5,30" handle1="0,30" handle2="0,30" swingamount="20,5" swingspeed="0.5" swingwhenusing="true" msg="ItemMsgPickUpUse">
|
||||
<Holdable slots="RightHand,LeftHand" aimable="false" holdpos="5,-65" holdangle="0" aimpos="5,30" handle1="0,30" handle2="0,30" swingamount="25,7" swingspeed="0.5" swingwhenusing="true" msg="ItemMsgPickupSelect">
|
||||
<StatusEffect type="OnBroken" target="This">
|
||||
<Remove />
|
||||
</StatusEffect>
|
||||
</Holdable>
|
||||
<ItemContainer hideitems="true" drawinventory="true" capacity="1" maxstacksize="1" slotsperrow="6" itempos="0,0" iteminterval="0,0" itemrotation="0" canbeselected="false" containedspritedepth="0.79">
|
||||
<ItemContainer hideitems="true" drawinventory="true" capacity="1" maxstacksize="1" slotsperrow="6" itempos="0,0" iteminterval="0,0" itemrotation="0" canbeselected="false" containedspritedepth="0.79" >
|
||||
<StatusEffect type="OnUse" targettype="Contained" >
|
||||
<Use />
|
||||
</StatusEffect>
|
||||
|
@ -65,69 +57,107 @@
|
|||
</ItemContainer>
|
||||
</Item>
|
||||
|
||||
<!-- tape box -->
|
||||
|
||||
<Item name="Cassette Tape Box" identifier="{% if config['slug'] != "sunken_tapes" %}{{ config["slug"] }}-{% endif %}cassette-tape-box" category="Equipment" tags="smallitem,mobilecontainer,tool" cargocontaineridentifier="" showcontentsintooltip="true" Scale="0.5" fireproof="true" description="" impactsoundtag="impact_metal_heavy">
|
||||
<PreferredContainer secondary="wreckstoragecab" spawnprobability="0.06"/>
|
||||
<PreferredContainer primary="outpostcrewcabinet" minamount="0" maxamount="1" spawnprobability="0.2"/>
|
||||
<Deconstruct time="10">
|
||||
<Item identifier="steel" />
|
||||
</Deconstruct>
|
||||
<Fabricate suitablefabricators="fabricator" requiredtime="20">
|
||||
<RequiredSkill identifier="mechanical" level="20" />
|
||||
<Item identifier="steel" />
|
||||
</Fabricate>
|
||||
<Price baseprice="75" >
|
||||
<Item name="Walkman" cargocontaineridentifier="metalcrate" identifier="{% if config['slug'] != "sunken_tapes" %}{{ config["slug"] }}-{% endif %}walkman" category="Equipment" Tags="smallitem,walkman,sunken-tapes-player" scale="0.5" description="" price="450" impactsoundtag="impact_metal_light" isshootable="true" HideConditionBar="true">
|
||||
<PreferredContainer primary="abandonedcrewcab" spawnprobability="0.1"/>
|
||||
<PreferredContainer primary="outpostcrewcabinet" spawnprobability="0.1"/>
|
||||
<Price baseprice="450" soldeverywhere="false">
|
||||
<Price locationtype="outpost" multiplier="1" minavailable="1" />
|
||||
<Price locationtype="city" multiplier="0.9" minavailable="1" />
|
||||
<Price locationtype="research" multiplier="1.25" minavailable="1" />
|
||||
<Price locationtype="military" multiplier="1.25" minavailable="1" />
|
||||
<Price locationtype="mine" multiplier="1.25" minavailable="1" />
|
||||
<Price locationtype="city" multiplier="0.7" minavailable="1"/>
|
||||
<Price locationtype="research" multiplier="1.5" sold="false"/>
|
||||
<Price locationtype="military" multiplier="1.5" sold="false"/>
|
||||
<Price locationtype="mine" multiplier="1.5" sold="false"/>
|
||||
</Price>
|
||||
<InventoryIcon texture="Content/Items/InventoryIconAtlas.png" sourcerect="640,256,64,64" origin="0.5,0.6" />
|
||||
<Sprite texture="Content/Items/Tools/tools.png" sourcerect="314,1,94,74" origin="0.5,0.5" />
|
||||
<Body width="90" height="60" density="20" />
|
||||
<MeleeWeapon slots="RightHand,LeftHand,Any" controlpose="true" aimpos="45,10" handle1="0,10" handle2="0,10" holdangle="90" reload="1" range="50" combatpriority="6" msg="ItemMsgPickUpSelect">
|
||||
<Attack structuredamage="10" itemdamage="5" stun="0.6" targetimpulse="2">
|
||||
<Affliction identifier="blunttrauma" strength="2" />
|
||||
<Sound file="Content/Items/Weapons/Smack2.ogg" range="800" />
|
||||
</Attack>
|
||||
</MeleeWeapon>
|
||||
<ItemContainer capacity="24" keepopenwhenequipped="true" movableframe="true">
|
||||
<Containable items="cassette" />
|
||||
<Deconstruct time="20">
|
||||
</Deconstruct>
|
||||
<Fabricate suitablefabricators="fabricator" requiredtime="45">
|
||||
<RequiredSkill identifier="mechanical" level="45" />
|
||||
<RequiredSkill identifier="electrical" level="55" />
|
||||
<RequiredItem identifier="aluminium" />
|
||||
<RequiredItem identifier="copper" />
|
||||
<RequiredItem identifier="plastic" />
|
||||
<RequiredItem identifier="fpgacircuit" />
|
||||
</Fabricate>
|
||||
<Upgrade gameversion="0.9.2.0" scale="0.5" />
|
||||
<InventoryIcon texture="Mods/{{ config['name'] }}/boombox_icon.png" sourcerect="0,0,64,64" origin="0.5,0.5" />
|
||||
<Sprite texture="Mods/{{ config['name'] }}/boombox.png" sourcerect="0,0,100,60" depth="0.55" origin="0.5,0.5" />
|
||||
<Body width="100" height="60" />
|
||||
<LightComponent LightColor="0.0,0.85,0.0,0.7" range="4" powerconsumption="0" blinkfrequency="0" IsOn="false" canbeselected="false">
|
||||
</LightComponent>
|
||||
<CustomInterface canbeselected="true" drawhudwhenequipped="true" allowuioverlap="true">
|
||||
<GuiFrame relativesize="0.10,0.07" anchor="CenterLeft" pivot="BottomLeft" relativeoffset="0.006,-0.05" style="ItemUI" />
|
||||
<TickBox text="Play">
|
||||
<StatusEffect type="OnUse" targettype="This" IsOn="true">
|
||||
<Conditional IsOn="false" />
|
||||
<sound file="Mods/{{ config['name'] }}/sound_effects/boombox_play_cassette.ogg" type="OnUse" range="300" volume="1.0" />
|
||||
</StatusEffect>
|
||||
<StatusEffect type="OnSecondaryUse" targettype="This" IsOn="false" >
|
||||
<Conditional IsOn="true" />
|
||||
<sound file="Mods/{{ config['name'] }}/sound_effects/boombox_play_cassette.ogg" type="OnUse" range="300" volume="1.0" />
|
||||
<Use />
|
||||
</StatusEffect>
|
||||
</TickBox>
|
||||
</CustomInterface>
|
||||
<Holdable slots="RightHand,LeftHand,Any" holdpos="5,-65" holdangle="0" aimpos="5,-65" handle1="0,30" handle2="0,30" swingamount="25,8" swingspeed="0.5" swingwhenusing="true" msg="ItemMsgPickupSelect">
|
||||
<StatusEffect type="OnBroken" target="This">
|
||||
<Remove />
|
||||
</StatusEffect>
|
||||
</Holdable>
|
||||
<ItemContainer hideitems="true" drawinventory="true" capacity="1" maxstacksize="1" slotsperrow="6" itempos="0,0" iteminterval="0,0" itemrotation="0" canbeselected="false" containedspritedepth="0.79" >
|
||||
<StatusEffect type="OnUse" targettype="Contained" >
|
||||
<Use />
|
||||
</StatusEffect>
|
||||
<Containable items="cassette">
|
||||
</Containable>
|
||||
</ItemContainer>
|
||||
<aitarget sightrange="1000" soundrange="1000" fadeouttime="2" />
|
||||
<Upgrade gameversion="0.10.0.0" scale="0.5" />
|
||||
</Item>
|
||||
|
||||
<!-- Cassette Tapes -->
|
||||
|
||||
{% for tape in tapes %}
|
||||
<Item name="Tape: {{ tape.name }}" identifier="{% if config['slug'] != "sunken_tapes" %}{{ config["slug"] }}-{% endif %}cassette-{{ tape.identifier }}" category="Equipment" maxstacksize="8" Tags="smallitem,cassette" cargocontaineridentifier="metalcrate" scale="0.5" isshootable="true" impacttolerance="1.3">
|
||||
<Item name="Tape: {{ tape.name }}" identifier="{% if config['slug'] != "sunken_tapes" %}{{ config["slug"] }}-{% endif %}cassette-{{ tape.identifier }}" category="Equipment" maxstacksize="8" Tags="smallitem,cassette" cargocontaineridentifier="metalcrate" scale="0.5" isshootable="true" impacttolerance="1.3" >
|
||||
<PreferredContainer primary="abandonedcrewcab" spawnprobability="0.05"/>
|
||||
<PreferredContainer primary="outpostcrewcabinet" minamount="0" maxamount="1" spawnprobability="0.05"/>
|
||||
<Price baseprice="{{ tape.price }}" soldeverywhere="false">{% for location in ["outpost", "city", "research", "military", "mine"] %}
|
||||
<Price locationtype="{{ location }}" multiplier="{{ tape.multipliers[loop.index0] }}" sold="{{ tape.sold[loop.index0] }}" minavailable="1" />{% endfor %}
|
||||
</Price>
|
||||
<InventoryIcon texture="Mods/{{ config['name'] }}/icons.png" sourcerect="0,{{ loop.index0*41 + 64 }},64,41" origin="0.5,0.5" />
|
||||
<Sprite texture="Mods/{{ config['name'] }}/icons.png" sourcerect="0,{{ loop.index0*41 + 64 }},64,41" depth="0.6" origin="0.5,0.5" />
|
||||
<Deconstruct time="10">
|
||||
</Deconstruct>
|
||||
<Fabricate suitablefabricators="fabricator" displayname="recycleitem" requiredtime="{{ song_lengths[loop.index0]*0.5 }}">
|
||||
<RequiredSkill identifier="mechanical" level="25" />
|
||||
<RequiredSkill identifier="electrical" level="45" />
|
||||
<RequiredItem identifier="{% if config['slug'] != "sunken_tapes" %}{{ config["slug"] }}-{% endif %}cassette-{{ tape.identifier }}" mincondition="0.25" usecondition="true"/>
|
||||
<RequiredItem identifier="{% if config['slug'] != "sunken_tapes" %}{{ config["slug"] }}-{% endif %}cassette-blank" />
|
||||
<RequiredItem identifier="fpgacircuit" />
|
||||
</Fabricate>
|
||||
<InventoryIcon texture="Mods/{{ config['name'] }}/icons.png" sourcerect="{{ 64 * positions[loop.index0]['column'] }},{{ 41 * positions[loop.index0]['row'] }},64,41" origin="0.5,0.5" />
|
||||
<Sprite texture="Mods/{{ config['name'] }}/icons.png" sourcerect="{{ 64 * positions[loop.index0]['column'] }},{{ 41 * positions[loop.index0]['row'] }},64,41" depth="0.6" origin="0.5,0.5" />
|
||||
<Body width="48" height="48" />
|
||||
<Throwable slots="Any,RightHand,LeftHand" holdpos="0,0" handle1="0,0" throwforce="4.0" aimpos="35,-10" msg="ItemMsgPickUpSelect">
|
||||
<Throwable slots="Any,RightHand,LeftHand" holdpos="5,-65" holdangle="0" handle1="0,1" throwforce="4.0" aimpos="35,-10" msg="Aim to throw">
|
||||
<StatusEffect type="OnImpact" target="This" Condition="-5.0" disabledeltatime="true">
|
||||
<sound file="Mods/{{ config['name'] }}/sound_effects/cassette_drop.ogg" range="500" volume="1.0" />
|
||||
</StatusEffect>
|
||||
</Throwable>
|
||||
<CustomInterface canbeselected="false" drawhudwhenequipped="true" allowuioverlap="true">
|
||||
<CustomInterface canbeselected="true" drawhudwhenequipped="true" allowuioverlap="true" msg="Equip to inspect">
|
||||
<GuiFrame relativesize="{{ 512.0 / config['resolution_x'] }},{{ 328.0 / config['resolution_y'] }}" anchor="CenterRight" pivot="CenterRight" style="{{ config['slug'] }}_cover_{{ tape.identifier }}" />
|
||||
</CustomInterface>
|
||||
<ItemContainer hideitems="true" capacity="1" drawinventory="false" canbeselected="false" canbecombined="true" removecontaineditemsondeconstruct="true">
|
||||
<ItemContainer hideitems="true" capacity="1" drawinventory="false" canbeselected="false" canbecombined="true" removecontaineditemsondeconstruct="true" showcontainedstateindicator="false">
|
||||
<StatusEffect type="OnNotContained" targettype="Contained">
|
||||
<Use />
|
||||
</StatusEffect>
|
||||
<StatusEffect type="OnContained" targettype="This">
|
||||
<Conditional hastag="!eq boombox" targetcontainer="true" />
|
||||
<Conditional hastag="!eq sunken-tapes-player" targetcontainer="true" />
|
||||
<Use />
|
||||
</StatusEffect>
|
||||
<StatusEffect type="OnContained" targettype="This" comparison="And">
|
||||
<Conditional hastag="boombox" targetcontainer="true" />
|
||||
<Conditional IsOn="true" targetcontainer="true" />
|
||||
<SpawnItem identifiers="{% if config['slug'] != "sunken_tapes" %}{{ config["slug"] }}-{% endif %}song-{{ tape.identifier }}" spawnposition="ThisInventory" />
|
||||
</StatusEffect>
|
||||
<StatusEffect type="OnContained" targettype="This" comparison="And">
|
||||
<Conditional hastag="walkman" targetcontainer="true" />
|
||||
<Conditional IsOn="true" targetcontainer="true" />
|
||||
<SpawnItem identifiers="{% if config['slug'] != "sunken_tapes" %}{{ config["slug"] }}-{% endif %}song-walkman-{{ tape.identifier }}" spawnposition="ThisInventory" />
|
||||
</StatusEffect>
|
||||
<StatusEffect type="OnUse" targettype="Contained">
|
||||
<Use />
|
||||
</StatusEffect>
|
||||
|
@ -165,6 +195,62 @@
|
|||
</ItemComponent>
|
||||
</Item>
|
||||
|
||||
<Item name="Song (Walkman): {{ tape.name }}" identifier="{% if config['slug'] != "sunken_tapes" %}{{ config["slug"] }}-{% endif %}song-walkman-{{ tape.identifier }}" Tags="song" category="Misc">
|
||||
<Sprite texture="Content/Items/Electricity/signalcomp.png" depth="0.8" sourcerect="0,160,4,4" origin="0.5,0.5" />
|
||||
<Body width="48" height="48" />
|
||||
<InventoryIcon texture="Content/Items/Electricity/signalcomp.png" sourcerect="0,160,4,4" origin="0.5,0.5" />
|
||||
<ItemComponent>
|
||||
<StatusEffect type="Always" target="This">
|
||||
<sound file="Mods/{{ config['name'] }}/music/{{ tape.identifier }}-walkman.ogg" type="OnUse" range="200" loop="true" volume="1.0" />
|
||||
</StatusEffect>{% if tape.buffs %}
|
||||
<StatusEffect type="Always" target="NearbyCharacters" range="200">{% for buff in tape.buffs %}
|
||||
{% if buff == "psychosis" %}<Affliction identifier="{{ buff }}" strength= "{{ '%0.4f' % (tape.buff_multiplier*(delta + 0.1)*0.5) }}" />{% else %}<Affliction identifier="{{ buff }}" strength= "{{ '%0.4f' % (tape.buff_multiplier*(delta*4 + 1)*0.5) }}" />{% endif %}{% endfor %}
|
||||
</StatusEffect>{% endif %}
|
||||
<StatusEffect type="OnNotContained" targettype="This">
|
||||
<Remove />
|
||||
</StatusEffect>
|
||||
<StatusEffect type="OnUse" targettype="This">
|
||||
<Remove />
|
||||
</StatusEffect>
|
||||
</ItemComponent>
|
||||
</Item>
|
||||
|
||||
{% endfor %}
|
||||
|
||||
|
||||
<!-- tape box -->
|
||||
|
||||
<Item name="Cassette Tape Box" identifier="{% if config['slug'] != "sunken_tapes" %}{{ config["slug"] }}-{% endif %}cassette-tape-box" category="Equipment" tags="smallitem,mobilecontainer,tool" cargocontaineridentifier="" showcontentsintooltip="true" Scale="0.5" fireproof="true" description="" impactsoundtag="impact_metal_heavy">
|
||||
<PreferredContainer secondary="wreckstoragecab" spawnprobability="0.06"/>
|
||||
<PreferredContainer primary="outpostcrewcabinet" minamount="0" maxamount="1" spawnprobability="0.2"/>
|
||||
<Deconstruct time="10">
|
||||
<Item identifier="steel" />
|
||||
</Deconstruct>
|
||||
<Fabricate suitablefabricators="fabricator" requiredtime="20">
|
||||
<RequiredSkill identifier="mechanical" level="20" />
|
||||
<Item identifier="steel" />
|
||||
</Fabricate>
|
||||
<Price baseprice="75" >
|
||||
<Price locationtype="outpost" multiplier="1" minavailable="1" />
|
||||
<Price locationtype="city" multiplier="0.9" minavailable="1" />
|
||||
<Price locationtype="research" multiplier="1.25" minavailable="1" />
|
||||
<Price locationtype="military" multiplier="1.25" minavailable="1" />
|
||||
<Price locationtype="mine" multiplier="1.25" minavailable="1" />
|
||||
</Price>
|
||||
<InventoryIcon texture="Content/Items/InventoryIconAtlas.png" sourcerect="640,256,64,64" origin="0.5,0.6" />
|
||||
<Sprite texture="Content/Items/Tools/tools.png" sourcerect="314,1,94,74" origin="0.5,0.5" />
|
||||
<Body width="90" height="60" density="20" />
|
||||
<MeleeWeapon slots="RightHand,LeftHand,Any" controlpose="true" aimpos="45,10" handle1="0,10" handle2="0,10" holdangle="90" reload="1" range="50" combatpriority="6" msg="ItemMsgPickUpSelect">
|
||||
<Attack structuredamage="10" itemdamage="5" stun="0.6" targetimpulse="2">
|
||||
<Affliction identifier="blunttrauma" strength="2" />
|
||||
<Sound file="Content/Items/Weapons/Smack2.ogg" range="800" />
|
||||
</Attack>
|
||||
</MeleeWeapon>
|
||||
<ItemContainer capacity="24" keepopenwhenequipped="true" movableframe="true">
|
||||
<Containable items="cassette" />
|
||||
</ItemContainer>
|
||||
<aitarget sightrange="1000" soundrange="1000" fadeouttime="2" />
|
||||
<Upgrade gameversion="0.10.0.0" scale="0.5" />
|
||||
</Item>
|
||||
|
||||
</Items>
|
|
@ -1,3 +1,17 @@
|
|||
- identifier: blank
|
||||
name: Blank Tape
|
||||
source: ./source/original_audio/blank.ogg
|
||||
note: ""
|
||||
spawn:
|
||||
- location: abandonedcrewcab
|
||||
probability: 0.05
|
||||
price: 100
|
||||
multipliers: [1, 1, 1, 1, 1] # outpost, city, research, military, mine
|
||||
sold: [false, true, false, false, false] # outpost, city, research, military, mine
|
||||
no_of_uses: 12
|
||||
buffs: False
|
||||
buff_multiplier: 0.5
|
||||
|
||||
- identifier: dmx
|
||||
name: DMX - X Gon Give It To Ya
|
||||
source:
|
||||
|
@ -15,8 +29,7 @@
|
|||
no_of_uses: 6
|
||||
buffs:
|
||||
- strengthen
|
||||
- haste
|
||||
buff_multiplier: 0.75
|
||||
buff_multiplier: 0.5
|
||||
|
||||
- identifier: dmxcut
|
||||
name: DMX Carnage Cut
|
||||
|
@ -35,9 +48,46 @@
|
|||
no_of_uses: 6
|
||||
buffs:
|
||||
- strengthen
|
||||
- haste
|
||||
buff_multiplier: 1.0
|
||||
|
||||
- identifier: blade
|
||||
name: Vampire Dance Club
|
||||
source:
|
||||
url: https://www.youtube.com/watch?v=cNOP2t9FObw
|
||||
start: 00:00:00
|
||||
end: -1
|
||||
volume: 0
|
||||
note: ""
|
||||
spawn:
|
||||
- location: abandonedcrewcab
|
||||
probability: 0.04
|
||||
price: 500
|
||||
multipliers: [1, 1, 1, 1, 1] # outpost, city, research, military, mine
|
||||
sold: [false, false, false, false, false] # outpost, city, research, military, mine
|
||||
no_of_uses: 5
|
||||
buffs:
|
||||
- strengthen
|
||||
buff_multiplier: 0.5
|
||||
|
||||
- identifier: atarispeed
|
||||
name: Atari Teenage Riot - SPEED
|
||||
source:
|
||||
url: https://www.youtube.com/watch?v=plAr3adKbyc
|
||||
start: 00:00:00
|
||||
end: -1
|
||||
volume: 0
|
||||
note: ""
|
||||
spawn:
|
||||
- location: abandonedcrewcab
|
||||
probability: 0.05
|
||||
price: 650
|
||||
multipliers: [1, 1, 1, 1, 1] # outpost, city, research, military, mine
|
||||
sold: [false, false, false, true, false] # outpost, city, research, military, mine
|
||||
no_of_uses: 6
|
||||
buffs:
|
||||
- haste
|
||||
buff_multiplier: 0.7
|
||||
|
||||
- identifier: ddt
|
||||
name: Dragostea Din Tei
|
||||
source:
|
||||
|
@ -176,6 +226,46 @@
|
|||
buffs: False
|
||||
buff_multiplier: 0.5
|
||||
|
||||
- identifier: vjeranpas
|
||||
name: Termiti - Vjeran pas
|
||||
source:
|
||||
url: https://www.youtube.com/watch?v=EOAiYRxLpq0
|
||||
start: 00:00:00
|
||||
end: -1
|
||||
volume: 3
|
||||
note: ""
|
||||
spawn:
|
||||
- location: abandonedcrewcab
|
||||
probability: 0.05
|
||||
- location: outpostcrewcabinet
|
||||
probability: 0.01
|
||||
price: 450
|
||||
multipliers: [1, 1, 1, 1, 1] # outpost, city, research, military, mine
|
||||
sold: [true, true, false, false, false] # outpost, city, research, military, mine
|
||||
no_of_uses: 6
|
||||
buffs: False
|
||||
buff_multiplier: 0.5
|
||||
|
||||
- identifier: put
|
||||
name: Morbidi I Mnoći - Put
|
||||
source:
|
||||
url: https://www.youtube.com/watch?v=18Ku0EaiS88
|
||||
start: 00:00:00
|
||||
end: 00:04:18
|
||||
volume: 0
|
||||
note: ""
|
||||
spawn:
|
||||
- location: abandonedcrewcab
|
||||
probability: 0.05
|
||||
- location: outpostcrewcabinet
|
||||
probability: 0.01
|
||||
price: 450
|
||||
multipliers: [1, 1, 1, 1, 1] # outpost, city, research, military, mine
|
||||
sold: [false, true, false, false, true] # outpost, city, research, military, mine
|
||||
no_of_uses: 6
|
||||
buffs: False
|
||||
buff_multiplier: 0.5
|
||||
|
||||
- identifier: shanty1
|
||||
name: Doodle Let Me Go
|
||||
source:
|
||||
|
@ -216,13 +306,73 @@
|
|||
buffs: False
|
||||
buff_multiplier: 0.5
|
||||
|
||||
- identifier: shanty3
|
||||
name: Roll the Old Chariot
|
||||
source:
|
||||
url: https://www.youtube.com/watch?v=-CuyLbC2TZo
|
||||
start: 00:00:00
|
||||
end: 00:02:33
|
||||
volume: 6
|
||||
note: ""
|
||||
spawn:
|
||||
- location: abandonedcrewcab
|
||||
probability: 0.05
|
||||
- location: outpostcrewcabinet
|
||||
probability: 0.05
|
||||
price: 500
|
||||
multipliers: [1, 1, 1, 1, 1] # outpost, city, research, military, mine
|
||||
sold: [true, false, false, false, true] # outpost, city, research, military, mine
|
||||
no_of_uses: 6
|
||||
buffs: False
|
||||
buff_multiplier: 0.5
|
||||
|
||||
- identifier: shanty4
|
||||
name: Weigh, Hey and up She Rises
|
||||
source:
|
||||
url: https://www.youtube.com/watch?v=1YSltK-10zk
|
||||
start: 00:00:00
|
||||
end: -1
|
||||
volume: 6
|
||||
note: ""
|
||||
spawn:
|
||||
- location: abandonedcrewcab
|
||||
probability: 0.05
|
||||
- location: outpostcrewcabinet
|
||||
probability: 0.05
|
||||
price: 500
|
||||
multipliers: [1, 1, 1, 1, 1] # outpost, city, research, military, mine
|
||||
sold: [false, false, false, true, true] # outpost, city, research, military, mine
|
||||
no_of_uses: 6
|
||||
buffs: False
|
||||
buff_multiplier: 0.5
|
||||
|
||||
- identifier: shanty5
|
||||
name: Roll Northumbria
|
||||
source:
|
||||
url: https://www.youtube.com/watch?v=-d3XHQVMHDM
|
||||
start: 00:00:00
|
||||
end: -1
|
||||
volume: 0
|
||||
note: ""
|
||||
spawn:
|
||||
- location: abandonedcrewcab
|
||||
probability: 0.05
|
||||
- location: outpostcrewcabinet
|
||||
probability: 0.05
|
||||
price: 500
|
||||
multipliers: [1, 1, 1, 1, 1] # outpost, city, research, military, mine
|
||||
sold: [false, true, false, true, false] # outpost, city, research, military, mine
|
||||
no_of_uses: 6
|
||||
buffs: False
|
||||
buff_multiplier: 0.5
|
||||
|
||||
- identifier: rum
|
||||
name: 15 Men and a Bottle of Rum
|
||||
source:
|
||||
url: https://www.youtube.com/watch?v=nzcv5TJkJBA
|
||||
start: 00:00:00
|
||||
end: -1
|
||||
volume: 0
|
||||
volume: 6
|
||||
note: ""
|
||||
spawn:
|
||||
- location: abandonedcrewcab
|
||||
|
@ -276,6 +426,26 @@
|
|||
buffs: False
|
||||
buff_multiplier: 0.5
|
||||
|
||||
- identifier: deadmeadow
|
||||
name: Dead Meadow - Me and the Devil Blues
|
||||
source:
|
||||
url: https://www.youtube.com/watch?v=HejsUs-IND8
|
||||
start: 00:00:00
|
||||
end: -1
|
||||
volume: 6
|
||||
note: ""
|
||||
spawn:
|
||||
- location: abandonedcrewcab
|
||||
probability: 0.02
|
||||
- location: outpostcrewcabinet
|
||||
probability: 0.01
|
||||
price: 550
|
||||
multipliers: [1, 1, 1, 1, 1] # outpost, city, research, military, mine
|
||||
sold: [false, true, false, false, false] # outpost, city, research, military, mine
|
||||
no_of_uses: 4
|
||||
buffs: False
|
||||
buff_multiplier: 0.5
|
||||
|
||||
- identifier: hardbass
|
||||
name: Hardbass
|
||||
source:
|
||||
|
@ -512,3 +682,120 @@
|
|||
buffs:
|
||||
- psychosis
|
||||
buff_multiplier: 0.25
|
||||
|
||||
- identifier: devilinthedetails
|
||||
name: Boards of Canada - The Devil Is in the Details
|
||||
source:
|
||||
url: https://www.youtube.com/watch?v=wxPLzms6Coc
|
||||
start: 00:00:00
|
||||
end: -1
|
||||
volume: 0
|
||||
note: ""
|
||||
spawn:
|
||||
- location: abandonedcrewcab
|
||||
probability: 0.05
|
||||
price: 350
|
||||
multipliers: [1, 1, 1, 1, 1] # outpost, city, research, military, mine
|
||||
sold: [false, false, false, true, false] # outpost, city, research, military, mine
|
||||
no_of_uses: 1
|
||||
buffs:
|
||||
- psychosis
|
||||
buff_multiplier: 0.25
|
||||
|
||||
- identifier: alphabrain
|
||||
name: L.O.T.I.O.N. Multinational Corporation - Alphabrain
|
||||
source:
|
||||
url: https://www.youtube.com/watch?v=P6js2T8EB0c
|
||||
start: 00:00:00
|
||||
end: -1
|
||||
volume: 0
|
||||
note: ""
|
||||
spawn:
|
||||
- location: abandonedcrewcab
|
||||
probability: 0.05
|
||||
- location: outpostcrewcabinet
|
||||
probability: 0.01
|
||||
price: 300
|
||||
multipliers: [1, 1, 1, 1, 1] # outpost, city, research, military, mine
|
||||
sold: [false, true, false, true, false] # outpost, city, research, military, mine
|
||||
no_of_uses: 4
|
||||
buffs: False
|
||||
buff_multiplier: 0.5
|
||||
|
||||
- identifier: underwaterlove
|
||||
name: Smoke City - Underwater Love
|
||||
source:
|
||||
url: https://www.youtube.com/watch?v=HuLjsW8XhY4
|
||||
start: 00:00:00
|
||||
end: 00:06:46
|
||||
volume: 0
|
||||
note: ""
|
||||
spawn:
|
||||
- location: outpostcrewcabinet
|
||||
probability: 0.02
|
||||
price: 250
|
||||
multipliers: [1, 1, 1, 1, 1] # outpost, city, research, military, mine
|
||||
sold: [false, true, true, false, false] # outpost, city, research, military, mine
|
||||
no_of_uses: 6
|
||||
buffs: False
|
||||
buff_multiplier: 0.5
|
||||
|
||||
- identifier: theroom
|
||||
name: The Room
|
||||
source:
|
||||
url: https://www.youtube.com/watch?v=NZfox7y8VAg
|
||||
start: 00:00:00
|
||||
end: -1
|
||||
volume: 12
|
||||
note: ""
|
||||
spawn:
|
||||
- location: abandonedcrewcab
|
||||
probability: 0.03
|
||||
- location: outpostcrewcabinet
|
||||
probability: 0.01
|
||||
price: 250
|
||||
multipliers: [1, 1, 1, 1, 1] # outpost, city, research, military, mine
|
||||
sold: [false, true, false, false, false] # outpost, city, research, military, mine
|
||||
no_of_uses: 6
|
||||
buffs: False
|
||||
buff_multiplier: 0.5
|
||||
|
||||
- identifier: theshadowsareyou
|
||||
name: Kiss The Anus Of A Black Cat - The Shadows Are You
|
||||
source:
|
||||
url: https://www.youtube.com/watch?v=Dn2hOxuLY8M
|
||||
start: 00:00:00
|
||||
end: -1
|
||||
volume: 0
|
||||
note: ""
|
||||
spawn:
|
||||
- location: abandonedcrewcab
|
||||
probability: 0.04
|
||||
- location: outpostcrewcabinet
|
||||
probability: 0.01
|
||||
price: 500
|
||||
multipliers: [1, 1, 1, 1, 1] # outpost, city, research, military, mine
|
||||
sold: [true, false, true, false, true] # outpost, city, research, military, mine
|
||||
no_of_uses: 6
|
||||
buffs: False
|
||||
buff_multiplier: 0.5
|
||||
|
||||
- identifier: balans
|
||||
name: Balans - Sam Naprej
|
||||
source:
|
||||
url: https://www.youtube.com/watch?v=JqqXdF6DP6U
|
||||
start: 00:00:00
|
||||
end: -1
|
||||
volume: 0
|
||||
note: ""
|
||||
spawn:
|
||||
- location: abandonedcrewcab
|
||||
probability: 0.04
|
||||
- location: outpostcrewcabinet
|
||||
probability: 0.01
|
||||
price: 650
|
||||
multipliers: [1, 1, 1, 1, 1] # outpost, city, research, military, mine
|
||||
sold: [false, true, true, false, false] # outpost, city, research, military, mine
|
||||
no_of_uses: 6
|
||||
buffs: False
|
||||
buff_multiplier: 0.5
|