Scripting help needed

Scripting help needed

Postby Heiko » Sat Jun 11, 2016 3:48 pm

I am currently finishing a small pack of "auxiliary luggage vans" - a rather rustic looking type that the German Federal Railways built in the 1950s using carriage bodies of WW-2 "auxiliary passenger coaches"; they were used until the late 1980s.
20160611135341_1.jpg

Most of these luggage vans were fitted with removable / mobile tail lamps. They had a day and a night position - train stuff had to turn them 90° and light up the paraffin oil lamp at night.
day sign.jpg
day position
night sign.jpg
night position

I am trying to implement this function in my models via lua. The lamp has to be "turned around" by the script when the light is getting turned on or off. Until now, this doesn't work, no matter what I try. The rest of the script controls the visibility of the brake hoses an steam couplings between wagons of the same type in a consist - and this part of the script is working as it should (to be honest, it was developed for my "Umbauwagen" models with much more than a little help by some of you).

My tail lamp is a child object called "Zugschlusslaterne", and it consists of four nodes: "Lampe_V-T" (lamp front day position), "Lampe_V-N" (lamp front night position), "Lampe_H-T" (lamp rear day position), "Lampe_H-N" (lamp rear night position).
There are two variables for them (gtaillamp_front and gtaillamp_rear) whose value changes from "0" to "1" if the van is the last or first one in a consist. When the control value "Headlights" change the nodes should turn on or off. This part doesn't work and I con't find my probably very simple error :cry: Im am pretty sure that this is a case for the thread "developer fails of the day".

Thank you for some help!

Code: Select all
-- File:             MDie_WagonScript.lua
-- Version:          1.00
-- Beschreibung:     steuert Sichtbarkeit Wagenuebergaenge und Schlusslaternen

-- Entwickler
-- Sprache           Heiko Mueller
-- erstellt:         01.05.1016
-- Letzte Aenderung: 10.06.2016


--------------------------------------------------------------------------------------------------------
-- Variablen
---------------------------------------------------------------------------------------------------------

WAGENTYP_ID = 500;
DHZ_ID = 2000;
gZuglaenge = 0;
gfront_probe = 0;
grear_probe = 0;
gtaillamp_front = 0;
gtaillamp_rear = 0;

function Initialise()
   
    Call( "Dampfheizung_1:SetEmitterActive", 0 );
    Call( "Dampfheizung_2:SetEmitterActive", 0 );
    Call( "Dampfheizung_3:SetEmitterActive", 0 );
    Call( "Dampfheizung_4:SetEmitterActive", 0 );
    Call( "Fwd_Taillight_01:Activate", 0);        
    Call( "Bwd_Taillight_01:Activate", 0);
   Call( "BeginUpdate" );
   firstUpdate = true
        
end

function Update ( time )
 
  if firstUpdate then
   Call( "Zugschlusslaterne:ActivateNode", "Lampe_V-T", 0 ); -- all tail lamps off
   Call( "Zugschlusslaterne:ActivateNode", "Lampe_H-T", 0 );
   Call( "Zugschlusslaterne:ActivateNode", "Lampe_V-N", 0 );
   Call( "Zugschlusslaterne:ActivateNode", "Lampe_H-N", 0 ); 
   Call( "Uebergang_MDie:ActivateNode", "Vauf", 0 );
   Call( "Uebergang_MDie:ActivateNode", "Vauf_2", 0 );
   Call( "Uebergang_MDie:ActivateNode", "Vzu", 1 );
   Call( "Uebergang_MDie:ActivateNode", "Hauf", 0 );
   Call( "Uebergang_MDie:ActivateNode", "Hauf_2", 0 );
   Call( "Uebergang_MDie:ActivateNode", "Hzu", 1 );
   firstUpdate = false
end     
      
      -- consist lenght check
      local Tempo = Call("GetSpeed");     
    if Tempo < 2.0 then
    local Laengenpruefung = Call( "GetConsistLength" );
    if gZuglaenge ~= Laengenpruefung then
    gZuglaenge = Laengenpruefung;
    gfront_probe = Call( "SendConsistMessage", WAGENTYP_ID, 4, 0 );
    grear_probe = Call( "SendConsistMessage", WAGENTYP_ID, 4, 1 );
 
end
end

if gfront_probe == 0 then   

       Call( "Uebergang_MDie:ActivateNode", "Vauf", 0 );   
       Call( "Uebergang_MDie:ActivateNode", "Vauf_2", 0 );
       Call( "Uebergang_MDie:ActivateNode", "Vzu", 1 );   
       Call( "Zugschlusslaterne:ActivateNode", "Lampe_V-T", 1 );
       gtaillamp_front = 1
                                     
  else Call( "SendConsistMessage", WAGENTYP_ID, 4, 0);
       Call( "Zugschlusslaterne:ActivateNode", "Lampe_V-T", 0 );
       
 end     

 if grear_probe == 0 then

       Call( "Uebergang_MDie:ActivateNode", "Hauf", 0 );   
       Call( "Uebergang_MDie:ActivateNode", "Hauf_2", 0 );
       Call( "Uebergang_MDie:ActivateNode", "Hzu", 1 );   
       Call( "Zugschlusslaterne:ActivateNode", "Lampe_H-T", 1 );
       gtaillamp_rear = 1
                                   
  else Call( "SendConsistMessage", WAGENTYP_ID, 4, 1)
       Call( "Zugschlusslaterne:ActivateNode", "Lampe_H-T", 0 );
       end
 end
 
function OnControlValueChange ( name, index, value )

       if ( Call("*:GetControlValue", "Headlights", 0) >= 0.5 ) and ( gtaillamp_front == 1 ) then
       Call( "Zugschlusslaterne:ActivateNode", "Lampe_V-T", 0 );
       Call( "Zugschlusslaterne:ActivateNode", "Lampe_V-N", 1 );
       end
       if ( Call("*:GetControlValue", "Headlights", 0) >= 0.5 ) and ( gtaillamp_rear == 1 ) then
       Call( "Zugschlusslaterne:ActivateNode", "Lampe_H-T", 0 );
       Call( "Zugschlusslaterne:ActivateNode", "Lampe_H-N", 1 );
       end
       end

function OnConsistMessage ( msg, argument, direction )
       
    if ( msg == WAGENTYP_ID ) and ( argument == "4" ) and ( direction == 0 ) then
        Call( "Uebergang_MDie:ActivateNode", "Hauf", 1 );
        Call( "Uebergang_MDie:ActivateNode", "Hauf_2", 0 );
         Call( "Uebergang_MDie:ActivateNode", "Hzu", 0 );
         Call( "SendConsistMessage", WAGENTYP_ID, 4, 0);
elseif ( msg == WAGENTYP_ID ) and ( argument == "4" )and ( direction == 1 ) then
         Call( "Uebergang_MDie:ActivateNode", "Vauf", 1 );
         Call( "Uebergang_MDie:ActivateNode", "Vauf_2", 0 );
         Call( "Uebergang_MDie:ActivateNode", "Vzu", 0 );
         Call( "SendConsistMessage", WAGENTYP_ID, 4, 1);
elseif ( msg == WAGENTYP_ID ) and ( argument == "2" ) and ( direction == 0 ) then
        Call( "Uebergang_MDie:ActivateNode", "Hauf", 0 );
        Call( "Uebergang_MDie:ActivateNode", "Hauf_2", 1 );
         Call( "Uebergang_MDie:ActivateNode", "Hzu", 0 );
         Call( "SendConsistMessage", WAGENTYP_ID, 4, 0);
elseif ( msg == WAGENTYP_ID ) and ( argument == "2" ) and ( direction == 1 ) then
         Call( "Uebergang_MDie:ActivateNode", "Vauf", 0 );
         Call( "Uebergang_MDie:ActivateNode", "Vauf_2", 1 );
         Call( "Uebergang_MDie:ActivateNode", "Vzu", 0 );
         Call( "SendConsistMessage", WAGENTYP_ID, 4, 1);
    else Call( "SendConsistMessage", msg, argument, direction );
end
end
As found is a small affair: it is about being careful
Peter Smithson
User avatar
Heiko
General Shed Duties
 
Posts: 12
Joined: Fri Aug 01, 2014 1:18 pm
Location: Leipzig, Germany
Has thanked: 18 times
Been thanked: 13 times

Re: Scripting help needed

Postby VictoryWorks » Mon Jun 13, 2016 9:12 am

Not sure I can see an immediate issue but to question the logic for a moment, why are you sending consist messages? Is each coach not self-contained for this query?

The way I read your description you need:
Do I have anything coupled front or back? If not show front or back lamp. If it's dark use the night versions.

I'm not sure why you're trying to send messages back and forth between the consist for this? Seems like it might be over complicating things which never helps when bug hunting.
User avatar
VictoryWorks
Driver
 
Posts: 333
Joined: Mon Apr 07, 2014 1:22 pm
Has thanked: 41 times
Been thanked: 224 times

Re: Scripting help needed

Postby Heiko » Mon Jun 13, 2016 9:36 pm

I'm always happy if someone is questioning my "logic" - much of the scripting is still all greek to me.

The messages are sent between the vehicles because of the brake hoses, steam coupling and connecting doors which I want to show connected / open between "friendly" types of vehicles, so I have to ask if the previous / following vehicle is of the same type.
But maybe this approach is too complicated?

I tried to use this part of the script also for the lamps - but basically you are right with the following: "Do I have anything coupled front or back? If not show front or back lamp. If it's dark use the night versions." The only difference is that would like to connect it rather to the state of the locomotive's headlights than to the time of day.

Thank you very much for your thoughts!
As found is a small affair: it is about being careful
Peter Smithson
User avatar
Heiko
General Shed Duties
 
Posts: 12
Joined: Fri Aug 01, 2014 1:18 pm
Location: Leipzig, Germany
Has thanked: 18 times
Been thanked: 13 times

Re: Scripting help needed

Postby VictoryWorks » Tue Jun 14, 2016 8:48 am

There is a nice cheat with Headlights. Any locos worth their salt are set with the Control for Headlights marked as "Apply to consist". What this means is that if you add a matching control to the coach then it will copy the value of the loco control with that name.
You can then interrogate that control on the coach using GetValue in it's script and away you go.

I'm a strong believer in keeping things as simple as possible and pinging messages up and down consists is something to be avoided unless it's absolutely necessary - the biggest issue with it is that if any user puts any stock in between that's not yours then the whole message chain breaks. Now I can understand why you're doing it with the pipes as adjacent coaches need to talk to each other, however for lamps you don't need to make it so complicated and potentially "breakable". :)
User avatar
VictoryWorks
Driver
 
Posts: 333
Joined: Mon Apr 07, 2014 1:22 pm
Has thanked: 41 times
Been thanked: 224 times

Re: Scripting help needed

Postby newbouy » Wed Jun 15, 2016 1:46 am

have you tried replacing the Zugschlusslaterne in the example line from your script below with a " * " star sign.

Call( "Zugschlusslaterne:ActivateNode", "Lampe_V-T", 0 ); -- all tail lamps off

It should look like this:

Call( "*:ActivateNode", "Lampe_V-T", 0 ); -- all tail lamps off

From what i understand which might not be 100% correct without rechecking is where you have put the word "Zugschlusslaterne" in your line it indicates that nodes Parent name.By putting the " * " there instead forces a search to find that particular node which according to what ive read is less efficient but its the only way i could get my scripts to work correctly.The DEV docs do say not to use the " * " method so i must be doing something wrong but i does work ok.

thanks Newbouy
newbouy
Full Time Fireman
 
Posts: 52
Joined: Sat Apr 12, 2014 9:29 am
Has thanked: 3 times
Been thanked: 19 times

Re: Scripting help needed

Postby Heiko » Thu Jun 16, 2016 8:23 pm

I'm happy to see you are suggesting things I was thinking of - apparantly my first approaches were not completely odd.

To start with the last one: the asterisk doesn't work (in this case). I tried to use the asterisk for other nodes - i.e. the nodes in the child object "Uebergang_MDie"; it works without problems.
My error has to be in another part of the script.

As for the "cheat" :) with headlights - I thought about it and really this was my first attempt (maybe I should have talked a little bit about the things I have tried out in the last weeks). It seems that many of the german locos (including DTG's Baureihe 155, 218, 365) are not worth their salt ;)
So maybe it could be a solution to tell customers that the changing tail light function is only working with "compatible" locos. I don't like this idea very much and I prefer to give up the whole function.

Another try was to integrate the lamp geometry in the "Fwd_Taillight_01" / "Bwd_Taillight_01" nodes. This works, but as these nodes are only "on" or "off" the day lamp geometry has to be smaller to be covered completely by the night lamp geometry. In practice this looks rather strange - and the day lamp geometry has to loose its handle.

When I started building models for RW after developing MSTS-models for about 10 years I liked the idea that carriage models could be more immersive than the rather functionally boring models I made before). Unfortunately there are no real standards for locomotives, so you depend on the personal building technique of each loco developer. So maybe the whole idea of carriage scripts don't make much sense. And of course I agree with your statement "keeping things as simple as possible" (I always remember the typical phrase about italian food when I visited a language course in Italy many years ago: "piu semplice, piu buono").
As found is a small affair: it is about being careful
Peter Smithson
User avatar
Heiko
General Shed Duties
 
Posts: 12
Joined: Fri Aug 01, 2014 1:18 pm
Location: Leipzig, Germany
Has thanked: 18 times
Been thanked: 13 times

Re: Scripting help needed

Postby cjbarnes5294 » Thu Jun 16, 2016 10:01 pm

It's a shame that using the Headlight control turned out to be unreliable. Perhaps it has been used differently on many German locos in a way that English loco devs wouldn't expect, but it would be a shame to drop the nice carriage scripting over it. Since Headlights can't be used, consist messages it will have to be, much as you were already doing, but it can be made to run more efficiently by limiting the messages being sent out to just one for each message every second, instead of chucking out consist messages on every update, and by only running the code when the vehicle is in range of the player - no point worrying what lamps are being rendered if you can't see it!

What I have done is modified the script code you posted above and made a few alterations, whilst also adding some new functions. I've largely left the Uebergang stuff alone except to integrate it into the new vehicle probing system and moving some code into the new rendering function, but otherwise it's how it was before. I guessed that the Zugschlusslaterne nodes post-fixed with "-T" were the day or tag lamps, and "-N" were nacht lamps, and so added some logic that automatically changes them from day to night based on the time of the scenario - you could further alter it so that the lamps are interlocked with the train's movement, and are only switched from one to the other when the train is brought to a stop, but I'll leave that to you. ;)

Code: Select all
-- File:             MDie_WagonScript.lua
-- Version:          1.00
-- Beschreibung:     steuert Sichtbarkeit Wagenuebergaenge und Schlusslaternen

-- Entwickler
-- Sprache           Heiko Mueller
-- erstellt:         01.05.1016
-- Letzte Aenderung: 10.06.2016


--------------------------------------------------------------------------------------------------------
-- Variablen
---------------------------------------------------------------------------------------------------------

WAGENTYP_ID = 500;
DHZ_ID = 2000;
gZuglaenge = 0;
gfront_probe = 0;
grear_probe = 0;
gtaillamp_front = 0;
gtaillamp_rear = 0;
gAdjacentVehicleTimer = 0;
gVehicleInFront = false;
gVehicleBehind = false;

function Initialise()
   
    Call( "Dampfheizung_1:SetEmitterActive", 0 );
    Call( "Dampfheizung_2:SetEmitterActive", 0 );
    Call( "Dampfheizung_3:SetEmitterActive", 0 );
    Call( "Dampfheizung_4:SetEmitterActive", 0 );
    Call( "Fwd_Taillight_01:Activate", 0);       
    Call( "Bwd_Taillight_01:Activate", 0);
   Call( "BeginUpdate" );
   firstUpdate = true
       
end

function Update ( time )
 
   if firstUpdate then
      Call( "Zugschlusslaterne:ActivateNode", "Lampe_V-T", 0 ); -- all tail lamps off
      Call( "Zugschlusslaterne:ActivateNode", "Lampe_H-T", 0 );
      Call( "Zugschlusslaterne:ActivateNode", "Lampe_V-N", 0 );
      Call( "Zugschlusslaterne:ActivateNode", "Lampe_H-N", 0 ); 
      Call( "Uebergang_MDie:ActivateNode", "Vauf", 0 );
      Call( "Uebergang_MDie:ActivateNode", "Vauf_2", 0 );
      Call( "Uebergang_MDie:ActivateNode", "Vzu", 1 );
      Call( "Uebergang_MDie:ActivateNode", "Hauf", 0 );
      Call( "Uebergang_MDie:ActivateNode", "Hauf_2", 0 );
      Call( "Uebergang_MDie:ActivateNode", "Hzu", 1 );
      firstUpdate = false;
   end   

   --only do the following when the carriage is relatively near to the camera
   if isNearCamera() then
      gAdjacentVehicleTimer = gAdjacentVehicleTimer + time;
      if gAdjacentVehicleTimer > 1 then --only do SendConsistMessage every second or so to prevent the message cascade up and down the train from bringing the game to its knees
         --do a simple test to see if there is a vehicle coupled in front and behind this vehicle
         CheckForCoupledVehicles ();
         
         --send the Uebergang messages out, if there is a vehicle in front/behind to send them to
         if gVehicleInFront then
            Call( "SendConsistMessage", WAGENTYP_ID, 4, 0);
         end
         if gVehicleBehind then
            Call( "SendConsistMessage", WAGENTYP_ID, 4, 1);
         end
         
         gAdjacentVehicleTimer = 0;
      end
      
      --invoke this function to carry out the Zugschlusslaterne rendering and some of the Uebergang rendering that isn't managed already in OnConsistMessage
      RenderCarriageEndComponents();
   end
   
end

function CheckForCoupledVehicles ()
   
   --check for vehicle coupled in front
   if Call("SendConsistMessage", 545366, 0, 0) == 1 then
      gVehicleInFront = true;
   else
      gVehicleInFront = false;
   end
   
   --check for vehicle coupled behind
   if Call("SendConsistMessage", 545366, 0, 1) == 1 then
      gVehicleBehind = true;
   else
      gVehicleBehind = false;
   end

end

function RenderCarriageEndComponents ()

   local timeOfDay = SysCall("ScenarioManager:GetTimeOfDay"); --seconds since midnight
   local HOUR = 3600;
   local MINUTE = 60;
   local DAY_START_TIME = 6*HOUR; --6am, adjust as desired
   local NIGHT_START_TIME = 18*HOUR; --6pm, adjust as desired
   local dayTime = false;
   if timeOfDay > DAY_START_TIME and timeOfDay < NIGHT_START_TIME then
      dayTime = true;
   end
   
   --Zugschlusslaterne control
   if not gVehicleInFront and gVehicleBehind then     
      if dayTime then --Tag
         Call( "Zugschlusslaterne:ActivateNode", "Lampe_V-T", 1 );   
         Call( "Zugschlusslaterne:ActivateNode", "Lampe_H-T", 0 );
         Call( "Zugschlusslaterne:ActivateNode", "Lampe_V-N", 0 );
         Call( "Zugschlusslaterne:ActivateNode", "Lampe_H-N", 0 ); 
      else --Nacht
         Call( "Zugschlusslaterne:ActivateNode", "Lampe_V-T", 0 );   
         Call( "Zugschlusslaterne:ActivateNode", "Lampe_H-T", 0 );
         Call( "Zugschlusslaterne:ActivateNode", "Lampe_V-N", 1 );
         Call( "Zugschlusslaterne:ActivateNode", "Lampe_H-N", 0 );
      end
   elseif not gVehicleBehind and gVehicleInFront then
      if dayTime then --Tag
         Call( "Zugschlusslaterne:ActivateNode", "Lampe_V-T", 0 );   
         Call( "Zugschlusslaterne:ActivateNode", "Lampe_H-T", 1 );
         Call( "Zugschlusslaterne:ActivateNode", "Lampe_V-N", 0 );
         Call( "Zugschlusslaterne:ActivateNode", "Lampe_H-N", 0 ); 
      else --Nacht
         Call( "Zugschlusslaterne:ActivateNode", "Lampe_V-T", 0 );   
         Call( "Zugschlusslaterne:ActivateNode", "Lampe_H-T", 0 );
         Call( "Zugschlusslaterne:ActivateNode", "Lampe_V-N", 0 );
         Call( "Zugschlusslaterne:ActivateNode", "Lampe_H-N", 1 );
      end
   else --the vehicle is either coupled at both ends, or it is sitting uncoupled to anything, so remove all lamps from both ends
      Call( "Zugschlusslaterne:ActivateNode", "Lampe_H-T", 0 );
      Call( "Zugschlusslaterne:ActivateNode", "Lampe_V-T", 0 );
      Call( "Zugschlusslaterne:ActivateNode", "Lampe_V-N", 0 );
      Call( "Zugschlusslaterne:ActivateNode", "Lampe_H-N", 0 ); 
   end   

   --Uebergang
   if not gVehicleInFront then
      Call( "Uebergang_MDie:ActivateNode", "Vauf", 0 );   
      Call( "Uebergang_MDie:ActivateNode", "Vauf_2", 0 );
      Call( "Uebergang_MDie:ActivateNode", "Vzu", 1 );   
   end
   if not gVehicleBehind then
      Call( "Uebergang_MDie:ActivateNode", "Hauf", 0 );   
      Call( "Uebergang_MDie:ActivateNode", "Hauf_2", 0 );
      Call( "Uebergang_MDie:ActivateNode", "Hzu", 1 );   
   end

end
 
function OnControlValueChange ( name, index, value )

end

function OnConsistMessage ( msg, argument, direction )
       
   if ( msg == WAGENTYP_ID ) and ( argument == "4" ) and ( direction == 0 ) then
      Call( "Uebergang_MDie:ActivateNode", "Hauf", 1 );
      Call( "Uebergang_MDie:ActivateNode", "Hauf_2", 0 );
      Call( "Uebergang_MDie:ActivateNode", "Hzu", 0 );
      Call( "SendConsistMessage", WAGENTYP_ID, 4, 0);
   elseif ( msg == WAGENTYP_ID ) and ( argument == "4" )and ( direction == 1 ) then
      Call( "Uebergang_MDie:ActivateNode", "Vauf", 1 );
      Call( "Uebergang_MDie:ActivateNode", "Vauf_2", 0 );
      Call( "Uebergang_MDie:ActivateNode", "Vzu", 0 );
      Call( "SendConsistMessage", WAGENTYP_ID, 4, 1);
   elseif ( msg == WAGENTYP_ID ) and ( argument == "2" ) and ( direction == 0 ) then
      Call( "Uebergang_MDie:ActivateNode", "Hauf", 0 );
      Call( "Uebergang_MDie:ActivateNode", "Hauf_2", 1 );
      Call( "Uebergang_MDie:ActivateNode", "Hzu", 0 );
      Call( "SendConsistMessage", WAGENTYP_ID, 4, 0);
   elseif ( msg == WAGENTYP_ID ) and ( argument == "2" ) and ( direction == 1 ) then
      Call( "Uebergang_MDie:ActivateNode", "Vauf", 0 );
      Call( "Uebergang_MDie:ActivateNode", "Vauf_2", 1 );
      Call( "Uebergang_MDie:ActivateNode", "Vzu", 0 );
      Call( "SendConsistMessage", WAGENTYP_ID, 4, 1);
   elseif msg ~= 545366 then --don't pass on the probing message
      Call( "SendConsistMessage", msg, argument, direction );
   end
end

-- function derived from the 2015 DTG dev docs for testing if the vehicle is near the camera
function isNearCamera ()
   local x, y, z = Call ( "getNearPosition" );
   --Pythagoras theorem, use euclidean distance squared
   return (x * x + y * y + z * z) < (1000 * 1000); -- within 1km of camera
end


Hopefully it all works whilst making some sense too! Please feel free to tweak/amend/append/delete whatever you like. :)

Kind regards,
Chris
The Red Queen Hypothesis, applicable to train sim development?

"Here, you see, it takes all of the running you can do, to keep the same place."
cjbarnes5294
Driver
 
Posts: 398
Images: 82
Joined: Mon Mar 31, 2014 12:40 pm
Location: Gloucestershire/North Yorkshire
Has thanked: 551 times
Been thanked: 187 times

Re: Scripting help needed

Postby Heiko » Fri Jun 17, 2016 1:32 pm

Hello Chris,

a great solution; it's working fine - and a very big thank you!
I was thinking before about the idea to connect the lamp state to the time of day, but never tried seriously to do it...

What I like especially is your way to connect the function to the distance from the player - I knew about the function isNearCamera () but it would never have occurred to me to use it for this purpose.
And a great base for further learning I need urgently, too.

Strange fact that the "apply to consist" in the headlight control is used for example by Virtual Railroads (as standard, I think), but not by DTG. And some of the small developers are not very willing to correct this single line in the engine blueprint :?

I will let you know how the project is going on. I'm on my way with another type of carriages including a driving trailer (and hopefully finishing my E44 loco), so this discussion is really helping a lot for the next steps in scripting...
As found is a small affair: it is about being careful
Peter Smithson
User avatar
Heiko
General Shed Duties
 
Posts: 12
Joined: Fri Aug 01, 2014 1:18 pm
Location: Leipzig, Germany
Has thanked: 18 times
Been thanked: 13 times

Re: Scripting help needed

Postby Heiko » Sat Sep 17, 2016 4:45 pm

Slowly getting ready for release after a long, hot summer with a lot of real-life work and longer breaks in my virtual prodction halls...
For the first time I wrote an english manual (hopefully not too incomprehensible) :?
Attachments
20160916175935_1.jpg
20160820212400_1.jpg
20160820211222_1.jpg
As found is a small affair: it is about being careful
Peter Smithson
User avatar
Heiko
General Shed Duties
 
Posts: 12
Joined: Fri Aug 01, 2014 1:18 pm
Location: Leipzig, Germany
Has thanked: 18 times
Been thanked: 13 times

Re: Scripting help needed

Postby TrabantDeLuxe » Sat Sep 17, 2016 6:25 pm

I like the texturing! Any chance of a little insight on that?
TrabantDeLuxe
Passed Fireman
 
Posts: 247
Images: 7
Joined: Mon Mar 21, 2016 10:10 pm
Location: Delft, NL
Has thanked: 176 times
Been thanked: 263 times

Next

Return to Rolling Stock General

Who is online

Users browsing this forum: No registered users and 1 guest