Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
cityrules.tab - Neue Version
#1
Hi, ich habe mich mal rangemacht, die cityrules.tab so zu modifizieren, dass die Städte mir besser gefallen. Das wichtigste ist dabei der Strassenbau gefolgt vom Häuserbau. Es gibt jetzt mehr Strassen und grössere Häuserblöcke.

Probiert es einfach mal aus und erstellt ein paar grosse Städte damit, einfach die cityrules.tab sichern und mit dem Text unten ersetzen.

Wenn sich einer damit auskennt, kann er ja mal drüberschauen und das ganze etwas optimieren. Falls mir jemand sagen kann, wie die "chance" funktioniert wäre ich sehr dankbar, dann könnte die Erzeugung von bestimmten Blöckgrössen in der Stadt wesentlich besser gesteuert werden.

Code:
# cityrules.tab
#
# City building rules (new fashion)
#
# author: Hj. Malthaner <hansjoerg.malthaner@gmx.de>
# date:   25-Nov-03
# update: 22-Aug-04
# update: 5-Jan-05


# how far cities should be minimum apart (default 16)
minimum_city_distance = 32


# at which number of inhabitants we need a new market?
industry_increase_every = 2000

#
# relative affinities for certain building types which can lead to clustering of certain building types
#

# avoid building next to industry
res_start_score = 0
res_near_ind = -8
res_near_com = 4
res_near_res = 8

# everywhere is good, next to com best
com_start_score = -10
com_near_ind = 4
com_near_com = 8
com_near_res = 4

# next to res means expensive filters and no truck after 10 pm => avoid this ...
ind_start_score = -5
ind_near_ind = 8
ind_near_com = -2
ind_near_res = -8


#
# now the actual building rules. They can be up to 7x7.
# allowed sizes are 3x3 5x5 and 7x7!
#

#
# Symbols in rules:
# S = must not be road
# s = must be road
# n = must be bare land
# H = must not be house
# h = must be house
# . = anything matches
# SPACE = next row
#
# Each row must have EXACTLY the same number of members!
#


# Haus an Strassenecke.
house_1 = ... .ns .sH
house_1.chance = -8

house_2 = ... hnh ...
house_2.chance = 8

# Haus in mitte 3er Zelle
house_3 = ..... ..... ..nhs ..h.. ..s..
house_3.chance = 8

house_4 = ..... ..... ..nhs. ..s.. .....
house_4.chance = 8

house_5 = SSSSS SSSSS nnnnn sssss .....
house_5.chance = 8



# Strassenende weiterbauen.
road_1 = ....... ...H... ..SHS.. .SSnSS. ...s... ...s... .......
road_1.chance = 8

# Strassenende weiterbauen.
road_2 = ....... ...H... ...H... SSSnSSS ...s... ...s... .......
road_2.chance = 8

# Abzweigen oder weiterbauen.
road_3 = ....... ...H... ...H... SSSnSSS ...s... ....... .......
road_3.chance = 8

# Verbinden, gerade.
road_4 = SsS .n. .s.
road_4.chance = 8

# 2er Zelle bilden.
road_5 = ....... ....... ....... shhnh.. ...s... ....... .......
road_5.chance = 8

# 2er Zelle bilden.
road_6 = ....... ....... ....... ..hnhhs ...s... ....... .......
road_6.chance = 8

# Ecke schliessen.
road_7 = ... sn. Ss.
road_7.chance = 8

# Verbinden, gerade.
road_8 = ...s... ....... ...S... .SSnSS. ...s... ....... .......
road_8.chance = 8

# Verbinden, schräg.
road_9 = ....s.. ....... ...S... .SSnSS. ...s... ....... .......
road_9.chance = 8

# Verbinden, schräg.
road_10 = ..s.... ....... ...S... .SSnSS. ...s... ....... .......
road_10.chance = 8

# Verbinden, schräg.
road_11 = SSs SnS .s.
road_11.chance = 8

# Verbinden, schräg.
road_12 = sSS SnS .s.
road_12.chance = 8

# Strassenende weiterbauen.
road_13 = ....... ...H... ...H... SSSnSSS ...s... ...s... .......
road_13.chance = 8

# Strassenende weiterbauen.
road_14 = ....... ...H... ...H... SSSnSSS ...s... ...s... .......
road_14.chance = -8

# Strassenende weiterbauen.
road_15 = ....... ...H... ...H... SSSnSSS ...s... ...s... .......
road_15.chance = 7

# Strassenende weiterbauen.
road_16 = ....... ...H... ...H... SSSnSSS ...s... ...s... .......
road_16.chance = -7

# Strassenende weiterbauen.
road_17 = ....... ...H... ...H... SSSnSSS ...s... ...s... .......
road_17.chance = 6
Zitieren
#2
Nach ersten Tests:

Sieht recht gut aus. Kommt meinem "Stil" (wenn ich die Straßen vorbaue) recht nahe. Leider treffen sich die Straßen nicht immer.
Insgesamt aber besser als vorher, denke ich. Die Städte sind nun klarer, was dem StraBa- und Bus-Einsatz entgegenkommt.
Zitieren
#3
Das mit dem Treffen der Strassen könnte verbessert werden, wenn einer rausfindet, wie man sicherstellt, dass die Muster, welche Strassen zusammenführen mit höchster Wahrscheinlichkeit ausgeführt werden und insgesamt noch mehr Strassen im Verhältnis zu den Häusern gebaut werden.
Zitieren
#4
Mir gefällts recht gut. Schaunwer mal, wie es aussieht, wenn das Gelände etwas unwegsamer wird.
Zitieren
#5
Mal ein paar Vorschläge:

Wenn ich es recht verstanden habe, werden verschiedene Quadrate der Stadt zufällig ausgewählt und überprüft, ob man da eine Strasse bzw. ein Haus bauen kann nach einer der Bauregeln.

1) Jetzt könnte man es doch so machen, dass zufällig ein Quadrat gewählt wird, zufällig eine Regel gewählt wird und diese überprüft. Wenn sie das bauen erlaubt, dann gibt es eine Wahrscheinlichkeit, dass hier wirklich gebaut wird. Die Wahrscheinlichkeit ist eine Zahl zwischen 0 (nie) und 1 (immer). Dann wäre das mit chance, die jetzt von minus undefiniert bis plus undefiniert ist kein Problem mehr.

Zusätzlich bauen sich kleine Städte anders als grosse Städte. Bzw. es gibt grundsätzlich unterschiedliche Stadttypen.

2) Die Stadttypen könnten durch verschiedene cityrules_1.tab, cityrules_2.tab etc. erzeugt werden.

3) Für die Stadtgrösse könnte bei den Regeln eine .size_min und eine .size_max eingeführt werden, was die Wirksamkeit der Regeln nach Stadtgrösse begrenzt.

Damit könnten dann kleine Städte bis 1000 Einwohner im Kern stark verästelt sein und wenige lange Strassen erzeugen. Mittlere Städte bis 5000 Einwohner bauen dann 2x2 Häuserblöcke und lassen noch viel Freiräume und grosse Städte bauen noch grössere Häuserblöcke und füllen die Lücken.

Für die Implementierung sollte 1) kein Problem sein, da lediglich chance von int auf float wechselt und die cityrules.tab neu geschrieben werden muss. Die Bauwahrscheinlichkeit ergibt sich einfach durch if( (Zufallszahl von 0 bis 1)<(chance) ).

Bei 2) kommt es darauf an, wie das mit den cityrules implementiert ist, kann einfach sein oder Probleme bereiten.

Für 3) sollte es auch kein Problem sein, zwei neue Felder einzulesen und mit Vergleichsoperationen auszuwerten.
Zitieren
#6
Ziemlich genau so wie du beschrieben funktioniert es. Außer, dass eben die Chancen in 16,67% Schritten nur einstellbar sind.
Zitieren
#7
Welche Zahl von Chance entspricht welcher Wahrscheinlichkeit?

Kann man da nicht auch Kommazahlen angeben?
( Ich nehme an, dass momentan die Zufallszahl als int mit modulus erzeugt wird, das könnte man einfach ändern, indem man eine Fliesskommazahl mit entsprechendem Wertebereich erzeugt. Dann müsste nirgendwo sonst im Code oder den Daten etwas geändert werden, ausser dass halt statt ints floats eingelesen werden.)
Zitieren
#8
Warum nicht einfach mal in den Quelltext schauen...

Also soweit ich das sehe funktioniert das mit der chance so:
Prüfe wenn (randint % (chance+8)) == 0 und baue wenn ok.

Es wird also bei chance=-8 immer gebaut. Und ansonsten geht die Wahrscheinlichkeit mit 1/(chance+7) runter. Das ist ausreichend, da mit einer grossen Zahl, z.B. 93 die 1% Bauwahrscheinlichkeit erreicht werden kann.

Dann wäre das Problem von 1) schon ausreichend gelöst.

2) und vor allem 3) wären schön, wenn das die Codemeister implementieren *liebguck*
Zitieren
#9
Ich habe jetzt mal ein bisschen rumgespielt. Und dabei ein paar Änderungen im Code in cityrules.cc gemacht.

Dazu gehört die Einführung von "u" in cityrules.tab was anzeigen soll, wenn ein stück Hang unbebaubar für die Strasse ist.

Die Anzahl der durchzusuchenden Teile ist von 30 auf 100 hochgesetzt.

Die Renovierungswahrscheinlichkeit von 3/8 auf 1/10 runtergesetzt. Das ganze ist noch Geschmackssache, zeigt aber meiner Meinung nach in die richtige Richtung.


Angehängte Dateien
.txt   simcity.cc.txt (Größe: 73,87 KB / Downloads: 519)
.txt   cityrules.tab.txt (Größe: 2,98 KB / Downloads: 476)
Zitieren
#10
Hast du auch mal geschaut, wiviel mehr Rechnezeit das braucht? Städte benötigen auch so schon eine halbe Ewigkeit beim Start.
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste