mirror of
https://github.com/tobspr/shapez.io.git
synced 2025-06-13 13:04:03 +00:00
Add soundtrack, puzzle dlc fixes
This commit is contained in:
parent
0f93e13a63
commit
10e42864a1
BIN
res/puzzle_dlc_logo.png
Normal file
BIN
res/puzzle_dlc_logo.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 32 KiB |
BIN
res_raw/sounds/music/puzzle-full.mp3
Normal file
BIN
res_raw/sounds/music/puzzle-full.mp3
Normal file
Binary file not shown.
@ -37,7 +37,7 @@
|
||||
|
||||
.building {
|
||||
@include S(width, 30px);
|
||||
@include S(height, 22px);
|
||||
@include S(height, 30px);
|
||||
background-size: 45%;
|
||||
|
||||
&:not(.unlocked) {
|
||||
@ -49,6 +49,10 @@
|
||||
}
|
||||
|
||||
.building {
|
||||
display: flex;
|
||||
@include S(width, 40px);
|
||||
position: relative;
|
||||
@include S(height, 40px);
|
||||
.icon {
|
||||
color: $accentColorDark;
|
||||
display: flex;
|
||||
@ -56,18 +60,18 @@
|
||||
position: relative;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
@include S(padding, 5px);
|
||||
@include S(padding-bottom, 1px);
|
||||
@include S(width, 35px);
|
||||
@include S(height, 37px);
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
@include S(border-radius, $globalBorderRadius);
|
||||
|
||||
background: center center / 70% no-repeat;
|
||||
}
|
||||
|
||||
&:not(.unlocked) {
|
||||
@include S(width, 25px);
|
||||
.icon {
|
||||
@include S(width, 20px);
|
||||
opacity: 0.15;
|
||||
}
|
||||
&.editor {
|
||||
@ -91,8 +95,8 @@
|
||||
pointer-events: all;
|
||||
transition: all 50ms ease-in-out;
|
||||
transition-property: background-color, transform;
|
||||
|
||||
cursor: pointer;
|
||||
|
||||
&:hover {
|
||||
background-color: rgba(30, 40, 90, 0.1);
|
||||
}
|
||||
@ -120,12 +124,11 @@
|
||||
|
||||
display: grid;
|
||||
grid-auto-flow: column;
|
||||
@include S(margin-top, 2px);
|
||||
@include S(margin-left, 16px);
|
||||
@include S(margin-bottom, 29px);
|
||||
|
||||
position: absolute;
|
||||
bottom: 20px;
|
||||
top: -30px;
|
||||
left: 50%;
|
||||
transform: translateX(-50%) !important;
|
||||
transition: all 0.12s ease-in-out;
|
||||
transition-property: opacity, transform;
|
||||
|
||||
|
@ -96,12 +96,13 @@
|
||||
@include S(height, 60px);
|
||||
@include S(margin, 0, 10px);
|
||||
box-sizing: border-box;
|
||||
@include S(border-radius, $globalBorderRadius);
|
||||
border-radius: 50%;
|
||||
transition: opacity 0.12s ease-in-out, background-color 0.12s ease-in-out;
|
||||
@include IncreasedClickArea(0px);
|
||||
|
||||
&.liked-yes {
|
||||
/* @load-async */
|
||||
background: uiResource("icons/puzzle_action_liked_yes.png") center center / 70%
|
||||
background: uiResource("icons/puzzle_action_liked_yes.png") center 55% / 60%
|
||||
no-repeat;
|
||||
}
|
||||
|
||||
@ -110,7 +111,18 @@
|
||||
}
|
||||
|
||||
&.active {
|
||||
background-color: #151118 !important;
|
||||
background-color: $colorRedBright !important;
|
||||
@include InlineAnimation(0.3s ease-in-out) {
|
||||
0% {
|
||||
transform: scale(0);
|
||||
}
|
||||
50% {
|
||||
transform: scale(1.2);
|
||||
}
|
||||
100% {
|
||||
transform: scale(1);
|
||||
}
|
||||
}
|
||||
}
|
||||
&:not(.active) {
|
||||
opacity: 0.4;
|
||||
@ -119,6 +131,26 @@
|
||||
}
|
||||
}
|
||||
|
||||
> .buttonBar {
|
||||
display: flex;
|
||||
@include S(margin-top, 20px);
|
||||
|
||||
button.continue {
|
||||
background: #555;
|
||||
@include S(margin-right, 10px);
|
||||
}
|
||||
|
||||
button.menu {
|
||||
background-color: $colorGreenBright;
|
||||
}
|
||||
|
||||
> button {
|
||||
@include S(min-width, 100px);
|
||||
@include S(padding, 10px, 20px);
|
||||
@include IncreasedClickArea(0px);
|
||||
}
|
||||
}
|
||||
|
||||
> .actions {
|
||||
position: absolute;
|
||||
@include S(bottom, 40px);
|
||||
@ -135,14 +167,5 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
button.close {
|
||||
border: 0;
|
||||
position: relative;
|
||||
@include S(margin-top, 15px);
|
||||
background: $colorGreenBright;
|
||||
@include Heading;
|
||||
@include S(padding, 14px, 40px);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -88,11 +88,7 @@
|
||||
|
||||
@include S(grid-column-gap, 10px);
|
||||
display: grid;
|
||||
grid-template-columns: 1fr;
|
||||
|
||||
&.demo {
|
||||
grid-template-columns: 1fr 1fr;
|
||||
}
|
||||
grid-template-columns: 1fr 1fr;
|
||||
|
||||
.standaloneBanner {
|
||||
background: rgb(255, 75, 84);
|
||||
@ -223,9 +219,33 @@
|
||||
}
|
||||
}
|
||||
|
||||
.puzzleContainer {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
background: #4cc98a;
|
||||
grid-row: 1 / 2;
|
||||
grid-column: 2 / 3;
|
||||
@include S(padding, 20px);
|
||||
@include S(border-radius, $globalBorderRadius);
|
||||
> .dlcLogo {
|
||||
@include S(width, 200px);
|
||||
}
|
||||
|
||||
> button {
|
||||
@include S(margin-top, 20px);
|
||||
@include Heading;
|
||||
@include S(padding, 10px, 30px);
|
||||
background-color: #333;
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
|
||||
.mainContainer {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
grid-row: 1 / 2;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
background: #fafafa;
|
||||
|
@ -90,9 +90,9 @@ export class StateManager {
|
||||
dialogParent.classList.add("modalDialogParent");
|
||||
document.body.appendChild(dialogParent);
|
||||
|
||||
this.currentState.internalEnterCallback(payload);
|
||||
this.app.sound.playThemeMusic(this.currentState.getThemeMusic());
|
||||
|
||||
this.currentState.internalEnterCallback(payload);
|
||||
this.currentState.onResized(this.app.screenWidth, this.app.screenHeight);
|
||||
|
||||
this.app.analytics.trackStateEnter(key);
|
||||
|
@ -40,7 +40,6 @@ export class HUDBaseToolbar extends BaseHUDPart {
|
||||
* element: HTMLElement,
|
||||
* index: number
|
||||
* puzzleLocked: boolean;
|
||||
* class: typeof MetaBuilding,
|
||||
* }>} */
|
||||
this.buildingHandles = {};
|
||||
}
|
||||
@ -136,7 +135,6 @@ export class HUDBaseToolbar extends BaseHUDPart {
|
||||
selected: false,
|
||||
index: i,
|
||||
puzzleLocked: false,
|
||||
class: allBuildings[i],
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -52,19 +52,23 @@ export class HUDPuzzleCompleteNotification extends BaseHUDPart {
|
||||
this.updateState();
|
||||
});
|
||||
|
||||
const buttonBar = document.createElement("div");
|
||||
buttonBar.classList.add("buttonBar");
|
||||
this.elemContents.appendChild(buttonBar);
|
||||
|
||||
this.continueBtn = document.createElement("button");
|
||||
this.continueBtn.classList.add("close", "styledButton");
|
||||
this.continueBtn.classList.add("continue", "styledButton");
|
||||
this.continueBtn.innerText = T.ingame.puzzleCompletion.continueBtn;
|
||||
dialog.appendChild(this.continueBtn);
|
||||
|
||||
this.menuBtn = document.createElement("button");
|
||||
this.menuBtn.classList.add("close", "styledButton");
|
||||
this.menuBtn.innerText = T.ingame.puzzleCompletion.menuBtn;
|
||||
dialog.appendChild(this.menuBtn);
|
||||
|
||||
buttonBar.appendChild(this.continueBtn);
|
||||
this.trackClicks(this.continueBtn, () => {
|
||||
this.close(false);
|
||||
});
|
||||
|
||||
this.menuBtn = document.createElement("button");
|
||||
this.menuBtn.classList.add("menu", "styledButton");
|
||||
this.menuBtn.innerText = T.ingame.puzzleCompletion.menuBtn;
|
||||
buttonBar.appendChild(this.menuBtn);
|
||||
|
||||
this.trackClicks(this.menuBtn, () => {
|
||||
this.close(true);
|
||||
});
|
||||
|
@ -163,7 +163,9 @@ export class HUDPuzzleEditorReview extends BaseHUDPart {
|
||||
const serialized = new PuzzleSerializer().generateDumpFromGameRoot(this.root);
|
||||
|
||||
logger.log("Submitting puzzle, title=", title, "shortKey=", shortKey);
|
||||
logger.log("Serialized data:", serialized);
|
||||
if (G_IS_DEV) {
|
||||
logger.log("Serialized data:", serialized);
|
||||
}
|
||||
|
||||
const closeLoading = this.root.hud.parts.dialogs.showLoadingDialog(T.puzzleMenu.submittingPuzzle);
|
||||
|
||||
|
@ -152,9 +152,6 @@ export class HUDSandboxController extends BaseHUDPart {
|
||||
}
|
||||
|
||||
toggle() {
|
||||
if (!this.visible) {
|
||||
return;
|
||||
}
|
||||
this.visible = !this.visible;
|
||||
}
|
||||
|
||||
|
@ -7,9 +7,6 @@ import { types } from "../../savegame/serialization";
|
||||
import { enumGameModeTypes, GameMode } from "../game_mode";
|
||||
import { HUDPuzzleBackToMenu } from "../hud/parts/puzzle_back_to_menu";
|
||||
import { HUDPuzzleDLCLogo } from "../hud/parts/puzzle_dlc_logo";
|
||||
import { gMetaBuildingRegistry } from "../../core/global_registries";
|
||||
import { MetaBalancerBuilding } from "../buildings/balancer";
|
||||
import { MetaUndergroundBeltBuilding } from "../buildings/underground_belt";
|
||||
|
||||
export class PuzzleGameMode extends GameMode {
|
||||
static getType() {
|
||||
|
@ -29,6 +29,7 @@ import { HUDPuzzleCompleteNotification } from "../hud/parts/puzzle_complete_noti
|
||||
import { HUDPuzzlePlaySettings } from "../hud/parts/puzzle_play_settings";
|
||||
import { MetaBlockBuilding } from "../buildings/block";
|
||||
import { MetaBuilding } from "../meta_building";
|
||||
import { gMetaBuildingRegistry } from "../../core/global_registries";
|
||||
|
||||
const logger = createLogger("puzzle-play");
|
||||
const copy = require("clipboard-copy");
|
||||
@ -47,7 +48,7 @@ export class PuzzlePlayGameMode extends PuzzleGameMode {
|
||||
super(root);
|
||||
|
||||
/** @type {Array<typeof MetaBuilding>} */
|
||||
const excludedBuildings = [
|
||||
let excludedBuildings = [
|
||||
MetaConstantProducerBuilding,
|
||||
MetaGoalAcceptorBuilding,
|
||||
MetaBlockBuilding,
|
||||
@ -70,7 +71,22 @@ export class PuzzlePlayGameMode extends PuzzleGameMode {
|
||||
MetaTransistorBuilding,
|
||||
];
|
||||
|
||||
this.hiddenBuildings = excludedBuildings.concat(puzzle.game.excludedBuildings);
|
||||
if (puzzle.game.excludedBuildings) {
|
||||
/**
|
||||
* @type {any}
|
||||
*/
|
||||
const puzzleHidden = puzzle.game.excludedBuildings
|
||||
.map(id => {
|
||||
if (!gMetaBuildingRegistry.hasId(id)) {
|
||||
return;
|
||||
}
|
||||
return gMetaBuildingRegistry.findById(id).constructor;
|
||||
})
|
||||
.filter(x => !!x);
|
||||
excludedBuildings = excludedBuildings.concat(puzzleHidden);
|
||||
}
|
||||
|
||||
this.hiddenBuildings = excludedBuildings;
|
||||
|
||||
this.additionalHudParts.puzzlePlayMetadata = HUDPuzzlePlayMetadata;
|
||||
this.additionalHudParts.puzzlePlaySettings = HUDPuzzlePlaySettings;
|
||||
|
@ -35,6 +35,10 @@ export const MUSIC = {
|
||||
menu: "menu",
|
||||
};
|
||||
|
||||
if (G_IS_STANDALONE || G_IS_DEV) {
|
||||
MUSIC.puzzle = "puzzle-full";
|
||||
}
|
||||
|
||||
export class SoundInstanceInterface {
|
||||
constructor(key, url) {
|
||||
this.key = key;
|
||||
|
@ -85,12 +85,13 @@ export class PuzzleSerializer {
|
||||
const handles = root.hud.parts.buildingsToolbar.buildingHandles;
|
||||
const ids = gMetaBuildingRegistry.getAllIds();
|
||||
|
||||
/** @type {Array<typeof MetaBuilding>} */
|
||||
/** @type {Array<string>} */
|
||||
let excludedBuildings = [];
|
||||
for (let i = 0; i < ids.length; ++i) {
|
||||
const handle = handles[ids[i]];
|
||||
if (handle && handle.puzzleLocked) {
|
||||
excludedBuildings.push(handle.class);
|
||||
// @ts-ignore
|
||||
excludedBuildings.push(handle.metaBuilding.getId());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -87,7 +87,7 @@ import { MetaBuilding } from "../game/meta_building";
|
||||
* version: number;
|
||||
* bounds: { w: number; h: number; },
|
||||
* buildings: (PuzzleGameBuildingGoal | PuzzleGameBuildingConstantProducer | PuzzleGameBuildingBlock)[],
|
||||
* excludedBuildings: Array<typeof MetaBuilding>,
|
||||
* excludedBuildings: Array<string>,
|
||||
* }} PuzzleGameData
|
||||
*/
|
||||
|
||||
|
@ -104,6 +104,9 @@ export class InGameState extends GameState {
|
||||
}
|
||||
|
||||
getThemeMusic() {
|
||||
if (this.creationPayload.gameModeId && this.creationPayload.gameModeId.includes("puzzle")) {
|
||||
return MUSIC.puzzle;
|
||||
}
|
||||
return MUSIC.theme;
|
||||
}
|
||||
|
||||
|
@ -15,7 +15,6 @@ import {
|
||||
startFileChoose,
|
||||
waitNextFrame,
|
||||
} from "../core/utils";
|
||||
import { enumGameModeIds } from "../game/game_mode";
|
||||
import { HUDModalDialogs } from "../game/hud/parts/modal_dialogs";
|
||||
import { getApplicationSettingById } from "../profile/application_settings";
|
||||
import { T } from "../translations";
|
||||
@ -83,9 +82,19 @@ export class MainMenuState extends GameState {
|
||||
}
|
||||
<div class="buttons"></div>
|
||||
</div>
|
||||
<div class="bottomContainer">
|
||||
<div class="buttons"></div>
|
||||
</div>
|
||||
|
||||
${
|
||||
// @TODO: Only display if DLC is owned, otherwise show ad for store page
|
||||
showDemoBadges
|
||||
? ""
|
||||
: `
|
||||
<div class="puzzleContainer">
|
||||
<img class="dlcLogo" src="${cachebust(
|
||||
"res/puzzle_dlc_logo.png"
|
||||
)}" alt="shapez.io Logo">
|
||||
<button class="styledButton puzzleDlcPlayButton">Play</button>
|
||||
</div>`
|
||||
}
|
||||
</div>
|
||||
|
||||
<div class="footer ${G_CHINA_VERSION ? "china" : ""}">
|
||||
@ -314,13 +323,10 @@ export class MainMenuState extends GameState {
|
||||
buttonContainer.appendChild(importButtonElement);
|
||||
}
|
||||
|
||||
const bottomButtonContainer = this.htmlElement.querySelector(".bottomContainer .buttons");
|
||||
removeAllChildren(bottomButtonContainer);
|
||||
|
||||
const puzzleModeButton = makeButton(bottomButtonContainer, ["styledButton"], T.mainMenu.puzzleMode);
|
||||
|
||||
bottomButtonContainer.appendChild(puzzleModeButton);
|
||||
this.trackClicks(puzzleModeButton, () => this.onPuzzleModeButtonClicked());
|
||||
const puzzleModeButton = this.htmlElement.querySelector(".puzzleDlcPlayButton");
|
||||
if (puzzleModeButton) {
|
||||
this.trackClicks(puzzleModeButton, () => this.onPuzzleModeButtonClicked());
|
||||
}
|
||||
}
|
||||
|
||||
onPuzzleModeButtonClicked(force = false) {
|
||||
|
@ -186,7 +186,10 @@ export class PuzzleMenuState extends TextualGameState {
|
||||
const difficulty = document.createElement("div");
|
||||
difficulty.classList.add("difficulty");
|
||||
|
||||
const completionPercentage = Math.round((puzzle.completions / puzzle.downloads) * 100.0);
|
||||
const completionPercentage = Math.max(
|
||||
0,
|
||||
Math.min(100, Math.round((puzzle.completions / puzzle.downloads) * 100.0))
|
||||
);
|
||||
difficulty.innerText = completionPercentage + "%";
|
||||
stats.appendChild(difficulty);
|
||||
|
||||
@ -201,10 +204,13 @@ export class PuzzleMenuState extends TextualGameState {
|
||||
}
|
||||
}
|
||||
|
||||
const downloads = document.createElement("div");
|
||||
downloads.classList.add("downloads");
|
||||
downloads.innerText = String(puzzle.downloads);
|
||||
stats.appendChild(downloads);
|
||||
if (this.activeCategory === "mine") {
|
||||
const downloads = document.createElement("div");
|
||||
downloads.classList.add("downloads");
|
||||
downloads.innerText = String(puzzle.downloads);
|
||||
stats.appendChild(downloads);
|
||||
stats.classList.add("withDownloads");
|
||||
}
|
||||
|
||||
const likes = document.createElement("div");
|
||||
likes.classList.add("likes");
|
||||
|
@ -628,7 +628,7 @@ ingame:
|
||||
titleRating: How difficult did you find the puzzle?
|
||||
titleRatingDesc: Your rating will help me to make you better suggestions in the future
|
||||
|
||||
continueBtn: Continue
|
||||
continueBtn: Keep Playing
|
||||
menuBtn: Menu
|
||||
|
||||
puzzleMetadata:
|
||||
|
@ -7,13 +7,13 @@ steamPage:
|
||||
|
||||
intro: >-
|
||||
אתה אוהב משחקי אוטומציה? אתה במקום הנכון!
|
||||
|
||||
|
||||
shapez.io הוא משחק שלווה שבו אתה בונה מפעל בשביל ליצור צורות גאומטריות אוטומטית. ככל שמתקדמים השלבים, הצורות נהיות יותר ויותר מסובכות, ואתה צריך להפתח על המפה האין סופית.
|
||||
|
||||
|
||||
ואם זה לא היה מספיק, אתה צריך ליצור יותר ויותר צורות בשביל לספק את הדרישה - הדבר היחיד שיכול לעזור זה להגדיל את המפעל! בזמן שבהתחלה אתה רק צריך לערוך צורות, בהמשך אתה צריך לצבוע אותם בעזרת צבעים שאתה מערבב.
|
||||
|
||||
|
||||
קניית המשחק בsteam תתן לך גישה למשחק המלא, אבל אתה יכול לשחק משחק דמו בhttps://shapez.io/ ולהחליט אחר כך.
|
||||
|
||||
|
||||
what_others_say: What people say about shapez.io
|
||||
|
||||
nothernlion_comment: >-
|
||||
@ -417,41 +417,51 @@ ingame:
|
||||
get_on_steam: Steamהשג ב
|
||||
|
||||
standaloneAdvantages:
|
||||
title: !השג את הגרסה המלאה
|
||||
no_thanks: !לא, תודה
|
||||
title: >-
|
||||
!השג את הגרסה המלאה
|
||||
no_thanks: >-
|
||||
!לא, תודה
|
||||
|
||||
points:
|
||||
levels:
|
||||
title: 12 שלבים חדשים
|
||||
desc: !סה"כ 26 שלבים
|
||||
desc: >-
|
||||
!סה"כ 26 שלבים
|
||||
|
||||
buildings:
|
||||
title: 18 מבנים חדשים
|
||||
desc: !אפשרות להפוך את המפעל לאוטומטי לגמרי
|
||||
desc: >-
|
||||
!אפשרות להפוך את המפעל לאוטומטי לגמרי
|
||||
|
||||
achievements:
|
||||
title: הישגים
|
||||
desc: !השג את כולם
|
||||
desc: >-
|
||||
!השג את כולם
|
||||
|
||||
upgrades:
|
||||
title: רמות לשדרוגים ∞
|
||||
desc: !לגרסת הדמו הזאת יש רק 5
|
||||
desc: >-
|
||||
!לגרסת הדמו הזאת יש רק 5
|
||||
|
||||
markers:
|
||||
title: סימונים ∞
|
||||
desc: !אף פעם לא תלך לאיבוד במפעל שלך
|
||||
desc: >-
|
||||
!אף פעם לא תלך לאיבוד במפעל שלך
|
||||
|
||||
wires:
|
||||
title: כבלים
|
||||
desc: !מימד חדש לגמרי
|
||||
desc: >-
|
||||
!מימד חדש לגמרי
|
||||
|
||||
darkmode:
|
||||
title: תצוגה כהה
|
||||
desc: !תפסיק להכאיב לעיניים שלך
|
||||
desc: >-
|
||||
!תפסיק להכאיב לעיניים שלך
|
||||
|
||||
support:
|
||||
title: תמוך בי
|
||||
desc: !אני יצרתי רת המשחק הזה בזמני החופשי
|
||||
desc: >-
|
||||
!אני יצרתי רת המשחק הזה בזמני החופשי
|
||||
|
||||
# All shop upgrades
|
||||
shopUpgrades:
|
||||
@ -1150,39 +1160,50 @@ demo:
|
||||
settingNotAvailable: .הגדרה לא זמינה בדמו
|
||||
|
||||
tips:
|
||||
- !ההאב יקבל כל צורה, לא רק את הצורה הנדרשת עכשיו
|
||||
- !וודא שהמפעלים שלך מחולקים - זה יהיה לך יותר קל
|
||||
- !אל תבנה יותר מדיי קרוב להאב, זה יהפוך לבלגן
|
||||
- >-
|
||||
!ההאב יקבל כל צורה, לא רק את הצורה הנדרשת עכשיו
|
||||
- >-
|
||||
!וודא שהמפעלים שלך מחולקים - זה יהיה לך יותר קל
|
||||
- >-
|
||||
!אל תבנה יותר מדיי קרוב להאב, זה יהפוך לבלגן
|
||||
- .אם החיבור לא עובד, תנסה להחליף את מה נכנס לאיזה צד
|
||||
- .<b>R</b> אתה יכול לשנות את הכיוון של בניית המסועים המהירה ע"י ללחוץ על
|
||||
- .תאפשר לבנות הרבה מסילות באותו כיוון <b>CTRL</b> החזקת
|
||||
- .היחס של המהירויות של המבנים ישאר זהה אם השדרוגים הם באותו רמה
|
||||
- .לשים חפצים במסוע אחת מאשר כמה יהיה יותר יעיל במקום
|
||||
- !אתה תשיג עוד צורות של מבנים בהמשך המשחק
|
||||
- >-
|
||||
!אתה תשיג עוד צורות של מבנים בהמשך המשחק
|
||||
- .בשביל להחליף בין צורות שונות של מבנים <b>T</b>אתה יכול להשתמש ב
|
||||
- !סימטריה זה המפתח
|
||||
- >-
|
||||
!סימטריה זה המפתח
|
||||
- .אתה יכול לשים סוגים שונים של מנהרות על אותו קו לסרוגין
|
||||
- !נסה לבנות מפעלים קומפקטים, זה ישתלם
|
||||
- >-
|
||||
!נסה לבנות מפעלים קומפקטים, זה ישתלם
|
||||
- <b>T</b> לצובע יש סוג הפוך שאתה יכול לבחור ע"י
|
||||
- .אם יש לך את היחס הנכון בין כמות המבנים, יהיה לך את האיכות המיטבית
|
||||
- .ברמה המקסימלית, 5 חוצבים ימלאו מסוע אחד
|
||||
- !אל תשכח בקשר למנהרות
|
||||
- >-
|
||||
!אל תשכח בקשר למנהרות
|
||||
- .אתה לא צריך לחלק חפצים באופן שווה בשביל יעילות המיטבית
|
||||
- .תפעיל את מצב בנייה מהירה של מסועים, שתתן לך לשים מסועים ארוכים בקלות <b>SHIFT</b> החזקת
|
||||
- .חותכים תמיד חותכים לגובה, לא משנה מה הכיוון שלהם
|
||||
- .ערבב את כל שלושת הצבעים הבסיסיים בשביל להשיג את הצבע לבן
|
||||
- .לאכסון יש העדפה להוציא רק מהצד השמאלי
|
||||
- !הכן לך עיצוב של מבנה שתוכל להשתמש בו כשתצטרך - זה שווה את זה
|
||||
- >-
|
||||
!הכן לך עיצוב של מבנה שתוכל להשתמש בו כשתצטרך - זה שווה את זה
|
||||
- .תתן לך לבנות כמה מבנים באותו זמן <b>SHIFT</b> החזקת
|
||||
- .בשביל להפוך את הכיוון של המסועים שאתה שם <b>ALT</b> אתה יכול להחזיק
|
||||
- !יעילות זה המפתח
|
||||
- >-
|
||||
!יעילות זה המפתח
|
||||
- .מאגרי צורות שיותר רחוקות מההאב הן יותר מסובכות
|
||||
- .למכונות יש מהירות מוגבלת, חלק את החומרים בשביל היעילות המיטבית
|
||||
- .התשמש במאזנים בשביל למקסם את היעילות
|
||||
- .כיוון זה לא חשוב. נסה לא לחצות מסועים יותא מידי
|
||||
- !תכנן מראש, אחרת יהיה לך בלאגן
|
||||
- >-
|
||||
!תכנן מראש, אחרת יהיה לך בלאגן
|
||||
- .אל תמחק את המפעלים הישנים שלך! אתה תצתרך אותם בשביל לפתוח שדרוגים
|
||||
- !נסה לפתור את השלבים 20 ו26 בעצמך לפני שאתה מחפש פתרונות
|
||||
- >-
|
||||
!נסה לפתור את השלבים 20 ו26 בעצמך לפני שאתה מחפש פתרונות
|
||||
- .אל תסבך דברים, נסה להשאר פשוט ותגיע רחוק
|
||||
- .אתה כנראה תצטרך להשתמש במפעלים שלך שוב בהמשך המשחק. תבנה את המפעלים שלך בצורה שתוכל להשתמש בהם שוב בהמשך
|
||||
- .לפעמים אתה יכול למצוא צורה שאתה צריך במפה בלי להתחיל לבנות אותה עם חותכים ומחברים
|
||||
@ -1195,14 +1216,18 @@ tips:
|
||||
- .בנייה קרובה מידי להאב יכולה להפריע בדרך של פרוייקטים מאוחרים יותר
|
||||
- .סימן הסיכה ליד כל צורה בשדרוגים תצמיד אותה לצד שמאל של המסך
|
||||
- .ערבב את כל שלושת הצבעים הבסיסיים בשביל להשיג את הצבע לבן
|
||||
- !יש לך מפה אין סופית. אל תשים את המפעל שלך רק צמוד להאב, תרחיב אותו
|
||||
- >-
|
||||
!יש לך מפה אין סופית. אל תשים את המפעל שלך רק צמוד להאב, תרחיב אותו
|
||||
- .זה המשחק האהוב עליי !Factorio נסה גם את את
|
||||
- .החותך המרובע חותך עם כיוון השעון, מתחיל מלמעלה ימין.
|
||||
- !אתה יכול להוריד את השמירות שלך בתפריט הראשי!
|
||||
- >-
|
||||
!אתה יכול להוריד את השמירות שלך בתפריט הראשי!
|
||||
- .למשחק הזה יש הרבה מקשים שימושיים! חפש אותם בהגדרות.
|
||||
- !למשחק הזה יש הרבה הגדרות, חפש אותם
|
||||
- !לסימון של ההאב שלך יש חץ שמסמן באיזה כיוון הוא
|
||||
- >-
|
||||
!למשחק הזה יש הרבה הגדרות, חפש אותם
|
||||
- >-
|
||||
!לסימון של ההאב שלך יש חץ שמסמן באיזה כיוון הוא
|
||||
- .בשביל לנקות מסוע, חתוך את האיזור ואז תדביק באותו מקום
|
||||
- .לחץ F4 בשביל להציג את הFPS ואת הTickRate
|
||||
- .לחץ F4 פעמיים בשביל להציג את המשבצת שהעכבר והמצלמה בהם
|
||||
- .אתה יכול ללחוץ על צורה מוצמדת בצד שמאל בשביל לבטל את ההצמדה
|
||||
- .אתה יכול ללחוץ על צורה מוצמדת בצד שמאל בשביל לבטל את ההצמדה
|
||||
|
Loading…
Reference in New Issue
Block a user