RAMPSOAK is just predefined step behavior. Stage programming is basically RAMPSOAK on steroids.
Create a code block that represents your "programmable RAMPSOAK". Each Stage would be a "step" in your RAMPSOAK. You can do whatever you want in that stage. Once it reaches what you consider "done" for that "step", you would do a JMP to the next Stage. Basic RAMPing can be done with a y=mx+b equation in a MATH box on a Timer box accumulator. A "soak" would just be a Timer instruction (T.Done would JMP). But then your more complex stuff could be whatever you want in that Stage (step).
Stage programming also lets you do a ton of "sequencing" behaviors you can't do that with RAMPSOAK. Stage can branch to go down 2 (or more) different paths (multiple JMPs within a stage), loop (JMP to earlier stage), create parallel concurrent flows (SGDIVERG) and then bring them back together (SGCONVRG). You can even RUN other Program codeblock from within a Stage - and let it be ITS own thing (even another Stage diagram running), and then have the ParentProgram Stage wait for the OtherProgram to EXIT by having the JMP in the ParentProgram stage be keyed off the OtherProgram.Done bit.
Very powerful sequencing capabilities. Stage programming is a Ladder Logic version of Sequential Function Charts.