Jump to content
memo

[sc4pac] Let's write our own package manager

304 posts in this topic Last Reply

Highlighted Posts

  • Original Poster
  • Posted:
    Last Online:  
     
    1 hour ago, Somnolence said:

    Whenever there is a SC4E dependency, it returns an error along the lines of

    
    Operation aborted. Failed to extract <home directory>/.cache/sc4pac/coursier/https/www.sc4evermore.com/index.php/downloads%3Ftask%3Ddownload.send%26id%3D3%3Asc4d-LEX-legacy-bsc-common-dependencies-pack

    The file is recognized by the system as an archive, but cannot be extracted manually either. The error itself doesn't provide much info on how I could fix it :/

    By any chance, did you run out of disk space during the operation? The archive file in ~/.cache is 1.7 GiB in size. Its contents are extracted into the "temp" folder. When the Jar file contained in the archive is extracted, it temporarily takes up another 1.7 GiB inside the "temp" folder.

    If this is the problem, either try to make some space on your current partition or change the location of the "temp" folder by relocating it to a larger partition. The location of the "temp" folder is configured in the "sc4pac-plugins.json" file, which can be edited with a text editor.

    If this was not the problem, make sure the file downloaded completely by checking its integrity. The sha1sum of the BSC common dependencies 9a file is 0db8b990739346a168607cf94b7bf03cd93cbe1f.

    Edit: Another thing you could try is enabling debug mode. This will print a stack trace for the particular error in question.

    SC4PAC_DEBUG=1 ./sc4pac update

     

    • Thanks 1

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     

    I deleted the cache and tried the update command again, no issue.

    Could have been an incomplete download due to very poor connection that I am having today for some reason. Thanks for replying quickly anyway!


    Formerly known as vejtics /ˈveɪtɪks/ (VAY-ticks).

    Check out my geofiction work on OpenGeofiction.

    I use Arch btw

    Share this post


    Link to post
    Share on other sites
  • Original Poster
  • Posted:
    Last Online:  
     

    A new version of sc4pac has just been released: 0.4.4.

    This adds support for the Apple Silicon M1 platform. The 3rd-party 7zip library that sc4pac uses for extracting NSIS installers did not include native support for Apple M1 – until now. Therefore some packages relying on NSIS installers couldn't be extracted before. Thanks to @bhmantan for reporting this issue and testing this change.

    Moreover, I've renamed the "050-early-mods" subfolder to "050-load-first" for clarity, as was suggested on Discord. The old folder isn't removed automatically, but you can safely delete it.

    Also many thanks to @nos.17 for adding a large amount of additional dependency packages and for developing this online tool that can help in creating correct new metadata.

     

    On 6/8/2024 at 7:59 PM, Somnolence said:

    Could have been an incomplete download due to very poor connection that I am having today for some reason. Thanks for replying quickly anyway!

    Coming back to this issue, the root cause seems to be with the SC4Evermore server configuration. The admins are aware of the problem, but there's no solution yet. This also affects ordinary downloads using a web browser. For anyone else encountering this problem in the meantime, my recommended workaround is to delete the incomplete file from the cache and start the download from scratch. A faster internet connection can also help avoid the problem.

    • Like 2
    • Thanks 2

    Share this post


    Link to post
    Share on other sites
  • Original Poster
  • Posted:
    Last Online:  
     
    23 hours ago, Zasco said:

    For those interested, I just launched my own channel:

    Zasco's sc4pac channel

    This is an exciting development. Thanks for assembling all this metadata and sharing it.

     

    Additionally, there are a few other exciting developments that have been going on in the background recently. @Cyclone Boom implemented a new STEX API that allows to query some information about STEX entries. This is huge – as it helps a lot with maintaining the sc4pac metadata in the long run. For example, it's possible to check whether any of the collected metadata is out-of-date. Many thanks.

     

    Moreover, I've started implementing a graphical UI for sc4pac. It's not finished yet, but the source code is already on Github: sc4pac GUI. I'll show some pictures once I've made more progress.

    It's developed with Flutter. If anyone would like to contribute, drop a quick note about your intentions, for example by opening a GH issue, so we can coordinate. Otherwise, I'm planning to follow the steps outlined in the roadmap in the next weeks.

    • Like 7

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     
    On 10/10/2024 at 1:17 PM, Zasco said:

    I just launched my own channel:

    How does a channel work in practice - is it a mutually exclusive set of packages? From a user perspective, say I am installing packages from the default channel. If I want to install some packages in your channel do I need to manually switch over? I get that the same metadata could be mirrored across the two channels, but I guess what I am wondering about is the scope of a channel. Can channels "see" another's content?

    7 hours ago, memo said:

    Additionally, there are a few other exciting developments that have been going on in the background recently. @Cyclone Boom implemented a new STEX API that allows to query some information about STEX entries. This is huge – as it helps a lot with maintaining the sc4pac metadata in the long run. For example, it's possible to check whether any of the collected metadata is out-of-date. Many thanks.

    Do you have details you're able to share on this and how to access it?


      Edited by nos.17  

    Looking for a prop or texture? The SC4 Prop & Texture Catalog might help! View online here.

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     

    @memo is likely better suited at answering you, but here's my try:

    3 minutes ago, nos.17 said:

    How does a channel work in practice - is it a mutually exclusive set of packages?

    Not it's not. In fact, it's quite the opposite. Channels can be complementary or concurrent, depending on metadata and load order. Mine is an extension of the default channel; it only provides packages not listed in it.

    5 minutes ago, nos.17 said:

    From a user perspective, say I am installing packages from the default channel. If I want to install some packages in your channel do I need to manually switch over?

    No you don't. You can have both channels registered simultaneously. In fact, you can have an unlimited amount of channels registered.

    6 minutes ago, nos.17 said:

    I get that the same metadata could be mirrored across the two channels, but I guess what I am wondering about is the scope of a channel. Can channels "see" another's content?

    Yes, packages from one channel can depend on others in a different channel. Although, you need to have that "different channel" registered for it's metadata to be fetched.

     

    More details about channel registering here.

    • Thanks 1

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     
    26 minutes ago, Zasco said:

    Not it's not. In fact, it's quite the opposite. Channels can be complementary or concurrent, depending on metadata and load order. Mine is an extension of the default channel; it only provides packages not listed in it.

    That's great to hear, thanks!

    By the way, I made a little UI to help create the yaml files. It's still a work in progress and there are some bugs, but you might find it helpful.

    • Thanks 1

    Looking for a prop or texture? The SC4 Prop & Texture Catalog might help! View online here.

    Share this post


    Link to post
    Share on other sites
  • Original Poster
  • Posted:
    Last Online:  
     
    6 hours ago, nos.17 said:

    How does a channel work in practice - is it a mutually exclusive set of packages?

    Zasco's explanation is correct. Generally, it's possible to overwrite package definitions of another channel by defining a package of the same name – if there's ever a need for that. More commonly, secondary channels would define packages that don't exist in the main channel.

    7 hours ago, nos.17 said:

    Do you have details you're able to share on this and how to access it?

    As it's an authenticated API, my suggestion for anyone interested is to get in touch with @Cyclone Boom or @CorinaMarie.

    • Thanks 2

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     
    13 hours ago, nos.17 said:

    Do you have details you're able to share on this and how to access it?

    You've been added to the development PM.

    And for right now, we're going to keep the group small and do invite only since CB just finished the API and we still need to really see how it goes under load testing and potential features tweaking. *;)

    • Yes 1

    Chance favors the prepared mind. ― Louis Pasteur  
    Remember, a few hours of trial and error can save you several minutes of looking at the README. -- I Am Devloper (on Twitter)

    Clickable ---> The Best of Cori's Posts  (scroll down a wee bit there)    Something fun: MySimtropolis - Invitation to become a SimCity 4 MySim

    Are you new here? Check out the Introduction and Guide to Simtropolis.

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     
    2 hours ago, CorinaMarie said:

    You've been added to the development PM.

    And for right now, we're going to keep the group small and do invite only since CB just finished the API and we still need to really see how it goes under load testing and potential features tweaking. *;)

    Thank you! *:8)

    • Like 2

    Looking for a prop or texture? The SC4 Prop & Texture Catalog might help! View online here.

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     

    I have updated my UI tool for creating YAML files and it can be found at a new site with a much better name: https://yamleditorforsc4pac.azurewebsites.net/. Also, thank you to @Zasco for their pull requests and work in helping to improve the site! ^_^

    There's a lot of small improvements I'd like to do still, but it should be much easier to navigate now with a new clickable tree view to navigate through all the packages and assets in the file. There's also some new drop downs for the subfolder and group thanks to Zasco.

    9pFiifj.png

    • Like 3

    Looking for a prop or texture? The SC4 Prop & Texture Catalog might help! View online here.

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     
    2 hours ago, memo said:

    @nos.17 That's great. Thanks for the updates. I've added links to your YAML editor as well as to @Zasco's channel on the main website.

    Thanks!

    2 hours ago, memo said:

    Meanwhile, I've made a lot of progress on the GUI front. I'm ready to show some pictures of what's currently implemented and what it looks like. So far, I've been focusing on the core functionality, which is nearing completion. The overall looks might ultimately still change a bit.

    This is so unbelievably cool! It's things like this that cause me to want to go make 15 sock puppet accounts so I can give you more than one useless reputation point. *:ducky:

    • Like 5
    • Haha 1

    Looking for a prop or texture? The SC4 Prop & Texture Catalog might help! View online here.

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     
    12 hours ago, memo said:

    @nos.17 That's great. Thanks for the updates. I've added links to your YAML editor as well as to @Zasco's channel on the main website.

     

    Meanwhile, I've made a lot of progress on the GUI front. I'm ready to show some pictures of what's currently implemented and what it looks like. So far, I've been focusing on the core functionality, which is nearing completion. The overall looks might ultimately still change a bit.

    2024-10-27_17_36_05.png.79c7574c00da13ac6d2d7778dd1c9420.png

    2024-10-27_17_40_20.png.a423faff408392c6d3a066722cd0e0eb.png

    2024-10-27_17_37_20.png.d992725f64d9018a13dc6c72dd68ec6e.png

    2024-10-27_17_43_57.png.4b2bfe7f02a48dcb3e68cfbf1009ebd4.png

     

    😯🤯. You did the God's work! Also, it'd be nice if we can port this stuff into SC4 so we can manage our plugins inside the game, possible using embedded Chromium. Hope for the best, @memo!

    • Like 2

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     
    On 10/27/2024 at 11:57 PM, Jidan said:

    Also, it'd be nice if we can port this stuff into SC4 so we can manage our plugins inside the game

    Why would you need to manage plugin inside the game?

    SC4 performs all of its plugin loading on startup, so even if there was an in-game way to manage plugins SC4 would still have to be restarted for the changes to take effect.

    • Thanks 1

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     
    1 hour ago, Null 45 said:

    Why would you need to manage plugin inside the game?

    SC4 performs all of its plugin loading on startup, so even if there was an in-game way to manage plugins SC4 would still have to be restarted for the changes to take effect.

    Unless it's something you can fix with your DLL magic. :8)

    • Like 2

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     
    4 hours ago, Null 45 said:

    Why would you need to manage plugin inside the game?

    SC4 performs all of its plugin loading on startup, so even if there was an in-game way to manage plugins SC4 would still have to be restarted for the changes to take effect.

    As is the case in Cities Skylines 2. You install a mod and have to restart the game to make that mod available.

     

    3 hours ago, Zasco said:

    Unless it's something you can fix with your DLL magic. :8)

    It cannot be done. We get into the OpenSC4 regime and so you can't do it with mod DLLs.


    Federal Republic of SiculiaFederal Republic of Sonora

       Ain Member  Wiki

    NAM Team - Co-developer of Pedestian Revolution Mod - Railway Department (Hybrid Railway | HRW Expert) - MTA Member - BAT Creator

    Ulisse Wolf YouTube Channel - Ulisse Wolf Mastodon Profile

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     
    5 minutes ago, Ulisse Wolf said:

    It cannot be done. We get into the OpenSC4 regime and so you can't do it with mod DLLs.

    Theoretically it could be, you can load and unload DBPF files at runtime. But forcing the game to reload all/most plugins at runtime would be a large amount of effort for minimal benefit.

    • Like 1

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     
    2 hours ago, Null 45 said:

    Theoretically it could be, you can load and unload DBPF files at runtime. But forcing the game to reload all/most plugins at runtime would be a large amount of effort for minimal benefit.

    Maybe only on a very limited way, it could be useful for A/B testing with minimum plugin folders, but that's more the scope of a development tool than a gameplay plugin.

    • Like 2

    matias93's Unexpected Mod Workshop (dev thread)             Ciudad del Lago in the making (dev City Journal)

    "Let us be scientists and as such, remember always that the purpose of politics
    is not freedom, nor authority, nor is any principle of abstract character,
    but it is to meet the social needs of man and the development of the society"

    — Valentín Letelier, 1895

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     

    How would you handle the addition of the Day-Night Mod by Gizmo? The "nightmode" variant currently has "standard" and "dark" defined. This mod also is a dark night mod. Adding a new variant would mean refactoring of every already written package to add it. Otherwise it would then throw a linting error. I think it also reveals coupling, meaning a package has to be "aware" of every other package.

    Share this post


    Link to post
    Share on other sites
  • Original Poster
  • Posted:
    Last Online:  
     

    @Zasco There are two approaches that I have in mind:

    Either add Gizmo's mod as an override to 900-overrides. This first requires to figure out whether the mod can indeed safely be used as an override on top of simfox:day-and-nite-mod. Like for Simfox's mod, you'd add two variants nightmode=standard and nightmode=dark to Gizmo's mod as well, where the former installs nothing, to ensure people cannot accidentally end up with a DN mod and MN buildings simultaneously.

    The alternative is to add a new variant to simfox:day-and-nite-mod itself. For example:

    variants:
    - variant: { nightmode: standard }
    - variant: { nightmode: dark, simfox:day-and-nite-mod:provider: simfox }
      assets:
      - assetId: "simfox-day-and-nite-modd"
    - variant: { nightmode: dark, simfox:day-and-nite-mod:provider: gizmo }
      assets:
      - assetId: "gizmo-day-night-mod"
    

    (Instead of just defining an asset for Gizmo's mod, a distinct package gizmo:day-night-mod could be added as well. This package would have the same three variants and the two night mod packages would have to mutually depend on each other. The main benefit of this is that the package would get its own package info page with website link etc.)

    Coupling can indeed be a problem, but in this case the coupling is only between the two night mods. All the DN buildings only care that a DN mod is installed, but not which DN mod is installed. So there's no need to modify any of the packages containing DN buildings.

    • Like 1

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     
    13 hours ago, memo said:

    There are two approaches that I have in mind:

    Respectfully, I don't agree with either. You may however be more qualified than me to adjudicate on this. Here is why:

    • It makes Gizmo's "secondary". Why this way and not around? What if a better and more modern "dark night" mod is released? Would then @SimFox's be relayed to secondary?
    • With option 2, @SimFox's metadata would have to be refactored everytime a new "dark night" mod is added.

    All of this is code smell (on your approaches) in my opinion. I think an approach like the following would easily handle this and ensure decoupling:

    variants:
    - variant: { nightmode: maxis.default }
      assets:
      - assetId: "group-package-mn"
    - variant: { nightmode: simfox.day-and-nite-mod }
      assets:
      - assetId: "group-package-sn"
    - variant: { nightmode: gizmo.day-night-mod }
      assets:
      - assetId: "group-package-gn"

    I could have shortened the variant values to only the provider, but this way allows for a provider to release a new night mod (no matter how likely it is). Please note dots can be replaced by colons in the above example.

    13 hours ago, memo said:

    The main benefit of this is that the package would get its own package info page with website link etc.

    That's in part the why of my approach.

    13 hours ago, memo said:

    Coupling can indeed be a problem, but in this case the coupling is only between the two night mods. All the DN buildings only care that a DN mod is installed, but not which DN mod is installed. So there's no need to modify any of the packages containing DN buildings.

    Coupling may not be a problem here and now (<1000 packages), but may become overwhelming later on (>10000 packages). The above example doesn't take that into account. However, this one does:

    variants:
    - variant: { nightmode: standard }
      assets:
      - assetId: "group-package-mn"
    - variant: { nightmode: dark, nightmode-mod: simfox:day-and-nite-mod }
      assets:
      - assetId: "group-package-sn" # Or "group-package-dn"
    - variant: { nightmode: dark, nightmode-mod: gizmo:day-night-mod }
      assets:
      - assetId: "group-package-gn" # Or "group-package-dn"

    This way it wouldn't require packages to define any "nightmode-mod" variant but would still allow it which would also allow for different "dark night" assets.

    * Note that the linter of the current implementation of sc4pac in 0.4.6-SNAPSHOT will accept this, but not the channel builder.

     

    Why is the "conflict" field of string format? Shouldn't it be an array like "dependencies"? This way, sc4pac could check if any two conflicting packages are installed and throw an error.

    • Thanks 1

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     
    On 11-10-2024 at 6:56 PM, memo said:

    Additionally, there are a few other exciting developments that have been going on in the background recently. @Cyclone Boom implemented a new STEX API that allows to query some information about STEX entries. This is huge – as it helps a lot with maintaining the sc4pac metadata in the long run. For example, it's possible to check whether any of the collected metadata is out-of-date. Many thanks.

    @memo @Cyclone Boom can I find some information about this somewhere? I've been playing with the idea to create a tool that accepts a Simtropolis link and then generates metadata from it with minimal manual intervention needed. I could just clean up my script a bit, but it parses the information from the html, which is a bit hacky. If an api is available, this would make the task obviously a lot easier.

    • Like 1

    Visit www.growifier.com for ploppable residentials

    Love playing hearts and other card games? Have a look at www.whisthub.com!

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     
    13 minutes ago, smf_16 said:

     @Cyclone Boom can I find some information about this somewhere?

    I can answer this. Right now it's still in the beta testing phase and each person is assigned a key in order to get a response from the API. It's not ready for release to the public (and likely the direct access will always stay with developers). We've got a private message going for this and we'd love to have you join in. I'm not sure when CB will be available to get you setup, but we'll then add you into the convo.

    • Like 2

    Chance favors the prepared mind. ― Louis Pasteur  
    Remember, a few hours of trial and error can save you several minutes of looking at the README. -- I Am Devloper (on Twitter)

    Clickable ---> The Best of Cori's Posts  (scroll down a wee bit there)    Something fun: MySimtropolis - Invitation to become a SimCity 4 MySim

    Are you new here? Check out the Introduction and Guide to Simtropolis.

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     
    2 hours ago, smf_16 said:

    I've been playing with the idea to create a tool that accepts a Simtropolis link and then generates metadata from it with minimal manual intervention needed.

    Just to let you know, I've already implemented it, I just didn't commited/pushed it yet. I'll show you in PM.

    • Like 1

    Share this post


    Link to post
    Share on other sites
  • Original Poster
  • Posted:
    Last Online:  
     

     

    17 hours ago, Zasco said:
    • With option 2, @SimFox's metadata would have to be refactored everytime a new "dark night" mod is added.

    There's no way around that with the current implementation of sc4pac.

    I agree with your second approach though. I've created a pull request for that proposal. Please have a look.

    17 hours ago, Zasco said:

    Why is the "conflict" field of string format? Shouldn't it be an array like "dependencies"? This way, sc4pac could check if any two conflicting packages are installed and throw an error.

    The conflicts field is intended for highlighting potential conflicts – to make those easier to see at a glance than if they were included as part of the description. These conflicts can be very specific, for example

    Incompatible with CAM, compatible with IRM.

    but, most of the time, they are quite generic, referring to a whole family of packages or even mods outside(!) of sc4pac. Some examples:

    The seasonal controller variant is only compatible with terrain mods that include the Seasonal Flora Patch.
    Incompatible with all other tree controllers – only one tree controller may be installed at a time.
    
    Must load after other Maxis Lot replacement mods such as CAM.
    
    Only compatible with game version 1.1.641, the Windows digital edition.
    
    Incompatible with the macOS version of the game.
    
    Incompatible with mods blocking Maxis lots

    Having a way to define conflicts such that sc4pac can automatically detect them is a feature that doesn't currently exist, but it could be useful. However, if e.g. every tree controller needs to maintain a list of incompatible other tree controllers for this, that's just more coupling, so not ideal.

    Share this post


    Link to post
    Share on other sites
    Posted:
    Last Online:  
     
    On 11/3/2024 at 6:22 AM, memo said:

    There's no way around that with the current implementation of sc4pac.

    I know, but maybe it means the source code has to be changed to allow this. I can open an issue on this, but I don't quite know how to formulate it.

    On 11/3/2024 at 6:22 AM, memo said:

    I agree with your second approach though. I've created a pull request for that proposal. Please have a look.

    I'll review it asap.

    On 11/3/2024 at 6:22 AM, memo said:

    but, most of the time, they are quite generic, referring to a whole family of packages or even mods outside(!) of sc4pac.

    I agree keeping this feature is important! Maybe the solution is to have both?

    On 11/3/2024 at 6:22 AM, memo said:

    Having a way to define conflicts such that sc4pac can automatically detect them is a feature that doesn't currently exist, but it could be useful.

    And it wouldn't be as complicate to integrate to the code and as computing heavy as versions resolving.

    On 11/3/2024 at 6:22 AM, memo said:

    However, if e.g. every tree controller needs to maintain a list of incompatible other tree controllers for this, that's just more coupling, so not ideal.

    I think in the case of conflicts it's pretty much unavoidable as one package has to "be aware" of another to declare a conflict with it... In such case, I don't think it's coupling as changes in one wouldn't affect the other.

     

    Souldn't "180-flora" be renamed to "180-mmps"? "flora" is a bit restraining for what might belong in this subfolder...

    Allowing multiple sources for an asset would be great for redundency. See for instance the plugin right below. It is hosted on both Simtropolis and SC4E.

    What should be done following recent update of this file?:

     

    Share this post


    Link to post
    Share on other sites
  • Original Poster
  • Posted:
    Last Online:  
     
    On 11/3/2024 at 9:52 PM, Zasco said:

    I know, but maybe it means the source code has to be changed to allow this. I can open an issue on this, but I don't quite know how to formulate it

    I've opened https://github.com/memo33/sc4pac-tools/issues/10 with some ideas for discussion.

    On 11/3/2024 at 9:52 PM, Zasco said:

    I agree keeping this feature is important! Maybe the solution is to have both?

    Open an issue please.

    On 11/3/2024 at 9:52 PM, Zasco said:

    Souldn't "180-flora" be renamed to "180-mmps"? "flora" is a bit restraining for what might belong in this subfolder...

    For this one, I'm leaning towards 180-flora, as it's more readable, all MMPs are technically Flora, too, and 180-flora also includes god-mode Flora.

    On 11/3/2024 at 9:52 PM, Zasco said:

    Allowing multiple sources for an asset would be great for redundency. See for instance the plugin right below. It is hosted on both Simtropolis and SC4E.

    True, but it's actually quite a tough problem to ensure that both exchanges are in sync. The exchanges do not keep older versions around and do not provide checksums that prove that assets are identical. Until something like that is implemented on the exchanges, I don't think it makes much sense to spend an effort on this. As currently the majority of files is only available on one server, this would rarely be of use.

    On 11/3/2024 at 9:52 PM, Zasco said:

    What should be done following recent update of this file?:

    I'd just wait for the update of the Common Dependencies, as that's going to require a metadata update anyway.

    Share this post


    Link to post
    Share on other sites

    Sign In or register to comment...

    To comment in reply, you must be a community member

    Sign In  

    Already have an account? Sign in here.

    Sign In Now

    Create an Account  

    Sign up to join our friendly community. It's easy!  

    Register a New Account


    ×

    Thank You for the Continued Support!

    Simtropolis depends on donations to fund site maintenance costs.
    Without your support, we just would not be in our 24th year online!  You really help make this a great community. *:thumb:

    But we still need your support to stay online. If you're able to, please consider a donation to help us stay up and running. This helps sustain a platform where we can share our community creations for years to come.

    Make a Donation, Get a Gift!

    Expand your city with the best from the Simtropolis Exchange.
    Make a Donation and get one or all three discs today!

    STEX Collections

    By way of a "Thank You" gift, we'd like to send you our STEX Collector's DVD. It's some of the best buildings, lots, maps and mods collected for you over the years. Check out the STEX Collections for more info.

    Each donation helps keep Simtropolis online, open and free!

    Thank you for reading and enjoy the site!

    More About STEX Collections