Actually Complete Solar System (ACSS) Release Thread

main.js
JavaScript:
"use strict";

// data input

// list of nodes (add new objects here)
let nodes = [
  {id:0, name:"Celestial Objects", parentId:null},
  {id:1, name:"Milky Way (Sagittarius A)", parentId:0},
  {id:2, name:"Solar System (Sun)", parentId:1},
  {id:3, name:"Planets", parentId:2},
  {id:4, name:"Mercury", parentId:3},
  {id:5, name:"Venus", parentId:3},
  {id:6, name:"Earth", parentId:3},
  {id:7, name:"Moon", parentId:6},
  {id:8, name:"Mars", parentId:3},
  {id:9, name:"Phobos", parentId:8},
  {id:10, name:"Deimos", parentId:8},
  {id:11, name:"Jupiter", parentId:3},
  {id:12, name:"Io", parentId:11},
  {id:13, name:"Europa", parentId:11},
  {id:14, name:"Ganymede", parentId:11},
  {id:15, name:"Callisto", parentId:11},
  {id:16, name:"etc...", parentId:11},
  {id:17, name:"etc...", parentId:3},
  {id:18, name:"Dwarf Planets", parentId:2},
  {id:19, name:"Pluto", parentId:18},
  {id:20, name:"Charon", parentId:19},
  {id:21, name:"Nix", parentId:19},
  {id:22, name:"Hydra", parentId:19},
  {id:23, name:"etc...", parentId:19},
  {id:24, name:"Ceres", parentId:18},
  {id:25, name:"Eris", parentId:18},
  {id:26, name:"Haumea", parentId:18},
  {id:27, name:"etc...", parentId:18},
  {id:28, name:"Asteroids", parentId:2},
  {id:29, name:"10 Hygiea", parentId:28},
  {id:30, name:"101955 Bennu", parentId:28},
  {id:31, name:"107 Camilla", parentId:28},
  {id:32, name:"etc...", parentId:28},
  {id:33, name:"Comets", parentId:2},
  {id:48, name:"67P/Churyumov–Gerasimenko", parentId:33},
  {id:34, name:"C/1995 O1 (Hale–Bopp)", parentId:33},
  {id:35, name:"19P/Borelly", parentId:33},
  {id:36, name:"1P/Halley", parentId:33},
  {id:37, name:"etc...", parentId:33},
  {id:38, name:"etc...", parentId:2},
  {id:39, name:"Alpha Centauri (A)", parentId:1},
  {id:40, name:"Alpha Centauri B", parentId:39},
  {id:41, name:"Proxima Centauri", parentId:39},
  {id:42, name:"Proxima b", parentId:41},
  {id:43, name:"Proxima c", parentId:41},
  {id:44, name:"1SWASP J1407", parentId:1},
  {id:45, name:"1SWASP J1407 b", parentId:44},
  {id:46, name:"Day/Night Cycle", parentId:null},
  {id:47, name:"Enhanced Textures", parentId:null}
];

// debug
/*{
  let properties = "";
 
  for (let i = 0; i < nodes.length; i++) {
    
    let node = nodes.find(item => item.id === i);
    properties += ">id: " + node.id
      + " | parent id: " + node.parentId
      + " | name: " + node.name + "<\n"
    ;
  }
 
  console.log(properties);
}*/

// attributes initialization
for (let i = 0; i < nodes.length; i++) {
 
  if (typeof (nodes[i].id) === "string" || (nodes[i].id) instanceof String) {
    
    nodes[i].id = parseInt(nodes[i].id);
  }
 
  if (typeof (nodes[i].parentId) === "string" || (nodes[i].parentId) instanceof String) {
    
    nodes[i].parentId = parseInt(nodes[i].parentId);
  }
 
  nodes[i].index = i; //loging purposes
  nodes[i].nestedIndex = i; // further purposes
  nodes[i].state = 0; // default state (global)
 
  // special states (specify the default state of certain nodes here)
  // 0 = unchecked, 1 = checked, 2 = greyed out
  if (nodes[i].id == 2) nodes[i].state = 2;
  if (nodes[i].id == 3) nodes[i].state = 1;
  if (nodes[i].id == 4) nodes[i].state = 1;
  if (nodes[i].id == 5) nodes[i].state = 1;
  if (nodes[i].id == 6) nodes[i].state = 2;
  if (nodes[i].id == 7) nodes[i].state = 1;
  if (nodes[i].id == 8) nodes[i].state = 1;
  if (nodes[i].id == 9) nodes[i].state = 1;
  if (nodes[i].id == 10) nodes[i].state = 1;
  if (nodes[i].id == 11) nodes[i].state = 1;
  if (nodes[i].parentId == 11 && nodes[i].name !== "etc...") nodes[i].state = 1; // example
}

// attributes validity check
for (let i = 0; i < nodes.length; i++) {
 
  // IDs
  if (!Number.isInteger(nodes[i].id) || nodes[i].id < 0) {
    
    logNode(nodes[i], "invalid ID for: " + nodes[i].name, 1, false, true);
    
  } else {
    
    for (let j = 0; j < nodes.length; j++) {
      
      if (i == j) continue;
      
      if (nodes[i].id == nodes[j].id) {
        
        logNode(nodes[i], "duplicate ID for: " + nodes[i].name, 1);
        break;
      }
    }
  }
 
  // parent IDs
  if (nodes[i].parentId != null) {
    
    if (!Number.isInteger(nodes[i].parentId) || nodes[i].parentId < 0) {
      
      logNode(nodes[i], "invalid parent ID for: ", 2, true);
      nodes[i].parentId = null;
      
    } else if (nodes[i].parentId == nodes[i].id) {
      
      logNode(nodes[i], "same ID and parent ID for: ", 2, true);
      nodes[i].parentId = null;
      
    } else if (!nodes.some(item => item.id === nodes[i].parentId)) {
      
      logNode(nodes[i], "parent ID does not exists for: ", 2, true);
      nodes[i].parentId = null;
      
    } else if (nodes[i].id == nodes.find(item => item.id === nodes[i].parentId).parentId) {
      
      logNode(nodes[i], "node nested in his own child...", 2, true);
      nodes[i].parentId = null;
    }
  }
 
  // states
  if (!Number.isInteger(nodes[i].state) || nodes[i].state < 0 || nodes[i].state > 2) {
    
    logNode(nodes[i], "invalid state value for: ", 1, true);
    nodes[i].state = 0;
  }
}

// display

// nodes nesting (recursive)

let nestedNodes = [];
let node;

function nest(children, parentId) {
 
  for (let i = 0; i < nodes.length; i++) {
    
    node = nodes[i];
    
    if (node.parentId == parentId) {
      
      children.push(node);
      node.children = [];
      nest(node.children, node.id);
    }
  }
}

nest(nestedNodes, null);

// indexing nested objects (recursive)

let nestedIndex = 0;

function indexNestedObjects(children) {
 
  for (let i = 0; i < children.length; i++) {
    
    children[i].nestedIndex = nestedIndex++;
    indexNestedObjects(children[i].children);
  }
}

indexNestedObjects(nestedNodes);

// nodes HTML printing (recursive)

function printNodes(nodesToPrint, parentList) {
 
  for (let i = 0; i < nodesToPrint.length; i++) {
    
    let li = document.createElement("li");
    
    switch (nodesToPrint[i].state) {
      
      case 0:
        li.innerHTML = (nodesToPrint[i].children.length > 0 ? "<span class=\"caret\"></span>" : "")
          + (nodesToPrint[i].children.length > 0 ? "<span class=\"unchecked-box\">" : "<span class=\"unchecked-box padded\">")
          + nodesToPrint[i].name + "</span>";
        break;
      case 1:
        li.innerHTML = (nodesToPrint[i].children.length > 0 ? "<span class=\"caret\"></span>" : "")
          + (nodesToPrint[i].children.length > 0 ? "<span class=\"checked-box\">" : "<span class=\"checked-box padded\">")
          + nodesToPrint[i].name + "</span>";
        break;
      case 2:
        li.innerHTML = (nodesToPrint[i].children.length > 0 ? "<span class=\"caret\"></span>" : "")
          + (nodesToPrint[i].children.length > 0 ? "<span class=\"greyed-out-box\">" : "<span class=\"greyed-out-box padded\">")
          + nodesToPrint[i].name + "</span>";
        break;
      default: logNode(nodesToPrint[i], "invalid state value for: " + nodesToPrint[i].name + " (in function: printNodes())", 2, false, true);
    }
    
    if (nodesToPrint[i].children.length > 0) {
      
      let ul = document.createElement("ul");
      ul.classList.add("nested");
      li.appendChild(ul);
      printNodes(nodesToPrint[i].children, ul);
    }
    
    parentList.appendChild(li);
  }
}

printNodes(nestedNodes, document.getElementById("list"));

// nodes event handling

let carets = document.getElementsByClassName("caret");
let boxes = document.querySelectorAll(".unchecked-box, .checked-box, .greyed-out-box");

// carets events
for (let i = 0; i < carets.length; i++) {
 
  carets[i].addEventListener("click", function() {
    
    this.classList.toggle("caret-down");
    this.parentElement.querySelector(".nested").classList.toggle("active");
  });
}

// boxes events
for (let i = 0; i < boxes.length; i++) {
 
  boxes[i].targetIndex = nodes.findIndex(item => item.nestedIndex === i);
  boxes[i].addEventListener("click", function() {
    
    if (nodes[this.targetIndex].state == 0) {
      
      nodes[this.targetIndex].state = 1;
      this.classList.replace("unchecked-box", "checked-box");
      
    } else if (nodes[this.targetIndex].state == 1) {
      
      nodes[this.targetIndex].state = 0;
      this.classList.replace("checked-box", "unchecked-box");
    }
    
    //debug
    logNode(nodes[this.targetIndex], "clicked object:", 0, true, true, "Event target index: " + this.targetIndex);
  });
}

// loging

function logNode(node, message, errorLevel, verbose, includeObjectForm, additionalMessage) {
 
  if (additionalMessage == undefined) {
    
    additionalMessage = "";
    
  } else {
    
    additionalMessage = "\n" + additionalMessage;
  }
 
  let prefix;
 
  switch(errorLevel) {
    
    case 0: prefix = "EVENT - "; break;
    case 1: prefix = "WARNING - "; break;
    case 2: prefix = "ERROR - "; break;
    default: prefix = "INFO - ";
  }
 
  let string = verbose ? (message
    + "\n\tname: " + node.name
    + "\n\tid: " + node.id
    + "\n\tparent id: " + node.parentId
    + "\n\tindex: " + node.index
    + "\n\tnested index: " + node.nestedIndex
    + "\n\tstate: " + node.state
    + additionalMessage
  ) : message;
 
  if (errorLevel > 0) {
    
    if (includeObjectForm) {
      
      console.error(prefix + string, node);
      
    } else {
      
      console.error(prefix + string);
    }
    
    alert("An error occured in the box tree! (" + errorLevel + ")\n\nDetails: " + string);
    
  } else {
    
    if (includeObjectForm) {
      
      console.log(prefix + string, node);
      
    } else {
      
      console.log(prefix + string);
    }
  }
}
Version: 0.1
 
Here is how thats looks when online :

ACSS Download

This code is more responsive, so you should just upload the raw site on a host that don't include "over skinning" layout.

There is many free hosts thats permit to upload your own raw website without any framework.

Then is easy to flesh out your website with simple html code. :)
 
Altaïr thanks for that! You're certainly spot on with your insight there, I simply removed the ATMOSPHERE_PHYSICS_DATA section completely. Europa only has a tenuous atmosphere so it's barely even there. Also looking at the Example solar system they too do not have any atmosphere physics defined for Europa.

Also thanks for the support!



Kormak I believe this should fix your issue, I've updated the file on GitHub and you can view the changes here: Commit Details and you can download the new version here: GitHub ACSS Repository. I'll keep the issue on GitHub open for some time in case this doesn't fix it for you, so please let me know hoe it goes.



NeilaSchweitz that's a great idea, should help to bring down development time too! I took a look at your HTML and ran it in my browser, that is AWESOME! Thank you so much!
I'm very unfamiliar with GitHub and I can't find a Download button. Can I get some help?
 
I'm very unfamiliar with GitHub and I can't find a Download button. Can I get some help?
Kormak I had a feeling this question would come up, it's not very straightforward on how to download from GitHub. Since I have the site up now, I've added a Download button...

Laika SFS - ACSS Planet Pack

Alternatively you can use this direct download link...

Laika SFS - ACSS Planet Pack - Download

BUT if you really wanted to get source from GitHub (or in case others do), just click the green "Code" button and select the bottom option "Download ZIP".
 

EmberSkyMedia

PicoSpace Industries
Modder
TEAM HAWK
Swingin' on a Star
Atlas
Fly me to the Moon
Copycat
Registered
Kormak I had a feeling this question would come up, it's not very straightforward on how to download from GitHub. Since I have the site up now, I've added a Download button...

Laika SFS - ACSS Planet Pack

Alternatively you can use this direct download link...

Laika SFS - ACSS Planet Pack - Download

BUT if you really wanted to get source from GitHub (or in case others do), just click the green "Code" button and select the bottom option "Download ZIP".
The issue is 99% of people who visit Github, if they don't see a "release" version they assume its still an unfinished WIP and not usable.
 
EmberSkyMedia thanks for the insight. Honestly I feel the same, it’s not exactly the best spot to have users download the pack. It was really only just supposed to be a placeholder until I could get something better going (which I believe I do now with the ACSS site). I’ll still keep the GitHub going for development purposes but will direct users to download the pack from there.
 
Welcome to ACSS!

Actually Complete Solar System, or ACSS for short, is a massive solar system expansion pack, featuring 251 new solar system bodies (list in the README.txt file).

ACSS is currently at Version 1.0, so more SSBs will come!

Credits to the packs i used (that i remenber) are also in the README.txt, so please read the file! Also thanks to everyone* whose packs i used!

* - Brian_Felipe, SpaceSimXplore, BANDWITH and Discord users Astrônomo (now Earth and Moon), Quantikos, Dahmond, Flefliker, and StayHigh

A tip for installing the pack:
When installing the pack, do not put everything at once! I, myself, put all of the textures first, then i put the planet data files in groups of 42.

Changelog:

1.0 - Release - New SSBs: 197

Download link (the file is too big for the forums)

1.0.1 - Fix
- Actually added Makemake (thanks Biofatal)
- Added warning to the Readme file

1.0.2 - Fix
- Fixed the shape of Bennu and Ryugu (thanks Discord user Negative)

1.1 - The Kuiper Update
- Fixed the spikyness in the surfaces of Psyche and Ceres
- Added 39 (or 40?) new solar system bodies
- Added rings to Jupiter, Uranus and Neptune
- Correctly scaled Saturn's rings
- Added day-night cycles for Venus, Earth, Mars and Pluto

ACSS 1.2.2.zip
By far the best SS I’ve seen, but I’m having some trouble getting it to work, any advice?
 
Kormak I had a feeling this question would come up, it's not very straightforward on how to download from GitHub. Since I have the site up now, I've added a Download button...

Laika SFS - ACSS Planet Pack

Alternatively you can use this direct download link...

Laika SFS - ACSS Planet Pack - Download

BUT if you really wanted to get source from GitHub (or in case others do), just click the green "Code" button and select the bottom option "Download ZIP".
Thanks for the link! Before you posted this, I had gone into Europa's file and deleted the atmosphere physics section.
 
UPDATE: As promised, I’m trying to provide an update and post something every Wednesday and Sunday.

Progress Report:
We’ll I haven’t made much progress since getting the site online (took it easy for a few days to recuperate). I did get the selection menu “functional”, as in you can select the planets you want (only stock planets are listed so far). However a word of CAUTION for the custom pack download. Those planets are currently “broken”, it turns out I was coding my custom selection export against a broken version of the example solar system… :rolleyes: silly me.

Next Steps:
  1. Fix that custom planet selection
  2. Add in those terrain formulas to the stock planets
  3. Add in all the rest of the planets from ACSS
  4. Work on adding/fixing the terrain formulas for the rest of the planets beyond the stock planets
  5. Add Day Night Cycle Toggle on custom selection
  6. Fix any other issues as I’ve noticed other oddities here and there
 

Alphafish99999

ET phone home
Man on the Moon
Registered
I have found 5 Planets not in 1.5 format( I can't use the converter cause phones can't run .cs, so I'm asking for someone to post them) They're Proxima b, Proxima Centauri, Proxima c, Sagittarius A, and Sun(All Extrasolar)
 
Laika I have finished my script for the box tree. If you want to keep your script no problem, I learned Javascript by making it. Check below if you are interested:

Features:
  • Easily interfacable with a database
  • Reactive and simple material design
  • Box can be half-checked recursively
  • Default states (checked or unchecked can be set)
  • Very reliable system
  • Easily embeddable in HTML pages
  • Check boxes can be greyed out
  • Easy output recovery (just read the "checked" boolean of each objects)
  • and more...
If you want to use it, I can update it to add more functionality like expand-all/collapse-all. I can also help you for other web stuff. :)

Here is the source code:
index.html - Pastebin.com
css\main.css - Pastebin.com
js\main.js - Pastebin.com

Demo: ACSS Download

Have a nice day! :)
 
Yaymaster Just copy the Import_Settings.txt file from storage/emulated/0/Android/data/com.StefMorojna.SpaceFlightSimulator/files/Custom Solar Systems/Example/ to [...]files/Custom Solar Systems/ACSS 1.2.2/

Have a nice day!
 
I don’t really know how to get planet textures. And I’m guessing that’s the reason I don’t see any planets, asteroids, comets, or stars. But I don’t have any in my files.
 
Another update...

Changelog:
  • Revamped the design of components and the way they are displayed.
  • The check boxes are now fully and easily customizable by PNG files.
  • All of the components are proportionally sized and positioned according to the div font size.
  • Fixed some bugs in the script.
  • Added prerendering.

Source code:
index.html - Pastebin.com
\css\main.css - Pastebin.com
\css\tree.css - Pastebin.com
\js\tree.js - Pastebin.com

Resources files: resources.zip

Preview:

Old:
Screenshot_20220730_231326.jpg
New:
Screenshot_20220730_231246.jpg


Demo: ACSS Download

(Dont forget to clear your cache if you already visited the demo website and loaded the script.)

Tell me what do you think about this stuff.

Have a nice day/night! :)
 

EmberSkyMedia

PicoSpace Industries
Modder
TEAM HAWK
Swingin' on a Star
Atlas
Fly me to the Moon
Copycat
Registered
Another update...

Changelog:
  • Revamped the design of components and the way they are displayed.
  • The check boxes are now fully and easily customizable by PNG files.
  • All of the components are proportionally sized and positioned according to the div font size.
  • Fixed some bugs in the script.
  • Added prerendering.

Source code:
index.html - Pastebin.com
\css\main.css - Pastebin.com
\css\tree.css - Pastebin.com
\js\tree.js - Pastebin.com

Resources files: resources.zip

Preview:

Old:
View attachment 88243
New:
View attachment 88242

Demo: ACSS Download

(Dont forget to clear your cache if you already visited the demo website and loaded the script.)

Tell me what do you think about this stuff.

Have a nice day/night! :)
Once I've selected what I want... how do I download it? (I see no "download" or install button)
Ps. I want it all...
 

Astria

Astria short for AstriaPorta (Stargate in ancient)
TEAM HAWK
Swingin' on a Star
Atlas
Fly me to the Moon
Under Pressure
Registered
Hi been playing ACSS for a while now and I love that development is still on going but I have some suggestions and issues. On steam edition, I have 4 daylight cycles for some reason. Not sure why. Also, the custom download on the website doesn't seem to work. It only lets me download objects that are already in the vanilla solar system. Also just a small thing but the launch pad is also floating. Thanks.
 

Attachments

Astria

Astria short for AstriaPorta (Stargate in ancient)
TEAM HAWK
Swingin' on a Star
Atlas
Fly me to the Moon
Under Pressure
Registered
Also the atmosphere texture completely breaks on realistic mode in steam edition. Is there anyway you could make it so it works on steam edition realistic mode?