diff --git a/descriptor/factory_desc.cc b/descriptor/factory_desc.cc index 2e7a3f42b..71566ab93 100644 --- a/descriptor/factory_desc.cc +++ b/descriptor/factory_desc.cc @@ -57,6 +57,7 @@ void factory_desc_t::correct_smoke() for( int i = 0; i < smokerotations; i++ ) { smoketile[i] = oldsmoke->get_pos_off(size,i); smokeoffset[i] = oldsmoke->get_xy_off(i); + smokeoffset[i] -= koord(0, LEGACY_SMOKE_YOFFSET); } smokeuplift = DEFAULT_SMOKE_UPLIFT; smokelifetime = DEFAULT_FACTORYSMOKE_TIME; diff --git a/descriptor/factory_desc.h b/descriptor/factory_desc.h index b3b3bc1c2..40de7d7ea 100644 --- a/descriptor/factory_desc.h +++ b/descriptor/factory_desc.h @@ -16,6 +16,7 @@ #define DEFAULT_FACTORYSMOKE_TIME (2499) #define DEFAULT_SMOKE_UPLIFT (16) +#define LEGACY_SMOKE_YOFFSET (8) class checksum_t; diff --git a/obj/wolke.cc b/obj/wolke.cc index 0f7615c6b..c910da95f 100644 --- a/obj/wolke.cc +++ b/obj/wolke.cc @@ -136,6 +136,7 @@ sync_result wolke_t::sync_step(uint32 delta_t) // move cloud set_flag( obj_t::dirty ); mark_image_dirty( old_img, old_yoff ); + // wind effect set_xoff( get_xoff() - sim_async_rand(2)); } return SYNC_OK; diff --git a/simfab.cc b/simfab.cc index dc2343a63..0185dd56a 100644 --- a/simfab.cc +++ b/simfab.cc @@ -1536,7 +1536,7 @@ void fabrik_t::smoke() const const uint8 rot = (4-rotate)%desc->get_building()->get_all_layouts(); grund_t *gr = welt->lookup_kartenboden(pos_origin.get_2d()+desc->get_smoketile( rot )); const koord offset = ( desc->get_smokeoffset(rot)*OBJECT_OFFSET_STEPS)/16; - wolke_t *smoke = new wolke_t(gr->get_pos(), offset.x, -8, offset.y, desc->get_smokelifetime(), desc->get_smokeuplift(), rada->get_images() ); + wolke_t *smoke = new wolke_t(gr->get_pos(), offset.x, 0, offset.y, desc->get_smokelifetime(), desc->get_smokeuplift(), rada->get_images() ); gr->obj_add(smoke); welt->sync_way_eyecandy.add( smoke ); } diff --git a/vehicle/simvehicle.cc b/vehicle/simvehicle.cc index 84c3c8f4f..8b2a4df2e 100644 --- a/vehicle/simvehicle.cc +++ b/vehicle/simvehicle.cc @@ -1217,7 +1217,7 @@ void vehicle_t::make_smoke() const if( cnv->get_akt_speed() < (sint32)((cnv->get_speed_limit() * 7u) >> 3) || desc->get_engine_type() == vehicle_desc_t::steam ) { grund_t* const gr = welt->lookup( get_pos() ); if( gr ) { - wolke_t* const abgas = new wolke_t( get_pos(), get_xoff() + ((dx * (sint16)((uint16)steps * OBJECT_OFFSET_STEPS)) >> 8), get_yoff() + ((dy * (sint16)((uint16)steps * OBJECT_OFFSET_STEPS)) >> 8), get_hoff() - 8, DEFAULT_EXHAUSTSMOKE_TIME, DEFAULT_SMOKE_UPLIFT, desc->get_smoke() ); + wolke_t* const abgas = new wolke_t( get_pos(), get_xoff() + ((dx * (sint16)((uint16)steps * OBJECT_OFFSET_STEPS)) >> VEHICLE_STEPS_PER_TILE_SHIFT), get_yoff() + ((dy * (sint16)((uint16)steps * OBJECT_OFFSET_STEPS)) >> VEHICLE_STEPS_PER_TILE_SHIFT), get_hoff() - LEGACY_SMOKE_YOFFSET, DEFAULT_EXHAUSTSMOKE_TIME, DEFAULT_SMOKE_UPLIFT, desc->get_smoke() ); if( !gr->obj_add( abgas ) ) { abgas->set_flag( obj_t::not_on_map ); delete abgas;