@Marquillotuca89 wrote:
@KTSimCreationsI want to contribute in this problem.
To be clear, there are two ecofootprint metters:
1) Street Ecofootprint (the one you can see)
2) Lot Ecofootprint (this is hidden)
Lot eco footprint can be changed:
1) By buy mode objects
2) By build mode objects
While buy mode objects change the eco footprint of a lot progressively, the ones from build mode will change it immediately by adding points to that metter.
What happens with EA building from Evergreen Harbour is that most lots DON'T fulfill the quantity of build objects required to change the ecofoootprint of the lot immediately, so anytime you visit the lot, or travel from one world to another, the lots will lose their industrial eco footprint because they don't have "enough points" to have it.
And to be clear, the buy mode objects will change the lot ecofootprint throughout time. The more you have, the quicker it'll be, but this won't affect other lots unless you visit them and stay on them until the ecofoorprint change (which a found silly, honestly. It wasn't that hard to add an update service)
I'm pretty sure there is a bug that the game is not using the LOT_FOOTPRINT value from other inactive lots in the neighborhoods to calculate STREET_FOOTPRINT.
Because LOT_FOOTPRINT is not initialized until you visit a lot, the game also has a default footprint value for each lot in the game. Every lot in Port Promise has a default value of 450, and every lot in Grims Quarry has a default value of -450. Most lots in other worlds have a default value of 0, with some exceptions (for example the lot Spencer-Kim-Lewis' house is on has a default value of 100).
Here's a snippet of the function (_fully_compute_street_convergence) that the game uses to calculate STREET_FOOTPRINT from each lot's LOT_FOOTPRINT.
zone_data = persistence_service.get_zone_proto_buff(zone_ids[0])
if zone_data is not None:
commodity_tracker_data = zone_data.gameplay_zone_data.commodity_tracker
for stat_data in commodity_tracker_data.commodities:
stat_cls = statistics_manager.get(stat_data.name_hash)
if stat_cls is EcoFootprintTunables.LOT_FOOTPRINT:
stat_value = stat_data.value
break
house_desc_id = services.get_house_description_id(zone_data.lot_template_id, zone_data.lot_description_id, zone_data.active_plex)
stat_value = services.get_eco_footprint_value(house_desc_id)
What's the problem here? Well the function first attempts to check if LOT_FOOTPRINT has been initialized on a lot. If it's already initialized it will set stat_value to this value. And then the function retrieves the default footprint value of the lot and set it to stat_value. This is the exact opposite order how it should be done, as here the default footprint value will always override the actual LOT_FOOTPRINT value of the lot. To fix this, switch the order of the code. For example:
if zone_data is not None:
house_desc_id = services.get_house_description_id(zone_data.lot_template_id, zone_data.lot_description_id, zone_data.active_plex)
stat_value = services.get_eco_footprint_value(house_desc_id)
commodity_tracker_data = zone_data.gameplay_zone_data.commodity_tracker
for stat_data in commodity_tracker_data.commodities:
stat_cls = statistics_manager.get(stat_data.name_hash)
if stat_cls is EcoFootprintTunables.LOT_FOOTPRINT:
stat_value = stat_data.value
break
This way. the game would first set stat_value to the default footprint value of the lot, and then check if LOT_FOOTPRINT has been initialized. If it's been initialized, replace stat_value with the actual value of LOT_FOOTPRINT.