Giter Site home page Giter Site logo

scottanderson / railroad.studio Goto Github PK

View Code? Open in Web Editor NEW
19.0 7.0 11.0 79.25 MB

A save file editor for Railroads Online

Home Page: https://railroad.studio

License: MIT License

HTML 0.46% CSS 2.75% TypeScript 96.65% JavaScript 0.15%
gvas typescript unreal-engine-4 webpack save-editor unreal-engine-5

railroad.studio's Introduction

Railroad Studio

This repository contains the source code for railroad.studio.

About

Railroad Studio is a static HTML, JavaScript and CSS webpage used to view and modify save files for Railroads Online.

Editing save files

Most of the data contained within a .sav file can be modified through the studio interface, by clicking the tabs across the top of the page. The industry editor can be used to modify industry type, location, orientation, input and output quantities. The player editor can be used to change money and xp. The Spline Track editor allows editing any of the properties of the newest spline system.

When any property is modified, Railroad Studio will set a flag indicating that there are unsaved edits to the save file. This will cause web browsers to notify users before navigating away from the page, and make the export button yellow.

Editing save files (advanced)

While many things are exposed through the Studio Editor interface, there are some things where the interface to edit these values does not exist. For situations where you want to edit something that is not exposed through a graphical editor, it is possible to use console commands to edit anything stored within a .sav file by loading that file in to Railroad Studio, modifying the window.studio.railroad object, and then exporting the file. It may be helpful to call functions which update the user interface, such as window.studio.setMapModified(), and window.studio.map.refreshSplines().

The following commands can be pasted into the browser's JavaScript console. Note that these commands will only work after loading a save file:

Delete all rolling stock except Betsy

betsy = window.studio.railroad.frames.find((f) => f.name === 'betsy');
window.studio.railroad.frames = [betsy];
window.studio.setMapModified();

Reset all players money and experience

window.studio.railroad.players.forEach((p) => {
    p.xp = 0;
    p.money = 2000;
});
window.studio.setMapModified();

Delete all old splines

window.studio.railroad.splines = []; // Catmull-rom tracks (old spline system)
window.studio.railroad.switches = []; // Switch objects (old spline system)
window.studio.setMapModified();
window.studio.map.refreshSplines(); // Update the map view

Development

Requirements

The build script uses the node package manager npm to manage build dependencies. See Downloading and installing npm for more information about how to configure npm for your platform.

Once installed, run npm install to install the necessary node package dependencies.

Building

Run npm start to start the webpack-dev-server.

Testing

Navigate to http://localhost:8080/ to perform testing.

Debugging

Source mappings are created, so you can use the web browser's native debugger.

Releasing

To generate a minified studio.js for release, run npm run build:prod.

Architecture

Overview

---
title: Overview of RS code structure
---
stateDiagram-v2
    [*] --> index.ts
    index.ts --> FileParsing
    FileParsing --> index.ts
    state "new Studio(...)" as ns
    index.ts --> ns
    ns --> FrameEditor
    ns --> IndustryEditor
    ns --> FileExport
    state "new RailroadMap(...)" as nrm
    ns --> nrm
    nrm --> SVG
    nrm --> Circularize

The main entry point for the application is ts/index.ts. This file contains the logic for the front page of Railroad Studio, which presents the user with a file input box and instructions for locating the game .sav file.

stateDiagram-v2

    state Load {
        state "File" as LoadFile
        state "ArrayBuffer" as LoadArrayBuffer
        LoadFile --> LoadArrayBuffer : Read
        state "Gvas" as LoadGvas
        LoadArrayBuffer --> LoadGvas : Parse
        state "Railroad" as LoadRailroad
        LoadGvas --> LoadRailroad : Import
    }

    state "Railroad Studio Editor" as Edit {
        state "Railroad" as EditRailroad
        EditRailroad --> EditRailroad : Modify
    }

    state Export {
        state "Railroad" as ExportRailroad
        state "Gvas" as ExportGvas
        ExportRailroad --> ExportGvas : Export
        state "ArrayBuffer" as ExportArrayBuffer
        ExportGvas --> ExportArrayBuffer : Serialize
        state "File" as ExportFile
        ExportArrayBuffer --> ExportFile : Write
    }

    direction LR
    [*] --> Load
    Load --> Edit
    Edit --> Export
    Export --> [*]

Reading files

When the user provides a .sav file in to the form input field, index.ts maps the file into memory using an ArrayBuffer, and then calls out to other areas of the code to parse and import the file:

  1. The ArrayBuffer is parsed into a Gvas.
  2. The Gvas object is imported into a Railroad.
  3. The Railroad object is used to construct a Studio.
const gvas = parseGvas(buffer);
const railroad = gvasToRailroad(gvas);
window.studio = new Studio(railroad, ...);

From this point, the Studio object takes on the responsibility of presenting the user with the full Railroad Studio interface. It delegates the responsibility of the map rendering to the RailroadMap class, which lives inside of the Map tab of the Studio. Other tabs include the frame editor, the industry editor, and others.

Exporting files

When exporting a Railroad object, the process of importing is reversed:

  1. The Railroad object is exported to a Gvas.
  2. The Gvas object is serialized to a Blob.
  3. The Blob is converted to a URL that can be downloaded by the web browser.
const gvas = railroadToGvas(this.railroad);
const blob = gvasToBlob(gvas);
const url = URL.createObjectURL(blob);

Types

ArrayBuffer

The ArrayBuffer object is used to represent a generic, fixed-length raw binary data buffer. This is a good fit for RO save files, which are typically smaller than 300kb, and a maximum observed size under 3MB.

Blob

Blobs can represent data that isn't necessarily in a JavaScript-native format. The File interface is based on Blob, inheriting blob functionality and expanding it to support files on the user's system.

GvasString

One of the foundational types that is used throughout this repository is the GvasString. This is used to represent GVAS binary strings, and is equivalent to string | null. When reading and writing GVAS files, there are three binary formats, depending on whether the string is null, ASCII or Unicode:

Format: null
(u32) length (0)

Format: ASCII (no characters >127)
(u32) positive length
(u8*) ascii string (null-terminated)

Format: Unicode
(u32)  negative length
(u16*) utf-16 encoded string (null-terminated)

Example: null
00 00 00 00

Example: ASCII ""
01 00 00 00 00

Example: ASCII "StrProperty"
0c 00 00 00 53 74 72 50 72 6f 70 65 72 74 79 00

Example: Unicode "§"
fe ff ff ff a7 00 00 00

Gvas

The Gvas interface is a low level abstraction of the GVAS format, an Unreal Engine format for rapidly serializing game state. Files in this format contain a header, followed by a map of named properties. Each property has a property name string, a property type, and a value.

The type can be a simple type such as a ['StrProperty'], which represents a single string value, an array such as ['ArrayProperty', 'BoolProperty'], which represents an array of booleans, or a complex type such as ['ArrayProperty', 'StructProperty', 'Vector'], which represents an array of Vector structs. Note that while the GVAS format itself supports many different combinations of types, only the ones used by Railroads Online are implemented.

type GvasTypes =
    | ['ArrayProperty', 'BoolProperty']
    | ['ArrayProperty', 'ByteProperty']
    | ['ArrayProperty', 'EnumProperty']
    | ['ArrayProperty', 'FloatProperty']
    | ['ArrayProperty', 'IntProperty']
    | ['ArrayProperty', 'NameProperty']
    | ['ArrayProperty', 'StrProperty']
    | ['ArrayProperty', 'StructProperty', 'Rotator']
    | ['ArrayProperty', 'StructProperty', 'Transform']
    | ['ArrayProperty', 'StructProperty', 'Vector']
    | ['ArrayProperty', 'TextProperty']
    | ['BoolProperty']
    | ['FloatProperty']
    | ['IntProperty']
    | ['NameProperty']
    | ['StrProperty']
    | ['StructProperty', 'DateTime']
    | [];

interface Gvas {
    _header: GvasHeader;
    _order: string[];
    boolArrays: Record<string, boolean[]>;
    bools: Record<string, boolean>;
    byteArrays: Record<string, number[]>;
    dateTimes: Record<string, bigint>;
    enumArrays: Record<string, GvasString[]>;
    floatArrays: Record<string, number[]>;
    floats: Record<string, number>;
    intArrays: Record<string, number[]>;
    ints: Record<string, number>;
    nameArrays: Record<string, GvasString[]>;
    rotatorArrays: Record<string, Rotator[]>;
    stringArrays: Record<string, GvasString[]>;
    strings: Record<string, GvasString>;
    textArrays: Record<string, GvasText[]>;
    transformArrays: Record<string, Transform[]>;
    vectorArrays: Record<string, Vector[]>;
}

Railroad

The Railroad interface represents the parsed structure of the data that RO stores in Gvas format.

interface Railroad {
    _header: GvasHeader;
    _order: string[];
    frames: Frame[];
    industries: Industry[];
    players: Player[];
    props: Prop[];
    removedVegetationAssets: Vector[];
    sandhouses: Sandhouse[];
    saveGame: {
        date: GvasString;
        uniqueId: GvasString;
        uniqueWorldId: GvasString;
        version: GvasString;
    };
    settings: { ... };
    splineTracks: SplineTrack[];
    splines: Spline[];
    switches: Switch[];
    turntables: Turntable[];
    vegetation: Vegeation[];
    watertowers: Watertower[];
}

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

License

MIT License.

railroad.studio's People

Contributors

arcadious avatar bigyihsuan avatar coldferrin avatar dependabot[bot] avatar illudedperception avatar robibue avatar scottanderson avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

railroad.studio's Issues

Failed to load: Error: NameProperty data type for 'SplineTrackIds' is not implemented

Describe the bug

Error: NameProperty data type for 'SplineTrackIds' is not implemented
    at Oi (https://railroad.studio/studio.js:1:246938)
    at Bi (https://railroad.studio/studio.js:1:239411)
    at https://railroad.studio/studio.js:1:249179
    at https://railroad.studio/studio.js:1:249382
    at https://railroad.studio/studio.js:1:248000

To Reproduce
Steps to reproduce the behavior:
Try to load a save game from version 0.6.0.0.3

Expected behavior
Save game loads

Saving map with activated layers as image

Hi, it is not an issue but a question as title says. Is it possible to get and image of actual map (viewed by your save editor) to use it further? Thx for your reply, great tool. Have a nice day

Unable to download (beta branch)

tried to use the tool and download the changes but i think this new update has broken it . works fine if your not in the beta branch,

style.css

did the style css got pushed to live ? cause i see the fences don't have transparent background (red circle) and the green circle should be a lighter shade of the 'building' fill or i did something wrong ?
image
it should look like this, what is my local version running with the modified css
image

Failed to load: Error: Unexpected flags 0 for component type 0

Attach the save file
The game file is not supported here. I cannot attach it.

Describe the bug
I dragged the saved game file to copy just like normal. But something happened to my file. Rail road studio responds with:
Error: Unexpected flags 0 for component type 0
at https://railroad.studio/studio.js:1:257836
at Xi (https://railroad.studio/studio.js:1:258752)
at Yi (https://railroad.studio/studio.js:1:251107)
at https://railroad.studio/studio.js:1:261268
at https://railroad.studio/studio.js:1:261471
at https://railroad.studio/studio.js:1:260048
The file used to work until I added or moved something in game.

Other save files are fine.
If I could get an answer and find the issue in the game,
PS Measurement and duplication don't work.

Lima Boiler pressure not correct.

The lima boiler pressure is incorect.

it has 200psi not 160 as studio states and it seem to not like the lima boiler pressure even if i adjust it to below 160psi so the pressure just keeps showing marked with pinkish color.

the slider was at 115% when i loaded the save aka 200psi

image

not able to download my save guessing because the lima shrows an error on the boiler pressure value?

Mass Modify Frame Vectors

Is your feature request related to a problem? Please describe.
some updates to the game have caused users to retail all cars and locos. Additionally it could be useful if people modify the track in RR studio and it would be nice to translate en mass any affected cars.

Describe the solution you'd like
It would be useful to be able to mass modify the vectors of all frames in a save. Similar to how there are up and down arrows in the vector value boxes already but that affect the x/y/z values for all or selected cars in the save

Describe alternatives you've considered
The only alternative is going through manually adjusting the values

Additional context
Thank you!

Wont open files

Anytime I go to edit my file, I'll do as it says. Open the game directory and the save files. I click on the save file I want and get this message every time.
image

Errors loading November update save files

Describe the bug
A clear and concise description of what the bug is.

Oi@https://railroad.studio/studio.js:1:246938
Bi@https://railroad.studio/studio.js:1:239413
ji/</</l<@https://railroad.studio/studio.js:1:249179
ji/</<@https://railroad.studio/studio.js:1:249382
ji/a/<@https://railroad.studio/studio.js:1:248000

To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: [e.g. iOS]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 22]

Additional context
Add any other context about the problem here.

Files Won't download

File won't download when i press button

  1. literally just use the thing

expected the thing to download

Failed to load: Error: Some frame values are missing

Describe the bug
A clear and concise description of what the bug is.

Failed to load: Error: Some frame values are missing
    at https://railroad.studio/studio.js:1:259612
    at https://railroad.studio/studio.js:1:266720
    at https://railroad.studio/studio.js:1:255478

To Reproduce
Try to load a save game from version 0.6.0.0.3

Expected behavior
Save game loads

Additional context
Add any other context about the problem here.

I think this issue might be related to the missing passenger car issue that was encountered during the initial phase of 0.6.0.0.3. I purchased 3 coaches before the update and there are 3 frame value errors in the message.

Not compatible with RRO Beta branch saves

RRS is unable to parse the new UE5 RRO save files
"Failed to load: RangeError: buffer length for Uint32Array should be a multiple of 4"

Steps to reproduce the behavior:

  1. In Steam change to Beta branch of RRO
  2. Host a server
  3. Save the game
  4. Load the save into RRS

Error when trying to open save file to edit.

This maybe just be because of the most recent update to the game but I tried opening a save file and got the error:
Failed to load: Error: Unexpected GUID: 69981E2B47B2AABC01CE39842FB03A96
Error: Unexpected GUID: 69981E2B47B2AABC01CE39842FB03A96
at Pn (https://railroad.studio/studio.js:1:130207)
at https://railroad.studio/studio.js:1:212385
at Array.flatMap ()
at new es (https://railroad.studio/studio.js:1:212209)
at https://railroad.studio/studio.js:1:270240
at https://railroad.studio/studio.js:1:258437

Uncaught Error: Unrecognized property: WeatherChangeIntervalMax

Describe the bug
A clear and concise description of what the bug is.

To Reproduce
Steps to reproduce the behavior:

  1. Load Save
  2. modify anything
  3. Click Save / Download
  4. Nothing happen
  5. In Console stands:
    Uncaught Error: Unrecognized property: WeatherChangeIntervalMax
    at studio.js:1:235024
    at HTMLButtonElement. (studio.js:1:235308)

Expected behavior
A clear and concise description of what you expected to happen.
Download dialog for new Save

Screenshots
opera_y6dPay8HSZ

Desktop (please complete the following information):

  • OS: [e.g. iOS] Windows
  • Browser [e.g. chrome, safari] Operea GX
  • Version [e.g. 22] Newest

Unknown Error

Hello, I am trying to use upload and for some reason after working fine for the past few days. I am now incountering this error. Any suggestions?

Failed to load: InvalidStateError: Failed to execute 'inverse' on 'SVGMatrix': The matrix is not invertible.
Error: Failed to execute 'inverse' on 'SVGMatrix': The matrix is not invertible.
at l.zoomAtPoint (https://railroad.studio/studio.js:1:14786)
at l.zoom (https://railroad.studio/studio.js:1:14963)
at l.publicZoom (https://railroad.studio/studio.js:1:15115)
at Object.zoom (https://railroad.studio/studio.js:1:21120)
at new pr (https://railroad.studio/studio.js:1:113787)
at new Studio (https://railroad.studio/studio.js:1:134874)
at https://railroad.studio/studio.js:1:188622
at https://railroad.studio/studio.js:1:179223

Snow track needs to be added (help needed)

So this is the new track added, its the same as the old track just with snow on it. Save included with all of them in it.
I might have figured it out but still some pointers would be good

    BALLAST_H10_SNOW = 'ballast_h10_snow',
    BALLAST_H05_SNOW = 'ballast_h05_snow',
    BALLAST_H01_SNOW = 'ballast_h01_snow',
    RAIL_914_SNOW = 'rail_914_snow',
    RAIL_914_H10_SNOW = 'rail_914_h10_snow',
    RAIL_914_H05_SNOW = 'rail_914_h05_snow',
    RAIL_914_H01_SNOW = 'rail_914_h01_snow',
    RAIL_914_BUMPER_SNOW = 'rail_914_bumper_snow',
    RAIL_914_SWITCH_CROSS_90_SNOW = 'rail_914_switch_cross_90_snow',
    RAIL_914_SWITCH_CROSS_45_SNOW = 'rail_914_switch_cross_45_snow',
    RAIL_914_SWITCH_3WAY_RIGHT_SNOW = 'rail_914_switch_3way_right_snow',
    RAIL_914_SWITCH_3WAY_RIGHT_NOBALLAST_SNOW = 'rail_914_switch_3way_right_noballast_snow',
    RAIL_914_SWITCH_3WAY_LEFT_SNOW = 'rail_914_switch_3way_left_snow',
    RAIL_914_SWITCH_3WAY_LEFT_NOBALLAST_SNOW = 'rail_914_switch_3way_left_noballast_snow',
    RAIL_914_SWITCH_RIGHT_NOBALLAST_SNOW = 'rail_914_switch_right_noballast_snow',
    RAIL_914_SWITCH_RIGHT_SNOW = 'rail_914_switch_right_snow',
    RAIL_914_SWITCH_RIGHT_MIRROR_SNOW = 'rail_914_switch_right_mirror_snow',
    RAIL_914_SWITCH_RIGHT_MIRROR_NOBALLAST_SNOW = 'rail_914_switch_right_mirror_noballast_snow',
    RAIL_914_SWITCH_LEFT_SNOW = 'rail_914_switch_left_snow',
    RAIL_914_SWITCH_LEFT_NOBALLAST_SNOW = 'rail_914_switch_left_noballast_snow',
    RAIL_914_SWITCH_LEFT_MIRROR_SNOW = 'rail_914_switch_left_mirror_snow',
    RAIL_914_SWITCH_LEFT_MIRROR_NOBALLAST_SNOW = 'rail_914_switch_left_mirror_noballast_snow',

PV_snow_track.zip

Replanting trees

I really wish you would make the smart replant trees work would make life playing this game more enjoyable

Downloading edited save file

Edited save file does not download. Export button turns yellow, all changes are saved, and clicking the export button does nothing. Changing browsers does nothing. Railroad Studio worked on a previous save in an older version of the game, and I saw ROSE was updated with this newest update. Any idea what would be going on?

Add an opacity toggle

Problem: Splines can be difficult to identify against the heightmap background.

Idea: Adding a simple toggle/slider for map opacity would allow users to increase visibility of the objects/tracks, or the heightmap image.

Concept: I believe this can be achieved by modifying #background css property opacity: xx% to the desired value.

Standard 100% opacity (top) vs 30% opacity (bottom)
rs-opacity-3

An unusual request for Scott Anderson

Attach the save file
Add the .sav file to a zip, and attach the .zip file to this issue.

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like
A clear and concise description of what you want to happen.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

Unable to Download Modifieid Save

After editing the files within Studio the download button does nothing. It highlights and the hue of yellow changes slightly but the new file doesnt download.

Some Special Characters do Not Transfer to Game

I've been experimenting with using some of the allowed special characters in rolling stock text, and using "§" (silcrow/section) shows up as "??" in-game. It is typed via the alt code alt-21.

Any supported special characters that RO's fonts support should be correctly saved to the modified save file.

  • OS: Win10
  • Browser: Opera GX

Steel girders not correctly displayed

The steel girders just show up as "Unknown" which when you have several of in a save it, well its quite hard to find which one you want to edit.

Included a fresh save file with only the girder bridges if its needed.
SGirder Test.zip

Might aswell suggest a way to search/select in the spline tracks for different rail types in this post aswell.

Map does not load, unexpected guid.

Attach the save file
Lake.zip

Describe the bug
Failed to load: Error: Unexpected GUID: 69981E2B47B2AABC01CE39842FB03A96

Pn@https://railroad.studio/studio.js:1:130207
es/<@https://railroad.studio/studio.js:1:212385
es@https://railroad.studio/studio.js:1:212209
ps/</</</<@https://railroad.studio/studio.js:1:270240
ps/a/<@https://railroad.studio/studio.js:1:258437

Based on my debugging, this only happens with rolling stock bought after the cattle update.

To Reproduce
Steps to reproduce the behavior:
Load Map.

Expected behavior
Map Loads

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: Windows 11
  • Browser: Firefox
  • Version: 120.0.1

cant find my rolling stock on the frames category

when i click on the frames category to change the names and numbers of my rolling stock, i get 4 of my tier 1 cars and 2 of my tier 2 cars, but at the top it shows that i have 28 cars. im confused why only a select few are showing up while the rest are not listed at all.

Screenshot (1642)
Screenshot (1643)
Screenshot (1644)

Tracks not displaying in UI.

Describe the bug
When loading save (save started in Patch 0.6.0.0.3, v2), no tracks display in UI. Other entities are displayed (rolling stock, industries, telegraph, etc)

To Reproduce
Steps to reproduce the behavior:

  1. Go to railroad.studio
  2. upload savegame
  3. save loads, but no rails present.

Expected behavior
rails and attributes should display as expected.

Screenshots
example around sawmill:
image

Desktop (please complete the following information):

  • OS: Win11
  • Browser Chrome (ersion 119.0.6045.160) and Edge (Version 119.0.2151.72 )
  • Version [e.g. 22]

Additional context
saves created on older version appear to open with rails showing.

replanting trees

You cannot replant trees at all you can cut them all down but not replant them.
I could not give you my .sav file this does not suport it.

Gregg car addition

With the beta branch being merged with the main, it would be great if we could edit the Gregg cars much like the "O.G." rolling stock.

Rolling Stock Duplicating

This would be helpful for players who don't want to spend hours to get a ton of freight cars. Idk how Possible it is for you to do this but let me know if it is something that you will look into.

Still can't download saves on lake valley

Describe the bug
A clear and concise description of what the bug is.

To Reproduce
Steps to reproduce the behavior:

  1. Go to '...'
  2. Click on '....'
  3. Scroll down to '....'
  4. See error

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

Desktop (please complete the following information):

  • OS: [e.g. iOS]
  • Browser [e.g. chrome, safari]
  • Version [e.g. 22]

Smartphone (please complete the following information):

  • Device: [e.g. iPhone6]
  • OS: [e.g. iOS8.1]
  • Browser [e.g. stock browser, safari]
  • Version [e.g. 22]

Additional context
Add any other context about the problem here.

Unsupproted industry enginehouse_princess causing track to not load

Attach the save file
Lake.zip

Describe the bug
Uncaught (in promise) Error: Unsupproted industry enginehouse_princess when loading save on lake map. This causes the track to not load.

Shown when loading map on lake

To Reproduce
Steps to reproduce the behavior:
Select Map in main screen.
Look in console

Expected behavior
Track should load,

  • OS: Windows 11
  • Browser Firefox
  • Version 120.0.1

Maybe add slope map as background

I would like to propose adding a slope map as a background option to aid in planing track placement. I put together a quick slope map in QGIS using a heightmap uploaded by illudedPerception on Discord. The slope map simplifies the planning process of laying track since the new Aurora Map has so many option for routing track to any one industry. The slopes are in percent. I was able plan a route from the gold mine to the smelter and stamp mill in a minute using the slope map. I would have spent a lot of time in-game looking at the terrain and trial and error track laying to get the same result. I'm using a 2 1/2% ruling grade so I made the 2% slope blue which helps me see my slope limit easier. Thanks for keeping Railroad Studio updated, I use it all the time.
Slope map

Feature: spline update tool

Game now forces spline updates but does a horrible job with maps that have any significant quantity of old splines. Need this tool to do a much more reasonable job of conversion.

Tree tools do not work in Lake Valley

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like
A clear and concise description of what you want to happen.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

2nd anniversary stock

The new stock (Lima 2-8-0 and DSP&P passenger car) are not there. aswell as the Tenmile which has no option to choose the new livery (livery 6).

Like i've done before there is a fresh save file with the new stock stuff.
2YAnniversaryStockUpdate.zip
This is all, until next time.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.