Merge pull request #1680 from danielyxie/dev

v1.0.0
This commit is contained in:
hydroflame 2021-11-10 09:24:05 -05:00 committed by GitHub
commit 546d2cdfb7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
673 changed files with 19778 additions and 10148 deletions

@ -1,35 +0,0 @@
FROM node:15.14.0 AS base
WORKDIR /app
# Scripts used in the npm preinstall hook
COPY scripts/engines-check.js scripts/semver.js scripts/
# Adding our dependencies and install before adding the rest of the files
# This prevents reinstallation of npm packages for every subsequent code modification
ENV npm_config_update_notifier=false
COPY package.json package-lock.json ./
RUN npm ci --loglevel=error --no-audit --no-fund && npm rebuild node-sass
# Adding all the remaining source files
COPY . .
# We need more than the default 512MB otherwise webpack will throw 'heap out of memory' exceptions
# https://nodejs.org/api/cli.html#cli_max_old_space_size_size_in_megabytes
ENV NODE_OPTIONS=--max-old-space-size=1536
FROM base AS dev
# This is the main development build using the file watcher if you mount volumes
USER node
EXPOSE 8000
CMD npm run start:container
FROM base AS prod-dist
# We'll simply build the production dist files here to later reuse in a simple webserver
RUN npm run build
FROM nginx:1.20.0-alpine AS prod
WORKDIR /usr/share/nginx/html
COPY --from=prod-dist /app/dist ./dist
COPY --from=prod-dist /app/index.html /app/favicon.ico /app/license.txt ./
EXPOSE 80

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

@ -0,0 +1,215 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="600"
height="900"
viewBox="0 0 158.75 238.12501"
version="1.1"
id="svg2976"
inkscape:version="1.1.1 (c3084ef, 2021-09-22)"
sodipodi:docname="Library_Capsule.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview2978"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="true"
units="px"
inkscape:zoom="0.79118979"
inkscape:cx="254.67973"
inkscape:cy="454.37897"
inkscape:window-width="2088"
inkscape:window-height="1267"
inkscape:window-x="360"
inkscape:window-y="102"
inkscape:window-maximized="0"
inkscape:current-layer="layer5">
<inkscape:grid
type="xygrid"
id="grid3037" />
</sodipodi:namedview>
<defs
id="defs2973">
<rect
x="180"
y="70"
width="250"
height="90"
id="rect4063" />
</defs>
<g
inkscape:groupmode="layer"
id="layer5"
inkscape:label="background">
<rect
style="fill:#000000;stroke-width:0.141;fill-opacity:1"
id="rect4362"
width="158.75"
height="238.125"
x="0"
y="0" />
<text
xml:space="preserve"
style="font-weight:bold;font-size:18.9804px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#002000;fill-opacity:1;stroke-width:0.254201"
x="9.5800972"
y="138.17438"
id="text7802"><tspan
sodipodi:role="line"
id="tspan7800"
style="fill:#002000;fill-opacity:1;stroke-width:0.254201"
x="9.5800972"
y="138.17438">while(true) {</tspan><tspan
sodipodi:role="line"
style="fill:#002000;fill-opacity:1;stroke-width:0.254201"
x="9.5800972"
y="161.89987"
id="tspan8504"> hack();</tspan><tspan
sodipodi:role="line"
style="fill:#002000;fill-opacity:1;stroke-width:0.254201"
x="9.5800972"
y="185.62538"
id="tspan8506">}</tspan></text>
</g>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<g
id="g3107"
transform="matrix(2.0753566,0,0,2.0753566,20.050652,10.368115)">
<g
id="layer4"
inkscape:label="background" />
<g
inkscape:label="Layer 1"
id="layer1-5"
style="display:inline">
<g
id="g898"
transform="matrix(1.3592638,0,0,1.3592638,-3.4563747,-7.7397592)">
<g
id="layer2"
inkscape:label="background"
style="display:inline">
<text
xml:space="preserve"
transform="scale(0.26458333)"
id="text4061"
style="font-weight:bold;font-size:74.6667px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';white-space:pre;shape-inside:url(#rect4063);fill:#003d00;fill-opacity:1"><tspan
x="180"
y="228.1207"
id="tspan8996"><tspan
dx="0 52.208359 25.520844 33.979187 52.208359 53.229187 37.187515 53.229202 49.583344"
id="tspan8994">bitburner</tspan></tspan></text>
</g>
<g
id="layer3"
inkscape:label="bin" />
<g
inkscape:label="Layer 1"
id="layer1-3">
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 23.572694,11.666445 v 18.489861 l -2.465312,3.697972 v 3.697972 l 2.465312,2.465316 v 1.232656"
id="path1456"
sodipodi:nodetypes="cccccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 23.572694,30.156306 2.465316,3.697972 v 3.697972 l -2.465316,2.465316"
id="path1524"
sodipodi:nodetypes="cccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 17.40941,41.250222 v -8.6286 l 2.465311,-3.697972 v -4.930628 l 3.697973,-6.163289"
id="path3458"
sodipodi:nodetypes="ccccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 29.735982,41.250222 v -8.6286 L 27.270666,28.92365 v -4.930628 l -3.697972,-6.163289"
id="path3460"
sodipodi:nodetypes="ccccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 12.478778,37.55225 v -8.6286 l 1.232661,-1.232656 1.232654,-1.232661 2.465317,-2.465311 h 2.465311"
id="path3619"
sodipodi:nodetypes="cccccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 34.66661,37.55225 v -8.6286 l -1.232655,-1.232656 -1.232656,-1.232661 -2.465317,-2.465311 h -2.465316"
id="path3621"
sodipodi:nodetypes="cccccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.00646;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 17.40941,32.621622 H 12.478778"
id="path3623"
sodipodi:nodetypes="cc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.00646;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 29.119652,32.005292 h 4.930633"
id="path3625" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 26.03801,21.527705 1.232656,-1.232656 v -7.395944"
id="path3670"
sodipodi:nodetypes="ccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 21.107382,21.527705 19.874721,20.295049 V 12.899105"
id="path3672"
sodipodi:nodetypes="ccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 32.201299,41.250222 2.465311,-2.465311 v -2.465317 l 3.697973,-3.697972 V 16.597077"
id="path4789"
sodipodi:nodetypes="ccccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 14.944093,41.250222 12.478778,38.784911 V 36.319594 L 8.7808056,32.621622 V 16.597077"
id="path5224"
sodipodi:nodetypes="ccccc" />
<path
style="display:inline;fill:none;fill-opacity:1;stroke:#00ff00;stroke-width:1.30743;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 16.176749,25.225677 V 14.131761"
id="path20342"
sodipodi:nodetypes="cc" />
<path
style="display:inline;fill:none;fill-opacity:1;stroke:#00ff00;stroke-width:1.30743;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 30.968638,25.225677 V 14.131761"
id="path20410"
sodipodi:nodetypes="cc" />
<path
style="display:inline;fill:none;fill-opacity:1;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 8.7808056,26.458333 12.478778,22.760361 V 15.364417"
id="path20544"
sodipodi:nodetypes="ccc" />
<path
style="display:inline;fill:none;fill-opacity:1;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 38.364583,26.458333 34.66661,22.760361 v -7.395944"
id="path20546"
sodipodi:nodetypes="ccc" />
</g>
</g>
</g>
</g>
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:24.8803px;line-height:1.25;font-family:'Lucida Console';-inkscape-font-specification:'Lucida Console Bold';fill:#00ff00;fill-opacity:1;stroke-width:0.333217"
x="13.494555"
y="227.75381"
id="text5034"><tspan
sodipodi:role="line"
id="tspan5032"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Lucida Console';-inkscape-font-specification:'Lucida Console Bold';fill:#00ff00;fill-opacity:1;stroke-width:0.333217"
x="13.494555"
y="227.75381">bitburner</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 676 KiB

@ -0,0 +1,291 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="3840"
height="1240"
viewBox="0 0 1016 328.08334"
version="1.1"
id="svg5"
inkscape:version="1.1.1 (c3084ef, 2021-09-22)"
sodipodi:docname="Library_Hero.svg"
inkscape:export-filename="/Users/hydroflame/bitburner/assets/Steam/Library/Library_Hero.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="true"
units="px"
width="3840px"
height="1240px"
inkscape:zoom="0.27972783"
inkscape:cx="1497.8845"
inkscape:cy="227.00637"
inkscape:window-width="2581"
inkscape:window-height="1257"
inkscape:window-x="0"
inkscape:window-y="23"
inkscape:window-maximized="0"
inkscape:current-layer="layer2">
<inkscape:grid
type="xygrid"
id="grid1511" />
</sodipodi:namedview>
<defs
id="defs2" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
style="display:inline">
<rect
style="fill:#000000;fill-opacity:1;stroke-width:0.141"
id="rect1535"
width="1016"
height="328.08334"
x="0"
y="0" />
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Layer 2">
<text
xml:space="preserve"
style="font-weight:bold;font-size:16.5183px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="-515.34589"
id="text2640"><tspan
sodipodi:role="line"
id="tspan2638"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="-515.34589">getSymbols(); getPrice(); getAskPrice(); getBidPrice(); getPosition(); getMaxShares(); getPurchaseCost(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="-494.69803"
id="tspan2642">getSaleGain(); buy(); sell(); short(); sellShort(); placeOrder(); cancelOrder(); getOrders(); getVolatility(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="-474.05017"
id="tspan2644">getForecast(); purchase(); SMarketData(); purchase(); SMarketDataTixApi(); universityCourse(); gymWorkout(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="-453.40228"
id="tspan2646">travelToCity(); purchaseTor(); purchaseProgram(); isBusy(); stopAction(); upgradeHomeRam(); upgradeHomeCores(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="-432.75443"
id="tspan2648">getUpgradeHomeRamCost(); getUpgradeHomeCoresCost(); workForCompany(); applyToCompany(); getCompanyRep(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="-412.10654"
id="tspan2650">getCompanyFavor(); getCompanyFavorGain(); checkFactionInvitations(); joinFaction(); workForFaction(); getFactionRep(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="-391.45868"
id="tspan2652">getFactionFavor(); getFactionFavorGain(); donateToFaction(); createProgram(); commitCrime(); getCrimeChance(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="-370.81079"
id="tspan2654">getCrimeStats(); getOwnedAugmentations(); getOwnedSourceFiles(); getAugmentationsFromFaction(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="-350.16293"
id="tspan2656">getAugmentationPrereq(); getAugmentationCost(); getAugmentationPrice(); getAugmentationRepReq(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="-329.51505"
id="tspan2658">purchaseAugmentation(); getAugmentationStats(); installAugmentations(); getStats(); getCharacterInformation(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="-308.86716"
id="tspan2660">hospitalize(); softReset(); goToLocation(); getCurrentServer(); connect(); manualHack(); installBackdoor(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="-288.2193"
id="tspan2662">numNodes(); maxNumNodes(); purchaseNode(); getPurchaseNodeCost(); getNodeStats(); upgradeLevel(); upgradeRam(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="-267.57141"
id="tspan2664">upgradeCore(); upgradeCache(); getLevelUpgradeCost(); getRamUpgradeCost(); getCoreUpgradeCost(); getCacheUpgradeCost(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="-246.92355"
id="tspan2666">numHashes(); hashCapacity(); hashCost(); spendHashes(); getHashUpgradeLevel(); getStudyMult(); getTrainingMult(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="-226.27568"
id="tspan2668">getContractNames(); getOperationNames(); getBlackOpNames(); getGeneralActionNames(); getSkillNames(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="-205.62781"
id="tspan2670">startAction(); stopBladeburnerAction(); getCurrentAction(); getActionTime(); getActionEstimatedSuccessChance(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="-184.97993"
id="tspan2672">getActionRepGain(); getActionCountRemaining(); getActionMaxLevel(); getActionCurrentLevel(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="-164.33206"
id="tspan2674">getActionAutolevel(); setActionAutolevel(); setActionLevel(); getRank(); getBlackOpRank(); getSkillPoints(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="-143.68419"
id="tspan2676">getSkillLevel(); getSkillUpgradeCost(); upgradeSkill(); getTeamSize(); setTeamSize(); getCityEstimatedPopulation(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="-123.03631"
id="tspan2678">getCityCommunities(); getCityChaos(); getCity(); switchCity(); getStamina(); joinBladeburnerFaction(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="-102.38844"
id="tspan2680">joinBladeburnerDivision(); getBonusTime(); attempt(); getContractType(); getDescription(); getData(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="-81.740562"
id="tspan2682">getNumTriesRemaining(); createGang(); inGang(); getMemberNames(); getGangInformation(); getOtherGangInformation(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="-61.092686"
id="tspan2684">getMemberInformation(); canRecruitMember(); recruitMember(); getTaskNames(); setMemberTask(); getTaskStats(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="-40.444809"
id="tspan2686">getEquipmentNames(); getEquipmentCost(); getEquipmentType(); getEquipmentStats(); purchaseEquipment(); ascendMember(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="-19.796938"
id="tspan2688">setTerritoryWarfare(); getChanceToWinClash(); getBonusTime(); getNumSleeves(); getSleeveStats(); getInformation(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="0.85093534"
id="tspan2690">getTask(); setToShockRecovery(); setToSynchronize(); setToCommitCrime(); setToFactionWork(); setToCompanyWork(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="21.498816"
id="tspan2692">setToUniversityCourse(); setToGymWorkout(); travel(); getSleeveAugmentations(); getSleevePurchasableAugs(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="42.14669"
id="tspan2694">purchaseSleeveAug(); calculateSkill(); calculateExp(); hackChance(); hackExp(); hackPercent(); growPercent(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="62.794563"
id="tspan2696">hackTime(); growTime(); weakenTime(); moneyGainRate(); levelUpgradeCost(); ramUpgradeCost(); coreUpgradeCost(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="83.442436"
id="tspan2698">hacknetNodeCost(); constants(); hashGainRate(); levelUpgradeCost(); ramUpgradeCost(); coreUpgradeCost(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="104.09031"
id="tspan2700">cacheUpgradeCost(); hashUpgradeCost(); hacknetServerCost(); constants(); readonly(); hack(); grow(); weaken(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="124.73818"
id="tspan2702">weakenAnalyze(); hackAnalyzeThreads(); hackAnalyze(); hackAnalyzeSecurity(); hackAnalyzeChance(); growthAnalyze(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="145.38605"
id="tspan2704">growthAnalyzeSecurity(); sleep(); asleep(); print(); tprint(); tprintf(); clearLog(); disableLog(); enableLog(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="166.03394"
id="tspan2706">isLogEnabled(); getScriptLogs(); tail(); scan(); nuke(); brutessh(); ftpcrack(); relaysmtp(); httpworm(); sqlinject(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="186.68179"
id="tspan2708">run(); exec(); spawn(); kill(); killall(); exit(); scp(); ls(); ps(); hasRootAccess(); getHostname(); getHackingLevel(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="207.32968"
id="tspan2710">getHackingMultipliers(); getHacknetMultipliers(); getServer(); getServerMoneyAvailable(); getServerMaxMoney(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="227.97754"
id="tspan2712">getServerGrowth(); getServerSecurityLevel(); getServerMinSecurityLevel(); getServerBaseSecurityLevel(); getServerRam(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="248.62543"
id="tspan2714">getServerMaxRam(); getServerUsedRam(); getServerRequiredHackingLevel(); getServerNumPortsRequired(); serverExists(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="269.27328"
id="tspan2716">fileExists(); isRunning(); getRunningScript(); getPurchasedServerCost(); purchaseServer(); deleteServer(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="289.92117"
id="tspan2718">getPurchasedServers(); getPurchasedServerLimit(); getPurchasedServerMaxRam(); write(); tryWrite(); read(); peek(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="310.56903"
id="tspan2720">clear(); clearPort(); writePort(); readPort(); getPortHandle(); rm(); scriptRunning(); scriptKill(); getScriptName(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="331.21692"
id="tspan2722">getScriptRam(); getHackTime(); getGrowTime(); getWeakenTime(); getScriptIncome(); getScriptExpGain(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="351.86478"
id="tspan2724">getTimeSinceLastAug(); sprintf(); vsprintf(); nFormat(); tFormat(); prompt(); alert(); toast(); wget(); </tspan><tspan
sodipodi:role="line"
style="fill:#008000;fill-opacity:1;stroke-width:0.221227"
x="-6.3549523"
y="372.51266"
id="tspan2726">getFavorToDonate(); getBitNodeMultipliers(); getPlayer(); atExit(); flags(); </tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

@ -0,0 +1,217 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="460"
height="215"
viewBox="0 0 121.70833 56.885418"
version="1.1"
id="svg845"
inkscape:version="1.1.1 (c3084ef, 2021-09-22)"
sodipodi:docname="Header_Capsule.svg"
inkscape:export-filename="/Users/hydroflame/bitburner/assets/Steam/Store/Header_Capsule.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview847"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="true"
units="px"
inkscape:zoom="2"
inkscape:cx="74.5"
inkscape:cy="147"
inkscape:window-width="2713"
inkscape:window-height="1264"
inkscape:window-x="411"
inkscape:window-y="75"
inkscape:window-maximized="0"
inkscape:current-layer="layer3">
<inkscape:grid
type="xygrid"
id="grid1265" />
</sodipodi:namedview>
<defs
id="defs842">
<rect
x="180"
y="70"
width="250"
height="90"
id="rect4063" />
</defs>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="background"
style="display:inline">
<rect
style="fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
id="rect1128"
width="121.70833"
height="56.885414"
x="0"
y="0" />
<text
xml:space="preserve"
transform="scale(0.26458333)"
id="text4061"
style="font-weight:bold;font-size:74.6667px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';white-space:pre;shape-inside:url(#rect4063);fill:#003d00;fill-opacity:1"><tspan
x="180"
y="228.1207"
id="tspan10130"><tspan
dx="0 52.208359 25.520844 33.979187 52.208359 53.229187 37.187515 53.229202 49.583344"
id="tspan10128">bitburner</tspan></tspan></text>
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="bin">
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:5.85919px;line-height:1.25;font-family:monospace;-inkscape-font-specification:'monospace Bold';fill:#202020;fill-opacity:1;stroke-width:0.078471"
x="-1.7902181"
y="2.4310479"
id="text17320"
transform="scale(0.80030898,1.2495174)"><tspan
sodipodi:role="line"
id="tspan17318"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Lucida Console';-inkscape-font-specification:'Lucida Console Bold';fill:#202020;fill-opacity:1;stroke-width:0.078471"
x="-1.7902181"
y="2.4310479">01001000 01100001 01110010 01110110 01100101</tspan><tspan
sodipodi:role="line"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Lucida Console';-inkscape-font-specification:'Lucida Console Bold';fill:#202020;fill-opacity:1;stroke-width:0.078471"
x="-1.7902181"
y="9.8454628"
id="tspan26146">01110011 01110100 00100000 01110100 01101000</tspan><tspan
sodipodi:role="line"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Lucida Console';-inkscape-font-specification:'Lucida Console Bold';fill:#202020;fill-opacity:1;stroke-width:0.078471"
x="-1.7902181"
y="17.259878"
id="tspan26532">01100101 00100000 01110000 01101111 01110111</tspan><tspan
sodipodi:role="line"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Lucida Console';-inkscape-font-specification:'Lucida Console Bold';fill:#202020;fill-opacity:1;stroke-width:0.078471"
x="-1.7902181"
y="24.674294"
id="tspan26870">01100101 01110010 00100000 01101111 01100110</tspan><tspan
sodipodi:role="line"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Lucida Console';-inkscape-font-specification:'Lucida Console Bold';fill:#202020;fill-opacity:1;stroke-width:0.078471"
x="-1.7902181"
y="32.088707"
id="tspan27256">00100000 01110100 01101000 01100101 00100000</tspan><tspan
sodipodi:role="line"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Lucida Console';-inkscape-font-specification:'Lucida Console Bold';fill:#202020;fill-opacity:1;stroke-width:0.078471"
x="-1.7902181"
y="39.503124"
id="tspan27606">01101110 01101111 01101111 01100100 01101100</tspan><tspan
sodipodi:role="line"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:'Lucida Console';-inkscape-font-specification:'Lucida Console Bold';fill:#202020;fill-opacity:1;stroke-width:0.078471"
x="-1.7902181"
y="46.917538"
id="tspan28160">01100101 01110011 00101110 00101110 00101110</tspan></text>
</g>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 23.572694,11.666445 v 18.489861 l -2.465312,3.697972 v 3.697972 l 2.465312,2.465316 v 1.232656"
id="path1456"
sodipodi:nodetypes="cccccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 23.572694,30.156306 2.465316,3.697972 v 3.697972 l -2.465316,2.465316"
id="path1524"
sodipodi:nodetypes="cccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 17.40941,41.250222 v -8.6286 l 2.465311,-3.697972 v -4.930628 l 3.697973,-6.163289"
id="path3458"
sodipodi:nodetypes="ccccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 29.735982,41.250222 v -8.6286 L 27.270666,28.92365 v -4.930628 l -3.697972,-6.163289"
id="path3460"
sodipodi:nodetypes="ccccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 12.478778,37.55225 v -8.6286 l 1.232661,-1.232656 1.232654,-1.232661 2.465317,-2.465311 h 2.465311"
id="path3619"
sodipodi:nodetypes="cccccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 34.66661,37.55225 v -8.6286 l -1.232655,-1.232656 -1.232656,-1.232661 -2.465317,-2.465311 h -2.465316"
id="path3621"
sodipodi:nodetypes="cccccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.00646;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 17.40941,32.621622 H 12.478778"
id="path3623"
sodipodi:nodetypes="cc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.00646;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 29.119652,32.005292 h 4.930633"
id="path3625" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 26.03801,21.527705 1.232656,-1.232656 v -7.395944"
id="path3670"
sodipodi:nodetypes="ccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 21.107382,21.527705 19.874721,20.295049 V 12.899105"
id="path3672"
sodipodi:nodetypes="ccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 32.201299,41.250222 2.465311,-2.465311 v -2.465317 l 3.697973,-3.697972 V 16.597077"
id="path4789"
sodipodi:nodetypes="ccccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 14.944093,41.250222 12.478778,38.784911 V 36.319594 L 8.7808056,32.621622 V 16.597077"
id="path5224"
sodipodi:nodetypes="ccccc" />
<path
style="display:inline;fill:none;fill-opacity:1;stroke:#00ff00;stroke-width:1.30743;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 16.176749,25.225677 V 14.131761"
id="path20342"
sodipodi:nodetypes="cc" />
<path
style="display:inline;fill:none;fill-opacity:1;stroke:#00ff00;stroke-width:1.30743;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 30.968638,25.225677 V 14.131761"
id="path20410"
sodipodi:nodetypes="cc" />
<path
style="display:inline;fill:none;fill-opacity:1;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 8.7808056,26.458333 12.478778,22.760361 V 15.364417"
id="path20544"
sodipodi:nodetypes="ccc" />
<path
style="display:inline;fill:none;fill-opacity:1;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 38.364583,26.458333 34.66661,22.760361 v -7.395944"
id="path20546"
sodipodi:nodetypes="ccc" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.47px;line-height:1.25;font-family:'Lucida Console';-inkscape-font-specification:'Lucida Console';fill:#00ff00;fill-opacity:1;stroke-width:0.180402"
x="44.335251"
y="33.835377"
id="text12822"><tspan
sodipodi:role="line"
id="tspan12820"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Lucida Console';-inkscape-font-specification:'Lucida Console';fill:#00ff00;fill-opacity:1;stroke-width:0.180402"
x="44.335251"
y="33.835377">bitburner</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

@ -0,0 +1,258 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="374"
height="448"
viewBox="0 0 98.954164 118.53334"
version="1.1"
id="svg8188"
inkscape:version="1.1.1 (c3084ef, 2021-09-22)"
sodipodi:docname="Hero_Capsule.svg"
inkscape:export-filename="/Users/hydroflame/bitburner/assets/Steam/Store/Hero_Capsule.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview8190"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="true"
units="px"
width="374px"
inkscape:zoom="1.1189113"
inkscape:cx="150.14595"
inkscape:cy="145.67732"
inkscape:window-width="2803"
inkscape:window-height="1258"
inkscape:window-x="0"
inkscape:window-y="23"
inkscape:window-maximized="0"
inkscape:current-layer="layer5">
<inkscape:grid
type="xygrid"
id="grid8249" />
</sodipodi:namedview>
<defs
id="defs8185">
<rect
x="180"
y="70"
width="250"
height="90"
id="rect4063" />
</defs>
<g
inkscape:groupmode="layer"
id="layer5"
inkscape:label="background">
<rect
style="fill:#000000;stroke:none;stroke-width:0.141;fill-opacity:1"
id="rect9260"
width="98.95417"
height="118.53333"
x="0"
y="0" />
<text
xml:space="preserve"
style="font-weight:bold;font-size:4.91179px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#004000;fill-opacity:1;stroke-width:0.0657826"
x="3.401886"
y="8.2027788"
id="text11139"><tspan
sodipodi:role="line"
id="tspan11137"
style="fill:#004000;fill-opacity:1;stroke-width:0.0657826"
x="3.401886"
y="8.2027788">export async function main(ns) {</tspan><tspan
sodipodi:role="line"
style="fill:#004000;fill-opacity:1;stroke-width:0.0657826"
x="3.401886"
y="14.342516"
id="tspan11141"> while(sec &gt; minSec) {</tspan><tspan
sodipodi:role="line"
style="fill:#004000;fill-opacity:1;stroke-width:0.0657826"
x="3.401886"
y="20.482254"
id="tspan12886"> weaken('n00dles');</tspan><tspan
sodipodi:role="line"
style="fill:#004000;fill-opacity:1;stroke-width:0.0657826"
x="3.401886"
y="26.62199"
id="tspan12888"> }</tspan><tspan
sodipodi:role="line"
style="fill:#004000;fill-opacity:1;stroke-width:0.0657826"
x="3.401886"
y="32.761726"
id="tspan12890" /><tspan
sodipodi:role="line"
style="fill:#004000;fill-opacity:1;stroke-width:0.0657826"
x="3.401886"
y="38.901466"
id="tspan12892"> while(money &lt; maxMoney) {</tspan><tspan
sodipodi:role="line"
style="fill:#004000;fill-opacity:1;stroke-width:0.0657826"
x="3.401886"
y="45.041203"
id="tspan12894"> grow('n00dles');</tspan><tspan
sodipodi:role="line"
style="fill:#004000;fill-opacity:1;stroke-width:0.0657826"
x="3.401886"
y="51.180939"
id="tspan12896"> }</tspan><tspan
sodipodi:role="line"
style="fill:#004000;fill-opacity:1;stroke-width:0.0657826"
x="3.401886"
y="57.320679"
id="tspan13852" /><tspan
sodipodi:role="line"
style="fill:#004000;fill-opacity:1;stroke-width:0.0657826"
x="3.401886"
y="63.460415"
id="tspan11143"> hack('n00dles');</tspan><tspan
sodipodi:role="line"
style="fill:#004000;fill-opacity:1;stroke-width:0.0657826"
x="3.401886"
y="69.600151"
id="tspan13864"></tspan><tspan
sodipodi:role="line"
style="fill:#004000;fill-opacity:1;stroke-width:0.0657826"
x="3.401886"
y="75.739891"
id="tspan13866"
dx="0 0 0 0 0.11823248"> tprint(&quot;I'm in&quot;);</tspan><tspan
sodipodi:role="line"
style="fill:#004000;fill-opacity:1;stroke-width:0.0657826"
x="3.401886"
y="81.879623"
id="tspan13862">}</tspan></text>
</g>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<g
id="g8594"
transform="matrix(0.83214383,0,0,0.83214383,-2.3892723,78.955939)">
<g
id="layer2"
inkscape:label="background"
style="display:inline">
<text
xml:space="preserve"
transform="scale(0.26458333)"
id="text4061"
style="font-weight:bold;font-size:74.6667px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';white-space:pre;shape-inside:url(#rect4063);fill:#003d00;fill-opacity:1"><tspan
x="180"
y="228.1207"
id="tspan14798"><tspan
dx="0 52.208359 25.520844 33.979187 52.208359 53.229187 37.187515 53.229202 49.583344"
id="tspan14796">bitburner</tspan></tspan></text>
</g>
<g
id="layer3"
inkscape:label="bin" />
<g
inkscape:label="Layer 1"
id="layer1-1">
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 23.572694,11.666445 v 18.489861 l -2.465312,3.697972 v 3.697972 l 2.465312,2.465316 v 1.232656"
id="path1456"
sodipodi:nodetypes="cccccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 23.572694,30.156306 2.465316,3.697972 v 3.697972 l -2.465316,2.465316"
id="path1524"
sodipodi:nodetypes="cccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 17.40941,41.250222 v -8.6286 l 2.465311,-3.697972 v -4.930628 l 3.697973,-6.163289"
id="path3458"
sodipodi:nodetypes="ccccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 29.735982,41.250222 v -8.6286 L 27.270666,28.92365 v -4.930628 l -3.697972,-6.163289"
id="path3460"
sodipodi:nodetypes="ccccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 12.478778,37.55225 v -8.6286 l 1.232661,-1.232656 1.232654,-1.232661 2.465317,-2.465311 h 2.465311"
id="path3619"
sodipodi:nodetypes="cccccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 34.66661,37.55225 v -8.6286 l -1.232655,-1.232656 -1.232656,-1.232661 -2.465317,-2.465311 h -2.465316"
id="path3621"
sodipodi:nodetypes="cccccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.00646;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 17.40941,32.621622 H 12.478778"
id="path3623"
sodipodi:nodetypes="cc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.00646;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 29.119652,32.005292 h 4.930633"
id="path3625" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 26.03801,21.527705 1.232656,-1.232656 v -7.395944"
id="path3670"
sodipodi:nodetypes="ccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 21.107382,21.527705 19.874721,20.295049 V 12.899105"
id="path3672"
sodipodi:nodetypes="ccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 32.201299,41.250222 2.465311,-2.465311 v -2.465317 l 3.697973,-3.697972 V 16.597077"
id="path4789"
sodipodi:nodetypes="ccccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 14.944093,41.250222 12.478778,38.784911 V 36.319594 L 8.7808056,32.621622 V 16.597077"
id="path5224"
sodipodi:nodetypes="ccccc" />
<path
style="display:inline;fill:none;fill-opacity:1;stroke:#00ff00;stroke-width:1.30743;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 16.176749,25.225677 V 14.131761"
id="path20342"
sodipodi:nodetypes="cc" />
<path
style="display:inline;fill:none;fill-opacity:1;stroke:#00ff00;stroke-width:1.30743;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 30.968638,25.225677 V 14.131761"
id="path20410"
sodipodi:nodetypes="cc" />
<path
style="display:inline;fill:none;fill-opacity:1;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 8.7808056,26.458333 12.478778,22.760361 V 15.364417"
id="path20544"
sodipodi:nodetypes="ccc" />
<path
style="display:inline;fill:none;fill-opacity:1;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 38.364583,26.458333 34.66661,22.760361 v -7.395944"
id="path20546"
sodipodi:nodetypes="ccc" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.47px;line-height:1.25;font-family:'Lucida Console';-inkscape-font-specification:'Lucida Console';fill:#00ff00;fill-opacity:1;stroke-width:0.180402"
x="44.335251"
y="33.835377"
id="text12822"><tspan
sodipodi:role="line"
id="tspan12820"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Lucida Console';-inkscape-font-specification:'Lucida Console';fill:#00ff00;fill-opacity:1;stroke-width:0.180402"
x="44.335251"
y="33.835377">bitburner</tspan></text>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

@ -0,0 +1,202 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="616"
height="353"
viewBox="0 0 162.98333 93.397919"
version="1.1"
id="svg5"
inkscape:version="1.1.1 (c3084ef, 2021-09-22)"
sodipodi:docname="Main_Capsule.svg"
inkscape:export-filename="/Users/hydroflame/bitburner/assets/Steam/Store/Main_Capsule.png"
inkscape:export-xdpi="96"
inkscape:export-ydpi="96"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="true"
units="px"
width="616px"
inkscape:zoom="2.2378227"
inkscape:cx="304.98395"
inkscape:cy="106.57681"
inkscape:window-width="2368"
inkscape:window-height="1281"
inkscape:window-x="608"
inkscape:window-y="29"
inkscape:window-maximized="0"
inkscape:current-layer="layer4">
<inkscape:grid
type="xygrid"
id="grid824" />
</sodipodi:namedview>
<defs
id="defs2">
<rect
x="180"
y="70"
width="250"
height="90"
id="rect4063" />
</defs>
<g
inkscape:groupmode="layer"
id="layer4"
inkscape:label="background">
<rect
style="fill:#000000;stroke:none;stroke-width:0.264583;fill-opacity:1"
id="rect1361"
width="162.98334"
height="93.397919"
x="0"
y="0" />
<text
xml:space="preserve"
style="font-weight:bold;font-size:10.5573px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';fill:#004000;fill-opacity:1;stroke-width:0.141;stroke-miterlimit:4;stroke-dasharray:none"
x="4.023602"
y="87.453094"
id="text2184"><tspan
sodipodi:role="line"
id="tspan2182"
style="fill:#004000;fill-opacity:1;stroke-width:0.141;stroke-miterlimit:4;stroke-dasharray:none"
x="4.023602"
y="87.453094">[home ~/]&gt; run main.js</tspan></text>
<path
style="fill:none;fill-opacity:1;stroke:#004000;stroke-width:0.265;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
d="M 5.2916666,89.958332 H 160.07291"
id="path4659" />
</g>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
style="display:inline">
<g
id="g898"
transform="matrix(1.3592638,0,0,1.3592638,-3.4563747,-7.7397592)">
<g
id="layer2"
inkscape:label="background"
style="display:inline">
<text
xml:space="preserve"
transform="scale(0.26458333)"
id="text4061"
style="font-weight:bold;font-size:74.6667px;line-height:1.25;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';white-space:pre;shape-inside:url(#rect4063);fill:#003d00;fill-opacity:1"><tspan
x="180"
y="228.1207"
id="tspan8183"><tspan
dx="0 52.208359 25.520844 33.979187 52.208359 53.229187 37.187515 53.229202 49.583344"
id="tspan8181">bitburner</tspan></tspan></text>
</g>
<g
id="layer3"
inkscape:label="bin" />
<g
inkscape:label="Layer 1"
id="layer1-3">
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 23.572694,11.666445 v 18.489861 l -2.465312,3.697972 v 3.697972 l 2.465312,2.465316 v 1.232656"
id="path1456"
sodipodi:nodetypes="cccccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 23.572694,30.156306 2.465316,3.697972 v 3.697972 l -2.465316,2.465316"
id="path1524"
sodipodi:nodetypes="cccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 17.40941,41.250222 v -8.6286 l 2.465311,-3.697972 v -4.930628 l 3.697973,-6.163289"
id="path3458"
sodipodi:nodetypes="ccccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 29.735982,41.250222 v -8.6286 L 27.270666,28.92365 v -4.930628 l -3.697972,-6.163289"
id="path3460"
sodipodi:nodetypes="ccccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 12.478778,37.55225 v -8.6286 l 1.232661,-1.232656 1.232654,-1.232661 2.465317,-2.465311 h 2.465311"
id="path3619"
sodipodi:nodetypes="cccccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 34.66661,37.55225 v -8.6286 l -1.232655,-1.232656 -1.232656,-1.232661 -2.465317,-2.465311 h -2.465316"
id="path3621"
sodipodi:nodetypes="cccccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.00646;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 17.40941,32.621622 H 12.478778"
id="path3623"
sodipodi:nodetypes="cc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.00646;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 29.119652,32.005292 h 4.930633"
id="path3625" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 26.03801,21.527705 1.232656,-1.232656 v -7.395944"
id="path3670"
sodipodi:nodetypes="ccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 21.107382,21.527705 19.874721,20.295049 V 12.899105"
id="path3672"
sodipodi:nodetypes="ccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 32.201299,41.250222 2.465311,-2.465311 v -2.465317 l 3.697973,-3.697972 V 16.597077"
id="path4789"
sodipodi:nodetypes="ccccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 14.944093,41.250222 12.478778,38.784911 V 36.319594 L 8.7808056,32.621622 V 16.597077"
id="path5224"
sodipodi:nodetypes="ccccc" />
<path
style="display:inline;fill:none;fill-opacity:1;stroke:#00ff00;stroke-width:1.30743;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 16.176749,25.225677 V 14.131761"
id="path20342"
sodipodi:nodetypes="cc" />
<path
style="display:inline;fill:none;fill-opacity:1;stroke:#00ff00;stroke-width:1.30743;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 30.968638,25.225677 V 14.131761"
id="path20410"
sodipodi:nodetypes="cc" />
<path
style="display:inline;fill:none;fill-opacity:1;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 8.7808056,26.458333 12.478778,22.760361 V 15.364417"
id="path20544"
sodipodi:nodetypes="ccc" />
<path
style="display:inline;fill:none;fill-opacity:1;stroke:#00ff00;stroke-width:1.23266;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 38.364583,26.458333 34.66661,22.760361 v -7.395944"
id="path20546"
sodipodi:nodetypes="ccc" />
<text
xml:space="preserve"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.47px;line-height:1.25;font-family:'Lucida Console';-inkscape-font-specification:'Lucida Console';fill:#00ff00;fill-opacity:1;stroke-width:0.180402"
x="44.335251"
y="33.835377"
id="text12822"><tspan
sodipodi:role="line"
id="tspan12820"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Lucida Console';-inkscape-font-specification:'Lucida Console';fill:#00ff00;fill-opacity:1;stroke-width:0.180402"
x="44.335251"
y="33.835377">bitburner</tspan></text>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 326 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 281 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 305 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 307 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 54 KiB

777
assets/Steam/logo.svg Normal file

@ -0,0 +1,777 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="32"
height="32"
viewBox="0 0 8.4666665 8.4666669"
version="1.1"
id="svg5"
inkscape:version="1.1.1 (c3084ef, 2021-09-22)"
sodipodi:docname="bb.svg"
inkscape:export-filename="/Users/hydroflame/Desktop/bb128x128.png"
inkscape:export-xdpi="384.00003"
inkscape:export-ydpi="384.00003"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="true"
units="px"
inkscape:zoom="11.313709"
inkscape:cx="-15.291184"
inkscape:cy="12.904699"
inkscape:window-width="2533"
inkscape:window-height="1176"
inkscape:window-x="316"
inkscape:window-y="81"
inkscape:window-maximized="0"
inkscape:current-layer="layer3">
<inkscape:grid
type="xygrid"
id="grid34424" />
</sodipodi:namedview>
<defs
id="defs2" />
<g
inkscape:groupmode="layer"
id="layer4"
inkscape:label="background"
style="display:none">
<image
width="9.315053"
height="7.1195869"
preserveAspectRatio="none"
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlIAAAHGCAYAAAC/wGW7AAABQmlDQ1BJQ0MgUHJvZmlsZQAAKJFj
YGASSCwoyGFhYGDIzSspCnJ3UoiIjFJgf8rAxSDOwMmgxmCZmFxc4BgQ4ANUwgCjUcG3awyMIPqy
LsisoJzUgH1tRbJrYj9zhM61NsNUjwK4UlKLk4H0HyBOTi4oKmFgYEwAspXLSwpA7BYgW6QI6Cgg
ewaInQ5hrwGxkyDsA2A1IUHOQPYVIFsgOSMxBch+AmTrJCGJpyOxofaCAKdjcmqRQoSxCQG3kgxK
UitKQLRzfkFlUWZ6RomCIzCEUhU885L1dBSMDIwMGRhA4Q1R/VkMHI6MYqcQYvlWDAwWJxgYmKci
xJJeMDBsv8nAIMmNEFPZwsDAH8/AsK23ILEoEe4Axm8sxWnGRhA2TxEDA+uP//8/yzIwsO9iYPhb
9P//77n///9dAjQfaN6BQgA4TF4ddYy9vAAAAZ1pVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4
OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4w
Ij4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJk
Zi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAg
ICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAg
ICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NTk0PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAg
ICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjQ1NDwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAg
IDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgooJ8wJAABAAElE
QVR4Aex9C4AdRZluzzBJSCDhFfKCGHlENivcwIAEs6CL8ohoQFkuIC6IWVDCey8oKruCrpIV8AFG
ooA3GkUIEkBAQlAMXBUBGVhQCSwvo7DJQIIg0UBec7+vz+lMz5nz6D5dXV3d/f3JN91dXfX/f33V
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
gg==
"
id="image1256"
x="0"
y="0.52916664"
style="display:inline" />
</g>
<g
inkscape:groupmode="layer"
id="layer5"
inkscape:label="black"
style="display:inline">
<rect
style="display:inline;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="rect17167"
width="8.4666662"
height="8.4666662"
x="0"
y="0" />
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="icon"
style="display:inline">
<path
style="fill:none;stroke:#00ff00;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 4.2333333,1.0583333 v 3.96875 l -0.5291666,0.79375 v 0.79375 L 4.2333333,7.14375 v 0.2645834"
id="path1456"
sodipodi:nodetypes="cccccc" />
<path
style="fill:none;stroke:#00ff00;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 4.2333333,5.0270833 4.7625,5.8208333 v 0.79375 L 4.2333333,7.14375"
id="path1524"
sodipodi:nodetypes="cccc" />
<path
style="fill:none;stroke:#00ff00;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 2.9104166,7.4083332 V 5.5562499 l 0.5291667,-0.79375 V 3.7041666 l 0.79375,-1.3229167"
id="path3458"
sodipodi:nodetypes="ccccc" />
<path
style="fill:none;stroke:#00ff00;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 5.5562499,7.4083332 V 5.5562499 L 5.0270833,4.7624999 V 3.7041666 L 4.2333334,2.3812499"
id="path3460"
sodipodi:nodetypes="ccccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 1.8520833,6.6145833 V 4.7625 L 2.1166666,4.4979166 2.38125,4.2333333 2.9104167,3.7041667 l 0.5291666,-10e-8"
id="path3619"
sodipodi:nodetypes="cccccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 6.6145835,6.6145832 -1e-7,-1.8520833 L 6.35,4.4979166 6.0854167,4.2333332 5.5562501,3.7041666 H 5.0270833"
id="path3621"
sodipodi:nodetypes="cccccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:0.216031;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 2.9104166,5.55625 H 1.8520832"
id="path3623"
sodipodi:nodetypes="cc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:0.216031;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 5.4239583,5.4239583 H 6.4822916"
id="path3625" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 4.7625,3.175 5.0270834,2.9104167 v -1.5875"
id="path3670"
sodipodi:nodetypes="ccc" />
<path
style="display:inline;fill:none;stroke:#00ff00;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 3.7041666,3.175 3.4395832,2.9104167 v -1.5875"
id="path3672"
sodipodi:nodetypes="ccc" />
<path
style="fill:none;stroke:#00ff00;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 6.0854167,7.4083333 6.6145833,6.8791667 V 6.35 l 0.79375,-0.79375 V 2.1166667"
id="path4789"
sodipodi:nodetypes="ccccc" />
<path
style="fill:none;stroke:#00ff00;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 2.38125,7.4083333 1.8520833,6.8791666 V 6.35 L 1.0583333,5.55625 V 2.1166666"
id="path5224"
sodipodi:nodetypes="ccccc" />
<path
style="fill:none;fill-opacity:1;stroke:#00ff00;stroke-width:0.280633;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 2.6458333,3.96875 V 1.5875"
id="path20342"
sodipodi:nodetypes="cc" />
<path
style="fill:none;fill-opacity:1;stroke:#00ff00;stroke-width:0.280633;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="M 5.8208333,3.96875 V 1.5875"
id="path20410"
sodipodi:nodetypes="cc" />
<path
style="fill:none;fill-opacity:1;stroke:#00ff00;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 1.0583333,4.2333333 0.79375,-0.79375 v -1.5875"
id="path20544"
sodipodi:nodetypes="ccc" />
<path
style="fill:none;fill-opacity:1;stroke:#00ff00;stroke-width:0.264583;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
d="m 7.4083332,4.2333333 -0.7937499,-0.79375 -10e-8,-1.5875"
id="path20546"
sodipodi:nodetypes="ccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 54 KiB

1
assets/Steam/notes.txt Normal file

@ -0,0 +1 @@
https://partner.steamgames.com/doc/store/assets

2878
dist/bitburner.d.ts vendored

File diff suppressed because it is too large Load Diff

36
dist/vendor.bundle.js vendored

File diff suppressed because one or more lines are too long

@ -2,7 +2,7 @@
#
# You can set these variables from the command line.
SPHINXOPTS = -W
SPHINXOPTS =
SPHINXBUILD = python2.7 -msphinx
SOURCEDIR = source
BUILDDIR = build

@ -3,6 +3,66 @@
Changelog
=========
v1.0.0 - 2021-11-10 Breaking the API :( (blame hydroflame)
-----------------------------------------------------------
** Announcement **
* Several API breaks have been implemented.
* See the v1.0.0 migration guide https://bitburner.readthedocs.io/en/latest/v1.0.0_migration.html
* Everyone gets 10 free neuroflux level.
** Netscript **
* Fix a bug that would cause RAM to not get recalculated.
* New function: hackAnalyzeSecurity
* New function: growthAnalyzeSecurity
* New function: weakenAnalyze
** Script Editor **
* Sometimes warn you about unawaited infinite loops.
* ns1 functions are now correctly colors in Monokai.
** Programs **
* Formulas.exe is a new program that lets you use the formulas API.
** Corporations **
* Real Estate takes up a tiny bit of room.
* Dividends are now taxes exponentially in certain bitnodes.
* UI displays how many level of each corporation upgrade.
* Fix exploit with going public.
* Employee salary no longer increase.
** Documentation **
* The documentation is now autogenerated into .md files.
It is usable but not yet linked to readthedocs. It's on github.
** Misc. **
* Favor is not internall floating point. Meaning I don't have to save an extra variable.
* Manually starting a Bladeburner action cancels unfocused action.
* Updated description of gang territory to be clearer.
* Hacknet expenses and profit are in different categories.
* Fixed favor equation.
* Toast messages aren't hidden behind work in progress screen.
* Fix bug that made infiltration checkmark look off by one.
* Fix some inconsistency with running files that start or don't start with /
* Can't tail the same window twice.
* Added recovery mode. Hopefully no one will ever have to use it.
* Fix readthedocs
* Programs now give int exp based on time not program.
* Many sing. functions now give int exp.
* Active Scripts page now displays some arguments next to script name.
* Fixed some invisible black text.
* Button colors can be edited.
* Added 2 new colors in the theme editor: background primary and background secondary.
* infiltration uses key instead of keycode so it should work better on non-american keyboards.
* nerf noodle bar.
v0.58.0 - 2021-10-27 Road to Steam (hydroflame & community)
-----------------------------------------------------------

@ -24,11 +24,11 @@ secrets that you've been searching for.
Basic Gameplay <basicgameplay>
Advanced Gameplay <advancedgameplay>
Keyboard Shortcuts <shortcuts>
Script Editors <scripteditors>
Game Frozen or Stuck? <gamefrozen>
Guides & Tips <guidesandtips>
Tools & Resources <toolsandresources>
Changelog <changelog>
v1.0.0 script migration guide <v1.0.0_migration.rst>
Donate <https://paypal.me/danielyxie>
Indices and tables

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

@ -1,37 +1,37 @@
.. _netscriptjs:
NetscriptJS (Netscript 2.0)
===========================
Netscript 2.0, or Netscript JS, is the new and improved version of Netscript that
allows users to write (almost) full-fledged Javascript code in their scripts, while
NS2
===
The improved version of Netscript that
allows users to write full-fledged Javascript code in their scripts, while
still being able to access the Netscript functions.
NetscriptJS was developed primarily by `Github user jaguilar <https://github.com/jaguilar>`_
ns2 was developed primarily by `Github user jaguilar <https://github.com/jaguilar>`_
On top of having almost all of the features and capabilities of JavaScript, NetscriptJS is also
significantly faster than Netscript 1.0.
On top of having almost all of the features and capabilities of JavaScript, ns2 is also
significantly faster than ns1.
This documentation will not go over any of the additional features of NetscriptJS, since
This documentation will not go over any of the additional features of ns2, since
there is plenty of documentation on Javascript available on the web.
Browser compatibility
---------------------
As of the time of writing this, a few browsers do not support `dynamic import <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import>`_ functionality and therefore cannot run NetscriptJS scripts. These browsers will thus only be capable of using Netscript 1.0.
As of the time of writing this, a few browsers do not support `dynamic import <https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import>`_ functionality and therefore cannot run ns2 scripts. These browsers will thus only be capable of using ns1.
How to use NetscriptJS
How to use ns2
----------------------
Working with NetscriptJS scripts is the same as Netscript 1.0 scripts. The only difference
is that NetscriptJS scripts use the ".ns" or ".js" extension rather than ".script". E.g.::
Working with ns2 scripts is the same as ns1 scripts. The only difference
is that ns2 scripts use the ".ns" or ".js" extension rather than ".script". E.g.::
$ nano foo.ns
$ run foo.ns -t 100 arg1 arg2 arg3
exec("foo.ns", "purchasedServer1", "100", "randomArg");
The caveat when using NetscriptJS to write scripts is that your code must be
The caveat when using ns2 to write scripts is that your code must be
asynchronous. Furthermore, instead of using the global scope and executing your code
sequentially, NetscriptJS uses a :code:`main()` function as an entry point.
sequentially, ns2 uses a :code:`main()` function as an entry point.
Furthermore, the "Netscript environment" must be passed into a NetscriptJS script through
Furthermore, the "Netscript environment" must be passed into a ns2 script through
the main function. This environment includes all of the pre-defined Netscript functions
(:code:`hack()`, :code:`exec`, etc.) as well as the arguments you pass to the script.
@ -53,6 +53,9 @@ Here is a summary of all rules you need to follow when writing Netscript JS code
* sleep
* prompt
* wget
* scp
* write
* writePort
* Any function that contains :code:`await` must be declared as :code:`async`
@ -60,9 +63,9 @@ Here is a summary of all rules you need to follow when writing Netscript JS code
* Any functions that you want to be visible from other scripts must be marked with :code:`export`.
* **Do not write any infinite loops without using a** :code:`sleep` **or one of the timed Netscript functions like** :code:`hack`. Doing so will crash your game.
* **Do not write any infinite loops without using a** :code:`sleep` **or one of the timed Netscript functions like** :code:`hack`. Doing so will freeze your game.
* Any global variable declared in a NetscriptJS script is shared between all instances of that
* Any global variable declared in a ns2 script is shared between all instances of that
script. For example, assume you write a script *foo.ns* and declared a global variable like so::
//foo.ns
@ -88,69 +91,68 @@ Here is a summary of all rules you need to follow when writing Netscript JS code
the script will repeatedly print the value 5).
These global variables can be thought of as `C++ static class members <https://www.tutorialspoint.com/cplusplus/cpp_static_members.htm>`_,
where a NetscriptJS script is a class and a global variable is a static member within that class.
where a ns2 script is a class and a global variable is a static member within that class.
Examples
--------
Example
-------
**Script Scheduler (scriptScheduler.ns)**
early-hack-template.script
This script shows some of the new functionality that is available in NetscriptJS,
including objects and object constructors, changing an object's prototype, and
importing other NetscriptJS scripts::
.. code-block:: javascript
import {tprintColored} from "tprintColored.ns"; //Importing from other NetscriptJS scripts works!
function ScriptJob(params) {
if (params.fn == null) {
throw new Error("No Filename (fn) passed into ScriptJob ctor");
var target = args[0];
var moneyThresh = getServerMaxMoney(target) * 0.75;
var securityThresh = getServerMinSecurityLevel(target) + 5;
if (fileExists("BruteSSH.exe", "home")) {
brutessh(target);
}
nuke(target);
while(true) {
if (getServerSecurityLevel(target) > securityThresh) {
weaken(target);
} else if (getServerMoneyAvailable(target) < moneyThresh) {
grow(target);
} else {
hack(target);
}
this.fn = params.fn;
this.threads = params.threads ? params.threads : 1;
this.args = params.args ? params.args : [];
}
ScriptJob.prototype.run = function(ns) {
let runArgs = [this.fn, this.threads].concat(this.args);
if (!ns.run.apply(this, runArgs)) {
throw new Error("Unable to run " + this.fn + " on " +ns.getHostname());
}
tprintColored("Running " + this.fn + " on " + ns.getHostname(), "blue");
}
early-hack-template.ns
ScriptJob.prototype.exec = function(ns, target) {
ns.scp(this.fn, target);
let execArgs = [this.fn, target, this.threads].concat(this.args);
if (!ns.exec.apply(this, execArgs)) {
throw new Error("Unable to execute " + this.fn + " on " + target);
}
tprintColored("Executing " + this.fn + " on " + target, "blue");
}
.. code-block:: javascript
export async function main(ns) {
tprintColored("Starting scriptScheduler.ns", "red");
try {
let job = new ScriptJob({
fn: "test.js",
threads: 1,
args: ["foodnstuff"]
});
job.run(ns);
job.exec(ns, "foodnstuff");
} catch (e) {
ns.tprint("Exception thrown in scriptScheduler.ns: " + e);
var target = ns.args[0];
var moneyThresh = ns.getServerMaxMoney(target) * 0.75;
var securityThresh = ns.getServerMinSecurityLevel(target) + 5;
if (ns.fileExists("BruteSSH.exe", "home")) {
ns.brutessh(target);
}
ns.nuke(target);
while(true) {
if (ns.getServerSecurityLevel(target) > securityThresh) {
await ns.weaken(target);
} else if (ns.getServerMoneyAvailable(target) < moneyThresh) {
await ns.grow(target);
} else {
await ns.hack(target);
}
}
}
Final Note
----------
NetscriptJS opens up a lot of possibilities when scripting. I look forward to seeing
the scripts that people come up with. Just remember that the power and capabilities of
NetscriptJS come with risks. Please backup your save if you're going to experiment with
NetscriptJS and report any serious exploits.
What's with the weird comment
-----------------------------
With great power comes great responsibility
You may have noticed that every new ns2 file will contains the following comment.
Happy hacking
.. code-block:: javascript
/**
* @param {NS} ns
**/
This command is used to help the text editor autocomplete functions in the Netscript API. You can enabling it by pressing ctrl+space after `ns.`
.. image:: autocomplete.png
The comment can be safely removed but it is recommended to keep it as it will help you.

@ -22,5 +22,4 @@ into a script using::
args.length
**WARNING: Do not try to modify the args array. This will break the game.
I will do my best to prevent players from doing this.**
**WARNING: Do not try to modify the args array. This will break the game.**

@ -1,140 +0,0 @@
.. _scripteditors:
Script Editors
==============
Third-party libraries are used to implement the game's Script Editor(s). There are
currently two options for the Script Editor:
* `Ace <https://ace.c9.io/>`_
* `CodeMirror <https://codemirror.net/>`_
You can select which of the two editors you want to use on the Script Editor page
('Create Script' on the main menu).
Ace was the game's original Script Editor, while CodeMirror was added later in
v0.43.0. The two editors share many of the same features, so there is not a significant
difference between the two. Currently, CodeMirror is slightly more modern,
more customizable, and has a few quality-of-life improvements compared to Ace.
Universal Key Bindings
----------------------
These keyboard shortcuts are available in both the Ace and CodeMirror editors, regardless
of what key binding option you are using:
============= ===========================================================================
Shortcut Action
============= ===========================================================================
Ctrl + b Save script and return to :ref:`terminal`
Ctrl + space Show Autocomplete Hints
============= ===========================================================================
.. _scripteditor_linter:
Linter
------
Both script editors contain a linter, which is a tool that analyzes your
code and flags anything it thinks might be an error. You can see
warnings and errors from the linter on the left-hand side of the script editor. There
will be an icon on whatever lines the linter thinks might be problematic. Hovering
over the icon will display information on what the issue is.
Note that **just because the linter shows an error/warning, this does NOT automatically mean that**
**your script is broken and will fail to run.** This is especially true if you are using
:ref:`netscriptjs`. The linter used by the script editors isn't necessarily perfect or
up-to-date. Furthermore, the linter does not affect anything when you actually run scripts.
Ace
---
The following documents what the different settings/options do for the Ace editor,
as well as the different key binding settings. Note that the
information for the key bindings may not be completely comprehensive. You'll
have to dig into the editor source code if you want to learn more.
Settings
~~~~~~~~
===================== ===========================================================================================================
Setting Effect
===================== ===========================================================================================================
Theme Switch between different color schemes
Key Binding Switch between different key binding options. This changes what keyboard shortcuts are available
Highlight Active Line When enabled, the line on which the cursor currently resides will be highlighted.
Show Invisibles When enabled, you will be able to view hidden whitespace characters such as spaces, tabs, and newlines.
Use Soft Tab When enabled, tabs will be replaced with spaces
Max Error Count Specifies the (approximate) number of lines that will be linted
===================== ===========================================================================================================
Ace Key Bindings
~~~~~~~~~~~~~~~~
For Ace, the "Ace" Key Binding setting uses the default configuration. A list of these
`can be found here <https://github.com/ajaxorg/ace/wiki/Default-Keyboard-Shortcuts>`_.
Vim Key Bindings
~~~~~~~~~~~~~~~~
For Ace, the "Vim" Key Binding setting configures the editor to use
`Vim <https://en.wikipedia.org/wiki/Vim_(text_editor)>`_ key mappings. Note that while this tries
to emulate Vim features as faithfully as possible, it is not a complete Vim implementation.
Since I'm not familiar with Vim, I'll leave
`Ace's Vim Mode implementation here <https://github.com/ajaxorg/ace/blob/96088d0fc292daf0706b2d029cc03c3799be5974/lib/ace/keyboard/vim.js#L860>`_,
which I believe shows most of the implemented features.
Note that the following Vim Ex commands will properly save the script and/or quit the editor in game:
======= ==============================================
Command Effect
======= ==============================================
:w Save the script and return to :ref:`terminal`
:q Return to :ref:`terminal` **WITHOUT** saving
:x Save the script and return to :ref:`terminal`
:wq Save the script and return to :ref:`terminal`
======= ==============================================
Emacs Key Bindings
~~~~~~~~~~~~~~~~~~
For Ace, the "Emacs" Key Binding setting configures the editor to use
`Emacs <https://en.wikipedia.org/wiki/Emacs>`_ key mappings. Note that while this tries
to emulate the Emacs key mappings as faithfully as possible, it won't necessarily be a
complete implementation.
Since I'm not familiar with Emacs, I'll leave
`Ace's Emacs Mode implementation here <https://github.com/ajaxorg/ace/blob/96088d0fc292daf0706b2d029cc03c3799be5974/lib/ace/keyboard/emacs.js#L343>`_,
which I believe shows most of the implemented features.
CodeMirror
----------
The following documents what the different settings/options do for the CodeMirror editor,
as well as the shortcuts for the different key binding settings. Note that the
information for the key bindings may not be completely comprehensive. You'll
have to dig into the editor source code if you want to learn everything.
Settings
~~~~~~~~
========================== ===========================================================================================================
Setting Effect
========================== ===========================================================================================================
Theme Switch between different color schemes
Key Binding Switch between different key binding options. This changes what keyboard shortcuts are available
Highlight Active Line When enabled, the line on which the cursor currently resides will be highlighted.
Show Invisibles When enabled, you will be able to view hidden whitespace characters such as spaces, tabs, and newlines.
Use Soft Tab When enabled, tabs will be replaced with spaces
Auto-Close Brackets/Quotes When enabled, any opening brackets or quotes that are typed will be closed
Enable Linting Enable/Disable the :ref:`scripteditor_linter`
Continue Comments When enabled, pressing 'Enter' inside a comment block will continue the comment on the next line
========================== ===========================================================================================================
Default Key Bindings
~~~~~~~~~~~~~~~~~~~~
.. todo:: Fill out
Sublime Key Bindings
~~~~~~~~~~~~~~~~~~~~
.. todo:: Fill out
Vim Key Bindings
~~~~~~~~~~~~~~~~
.. todo:: Fill out
Emacs Key Bindings
~~~~~~~~~~~~~~~~~~
.. todo:: Fill out

@ -0,0 +1,37 @@
v1.0.0 Migration Guide
======================
In v1.0.0 a few API have been broken.
migrated (only for ns2):
* bladeburner.getActionTime will return milliseconds instead of seconds.
* getHackTime will return milliseconds instead of seconds.
* getGrowTime will return milliseconds instead of seconds.
* getWeakenTime will return milliseconds instead of seconds.
* hackAnalyzePercent renamed to hackAnalyze
* hackAnalyzePercent will return decimal instead of percentage
* hackChance (not formulas.basic.hackChance) renamed to hackAnalyzeChance
* formulas.basic is split into formulas.skills and formulas.hacking
not migrated (require manual changes sometimes):
* getPlayer().hacking_skill renamed `hacking`
* same thing in sleeves
* getPurchasedServers won't let you query for ips instead of hostnames.
* getStats is deprecated in favor getPlayer
* getCharacterInformation is deprecated in favor getPlayer
* getServerRam deprecated in favor of getServerMaxRam and getServerUsedRam
* getServerBaseSecurityLevel will be deprecated in favor of nothing, it's not really used.
* sleep can no longer be called simultenaously, a new function called asleep will let you.
* write returns promise (needs to be await ed).
* scp returns a promise (needs to be await ed).
* free port, write, read
* write, read does not support port anymore, writePort and readPort does.
Upon loading v1.0.0 the game will apply some rules to change everything.
The game never changes a file before making a backup called `BACKUP_filename.ext`, then,
in the script it will change whatever it thinks it should change.
But will prefix the modified line with the original line.
A file called `v1_DETECTED_CHANGES.txt` will point out every file with some possible problem.

@ -1,15 +0,0 @@
version: "3.4"
services:
web:
image: bitburner:dev
build:
context: .
dockerfile: Dockerfile
target: dev
ports:
- "8000:8000"
volumes:
- ./src:/app/src
- ./css:/app/css
- ./utils:/app/utils
- ./test:/app/test

BIN
electron/icon.icns Normal file

Binary file not shown.

BIN
electron/icon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

@ -1,11 +1,13 @@
const { app, BrowserWindow, Menu, globalShortcut, shell } = require("electron");
const debug = false;
Menu.setApplicationMenu(false);
function createWindow() {
const win = new BrowserWindow({
show: false,
webPreferences: {
devTools: true,
devTools: debug,
},
});
@ -13,7 +15,7 @@ function createWindow() {
win.maximize();
win.loadFile("index.html");
win.show();
win.webContents.openDevTools();
if (debug) win.webContents.openDevTools();
globalShortcut.register("f5", function () {
win.loadFile("index.html");
});

@ -3,5 +3,22 @@
"version": "1.0.0",
"description": "A cyberpunk-themed programming incremental game",
"main": "main.js",
"author": "Daniel Xie"
"author": "Daniel Xie & Olivier Gagnon",
"mac": {
"icon": "./public/icons/mac/icon.icns",
"category": "public.app-category.games"
},
"win": {
"icon": "./public/icons/png/256x256.png"
},
"files": [
"./build/**/*",
"./dist/**/*",
"./node_modules/**/*",
"./public/**/*",
"*.js"
],
"directories": {
"buildResources": "public"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -9,7 +9,7 @@ Data representing the internal values of an Augmentation.
<b>Signature:</b>
```typescript
interface AugmentationStats
export interface AugmentationStats
```
## Properties

@ -1,118 +0,0 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [AugmentName](./bitburner.augmentname.md)
## AugmentName type
All augmentation names.
<b>Signature:</b>
```typescript
type AugmentName =
| "Augmented Targeting I"
| "Augmented Targeting II"
| "Augmented Targeting III"
| "Synthetic Heart"
| "Synfibril Muscle"
| "Combat Rib I"
| "Combat Rib II"
| "Combat Rib III"
| "Nanofiber Weave"
| "NEMEAN Subdermal Weave"
| "Wired Reflexes"
| "Graphene Bone Lacings"
| "Bionic Spine"
| "Graphene Bionic Spine Upgrade"
| "Bionic Legs"
| "Graphene Bionic Legs Upgrade"
| "Speech Processor Implant"
| "TITN-41 Gene-Modification Injection"
| "Enhanced Social Interaction Implant"
| "BitWire"
| "Artificial Bio-neural Network Implant"
| "Artificial Synaptic Potentiation"
| "Enhanced Myelin Sheathing"
| "Synaptic Enhancement Implant"
| "Neural-Retention Enhancement"
| "DataJack"
| "Embedded Netburner Module"
| "Embedded Netburner Module Core Implant"
| "Embedded Netburner Module Core V2 Upgrade"
| "Embedded Netburner Module Core V3 Upgrade"
| "Embedded Netburner Module Analyze Engine"
| "Embedded Netburner Module Direct Memory Access Upgrade"
| "Neuralstimulator"
| "Neural Accelerator"
| "Cranial Signal Processors - Gen I"
| "Cranial Signal Processors - Gen II"
| "Cranial Signal Processors - Gen III"
| "Cranial Signal Processors - Gen IV"
| "Cranial Signal Processors - Gen V"
| "Neuronal Densification"
| "Nuoptimal Nootropic Injector Implant"
| "Speech Enhancement"
| "FocusWire"
| "PC Direct-Neural Interface"
| "PC Direct-Neural Interface Optimization Submodule"
| "PC Direct-Neural Interface NeuroNet Injector"
| "ADR-V1 Pheromone Gene"
| "ADR-V2 Pheromone Gene"
| "The Shadow's Simulacrum"
| "Hacknet Node CPU Architecture Neural-Upload"
| "Hacknet Node Cache Architecture Neural-Upload"
| "Hacknet Node NIC Architecture Neural-Upload"
| "Hacknet Node Kernel Direct-Neural Interface"
| "Hacknet Node Core Direct-Neural Interface"
| "NeuroFlux Governor"
| "Neurotrainer I"
| "Neurotrainer II"
| "Neurotrainer III"
| "HyperSight Corneal Implant"
| "LuminCloaking-V1 Skin Implant"
| "LuminCloaking-V2 Skin Implant"
| "HemoRecirculator"
| "SmartSonar Implant"
| "Power Recirculation Core"
| "QLink"
| "The Red Pill"
| "SPTN-97 Gene Modification"
| "ECorp HVMind Implant"
| "CordiARC Fusion Reactor"
| "SmartJaw"
| "Neotra"
| "Xanipher"
| "nextSENS Gene Modification"
| "OmniTek InfoLoad"
| "Photosynthetic Cells"
| "BitRunners Neurolink"
| "The Black Hand"
| "CRTX42-AA Gene Modification"
| "Neuregen Gene Modification"
| "CashRoot Starter Kit"
| "NutriGen Implant"
| "INFRARET Enhancement"
| "DermaForce Particle Barrier"
| "Graphene BranchiBlades Upgrade"
| "Graphene Bionic Arms Upgrade"
| "BrachiBlades"
| "Bionic Arms"
| "Social Negotiation Assistant (S.N.A)"
| "EsperTech Bladeburner Eyewear"
| "EMS-4 Recombination"
| "ORION-MKIV Shoulder"
| "Hyperion Plasma Cannon V1"
| "Hyperion Plasma Cannon V2"
| "GOLEM Serum"
| "Vangelis Virus"
| "Vangelis Virus 3.0"
| "I.N.T.E.R.L.I.N.K.E.D"
| "Blade's Runners"
| "BLADE-51b Tesla Armor"
| "BLADE-51b Tesla Armor: Power Cells Upgrade"
| "BLADE-51b Tesla Armor: Energy Shielding Upgrade"
| "BLADE-51b Tesla Armor: Unibeam Upgrade"
| "BLADE-51b Tesla Armor: Omnibeam Upgrade"
| "BLADE-51b Tesla Armor: IPU Upgrade"
| "The Blade's Simulacrum";
```

@ -9,7 +9,7 @@ Return value of [getSleevePurchasableAugs](./bitburner.sleeve.getsleevepurchasab
<b>Signature:</b>
```typescript
interface AugmentPair
export interface AugmentPair
```
## Properties
@ -17,5 +17,5 @@ interface AugmentPair
| Property | Type | Description |
| --- | --- | --- |
| [cost](./bitburner.augmentpair.cost.md) | number | augmentation cost |
| [name](./bitburner.augmentpair.name.md) | [AugmentName](./bitburner.augmentname.md) | augmentation name |
| [name](./bitburner.augmentpair.name.md) | string | augmentation name |

@ -9,5 +9,5 @@ augmentation name
<b>Signature:</b>
```typescript
name: AugmentName;
name: string;
```

@ -9,7 +9,7 @@ Options to affect the behavior of [hack](./bitburner.ns.hack.md)<!-- -->, [grow]
<b>Signature:</b>
```typescript
interface BasicHGWOptions
export interface BasicHGWOptions
```
## Properties

@ -9,7 +9,7 @@ All multipliers affecting the difficulty of the current challenge.
<b>Signature:</b>
```typescript
interface BitNodeMultipliers
export interface BitNodeMultipliers
```
## Properties

@ -4,27 +4,20 @@
## Bladeburner.getActionAutolevel() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
Return a boolean indicating whether or not this action is currently set to autolevel.
Returns false if an invalid action is specified.
Get wether an action is set to autolevel.
<b>Signature:</b>
```typescript
getActionAutolevel(
type: BladeburnerActTypes,
name: BladeburnerGenActions | BladeburnerContracts | BladeburnerOperations | BladeburnerBlackOps,
): boolean;
getActionAutolevel(type: string, name: string): boolean;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| type | [BladeburnerActTypes](./bitburner.bladeburneracttypes.md) | Type of action. |
| name | [BladeburnerGenActions](./bitburner.bladeburnergenactions.md) \| [BladeburnerContracts](./bitburner.bladeburnercontracts.md) \| [BladeburnerOperations](./bitburner.bladeburneroperations.md) \| [BladeburnerBlackOps](./bitburner.bladeburnerblackops.md) | Name of action. Must be an exact match. |
| type | string | Type of action. |
| name | string | Name of action. Must be an exact match. |
<b>Returns:</b>
@ -36,3 +29,7 @@ True if the action is set to autolevel, and false otherwise.
RAM cost: 4 GB
Return a boolean indicating whether or not this action is currently set to autolevel.
Returns false if an invalid action is specified.

@ -4,27 +4,20 @@
## Bladeburner.getActionCountRemaining() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
Returns the remaining count of the specified action.
Note that this is meant to be used for Contracts and Operations. This function will return Infinity for actions such as Training and Field Analysis. This function will return 1 for BlackOps not yet completed regardless of wether the player has the required rank to attempt the mission or not.
Get action count remaining.
<b>Signature:</b>
```typescript
getActionCountRemaining(
type: BladeburnerActTypes,
name: BladeburnerGenActions | BladeburnerContracts | BladeburnerOperations | BladeburnerBlackOps,
): number;
getActionCountRemaining(type: string, name: string): number;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| type | [BladeburnerActTypes](./bitburner.bladeburneracttypes.md) | Type of action. |
| name | [BladeburnerGenActions](./bitburner.bladeburnergenactions.md) \| [BladeburnerContracts](./bitburner.bladeburnercontracts.md) \| [BladeburnerOperations](./bitburner.bladeburneroperations.md) \| [BladeburnerBlackOps](./bitburner.bladeburnerblackops.md) | Name of action. Must be an exact match. |
| type | string | Type of action. |
| name | string | Name of action. Must be an exact match. |
<b>Returns:</b>
@ -36,3 +29,7 @@ Remaining count of the specified action.
RAM cost: 4 GB
Returns the remaining count of the specified action.
Note that this is meant to be used for Contracts and Operations. This function will return Infinity for actions such as Training and Field Analysis. This function will return 1 for BlackOps not yet completed regardless of wether the player has the required rank to attempt the mission or not.

@ -4,27 +4,20 @@
## Bladeburner.getActionCurrentLevel() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
Returns the current level of this action.
Returns -1 if an invalid action is specified.
Get the current level of an action.
<b>Signature:</b>
```typescript
getActionCurrentLevel(
type: BladeburnerActTypes,
name: BladeburnerGenActions | BladeburnerContracts | BladeburnerOperations | BladeburnerBlackOps,
): number;
getActionCurrentLevel(type: string, name: string): number;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| type | [BladeburnerActTypes](./bitburner.bladeburneracttypes.md) | Type of action. |
| name | [BladeburnerGenActions](./bitburner.bladeburnergenactions.md) \| [BladeburnerContracts](./bitburner.bladeburnercontracts.md) \| [BladeburnerOperations](./bitburner.bladeburneroperations.md) \| [BladeburnerBlackOps](./bitburner.bladeburnerblackops.md) | Name of action. Must be an exact match. |
| type | string | Type of action. |
| name | string | Name of action. Must be an exact match. |
<b>Returns:</b>
@ -36,3 +29,7 @@ Current level of the specified action.
RAM cost: 4 GB
Returns the current level of this action.
Returns -1 if an invalid action is specified.

@ -4,29 +4,24 @@
## Bladeburner.getActionEstimatedSuccessChance() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
Returns the estimated success chance for the specified action. This chance is returned as a decimal value, NOT a percentage (e.g. if you have an estimated success chance of 80%, then this function will return 0.80, NOT 80).
Get estimate success chance of an action.
<b>Signature:</b>
```typescript
getActionEstimatedSuccessChance(
type: BladeburnerActTypes,
name: BladeburnerGenActions | BladeburnerContracts | BladeburnerOperations | BladeburnerBlackOps,
): number;
getActionEstimatedSuccessChance(type: string, name: string): [number, number];
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| type | [BladeburnerActTypes](./bitburner.bladeburneracttypes.md) | Type of action. |
| name | [BladeburnerGenActions](./bitburner.bladeburnergenactions.md) \| [BladeburnerContracts](./bitburner.bladeburnercontracts.md) \| [BladeburnerOperations](./bitburner.bladeburneroperations.md) \| [BladeburnerBlackOps](./bitburner.bladeburnerblackops.md) | Name of action. Must be an exact match. |
| type | string | Type of action. |
| name | string | Name of action. Must be an exact match. |
<b>Returns:</b>
number
\[number, number\]
Estimated success chance for the specified action.
@ -34,3 +29,5 @@ Estimated success chance for the specified action.
RAM cost: 4 GB
Returns the estimated success chance for the specified action. This chance is returned as a decimal value, NOT a percentage (e.g. if you have an estimated success chance of 80%, then this function will return 0.80, NOT 80).

@ -4,27 +4,20 @@
## Bladeburner.getActionMaxLevel() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
Returns the maximum level for this action.
Returns -1 if an invalid action is specified.
Get the maximum level of an action.
<b>Signature:</b>
```typescript
getActionMaxLevel(
type: BladeburnerActTypes,
name: BladeburnerGenActions | BladeburnerContracts | BladeburnerOperations | BladeburnerBlackOps,
): number;
getActionMaxLevel(type: string, name: string): number;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| type | [BladeburnerActTypes](./bitburner.bladeburneracttypes.md) | Type of action. |
| name | [BladeburnerGenActions](./bitburner.bladeburnergenactions.md) \| [BladeburnerContracts](./bitburner.bladeburnercontracts.md) \| [BladeburnerOperations](./bitburner.bladeburneroperations.md) \| [BladeburnerBlackOps](./bitburner.bladeburnerblackops.md) | Name of action. Must be an exact match. |
| type | string | Type of action. |
| name | string | Name of action. Must be an exact match. |
<b>Returns:</b>
@ -36,3 +29,7 @@ Maximum level of the specified action.
RAM cost: 4 GB
Returns the maximum level for this action.
Returns -1 if an invalid action is specified.

@ -4,26 +4,20 @@
## Bladeburner.getActionRepGain() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
Returns the average Bladeburner reputation gain for successfully completing the specified action. Note that this value is an average and the real reputation gain may vary slightly from this value.
Get the reputation gain of an action.
<b>Signature:</b>
```typescript
getActionRepGain(
type: BladeburnerActTypes,
name: BladeburnerGenActions | BladeburnerContracts | BladeburnerOperations | BladeburnerBlackOps,
level: number,
): number;
getActionRepGain(type: string, name: string, level: number): number;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| type | [BladeburnerActTypes](./bitburner.bladeburneracttypes.md) | Type of action. |
| name | [BladeburnerGenActions](./bitburner.bladeburnergenactions.md) \| [BladeburnerContracts](./bitburner.bladeburnercontracts.md) \| [BladeburnerOperations](./bitburner.bladeburneroperations.md) \| [BladeburnerBlackOps](./bitburner.bladeburnerblackops.md) | Name of action. Must be an exact match. |
| type | string | Type of action. |
| name | string | Name of action. Must be an exact match. |
| level | number | Optional action level at which to calculate the gain |
<b>Returns:</b>
@ -36,3 +30,5 @@ Average Bladeburner reputation gain for successfully completing the specified ac
RAM cost: 4 GB
Returns the average Bladeburner reputation gain for successfully completing the specified action. Note that this value is an average and the real reputation gain may vary slightly from this value.

@ -4,33 +4,30 @@
## Bladeburner.getActionTime() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
Returns the number of seconds it takes to complete the specified action
Get the time to complete an action.
<b>Signature:</b>
```typescript
getActionTime(
type: BladeburnerActTypes,
name: BladeburnerGenActions | BladeburnerContracts | BladeburnerOperations | BladeburnerBlackOps,
): number;
getActionTime(type: string, name: string): number;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| type | [BladeburnerActTypes](./bitburner.bladeburneracttypes.md) | Type of action. |
| name | [BladeburnerGenActions](./bitburner.bladeburnergenactions.md) \| [BladeburnerContracts](./bitburner.bladeburnercontracts.md) \| [BladeburnerOperations](./bitburner.bladeburneroperations.md) \| [BladeburnerBlackOps](./bitburner.bladeburnerblackops.md) | Name of action. Must be an exact match. |
| type | string | Type of action. |
| name | string | Name of action. Must be an exact match. |
<b>Returns:</b>
number
Number of seconds it takes to complete the specified action.
Number of milliseconds it takes to complete the specified action.
## Remarks
RAM cost: 4 GB
Returns the number of seconds it takes to complete the specified action

@ -4,18 +4,16 @@
## Bladeburner.getBlackOpNames() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
Returns an array of strings containing the names of all Bladeburner Black Ops.
List all black ops.
<b>Signature:</b>
```typescript
getBlackOpNames(): BladeburnerBlackOps[];
getBlackOpNames(): string[];
```
<b>Returns:</b>
[BladeburnerBlackOps](./bitburner.bladeburnerblackops.md)<!-- -->\[\]
string\[\]
Array of strings containing the names of all Bladeburner Black Ops.
@ -23,3 +21,5 @@ Array of strings containing the names of all Bladeburner Black Ops.
RAM cost: 0.4 GB
Returns an array of strings containing the names of all Bladeburner Black Ops.

@ -4,23 +4,19 @@
## Bladeburner.getBlackOpRank() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
Returns the rank required to complete this BlackOp.
Returns -1 if an invalid action is specified.
Get black op required rank.
<b>Signature:</b>
```typescript
getBlackOpRank(name: BladeburnerBlackOps): number;
getBlackOpRank(name: string): number;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| name | [BladeburnerBlackOps](./bitburner.bladeburnerblackops.md) | Name of BlackOp. Must be an exact match. |
| name | string | Name of BlackOp. Must be an exact match. |
<b>Returns:</b>
@ -32,3 +28,7 @@ Rank required to complete this BlackOp.
RAM cost: 2 GB
Returns the rank required to complete this BlackOp.
Returns -1 if an invalid action is specified.

@ -4,13 +4,7 @@
## Bladeburner.getBonusTime() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
Returns the amount of accumulated “bonus time” (seconds) for the Bladeburner mechanic.
“Bonus time” is accumulated when the game is offline or if the game is inactive in the browser.
“Bonus time” makes the game progress faster, up to 5x the normal speed. For example, if an action takes 30 seconds to complete but youve accumulated over 30 seconds in bonus time, then the action will only take 6 seconds in real life to complete.
Get bladeburner bonus time.
<b>Signature:</b>
@ -21,9 +15,15 @@ getBonusTime(): number;
number
Amount of accumulated “bonus time” (seconds) for the Bladeburner mechanic.
Amount of accumulated “bonus time” (milliseconds) for the Bladeburner mechanic.
## Remarks
RAM cost: 0 GB
Returns the amount of accumulated “bonus time” (seconds) for the Bladeburner mechanic.
“Bonus time” is accumulated when the game is offline or if the game is inactive in the browser.
“Bonus time” makes the game progress faster, up to 5x the normal speed. For example, if an action takes 30 seconds to complete but youve accumulated over 30 seconds in bonus time, then the action will only take 6 seconds in real life to complete.

@ -4,18 +4,16 @@
## Bladeburner.getCity() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
Returns the city that the player is currently in (for Bladeburner).
Get current city.
<b>Signature:</b>
```typescript
getCity(): City;
getCity(): string;
```
<b>Returns:</b>
[City](./bitburner.city.md)
string
City that the player is currently in (for Bladeburner).
@ -23,3 +21,5 @@ City that the player is currently in (for Bladeburner).
RAM cost: 4 GB
Returns the city that the player is currently in (for Bladeburner).

@ -4,21 +4,19 @@
## Bladeburner.getCityChaos() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
Returns the chaos in the specified city, or -1 if an invalid city was specified.
Get chaos of a city.
<b>Signature:</b>
```typescript
getCityChaos(name: City): number;
getCityChaos(name: string): number;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| name | [City](./bitburner.city.md) | |
| name | string | |
<b>Returns:</b>
@ -30,3 +28,5 @@ Chaos in the specified city.
RAM cost: 4 GB
Returns the chaos in the specified city, or -1 if an invalid city was specified.

@ -4,21 +4,19 @@
## Bladeburner.getCityCommunities() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
Returns the estimated number of Synthoid communities in the specified city, or -1 if an invalid city was specified.
Get number of communities in a city.
<b>Signature:</b>
```typescript
getCityCommunities(name: City): number;
getCityCommunities(name: string): number;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| name | [City](./bitburner.city.md) | |
| name | string | |
<b>Returns:</b>
@ -30,3 +28,5 @@ Number of Synthoids communities in the specified city.
RAM cost: 4 GB
Returns the estimated number of Synthoid communities in the specified city, or -1 if an invalid city was specified.

@ -4,21 +4,19 @@
## Bladeburner.getCityEstimatedPopulation() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
Returns the estimated number of Synthoids in the specified city, or -1 if an invalid city was specified.
Get estimated population in city.
<b>Signature:</b>
```typescript
getCityEstimatedPopulation(name: City): number;
getCityEstimatedPopulation(name: string): number;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| name | [City](./bitburner.city.md) | |
| name | string | |
<b>Returns:</b>
@ -30,3 +28,5 @@ Estimated number of Synthoids in the specified city.
RAM cost: 4 GB
Returns the estimated number of Synthoids in the specified city, or -1 if an invalid city was specified.

@ -4,18 +4,16 @@
## Bladeburner.getContractNames() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
Returns an array of strings containing the names of all Bladeburner contracts.
List all contracts.
<b>Signature:</b>
```typescript
getContractNames(): BladeburnerContracts[];
getContractNames(): string[];
```
<b>Returns:</b>
[BladeburnerContracts](./bitburner.bladeburnercontracts.md)<!-- -->\[\]
string\[\]
Array of strings containing the names of all Bladeburner contracts.
@ -23,3 +21,5 @@ Array of strings containing the names of all Bladeburner contracts.
RAM cost: 0.4 GB
Returns an array of strings containing the names of all Bladeburner contracts.

@ -4,9 +4,7 @@
## Bladeburner.getCurrentAction() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
Returns an object that represents the players current Bladeburner action. If the player is not performing an action, the function will return an object with the type property set to “Idle”.
Get current action.
<b>Signature:</b>
@ -23,3 +21,5 @@ Object that represents the players current Bladeburner action.
RAM cost: 1 GB
Returns an object that represents the players current Bladeburner action. If the player is not performing an action, the function will return an object with the type property set to “Idle”.

@ -4,18 +4,16 @@
## Bladeburner.getGeneralActionNames() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
Returns an array of strings containing the names of all general Bladeburner actions.
List all general actions.
<b>Signature:</b>
```typescript
getGeneralActionNames(): BladeburnerGenActions[];
getGeneralActionNames(): string[];
```
<b>Returns:</b>
[BladeburnerGenActions](./bitburner.bladeburnergenactions.md)<!-- -->\[\]
string\[\]
Array of strings containing the names of all general Bladeburner actions.
@ -23,3 +21,5 @@ Array of strings containing the names of all general Bladeburner actions.
RAM cost: 0.4 GB
Returns an array of strings containing the names of all general Bladeburner actions.

@ -4,18 +4,16 @@
## Bladeburner.getOperationNames() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
Returns an array of strings containing the names of all Bladeburner operations.
List all operations.
<b>Signature:</b>
```typescript
getOperationNames(): BladeburnerOperations[];
getOperationNames(): string[];
```
<b>Returns:</b>
[BladeburnerOperations](./bitburner.bladeburneroperations.md)<!-- -->\[\]
string\[\]
Array of strings containing the names of all Bladeburner operations.
@ -23,3 +21,5 @@ Array of strings containing the names of all Bladeburner operations.
RAM cost: 0.4 GB
Returns an array of strings containing the names of all Bladeburner operations.

@ -4,9 +4,7 @@
## Bladeburner.getRank() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
Returns the players Bladeburner Rank.
Get player bladeburner rank.
<b>Signature:</b>
@ -23,3 +21,5 @@ Players Bladeburner Rank.
RAM cost: 4 GB
Returns the players Bladeburner Rank.

@ -4,23 +4,19 @@
## Bladeburner.getSkillLevel() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
This function returns your level in the specified skill.
The function returns -1 if an invalid skill name is passed in.
Get skill level.
<b>Signature:</b>
```typescript
getSkillLevel(name: BladeburnerSkills): number;
getSkillLevel(name: string): number;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| name | [BladeburnerSkills](./bitburner.bladeburnerskills.md) | |
| name | string | |
<b>Returns:</b>
@ -32,3 +28,7 @@ Level in the specified skill.
RAM cost: 4 GB
This function returns your level in the specified skill.
The function returns -1 if an invalid skill name is passed in.

@ -4,18 +4,16 @@
## Bladeburner.getSkillNames() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
Returns an array of strings containing the names of all general Bladeburner skills.
List all skills.
<b>Signature:</b>
```typescript
getSkillNames(): BladeburnerSkills[];
getSkillNames(): string[];
```
<b>Returns:</b>
[BladeburnerSkills](./bitburner.bladeburnerskills.md)<!-- -->\[\]
string\[\]
Array of strings containing the names of all general Bladeburner skills.
@ -23,3 +21,5 @@ Array of strings containing the names of all general Bladeburner skills.
RAM cost: 0.4 GB
Returns an array of strings containing the names of all general Bladeburner skills.

@ -4,9 +4,7 @@
## Bladeburner.getSkillPoints() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
Returns the number of Bladeburner skill points you have.
Get bladeburner skill points.
<b>Signature:</b>
@ -23,3 +21,5 @@ Number of Bladeburner skill points you have.
RAM cost: 4 GB
Returns the number of Bladeburner skill points you have.

@ -4,23 +4,19 @@
## Bladeburner.getSkillUpgradeCost() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
This function returns the number of skill points needed to upgrade the specified skill.
The function returns -1 if an invalid skill name is passed in.
Get cost to upgrade skill.
<b>Signature:</b>
```typescript
getSkillUpgradeCost(name: BladeburnerSkills): number;
getSkillUpgradeCost(name: string): number;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| name | [BladeburnerSkills](./bitburner.bladeburnerskills.md) | |
| name | string | |
<b>Returns:</b>
@ -32,3 +28,7 @@ Number of skill points needed to upgrade the specified skill.
RAM cost: 4 GB
This function returns the number of skill points needed to upgrade the specified skill.
The function returns -1 if an invalid skill name is passed in.

@ -4,9 +4,7 @@
## Bladeburner.getStamina() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
Returns an array with two elements: \* \[Current stamina, Max stamina\]
Get bladeburner stamina.
<b>Signature:</b>
@ -21,7 +19,7 @@ Array containing current stamina and max stamina.
## Remarks
RAM cost: 4 GB
RAM cost: 4 GB Returns an array with two elements: \* \[Current stamina, Max stamina\]
## Example

@ -4,27 +4,20 @@
## Bladeburner.getTeamSize() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
Returns the number of Bladeburner team members you have assigned to the specified action.
Setting a team is only applicable for Operations and BlackOps. This function will return 0 for other action types.
Get team size.
<b>Signature:</b>
```typescript
getTeamSize(
type: BladeburnerActTypes,
name: BladeburnerGenActions | BladeburnerContracts | BladeburnerOperations | BladeburnerBlackOps,
): number;
getTeamSize(type: string, name: string): number;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| type | [BladeburnerActTypes](./bitburner.bladeburneracttypes.md) | Type of action. |
| name | [BladeburnerGenActions](./bitburner.bladeburnergenactions.md) \| [BladeburnerContracts](./bitburner.bladeburnercontracts.md) \| [BladeburnerOperations](./bitburner.bladeburneroperations.md) \| [BladeburnerBlackOps](./bitburner.bladeburnerblackops.md) | Name of action. Must be an exact match. |
| type | string | Type of action. |
| name | string | Name of action. Must be an exact match. |
<b>Returns:</b>
@ -36,3 +29,7 @@ Number of Bladeburner team members that were assigned to the specified action.
RAM cost: 4 GB
Returns the number of Bladeburner team members you have assigned to the specified action.
Setting a team is only applicable for Operations and BlackOps. This function will return 0 for other action types.

@ -4,13 +4,7 @@
## Bladeburner.joinBladeburnerDivision() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
Attempts to join the Bladeburner division.
Returns true if you successfully join the Bladeburner division, or if you are already a member.
Returns false otherwise.
Join the bladeburner division.
<b>Signature:</b>
@ -27,3 +21,9 @@ True if you successfully join the Bladeburner division, or if you are already a
RAM cost: 4 GB
Attempts to join the Bladeburner division.
Returns true if you successfully join the Bladeburner division, or if you are already a member.
Returns false otherwise.

@ -4,13 +4,7 @@
## Bladeburner.joinBladeburnerFaction() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
Attempts to join the Bladeburner faction.
Returns true if you successfully join the Bladeburner faction, or if you are already a member.
Returns false otherwise.
Join the bladeburner faction.
<b>Signature:</b>
@ -25,5 +19,9 @@ True if you successfully join the Bladeburner faction, or if you are already a m
## Remarks
RAM cost: 4 GB
RAM cost: 4 GB Attempts to join the Bladeburner faction.
Returns true if you successfully join the Bladeburner faction, or if you are already a member.
Returns false otherwise.

@ -4,6 +4,7 @@
## Bladeburner interface
Bladeburner API
<b>Signature:</b>
@ -11,42 +12,46 @@
export interface Bladeburner
```
## Remarks
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this API.
## Methods
| Method | Description |
| --- | --- |
| [getActionAutolevel(type, name)](./bitburner.bladeburner.getactionautolevel.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->Return a boolean indicating whether or not this action is currently set to autolevel.<!-- -->Returns false if an invalid action is specified. |
| [getActionCountRemaining(type, name)](./bitburner.bladeburner.getactioncountremaining.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->Returns the remaining count of the specified action.<!-- -->Note that this is meant to be used for Contracts and Operations. This function will return Infinity for actions such as Training and Field Analysis. This function will return 1 for BlackOps not yet completed regardless of wether the player has the required rank to attempt the mission or not. |
| [getActionCurrentLevel(type, name)](./bitburner.bladeburner.getactioncurrentlevel.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->Returns the current level of this action.<!-- -->Returns -1 if an invalid action is specified. |
| [getActionEstimatedSuccessChance(type, name)](./bitburner.bladeburner.getactionestimatedsuccesschance.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->Returns the estimated success chance for the specified action. This chance is returned as a decimal value, NOT a percentage (e.g. if you have an estimated success chance of 80%, then this function will return 0.80, NOT 80). |
| [getActionMaxLevel(type, name)](./bitburner.bladeburner.getactionmaxlevel.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->Returns the maximum level for this action.<!-- -->Returns -1 if an invalid action is specified. |
| [getActionRepGain(type, name, level)](./bitburner.bladeburner.getactionrepgain.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->Returns the average Bladeburner reputation gain for successfully completing the specified action. Note that this value is an average and the real reputation gain may vary slightly from this value. |
| [getActionTime(type, name)](./bitburner.bladeburner.getactiontime.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->Returns the number of seconds it takes to complete the specified action |
| [getBlackOpNames()](./bitburner.bladeburner.getblackopnames.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->Returns an array of strings containing the names of all Bladeburner Black Ops. |
| [getBlackOpRank(name)](./bitburner.bladeburner.getblackoprank.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->Returns the rank required to complete this BlackOp.<!-- -->Returns -1 if an invalid action is specified. |
| [getBonusTime()](./bitburner.bladeburner.getbonustime.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->Returns the amount of accumulated “bonus time” (seconds) for the Bladeburner mechanic.<!-- -->“Bonus time” is accumulated when the game is offline or if the game is inactive in the browser.<!-- -->“Bonus time” makes the game progress faster, up to 5x the normal speed. For example, if an action takes 30 seconds to complete but youve accumulated over 30 seconds in bonus time, then the action will only take 6 seconds in real life to complete. |
| [getCity()](./bitburner.bladeburner.getcity.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->Returns the city that the player is currently in (for Bladeburner). |
| [getCityChaos(name)](./bitburner.bladeburner.getcitychaos.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->Returns the chaos in the specified city, or -1 if an invalid city was specified. |
| [getCityCommunities(name)](./bitburner.bladeburner.getcitycommunities.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->Returns the estimated number of Synthoid communities in the specified city, or -1 if an invalid city was specified. |
| [getCityEstimatedPopulation(name)](./bitburner.bladeburner.getcityestimatedpopulation.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->Returns the estimated number of Synthoids in the specified city, or -1 if an invalid city was specified. |
| [getContractNames()](./bitburner.bladeburner.getcontractnames.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->Returns an array of strings containing the names of all Bladeburner contracts. |
| [getCurrentAction()](./bitburner.bladeburner.getcurrentaction.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->Returns an object that represents the players current Bladeburner action. If the player is not performing an action, the function will return an object with the type property set to “Idle”. |
| [getGeneralActionNames()](./bitburner.bladeburner.getgeneralactionnames.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->Returns an array of strings containing the names of all general Bladeburner actions. |
| [getOperationNames()](./bitburner.bladeburner.getoperationnames.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->Returns an array of strings containing the names of all Bladeburner operations. |
| [getRank()](./bitburner.bladeburner.getrank.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->Returns the players Bladeburner Rank. |
| [getSkillLevel(name)](./bitburner.bladeburner.getskilllevel.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->This function returns your level in the specified skill.<!-- -->The function returns -1 if an invalid skill name is passed in. |
| [getSkillNames()](./bitburner.bladeburner.getskillnames.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->Returns an array of strings containing the names of all general Bladeburner skills. |
| [getSkillPoints()](./bitburner.bladeburner.getskillpoints.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->Returns the number of Bladeburner skill points you have. |
| [getSkillUpgradeCost(name)](./bitburner.bladeburner.getskillupgradecost.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->This function returns the number of skill points needed to upgrade the specified skill.<!-- -->The function returns -1 if an invalid skill name is passed in. |
| [getStamina()](./bitburner.bladeburner.getstamina.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->Returns an array with two elements: \* \[Current stamina, Max stamina\] |
| [getTeamSize(type, name)](./bitburner.bladeburner.getteamsize.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->Returns the number of Bladeburner team members you have assigned to the specified action.<!-- -->Setting a team is only applicable for Operations and BlackOps. This function will return 0 for other action types. |
| [joinBladeburnerDivision()](./bitburner.bladeburner.joinbladeburnerdivision.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->Attempts to join the Bladeburner division.<!-- -->Returns true if you successfully join the Bladeburner division, or if you are already a member.<!-- -->Returns false otherwise. |
| [joinBladeburnerFaction()](./bitburner.bladeburner.joinbladeburnerfaction.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->Attempts to join the Bladeburner faction.<!-- -->Returns true if you successfully join the Bladeburner faction, or if you are already a member.<!-- -->Returns false otherwise. |
| [setActionAutolevel(type, name, autoLevel)](./bitburner.bladeburner.setactionautolevel.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->Enable/disable autoleveling for the specified action. |
| [setActionLevel(type, name, level)](./bitburner.bladeburner.setactionlevel.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->Set the level for the specified action. |
| [setTeamSize(type, name, size)](./bitburner.bladeburner.setteamsize.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->Set the team size for the specified Bladeburner action.<!-- -->Returns the team size that was set, or -1 if the function failed. |
| [startAction(type, name)](./bitburner.bladeburner.startaction.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->Attempts to start the specified Bladeburner action. Returns true if the action was started successfully, and false otherwise. |
| [stopBladeburnerAction()](./bitburner.bladeburner.stopbladeburneraction.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->Stops the current Bladeburner action. |
| [switchCity(name)](./bitburner.bladeburner.switchcity.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->Attempts to switch to the specified city (for Bladeburner only).<!-- -->Returns true if successful, and false otherwise |
| [upgradeSkill(name)](./bitburner.bladeburner.upgradeskill.md) | You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.<!-- -->Attempts to upgrade the specified Bladeburner skill.<!-- -->Returns true if the skill is successfully upgraded, and false otherwise. |
| [getActionAutolevel(type, name)](./bitburner.bladeburner.getactionautolevel.md) | Get wether an action is set to autolevel. |
| [getActionCountRemaining(type, name)](./bitburner.bladeburner.getactioncountremaining.md) | Get action count remaining. |
| [getActionCurrentLevel(type, name)](./bitburner.bladeburner.getactioncurrentlevel.md) | Get the current level of an action. |
| [getActionEstimatedSuccessChance(type, name)](./bitburner.bladeburner.getactionestimatedsuccesschance.md) | Get estimate success chance of an action. |
| [getActionMaxLevel(type, name)](./bitburner.bladeburner.getactionmaxlevel.md) | Get the maximum level of an action. |
| [getActionRepGain(type, name, level)](./bitburner.bladeburner.getactionrepgain.md) | Get the reputation gain of an action. |
| [getActionTime(type, name)](./bitburner.bladeburner.getactiontime.md) | Get the time to complete an action. |
| [getBlackOpNames()](./bitburner.bladeburner.getblackopnames.md) | List all black ops. |
| [getBlackOpRank(name)](./bitburner.bladeburner.getblackoprank.md) | Get black op required rank. |
| [getBonusTime()](./bitburner.bladeburner.getbonustime.md) | Get bladeburner bonus time. |
| [getCity()](./bitburner.bladeburner.getcity.md) | Get current city. |
| [getCityChaos(name)](./bitburner.bladeburner.getcitychaos.md) | Get chaos of a city. |
| [getCityCommunities(name)](./bitburner.bladeburner.getcitycommunities.md) | Get number of communities in a city. |
| [getCityEstimatedPopulation(name)](./bitburner.bladeburner.getcityestimatedpopulation.md) | Get estimated population in city. |
| [getContractNames()](./bitburner.bladeburner.getcontractnames.md) | List all contracts. |
| [getCurrentAction()](./bitburner.bladeburner.getcurrentaction.md) | Get current action. |
| [getGeneralActionNames()](./bitburner.bladeburner.getgeneralactionnames.md) | List all general actions. |
| [getOperationNames()](./bitburner.bladeburner.getoperationnames.md) | List all operations. |
| [getRank()](./bitburner.bladeburner.getrank.md) | Get player bladeburner rank. |
| [getSkillLevel(name)](./bitburner.bladeburner.getskilllevel.md) | Get skill level. |
| [getSkillNames()](./bitburner.bladeburner.getskillnames.md) | List all skills. |
| [getSkillPoints()](./bitburner.bladeburner.getskillpoints.md) | Get bladeburner skill points. |
| [getSkillUpgradeCost(name)](./bitburner.bladeburner.getskillupgradecost.md) | Get cost to upgrade skill. |
| [getStamina()](./bitburner.bladeburner.getstamina.md) | Get bladeburner stamina. |
| [getTeamSize(type, name)](./bitburner.bladeburner.getteamsize.md) | Get team size. |
| [joinBladeburnerDivision()](./bitburner.bladeburner.joinbladeburnerdivision.md) | Join the bladeburner division. |
| [joinBladeburnerFaction()](./bitburner.bladeburner.joinbladeburnerfaction.md) | Join the bladeburner faction. |
| [setActionAutolevel(type, name, autoLevel)](./bitburner.bladeburner.setactionautolevel.md) | Set an action autolevel. |
| [setActionLevel(type, name, level)](./bitburner.bladeburner.setactionlevel.md) | Set the level of an action. |
| [setTeamSize(type, name, size)](./bitburner.bladeburner.setteamsize.md) | Set team size. |
| [startAction(type, name)](./bitburner.bladeburner.startaction.md) | Start an action. |
| [stopBladeburnerAction()](./bitburner.bladeburner.stopbladeburneraction.md) | Stop current action. |
| [switchCity(name)](./bitburner.bladeburner.switchcity.md) | Travel to another city in bladeburner. |
| [upgradeSkill(name)](./bitburner.bladeburner.upgradeskill.md) | Upgrade skill. |

@ -4,26 +4,20 @@
## Bladeburner.setActionAutolevel() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
Enable/disable autoleveling for the specified action.
Set an action autolevel.
<b>Signature:</b>
```typescript
setActionAutolevel(
type: BladeburnerActTypes,
name: BladeburnerGenActions | BladeburnerContracts | BladeburnerOperations | BladeburnerBlackOps,
autoLevel: boolean,
): void;
setActionAutolevel(type: string, name: string, autoLevel: boolean): void;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| type | [BladeburnerActTypes](./bitburner.bladeburneracttypes.md) | Type of action. |
| name | [BladeburnerGenActions](./bitburner.bladeburnergenactions.md) \| [BladeburnerContracts](./bitburner.bladeburnercontracts.md) \| [BladeburnerOperations](./bitburner.bladeburneroperations.md) \| [BladeburnerBlackOps](./bitburner.bladeburnerblackops.md) | Name of action. Must be an exact match. |
| type | string | Type of action. |
| name | string | Name of action. Must be an exact match. |
| autoLevel | boolean | Whether or not to autolevel this action |
<b>Returns:</b>
@ -34,3 +28,5 @@ void
RAM cost: 4 GB
Enable/disable autoleveling for the specified action.

@ -4,26 +4,20 @@
## Bladeburner.setActionLevel() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
Set the level for the specified action.
Set the level of an action.
<b>Signature:</b>
```typescript
setActionLevel(
type: BladeburnerActTypes,
name: BladeburnerGenActions | BladeburnerContracts | BladeburnerOperations | BladeburnerBlackOps,
level: number,
): void;
setActionLevel(type: string, name: string, level: number): void;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| type | [BladeburnerActTypes](./bitburner.bladeburneracttypes.md) | Type of action. |
| name | [BladeburnerGenActions](./bitburner.bladeburnergenactions.md) \| [BladeburnerContracts](./bitburner.bladeburnercontracts.md) \| [BladeburnerOperations](./bitburner.bladeburneroperations.md) \| [BladeburnerBlackOps](./bitburner.bladeburnerblackops.md) | Name of action. Must be an exact match. |
| type | string | Type of action. |
| name | string | Name of action. Must be an exact match. |
| level | number | Level to set this action to. |
<b>Returns:</b>
@ -34,3 +28,5 @@ void
RAM cost: 4 GB
Set the level for the specified action.

@ -4,28 +4,20 @@
## Bladeburner.setTeamSize() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
Set the team size for the specified Bladeburner action.
Returns the team size that was set, or -1 if the function failed.
Set team size.
<b>Signature:</b>
```typescript
setTeamSize(
type: BladeburnerActTypes,
name: BladeburnerGenActions | BladeburnerContracts | BladeburnerOperations | BladeburnerBlackOps,
size: number,
): number;
setTeamSize(type: string, name: string, size: number): number;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| type | [BladeburnerActTypes](./bitburner.bladeburneracttypes.md) | Type of action. |
| name | [BladeburnerGenActions](./bitburner.bladeburnergenactions.md) \| [BladeburnerContracts](./bitburner.bladeburnercontracts.md) \| [BladeburnerOperations](./bitburner.bladeburneroperations.md) \| [BladeburnerBlackOps](./bitburner.bladeburnerblackops.md) | Name of action. Must be an exact match. |
| type | string | Type of action. |
| name | string | Name of action. Must be an exact match. |
| size | number | Number of team members to set. Will be converted using Math.round(). |
<b>Returns:</b>
@ -38,3 +30,7 @@ Number of Bladeburner team members you assigned to the specified action.
RAM cost: 4 GB
Set the team size for the specified Bladeburner action.
Returns the team size that was set, or -1 if the function failed.

@ -4,25 +4,20 @@
## Bladeburner.startAction() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
Attempts to start the specified Bladeburner action. Returns true if the action was started successfully, and false otherwise.
Start an action.
<b>Signature:</b>
```typescript
startAction(
type: BladeburnerActTypes,
name: BladeburnerGenActions | BladeburnerContracts | BladeburnerOperations | BladeburnerBlackOps,
): boolean;
startAction(type: string, name: string): boolean;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| type | [BladeburnerActTypes](./bitburner.bladeburneracttypes.md) | Type of action. |
| name | [BladeburnerGenActions](./bitburner.bladeburnergenactions.md) \| [BladeburnerContracts](./bitburner.bladeburnercontracts.md) \| [BladeburnerOperations](./bitburner.bladeburneroperations.md) \| [BladeburnerBlackOps](./bitburner.bladeburnerblackops.md) | Name of action. Must be an exact match |
| type | string | Type of action. |
| name | string | Name of action. Must be an exact match |
<b>Returns:</b>
@ -34,3 +29,5 @@ True if the action was started successfully, and false otherwise.
RAM cost: 4 GB
Attempts to start the specified Bladeburner action. Returns true if the action was started successfully, and false otherwise.

@ -4,9 +4,7 @@
## Bladeburner.stopBladeburnerAction() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
Stops the current Bladeburner action.
Stop current action.
<b>Signature:</b>
@ -21,3 +19,5 @@ void
RAM cost: 2 GB
Stops the current Bladeburner action.

@ -4,23 +4,19 @@
## Bladeburner.switchCity() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
Attempts to switch to the specified city (for Bladeburner only).
Returns true if successful, and false otherwise
Travel to another city in bladeburner.
<b>Signature:</b>
```typescript
switchCity(name: City): boolean;
switchCity(name: string): boolean;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| name | [City](./bitburner.city.md) | |
| name | string | |
<b>Returns:</b>
@ -30,5 +26,7 @@ true if successful, and false otherwise
## Remarks
RAM cost: 4 GB
RAM cost: 4 GB Attempts to switch to the specified city (for Bladeburner only).
Returns true if successful, and false otherwise

@ -4,23 +4,19 @@
## Bladeburner.upgradeSkill() method
You have to be employed in the Bladeburner division and be in BitNode-7 or have Source-File 7 in order to use this function.
Attempts to upgrade the specified Bladeburner skill.
Returns true if the skill is successfully upgraded, and false otherwise.
Upgrade skill.
<b>Signature:</b>
```typescript
upgradeSkill(name: BladeburnerSkills): boolean;
upgradeSkill(name: string): boolean;
```
## Parameters
| Parameter | Type | Description |
| --- | --- | --- |
| name | [BladeburnerSkills](./bitburner.bladeburnerskills.md) | |
| name | string | |
<b>Returns:</b>
@ -32,3 +28,7 @@ true if the skill is successfully upgraded, and false otherwise.
RAM cost: 4 GB
Attempts to upgrade the specified Bladeburner skill.
Returns true if the skill is successfully upgraded, and false otherwise.

@ -1,13 +0,0 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [BladeburnerActTypes](./bitburner.bladeburneracttypes.md)
## BladeburnerActTypes type
All Bladeburner action types.
<b>Signature:</b>
```typescript
type BladeburnerActTypes = "contracts" | "operations" | "black ops" | "general";
```

@ -1,34 +0,0 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [BladeburnerBlackOps](./bitburner.bladeburnerblackops.md)
## BladeburnerBlackOps type
All Bladeburner black ops.
<b>Signature:</b>
```typescript
type BladeburnerBlackOps =
| "Operation Typhoon"
| "Operation Zero"
| "Operation X"
| "Operation Titan"
| "Operation Ares"
| "Operation Archangel"
| "Operation Juggernaut"
| "Operation Red Dragon"
| "Operation K"
| "Operation Deckard"
| "Operation Tyrell"
| "Operation Wallace"
| "Operation Shoulder of Orion"
| "Operation Hyron"
| "Operation Morpheus"
| "Operation Ion Storm"
| "Operation Annihilus"
| "Operation Ultron"
| "Operation Centurion"
| "Operation Vindictus"
| "Operation Daedalus";
```

@ -1,12 +0,0 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [BladeburnerContracts](./bitburner.bladeburnercontracts.md)
## BladeburnerContracts type
<b>Signature:</b>
```typescript
type BladeburnerContracts = "Tracking" | "Bounty Hunter" | "Retirement";
```

@ -9,13 +9,13 @@ Bladeburner current action.
<b>Signature:</b>
```typescript
interface BladeburnerCurAction
export interface BladeburnerCurAction
```
## Properties
| Property | Type | Description |
| --- | --- | --- |
| [name](./bitburner.bladeburnercuraction.name.md) | [BladeburnerGenActions](./bitburner.bladeburnergenactions.md) \| [BladeburnerContracts](./bitburner.bladeburnercontracts.md) \| [BladeburnerOperations](./bitburner.bladeburneroperations.md) \| [BladeburnerBlackOps](./bitburner.bladeburnerblackops.md) | Name of Action |
| [type](./bitburner.bladeburnercuraction.type.md) | [BladeburnerActTypes](./bitburner.bladeburneracttypes.md) \| "Idle" | Type of Action |
| [name](./bitburner.bladeburnercuraction.name.md) | string | Name of Action |
| [type](./bitburner.bladeburnercuraction.type.md) | string | Type of Action |

@ -9,5 +9,5 @@ Name of Action
<b>Signature:</b>
```typescript
name: BladeburnerGenActions | BladeburnerContracts | BladeburnerOperations | BladeburnerBlackOps;
name: string;
```

@ -9,5 +9,5 @@ Type of Action
<b>Signature:</b>
```typescript
type: BladeburnerActTypes | "Idle";
type: string;
```

@ -1,18 +0,0 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [BladeburnerGenActions](./bitburner.bladeburnergenactions.md)
## BladeburnerGenActions type
All Bladeburner General Actions.
<b>Signature:</b>
```typescript
type BladeburnerGenActions =
| "Training"
| "Field Analysis"
| "Recruitment"
| "Diplomacy"
| "Hyperbolic Regeneration Chamber";
```

@ -1,19 +0,0 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [BladeburnerOperations](./bitburner.bladeburneroperations.md)
## BladeburnerOperations type
All Bladeburner Ops.
<b>Signature:</b>
```typescript
type BladeburnerOperations =
| "Investigation"
| "Undercover Operation"
| "Sting Operation"
| "Raid"
| "Stealth Retirement Operation"
| "Assassination";
```

@ -1,27 +0,0 @@
<!-- Do not edit this file. It is automatically generated by API Documenter. -->
[Home](./index.md) &gt; [bitburner](./bitburner.md) &gt; [BladeburnerSkills](./bitburner.bladeburnerskills.md)
## BladeburnerSkills type
All Bladeburner Skills.
<b>Signature:</b>
```typescript
type BladeburnerSkills =
| "Blade's Intuition"
| "Cloak"
| "Marksman"
| "Weapon Proficiency"
| "Short-Circuit"
| "Digital Observer"
| "Tracer"
| "Overclock"
| "Reaper"
| "Evasive System"
| "Datamancer"
| "Cyber's Edge"
| "Hands of Midas"
| "Hyperdrive";
```

@ -9,5 +9,5 @@ Name of city you are currently in
<b>Signature:</b>
```typescript
city: City;
city: string;
```

@ -9,5 +9,5 @@ Array of all companies at which you have jobs
<b>Signature:</b>
```typescript
company: CompanyName[];
company: string[];
```

@ -9,5 +9,5 @@ Array of factions you are currently a member of
<b>Signature:</b>
```typescript
factions: FactionName[];
factions: string[];
```

@ -9,5 +9,5 @@ Array of job positions for all companies you are employed at. Same order as 'job
<b>Signature:</b>
```typescript
jobTitle: CompanyField[];
jobTitle: string[];
```

@ -8,7 +8,7 @@
<b>Signature:</b>
```typescript
interface CharacterInfo
export interface CharacterInfo
```
## Properties
@ -16,11 +16,11 @@ interface CharacterInfo
| Property | Type | Description |
| --- | --- | --- |
| [bitnode](./bitburner.characterinfo.bitnode.md) | number | Current BitNode number |
| [city](./bitburner.characterinfo.city.md) | [City](./bitburner.city.md) | Name of city you are currently in |
| [company](./bitburner.characterinfo.company.md) | [CompanyName](./bitburner.companyname.md)<!-- -->\[\] | Array of all companies at which you have jobs |
| [factions](./bitburner.characterinfo.factions.md) | [FactionName](./bitburner.factionname.md)<!-- -->\[\] | Array of factions you are currently a member of |
| [city](./bitburner.characterinfo.city.md) | string | Name of city you are currently in |
| [company](./bitburner.characterinfo.company.md) | string\[\] | Array of all companies at which you have jobs |
| [factions](./bitburner.characterinfo.factions.md) | string\[\] | Array of factions you are currently a member of |
| [hp](./bitburner.characterinfo.hp.md) | number | Current health points |
| [jobTitle](./bitburner.characterinfo.jobtitle.md) | [CompanyField](./bitburner.companyfield.md)<!-- -->\[\] | Array of job positions for all companies you are employed at. Same order as 'jobs' |
| [jobTitle](./bitburner.characterinfo.jobtitle.md) | string\[\] | Array of job positions for all companies you are employed at. Same order as 'jobs' |
| [maxHp](./bitburner.characterinfo.maxhp.md) | number | Maximum health points |
| [mult](./bitburner.characterinfo.mult.md) | [CharacterMult](./bitburner.charactermult.md) | Object with many of the player's multipliers from Augmentations/Source Files |
| [timeWorked](./bitburner.characterinfo.timeworked.md) | number | Timed worked in ms |

Some files were not shown because too many files have changed in this diff Show More