kOS (Kerbal Operating System) programs https://ksp-kos.github.io/KOS/
game
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

orbit1.ks 4.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. print "===============================".
  2. print "Ready to orbit ! Liftoff in 15s".
  3. print "===============================".
  4. SET wantedTWR TO 1.5.
  5. HUDTEXT("Orbit sequence started. Lift off in 15s", 2, 2, 20, green, false).
  6. GETVOICE(0):PLAY( NOTE(300, .1) ).wait(0.1).GETVOICE(0):PLAY( NOTE(400, .2) ).
  7. SET GETVOICE(0):wave to "sawtooth".
  8. declare function LocalG {
  9. // Return local gravity
  10. return ship:body:mu / ship:body:position:mag ^ 2.
  11. }
  12. declare function getTwrThrust {
  13. // Estimate thrust for a given TWR (1.5 by default)
  14. DECLARE PARAMETER TWR is 1.5.
  15. set m to ship:mass.
  16. set w to m * LocalG().
  17. set p to ship:sensors:pres / 100.
  18. set t to ship:maxthrustat(p).
  19. set throt to (TWR * w) / t.
  20. return throt.
  21. }
  22. SET ctl TO ship:control.
  23. WAIT 2.0.
  24. SET ctl:yaw TO -1.0.
  25. SET ctl:pitch TO -1.0.
  26. SET ctl:roll TO -1.0.
  27. WAIT 1.0.
  28. SET ctl:yaw TO 1.0.
  29. SET ctl:pitch TO 1.0.
  30. SET ctl:roll TO 1.0.
  31. HUDTEXT("Wanted TWR = " + wantedTWR, 2, 2, 20, green, false).
  32. WAIT 1.0.
  33. SET ctl:yaw TO 0.0.
  34. SET ctl:pitch TO 0.0.
  35. SET ctl:roll TO 0.0.
  36. set ctl:MAINTHROTTLE TO 0.0.
  37. WAIT 1.0.
  38. lock THROTTLE to 0.0.
  39. DECLARE i TO 10.
  40. UNTIL i < 1 {
  41. HUDTEXT(i, 1, 2, 20, green, false).
  42. print i.
  43. GETVOICE(0):PLAY( NOTE(300, .2) ).
  44. wait(1.0).
  45. SET i TO i - 1.
  46. if i = 2 {
  47. // Stage 2s before lift off
  48. STAGE.
  49. print "Stage !".
  50. HUDTEXT("Throttle set to " + round(getTwrThrust(wantedTWR)*100) + "% for TWR " + wantedTWR, 2, 2, 20, green, false).
  51. print "Throttle set to " + round(getTwrThrust(wantedTWR)*100) + "% for TWR " + wantedTWR.
  52. }
  53. }
  54. HUDTEXT("Lift off !", 2, 2, 20, green, false).
  55. GETVOICE(0):PLAY( NOTE(400, .1) ).wait(0.1).GETVOICE(0):PLAY( NOTE(300, .2) ).
  56. print "Lift off !".
  57. lock THROTTLE to getTwrThrust(wantedTWR).
  58. UNTIL SHIP:VERTICALSPEED > 20 {
  59. WAIT 0.1.
  60. }
  61. HUDTEXT("Rotation 0", 2, 2, 20, green, false).
  62. GETVOICE(0):PLAY( NOTE(400, .1) ).wait(0.1).GETVOICE(0):PLAY( NOTE(400, .1) ).
  63. lock STEERING to HEADING(90,90).
  64. UNTIL SHIP:VERTICALSPEED > 50 {
  65. WAIT 0.1.
  66. }
  67. HUDTEXT("Rotation 1", 2, 2, 20, green, false).
  68. GETVOICE(0):PLAY( NOTE(400, .1) ).wait(0.1).GETVOICE(0):PLAY( NOTE(300, .2) ).
  69. print "Next rotation at speed 600".
  70. lock STEERING to HEADING(90,70).
  71. UNTIL SHIP:GROUNDSPEED + SHIP:VERTICALSPEED > 600 {
  72. WAIT 0.1.
  73. }
  74. HUDTEXT("Rotation 2", 2, 2, 20, green, false).
  75. GETVOICE(0):PLAY( NOTE(400, .1) ).wait(0.1).GETVOICE(0):PLAY( NOTE(300, .2) ).
  76. declare function endrot {
  77. set spd to SHIP:GROUNDSPEED + SHIP:VERTICALSPEED.
  78. return 60 - ((spd - 600) * 60 / 1000)
  79. }
  80. lock STEERING to HEADING(90,endrot()).
  81. UNTIL SHIP:GROUNDSPEED + SHIP:VERTICALSPEED > 1000 {
  82. WAIT 0.1.
  83. }
  84. lock STEERING to HEADING(90,0).
  85. HUDTEXT("Rotation 3", 2, 2, 20, green, false).
  86. GETVOICE(0):PLAY( NOTE(400, .1) ).wait(0.1).GETVOICE(0):PLAY( NOTE(300, .2) ).
  87. lock steering to HEADING(90,30).
  88. print "Waiting for AP to reach 80km".
  89. UNTIL SHIP:ORBIT:APOAPSIS > 80000 {
  90. WAIT 0.1.
  91. }
  92. HUDTEXT("Apoapsis 100km reached", 5, 2, 20, green, false).
  93. GETVOICE(0):PLAY( NOTE(300, .1) ).wait(0.1).GETVOICE(0):PLAY( NOTE(400, .2) ).
  94. lock THROTTLE to 0.0.
  95. set ctl:MAINTHROTTLE TO 0.0.
  96. print "Waiting for AP".
  97. print ETA:APOAPSIS.
  98. UNTIL ETA:APOAPSIS < 50 {
  99. print "Time to apoapsis : ".
  100. HUDTEXT("Time to apoapsis", 5, 2, 20, green, false).
  101. HUDTEXT(ETA:APOASPSIS, 5, 2, 20, green, false).
  102. print ETA:APOAPSIS.
  103. WAIT 10.0.
  104. }
  105. HUDTEXT("Preparing insertion", 5, 2, 20, green, false).
  106. GETVOICE(0):PLAY( NOTE(300, .1) ).wait(0.1).GETVOICE(0):PLAY( NOTE(400, .2) ).
  107. LOCK steering TO ship:prograde.
  108. UNTIL ETA:APOAPSIS < 30 {
  109. print "Time to apoapsis : ".
  110. print ETA:APOAPSIS.
  111. WAIT 1.0.
  112. }
  113. DECLARE prev_ETA to ETA:APOAPSIS.
  114. SET aETA TO ETA:APOAPSIS.
  115. SET SHIP:CONTROL:PILOTMAINTHROTTLE TO 1.0.
  116. SET throt TO SHIP:CONTROL:PILOTMAINTHROTTLE.
  117. UNTIL SHIP:ORBIT:PERIAPSIS > 80000 {
  118. if aETA - prev_ETA < 0 {
  119. if throt = 1.0 {
  120. print "Failing ! Node approach, notenough thrust !!".
  121. } else {
  122. LOCK throttle TO throt + 0.1.
  123. GETVOICE(0):PLAY( NOTE(300, .1) ).
  124. }
  125. }
  126. if aETA - prev_ETA > 0 {
  127. if throt = 0.0 {
  128. print "Failing ! Node escape, WTF !!".
  129. } else {
  130. LOCK throttle TO throt - 0.1.
  131. GETVOICE(0):PLAY( NOTE(400, .1) ).
  132. }
  133. }
  134. WAIT 0.1.
  135. }
  136. HUDTEXT("Orbiting :D", 5, 2, 20, green, false).
  137. GETVOICE(0):PLAY( NOTE(300, .1) ).wait(0.1).
  138. GETVOICE(0):PLAY( NOTE(300, .1) ).wait(0.1).
  139. GETVOICE(0):PLAY( NOTE(400, .2) ).
  140. unlock STEERING.
  141. set ctl:MAINTHROTTLE TO 0.0.
  142. unlock THROTTLE.