Advertisement
Guest User

Untitled

a guest
Jul 17th, 2018
271
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 34.85 KB | None | 0 0
  1. ' Medusa - Bally 1981
  2. ' http://www.ipdb.org/machine.cgi?id=1565
  3. ' Medusa / IPD No. 1565 / February 04, 1981 / 4 Players
  4. ' VPX version by JPSalas 2017, version 1.0.4
  5. ' Light numbers from the tables by Joe Entropy & RipleYYY and Pacdude.
  6. ' Uses the Left and Right Magna saves keys to activate the save post (shield)
  7.  
  8. Option Explicit
  9. Randomize
  10.  
  11. On Error Resume Next
  12. ExecuteGlobal GetTextFile("controller.vbs")
  13. If Err Then MsgBox "You need the controller.vbs in order to run this table, available in the vp10 package"
  14. On Error Goto 0
  15.  
  16. Const BallSize = 50
  17.  
  18. LoadVPM "01550000", "Bally.vbs", 3.26
  19.  
  20. Dim bsTrough, bsSaucer, dtRBank, dtTBank
  21. Dim x
  22.  
  23. Const cGameName = "medusa"
  24.  
  25. Const UseSolenoids = 0
  26. Const UseLamps = 0
  27. Const UseGI = 0
  28. Const UseSync = 0
  29. Const HandleMech = 0
  30.  
  31. Dim VarHidden
  32. If Table1.ShowDT = true then
  33. VarHidden = 1
  34. else
  35. VarHidden = 0
  36. For each x in aReels
  37. x.Visible = 0
  38. Next
  39. lrail.Visible = 0
  40. rrail.Visible = 0
  41. end if
  42.  
  43. Set MotorCallback = GetRef("UpdateSolenoids")
  44.  
  45. ' Standard Sounds
  46. Const SSolenoidOn = "fx_Solenoid"
  47. Const SSolenoidOff = ""
  48. Const SCoin = "fx_coin"
  49.  
  50. '************
  51. ' Table init.
  52. '************
  53.  
  54. Sub table1_Init
  55. vpmInit me
  56. With Controller
  57. .GameName = cGameName
  58. If Err Then MsgBox "Can't start Game" & cGameName & vbNewLine & Err.Description:Exit Sub
  59. .SplashInfoLine = "Medusa - Bally 1981" & vbNewLine & "VPX table by JPSalas v.1.0.4"
  60. .HandleKeyboard = 0
  61. .ShowTitle = 0
  62. .ShowDMDOnly = 1
  63. .ShowFrame = 0
  64. .HandleMechanics = 0
  65. .Hidden = VarHidden
  66. '.Games(cGameName).Settings.Value("rol") = 0 '1= rotated display, 0= normal
  67. '.SetDisplayPosition 0,0, GetPlayerHWnd 'restore dmd window position
  68. On Error Resume Next
  69. .Run GetPlayerHWnd
  70. If Err Then MsgBox Err.Description
  71. On Error Goto 0
  72. End With
  73.  
  74. ' Nudging
  75. vpmNudge.TiltSwitch = 15
  76. vpmNudge.Sensitivity = 1
  77. vpmNudge.TiltObj = Array(Bumper1, Bumper2, Bumper3, Bumper4, LeftSlingshot, RightSlingshot, sw34)
  78.  
  79. ' Trough
  80. Set bsTrough = New cvpmBallStack
  81. With bsTrough
  82. .InitSw 0, 8, 0, 0, 0, 0, 0, 0
  83. .InitKick BallRelease, 80, 6
  84. .InitAddSnd "fx_drain"
  85. .InitEntrySnd "fx_Solenoid", "fx_Solenoid"
  86. .InitExitSnd "fx_ballrel", "fx_Solenoid"
  87. .Balls = 1
  88. .IsTrough = True
  89. End With
  90.  
  91. ' Saucer
  92. Set bsSaucer = New cvpmBallStack
  93. With bsSaucer
  94. .InitSaucer sw19, 19, 155, 8
  95. .InitExitSnd SoundFX("fx_kicker", DOFContactors), SoundFX("fx_Solenoid", DOFContactors)
  96. .KickAngleVar = 2
  97. .KickForceVar = 2
  98. End With
  99.  
  100. ' Right drop targets
  101. Set dtRBank = New cvpmDropTarget
  102. With dtRbank
  103. .initdrop array(sw1, sw2, sw3, sw4), array(1, 2, 3, 4)
  104. .initsnd SoundFX("fx_droptarget", DOFDropTargets), SoundFX("fx_resetdrop", DOFContactors)
  105. '.createEvents "dtRbank"
  106. End With
  107.  
  108. 'Top drop targets
  109. Set dtTBank = New cvpmDropTarget
  110. With dtTbank
  111. .initdrop array(sw48, sw47, sw46, sw45, sw44, sw43, sw42), Array(48, 47, 46, 45, 44, 43, 42)
  112. .initsnd SoundFX("fx_droptarget", DOFDropTargets), SoundFX("fx_resetdrop", DOFContactors)
  113. '.createEvents "dtTbank"
  114. End With
  115.  
  116. ' Main Timer init
  117. PinMAMETimer.Interval = PinMAMEInterval
  118. PinMAMETimer.Enabled = 1
  119.  
  120. ' init shield
  121. post2.IsDropped = 1
  122. post2rubber.visible = 0
  123. Post.Pullback
  124.  
  125. ' Manually init fast flips
  126. if not IsEmpty(SolCallback(sLLFlipper)) then vpmFlips.CallBackL = SolCallback(sLLFlipper)
  127. if not IsEmpty(SolCallback(sLRFlipper)) then vpmFlips.CallBackR = SolCallback(sLRFlipper)
  128. End Sub
  129.  
  130. Sub table1_Paused:Controller.Pause = 1:End Sub
  131. Sub table1_unPaused:Controller.Pause = 0:End Sub
  132.  
  133. '**********
  134. ' Keys
  135. '**********
  136.  
  137. Sub table1_KeyDown(ByVal Keycode)
  138. If keycode = PlungerKey Then PlaySound "fx_PlungerPull", 0, 1, 0.1, 0.25:Plunger.Pullback
  139. If keycode = LeftMagnaSave OR keycode = RightMagnaSave Then Controller.Switch(17) = 1
  140. If keycode = LeftTiltKey Then Nudge 90, 5:PlaySound SoundFX("fx_nudge", 0), 0, 1, -0.1, 0.25
  141. If keycode = RightTiltKey Then Nudge 270, 5:PlaySound SoundFX("fx_nudge", 0), 0, 1, 0.1, 0.25
  142. If keycode = CenterTiltKey Then Nudge 0, 6:PlaySound SoundFX("fx_nudge", 0), 0, 1, 0, 0.25
  143. If vpmKeyDown(keycode)Then Exit Sub
  144. End Sub
  145.  
  146. Sub table1_KeyUp(ByVal Keycode)
  147. If keycode = LeftMagnaSave OR keycode = RightMagnaSave Then Controller.Switch(17) = 0
  148. If vpmKeyUp(keycode)Then Exit Sub
  149. If keycode = PlungerKey Then PlaySound "fx_plunger", 0, 1, 0.1, 0.25:Plunger.Fire
  150. End Sub
  151.  
  152. '*********
  153. ' Switches
  154. '*********
  155.  
  156. ' Slings
  157. Dim LStep, RStep, R2Step
  158.  
  159. Sub LeftSlingShot_Slingshot
  160. PlaySound SoundFX("fx_slingshot", DOFContactors), 0, 1, -0.05, 0.05
  161. LeftSling4.Visible = 1
  162. Lemk.RotX = 26
  163. LStep = 0
  164. vpmTimer.PulseSw 36
  165. LeftSlingShot.TimerEnabled = 1
  166. End Sub
  167.  
  168. Sub LeftSlingShot_Timer
  169. Select Case LStep
  170. Case 1:LeftSLing4.Visible = 0:LeftSLing3.Visible = 1:Lemk.RotX = 14
  171. Case 2:LeftSLing3.Visible = 0:LeftSLing2.Visible = 1:Lemk.RotX = 2
  172. Case 3:LeftSLing2.Visible = 0:Lemk.RotX = -10:LeftSlingShot.TimerEnabled = 0
  173. End Select
  174. LStep = LStep + 1
  175. End Sub
  176.  
  177. Sub RightSlingShot_Slingshot
  178. PlaySound SoundFX("fx_slingshot", DOFContactors), 0, 1, 0.05, 0.05
  179. RightSling4.Visible = 1
  180. Remk.RotX = 26
  181. RStep = 0
  182. vpmTimer.PulseSw 35
  183. RightSlingShot.TimerEnabled = 1
  184. End Sub
  185.  
  186. Sub RightSlingShot_Timer
  187. Select Case RStep
  188. Case 1:RightSLing4.Visible = 0:RightSLing3.Visible = 1:Remk.RotX = 14
  189. Case 2:RightSLing3.Visible = 0:RightSLing2.Visible = 1:Remk.RotX = 2
  190. Case 3:RightSLing2.Visible = 0:Remk.RotX = -10:RightSlingShot.TimerEnabled = 0
  191. End Select
  192. RStep = RStep + 1
  193. End Sub
  194.  
  195. Sub sw34_Slingshot
  196. PlaySound SoundFX("fx_slingshot", DOFContactors), 0, 1, 0.05, 0.05
  197. R2Sling4.Visible = 1
  198. Remk1.RotX = 26
  199. R2Step = 0
  200. vpmTimer.PulseSw 34
  201. sw34.TimerEnabled = 1
  202. End Sub
  203.  
  204. Sub sw34_Timer
  205. Select Case R2Step
  206. Case 1:R2SLing4.Visible = 0:R2SLing3.Visible = 1:Remk1.RotX = 14
  207. Case 2:R2SLing3.Visible = 0:R2SLing2.Visible = 1:Remk1.RotX = 2
  208. Case 3:R2SLing2.Visible = 0:Remk1.RotX = -10:sw34.TimerEnabled = 0
  209. End Select
  210. R2Step = R2Step + 1
  211. End Sub
  212.  
  213. ' Rubbers
  214. Sub sw18_Hit:vpmTimer.PulseSw 18:End Sub
  215. Sub sw18a_Hit:vpmTimer.PulseSw 18:End Sub
  216. Sub sw18b_Hit:vpmTimer.PulseSw 18:End Sub
  217.  
  218. ' Bumpers
  219. Sub Bumper1_Hit:vpmTimer.PulseSw 37:PlaySound SoundFX("fx_bumper", DOFContactors), 0, 1, -0.15, 0.15:End Sub
  220. Sub Bumper2_Hit:vpmTimer.PulseSw 38:PlaySound SoundFX("fx_bumper", DOFContactors), 0, 1, -0.15, 0.15:End Sub
  221. Sub Bumper3_Hit:vpmTimer.PulseSw 39:PlaySound SoundFX("fx_bumper", DOFContactors), 0, 1, 0.15, 0.15:End Sub
  222. Sub Bumper4_Hit:vpmTimer.PulseSw 40:PlaySound SoundFX("fx_bumper", DOFContactors), 0, 1, 0.15, 0.15:End Sub
  223.  
  224. ' Drain holes
  225. Sub Drain_Hit:bsTrough.AddBall Me:End Sub
  226.  
  227. 'Saucer
  228. Sub sw19_Hit:bsSaucer.AddBall 0:End Sub
  229.  
  230. ' Rollovers
  231. Sub sw32_Hit:Controller.Switch(32) = true:PlaySound "fx_sensor", 0, 1, pan(ActiveBall):End Sub
  232. Sub sw32_UnHit:Controller.Switch(32) = false:End Sub
  233. Sub sw32a_Hit:Controller.Switch(32) = true:PlaySound "fx_sensor", 0, 1, pan(ActiveBall):End Sub
  234. Sub sw32a_UnHit:Controller.Switch(32) = false:End Sub
  235. Sub sw20_Hit():controller.switch(20) = true:PlaySound "fx_sensor", 0, 1, pan(ActiveBall):End Sub
  236. Sub sw20_unHit():controller.switch(20) = false:End Sub
  237. Sub sw21_Hit():controller.switch(21) = true:PlaySound "fx_sensor", 0, 1, pan(ActiveBall):End Sub
  238. Sub sw21_unHit():controller.switch(21) = false:End Sub
  239. Sub sw22_Hit():controller.switch(22) = true:PlaySound "fx_sensor", 0, 1, pan(ActiveBall):End Sub
  240. Sub sw22_unHit():controller.switch(22) = false:End Sub
  241. Sub sw23_Hit():controller.switch(23) = true:PlaySound "fx_sensor", 0, 1, pan(ActiveBall):End Sub
  242. Sub sw23_unHit():controller.switch(23) = false:End Sub
  243. Sub sw24_Hit():controller.switch(24) = true:PlaySound "fx_sensor", 0, 1, pan(ActiveBall):End Sub
  244. Sub sw24_unHit():controller.switch(24) = false:End Sub
  245. Sub sw25_Hit():controller.switch(25) = true:PlaySound "fx_sensor", 0, 1, pan(ActiveBall):End Sub
  246. Sub sw25_unHit():controller.switch(25) = false:End Sub
  247. Sub sw25a_Hit():controller.switch(25) = true:PlaySound "fx_sensor", 0, 1, pan(ActiveBall):End Sub
  248. Sub sw25a_unHit():controller.switch(25) = false:End Sub
  249. Sub sw26_Hit():controller.switch(26) = true:PlaySound "fx_sensor", 0, 1, pan(ActiveBall):End Sub
  250. Sub sw26_unHit():controller.switch(26) = false:End Sub
  251. Sub sw28_Hit():controller.switch(28) = true:PlaySound "fx_sensor", 0, 1, pan(ActiveBall):End Sub
  252. Sub sw28_unHit():controller.switch(28) = false:End Sub
  253. Sub sw31_Hit():SetLamp 150, 1:controller.switch(31) = true:PlaySound "fx_sensor", 0, 1, pan(ActiveBall):End Sub
  254. Sub sw31_unHit():SetLamp 150, 0:controller.switch(31) = false:End Sub
  255. Sub sw31a_Hit():SetLamp 151, 1:controller.switch(31) = true:PlaySound "fx_sensor", 0, 1, pan(ActiveBall):End Sub
  256. Sub sw31a_unHit():SetLamp 151, 0:controller.switch(31) = false:End Sub
  257.  
  258. ' Targets
  259. Sub sw12_Hit:vpmTimer.PulseSw 12:PlaySound SoundFX("fx_target", DOFTargets), 0, 1, pan(ActiveBall):End Sub
  260. Sub sw13_Hit:vpmTimer.PulseSw 13:PlaySound SoundFX("fx_target", DOFTargets), 0, 1, pan(ActiveBall):End Sub
  261. Sub sw14_Hit:vpmTimer.PulseSw 14:PlaySound SoundFX("fx_target", DOFTargets), 0, 1, pan(ActiveBall):End Sub
  262. Sub sw29_Hit:vpmTimer.PulseSw 29:PlaySound SoundFX("fx_target", DOFTargets), 0, 1, pan(ActiveBall):End Sub
  263. Sub sw30_Hit:vpmTimer.PulseSw 30:PlaySound SoundFX("fx_target", DOFTargets), 0, 1, pan(ActiveBall):End Sub
  264. Sub sw27_Hit:vpmTimer.PulseSw 27:PlaySound SoundFX("fx_target", DOFTargets), 0, 1, pan(ActiveBall):End Sub
  265.  
  266. ' Droptargets
  267. Sub sw1_Dropped:dtRbank.Hit 1:PlaySound SoundFX("fx_droptarget", DOFDropTargets), 0, 1, 0.1:End Sub
  268. Sub sw2_Dropped:dtRbank.Hit 2:PlaySound SoundFX("fx_droptarget", DOFDropTargets), 0, 1, 0.1:End Sub
  269. Sub sw3_Dropped:dtRbank.Hit 3:PlaySound SoundFX("fx_droptarget", DOFDropTargets), 0, 1, 0.1:End Sub
  270. Sub sw4_Dropped:dtRbank.Hit 4:PlaySound SoundFX("fx_droptarget", DOFDropTargets), 0, 1, 0.1:End Sub
  271.  
  272. Sub sw48_Dropped:dtTbank.Hit 1:PlaySound SoundFX("fx_droptarget", DOFDropTargets), 0, 1, -0.1:End Sub
  273. Sub sw47_Dropped:dtTbank.Hit 2:PlaySound SoundFX("fx_droptarget", DOFDropTargets), 0, 1, -0.08:End Sub
  274. Sub sw46_Dropped:dtTbank.Hit 3:PlaySound SoundFX("fx_droptarget", DOFDropTargets), 0, 1, -0.04:End Sub
  275. Sub sw45_Dropped:dtTbank.Hit 4:PlaySound SoundFX("fx_droptarget", DOFDropTargets), 0, 1, 0:End Sub
  276. Sub sw44_Dropped:dtTbank.Hit 5:PlaySound SoundFX("fx_droptarget", DOFDropTargets), 0, 1, 0.04:End Sub
  277. Sub sw43_Dropped:dtTbank.Hit 6:PlaySound SoundFX("fx_droptarget", DOFDropTargets), 0, 1, 0.08:End Sub
  278. Sub sw42_Dropped:dtTbank.Hit 7:PlaySound SoundFX("fx_droptarget", DOFDropTargets), 0, 1, 0.1:End Sub
  279.  
  280. 'Spinner
  281. Sub sw33_Spin:vpmTimer.PulseSw 33:PlaySound "spinner":End Sub
  282.  
  283. '*********
  284. 'Solenoids
  285. '*********
  286.  
  287. Sub UpdateSolenoids
  288. Dim Changed, ii, solNo
  289. Changed = Controller.ChangedSolenoids
  290. If Not IsEmpty(Changed)Then
  291. For ii = 0 To UBound(Changed)
  292. solNo = Changed(ii, CHGNO)
  293. If Controller.Lamp(34)Then
  294. If SolNo = 1 Or SolNo = 2 Or SolNo = 3 Or SolNo = 4 Or Solno = 5 Or Solno = 6 Or Solno = 8 Then solNo = solNo + 24 '1->25 etc
  295. End If
  296. if solNo = GameOnSolenoid then vpmFlips.TiltSol cbool(Changed(ii, CHGSTATE))
  297. vpmDoSolCallback solNo, Changed(ii, CHGSTATE)
  298. Next
  299. End If
  300. End Sub
  301.  
  302. SolCallback(1) = "vpmSolSound ""fx_knocker"","
  303. SolCallback(2) = "dtRBank.SolDropUp"
  304. SolCallback(3) = "dtTBank.SolDropUp"
  305. SolCallback(7) = "SolShieldPost"
  306. SolCallback(8) = "bsTrough.SolOut"
  307. SolCallback(19) = "RelayAC"
  308. SolCallback(25) = "SolZipOpen"
  309. SolCallback(26) = "SolZipClose"
  310. SolCallback(30) = "dtTBank.SolHit 1,"
  311. SolCallback(6) = "dtTBank.SolHit 2,"
  312. SolCallback(29) = "dtTBank.SolHit 3,"
  313. SolCallback(5) = "dtTBank.SolHit 4,"
  314. SolCallback(28) = "dtTBank.SolHit 5,"
  315. SolCallback(4) = "dtTBank.SolHit 6,"
  316. SolCallback(27) = "dtTBank.SolHit 7,"
  317. SolCallback(32) = "bsSaucer.SolOut"
  318.  
  319. Sub SolZipOpen(enabled)
  320. PlaySound "SolenoidOn"
  321. LeftFlipper2.Visible = True:LeftFlipper2.Enabled = True
  322. RightFlipper2.Visible = True:RightFlipper2.Enabled = True
  323. LeftFlipper3.Visible = False:LeftFlipper3.Enabled = False
  324. RightFlipper3.Visible = False:RightFlipper3.Enabled = False
  325. 'LeftHelp.isdropped = True
  326. 'RightHelp.isdropped = True
  327. Controller.Switch(41) = 1
  328. End Sub
  329.  
  330. Sub SolZipClose(enabled)
  331. PlaySound "SolenoidOff"
  332. LeftFlipper2.Visible = False:LeftFlipper2.Enabled = False
  333. RightFlipper2.Visible = False:RightFlipper2.Enabled = False
  334. LeftFlipper3.Visible = True:LeftFlipper3.Enabled = True
  335. RightFlipper3.Visible = true:RightFlipper3.Enabled = true
  336. 'LeftHelp.isdropped = False
  337. 'RightHelp.isdropped = False
  338. Controller.Switch(41) = 0
  339. End Sub
  340.  
  341. Sub SolShieldPost(Enabled)
  342. If Enabled Then
  343. PlaySound "fx_autoplunger"
  344. post1.IsDropped = 1
  345. post1Rubber.Visible = 0
  346. post2.IsDropped = 0
  347. post2Rubber.Visible = 1
  348. Post.Fire
  349. Else
  350. post1.IsDropped = 0
  351. post1Rubber.Visible = 1
  352. post2.IsDropped = 1
  353. post2Rubber.Visible = 0
  354. Post.PullBack
  355. End If
  356. End Sub
  357.  
  358. Sub RelayAC(Enabled)
  359. vpmNudge.SolGameOn Enabled
  360. If Enabled Then
  361. GiOn
  362. SetLamp 152, 1
  363. SetLamp 153, 1
  364. Else
  365. GiOff
  366. SetLamp 152, 0
  367. SetLamp 153, 0
  368. End If
  369. End Sub
  370.  
  371. '**************
  372. ' Flipper Subs
  373. '**************
  374.  
  375. SolCallback(sLRFlipper) = "SolRFlipper"
  376. SolCallback(sLLFlipper) = "SolLFlipper"
  377.  
  378. Sub SolLFlipper(Enabled)
  379. If Enabled Then
  380. PlaySound SoundFX("fx_flipperup", DOFFlippers), 0, 1, -0.1, 0.25
  381. LeftFlipper.RotateToEnd:LeftFlipper2.RotateToEnd:LeftFlipper3.RotateToEnd:SetLamp 152, 0
  382. Else
  383. PlaySound SoundFX("fx_flipperdown", DOFFlippers), 0, 1, -0.1, 0.25
  384. LeftFlipper.RotateToStart:LeftFlipper2.RotateToStart:LeftFlipper3.RotateToStart:SetLamp 152, 1
  385. End If
  386. End Sub
  387.  
  388. Sub SolRFlipper(Enabled)
  389. If Enabled Then
  390. PlaySound SoundFX("fx_flipperup", DOFFlippers), 0, 1, 0.1, 0.25
  391. RightFlipper.RotateToEnd:RightFlipper2.RotateToEnd:RightFlipper3.RotateToEnd:SetLamp 153, 0
  392. Else
  393. PlaySound SoundFX("fx_flipperdown", DOFFlippers), 0, 1, 0.1, 0.25
  394. RightFlipper.RotateToStart:RightFlipper2.RotateToStart:RightFlipper3.RotateToStart:SetLamp 153, 1
  395. End If
  396. End Sub
  397.  
  398. Sub LeftFlipper_Collide(parm)
  399. PlaySound "fx_rubber_flipper", 0, parm / 10, -0.1, 0.25
  400. End Sub
  401.  
  402. Sub RightFlipper_Collide(parm)
  403. PlaySound "fx_rubber_flipper", 0, parm / 10, -0.1, 0.25
  404. End Sub
  405.  
  406. Sub LeftFlipper2_Collide(parm)
  407. PlaySound "fx_rubber_flipper", 0, parm / 10, -0.1, 0.25
  408. End Sub
  409.  
  410. Sub RightFlipper2_Collide(parm)
  411. PlaySound "fx_rubber_flipper", 0, parm / 10, -0.1, 0.25
  412. End Sub
  413.  
  414. Sub LeftFlipper3_Collide(parm)
  415. PlaySound "fx_rubber_flipper", 0, parm / 10, -0.1, 0.25
  416. End Sub
  417.  
  418. Sub RightFlipper3_Collide(parm)
  419. PlaySound "fx_rubber_flipper", 0, parm / 10, -0.1, 0.25
  420. End Sub
  421.  
  422. '*****************
  423. ' Gi Effects
  424. '*****************
  425.  
  426. Dim OldGiState
  427. OldGiState = -1 'start witht he Gi off
  428.  
  429. Sub GiON
  430. For each x in aGiLights
  431. x.State = 1
  432. Next
  433. End Sub
  434.  
  435. Sub GiOFF
  436. For each x in aGiLights
  437. x.State = 0
  438. Next
  439. End Sub
  440.  
  441. Sub GiEffect
  442. For each x in aGiLights
  443. x.Duration 2, 2000, 1
  444. Next
  445. End Sub
  446.  
  447. Sub GIUpdate
  448. Dim tmp, obj
  449. tmp = Getballs
  450. If UBound(tmp) <> OldGiState Then
  451. OldGiState = Ubound(tmp)
  452. If UBound(tmp) = -1 Then
  453. GiOff
  454. Else
  455. GiOn
  456. End If
  457. End If
  458. End Sub
  459.  
  460. '***************************************************
  461. ' JP's VP10 Fading Lamps & Flashers
  462. ' Based on PD's Fading Light System
  463. ' SetLamp 0 is Off
  464. ' SetLamp 1 is On
  465. ' fading for non opacity objects is 4 steps
  466. '***************************************************
  467.  
  468. Dim LampState(200), FadingLevel(200)
  469. Dim FlashSpeedUp(200), FlashSpeedDown(200), FlashMin(200), FlashMax(200), FlashLevel(200), FlashRepeat(200)
  470.  
  471. InitLamps() ' turn off the lights and flashers and reset them to the default parameters
  472. LampTimer.Interval = 10 'lamp fading speed
  473. LampTimer.Enabled = 1
  474.  
  475. ' Lamp & Flasher Timers
  476.  
  477. Sub LampTimer_Timer()
  478. Dim chgLamp, num, chg, ii
  479. chgLamp = Controller.ChangedLamps
  480. If Not IsEmpty(chgLamp)Then
  481. For ii = 0 To UBound(chgLamp)
  482. LampState(chgLamp(ii, 0)) = chgLamp(ii, 1) 'keep the real state in an array
  483. FadingLevel(chgLamp(ii, 0)) = chgLamp(ii, 1) + 4 'actual fading step
  484. Next
  485. End If
  486. UpdateLeds
  487. UpdateLamps
  488. GIUpdate
  489. RollingUpdate
  490. End Sub
  491.  
  492. Sub UpdateLamps()
  493. NFadeL 1, l1
  494. NFadeL 2, l2
  495. NFadeL 3, l3
  496. NFadeLm 4, l4_1
  497. NFadeL 4, l4
  498. NFadeL 5, l5
  499. NFadeL 6, l6
  500. NFadeL 7, l7
  501. NFadeL 8, l8
  502. NFadeL 9, l9
  503. NFadeL 10, l10
  504.  
  505. NFadeL 12, l12
  506.  
  507. NFadeL 14, l14
  508. NFadeL 15, l15
  509. NFadeL 17, l17
  510. NFadeL 18, l18
  511. NFadeL 19, l19
  512. NFadeL 20, l20
  513. NFadeLm 21, l21_1
  514. NFadeL 21, l21
  515. NFadeL 22, l22
  516. NFadeL 23, l23
  517. NFadeL 24, l24
  518. NFadeL 25, l25
  519. NFadeL 26, l26
  520.  
  521. NFadeL 28, l28
  522.  
  523. NFadeL 30, l30
  524. NFadeL 31, l31
  525. NFadeL 33, l33
  526. NFadeL 35, l35
  527. NFadeL 36, l36
  528. NFadeLm 37, l37_1
  529. NFadeL 37, l37
  530. NFadeL 38, l38
  531. NFadeL 39, l39
  532. NFadeL 40, l40
  533. NFadeL 41, l41
  534. NFadeL 42, l42
  535. NFadeL 43, l43
  536. NFadeL 44, l44
  537.  
  538. NFadeL 46, l46
  539. NFadeLm 47, l47a
  540. NFadeLm 47, l47b
  541. NFadeLm 47, l47c
  542. NFadeLm 47, l47d
  543. NFadeLm 47, l47e
  544. NFadeL 47, l47
  545. NFadeL 49, l49
  546. NFadeL 51, l51
  547. NFadeL 52, l52
  548. NFadeLm 53, l53_1
  549. NFadeL 53, l53
  550. NFadeL 54, l54
  551. NFadeL 55, l55
  552. NFadeL 56, l56
  553. NFadeL 57, l57
  554. NFadeL 58, l58
  555. NFadeL 59, l59
  556.  
  557. NFadeL 62, l62
  558. NFadeL 63, l63
  559. NFadeLm 70, l70_1
  560. NFadeL 70, l70
  561. NFadeLm 71, l71_1
  562. NFadeL 71, l71
  563. NFadeLm 86, l86_1
  564. NFadeL 86, l86
  565. NFadeL 87, l87
  566. NFadeLm 102, l102_1
  567. NFadeL 102, l102
  568. NFadeL 103, l103
  569. NFadeLm 118, l118_1
  570. NFadeL 118, l118
  571. NFadeL 119, l119
  572.  
  573. NFadeL 65, l65
  574. NFadeL 81, l81
  575. NFadeL 97, l97
  576. NFadeL 113, l113
  577. NFadeL 66, l66
  578. NFadeL 82, l82
  579. NFadeL 98, l98
  580. NFadeL 114, l114
  581. NFadeL 67, l67
  582. NFadeL 83, l83
  583. NFadeL 99, l99
  584. NFadeL 115, l115
  585. NFadeL 68, l68
  586. NFadeL 84, l84
  587. NFadeL 100, l100
  588. NFadeL 116, l116
  589. NFadeL 69, l69
  590. NFadeL 85, l85
  591. NFadeL 101, l101
  592. NFadeL 117, l117
  593. NFadeL 60, l60
  594.  
  595. NFadeL 150, lleft
  596. NFadeL 151, lright
  597. NFadeLm 152, flipperlight1
  598. NFadeLm 152, flipperlight2
  599. NFadeLm 152, flipperlight3
  600. NFadeL 152, flipperlight4
  601. NFadeLm 153, flipperlight5
  602. NFadeLm 153, flipperlight6
  603. NFadeLm 153, flipperlight7
  604. NFadeL 153, flipperlight8
  605. ' backdrop lights
  606. If VarHidden Then
  607. NFadeT 11, l11, "SAME PLAYER SHOOTS AGAIN"
  608. NFadeT 13, l13, "BALL IN PLAY"
  609. NFadeT 27, l27, "MATCH"
  610. NFadeT 29, l29, "HI SCORE TO DATE"
  611. NFadeT 45, l45, "GAME OVER"
  612. NFadeT 61, l61, "TILT"
  613. End If
  614. End Sub
  615.  
  616. ' div lamp subs
  617.  
  618. Sub InitLamps()
  619. Dim x
  620. For x = 0 to 200
  621. LampState(x) = 0 ' current light state, independent of the fading level. 0 is off and 1 is on
  622. FadingLevel(x) = 4 ' used to track the fading state
  623. FlashSpeedUp(x) = 0.2 ' faster speed when turning on the flasher
  624. FlashSpeedDown(x) = 0.1 ' slower speed when turning off the flasher
  625. FlashMax(x) = 1 ' the maximum value when on, usually 1
  626. FlashMin(x) = 0 ' the minimum value when off, usually 0
  627. FlashLevel(x) = 0 ' the intensity of the flashers, usually from 0 to 1
  628. FlashRepeat(x) = 20 ' how many times the flash repeats
  629. Next
  630. End Sub
  631.  
  632. Sub AllLampsOff
  633. Dim x
  634. For x = 0 to 200
  635. SetLamp x, 0
  636. Next
  637. End Sub
  638.  
  639. Sub SetLamp(nr, value)
  640. If value <> LampState(nr)Then
  641. LampState(nr) = abs(value)
  642. FadingLevel(nr) = abs(value) + 4
  643. End If
  644. End Sub
  645.  
  646. ' Lights: used for VP10 standard lights, the fading is handled by VP itself
  647.  
  648. Sub NFadeL(nr, object)
  649. Select Case FadingLevel(nr)
  650. Case 4:object.state = 0:FadingLevel(nr) = 0
  651. Case 5:object.state = 1:FadingLevel(nr) = 1
  652. End Select
  653. End Sub
  654.  
  655. Sub NFadeLm(nr, object) ' used for multiple lights
  656. Select Case FadingLevel(nr)
  657. Case 4:object.state = 0
  658. Case 5:object.state = 1
  659. End Select
  660. End Sub
  661.  
  662. 'Lights, Ramps & Primitives used as 4 step fading lights
  663. 'a,b,c,d are the images used from on to off
  664.  
  665. Sub FadeObj(nr, object, a, b, c, d)
  666. Select Case FadingLevel(nr)
  667. Case 4:object.image = b:FadingLevel(nr) = 6 'fading to off...
  668. Case 5:object.image = a:FadingLevel(nr) = 1 'ON
  669. Case 6, 7, 8:FadingLevel(nr) = FadingLevel(nr) + 1 'wait
  670. Case 9:object.image = c:FadingLevel(nr) = FadingLevel(nr) + 1 'fading...
  671. Case 10, 11, 12:FadingLevel(nr) = FadingLevel(nr) + 1 'wait
  672. Case 13:object.image = d:FadingLevel(nr) = 0 'Off
  673. End Select
  674. End Sub
  675.  
  676. Sub FadeObjm(nr, object, a, b, c, d)
  677. Select Case FadingLevel(nr)
  678. Case 4:object.image = b
  679. Case 5:object.image = a
  680. Case 9:object.image = c
  681. Case 13:object.image = d
  682. End Select
  683. End Sub
  684.  
  685. Sub NFadeObj(nr, object, a, b)
  686. Select Case FadingLevel(nr)
  687. Case 4:object.image = b:FadingLevel(nr) = 0 'off
  688. Case 5:object.image = a:FadingLevel(nr) = 1 'on
  689. End Select
  690. End Sub
  691.  
  692. Sub NFadeObjm(nr, object, a, b)
  693. Select Case FadingLevel(nr)
  694. Case 4:object.image = b
  695. Case 5:object.image = a
  696. End Select
  697. End Sub
  698.  
  699. ' Flasher objects
  700.  
  701. Sub Flash(nr, object)
  702. Select Case FadingLevel(nr)
  703. Case 4 'off
  704. FlashLevel(nr) = FlashLevel(nr)- FlashSpeedDown(nr)
  705. If FlashLevel(nr) < FlashMin(nr)Then
  706. FlashLevel(nr) = FlashMin(nr)
  707. FadingLevel(nr) = 0 'completely off
  708. End if
  709. Object.IntensityScale = FlashLevel(nr)
  710. Case 5 ' on
  711. FlashLevel(nr) = FlashLevel(nr) + FlashSpeedUp(nr)
  712. If FlashLevel(nr) > FlashMax(nr)Then
  713. FlashLevel(nr) = FlashMax(nr)
  714. FadingLevel(nr) = 1 'completely on
  715. End if
  716. Object.IntensityScale = FlashLevel(nr)
  717. End Select
  718. End Sub
  719.  
  720. Sub Flashm(nr, object) 'multiple flashers, it doesn't change anything, it just follows the main flasher
  721. Select Case FadingLevel(nr)
  722. Case 4, 5
  723. Object.IntensityScale = FlashLevel(nr)
  724. End Select
  725. End Sub
  726.  
  727. Sub FlashBlink(nr, object)
  728. Select Case FadingLevel(nr)
  729. Case 4 'off
  730. FlashLevel(nr) = FlashLevel(nr)- FlashSpeedDown(nr)
  731. If FlashLevel(nr) < FlashMin(nr)Then
  732. FlashLevel(nr) = FlashMin(nr)
  733. FadingLevel(nr) = 0 'completely off
  734. End if
  735. Object.IntensityScale = FlashLevel(nr)
  736. If FadingLevel(nr) = 0 AND FlashRepeat(nr)Then 'repeat the flash
  737. FlashRepeat(nr) = FlashRepeat(nr)-1
  738. If FlashRepeat(nr)Then FadingLevel(nr) = 5
  739. End If
  740. Case 5 ' on
  741. FlashLevel(nr) = FlashLevel(nr) + FlashSpeedUp(nr)
  742. If FlashLevel(nr) > FlashMax(nr)Then
  743. FlashLevel(nr) = FlashMax(nr)
  744. FadingLevel(nr) = 1 'completely on
  745. End if
  746. Object.IntensityScale = FlashLevel(nr)
  747. If FadingLevel(nr) = 1 AND FlashRepeat(nr)Then FadingLevel(nr) = 4
  748. End Select
  749. End Sub
  750.  
  751. ' Desktop Objects: Reels & texts (you may also use lights on the desktop)
  752.  
  753. ' Reels
  754.  
  755. Sub FadeR(nr, object)
  756. Select Case FadingLevel(nr)
  757. Case 4:object.SetValue 1:FadingLevel(nr) = 6 'fading to off...
  758. Case 5:object.SetValue 0:FadingLevel(nr) = 1 'ON
  759. Case 6, 7, 8:FadingLevel(nr) = FadingLevel(nr) + 1 'wait
  760. Case 9:object.SetValue 2:FadingLevel(nr) = FadingLevel(nr) + 1 'fading...
  761. Case 10, 11, 12:FadingLevel(nr) = FadingLevel(nr) + 1 'wait
  762. Case 13:object.SetValue 3:FadingLevel(nr) = 0 'Off
  763. End Select
  764. End Sub
  765.  
  766. Sub FadeRm(nr, object)
  767. Select Case FadingLevel(nr)
  768. Case 4:object.SetValue 1
  769. Case 5:object.SetValue 0
  770. Case 9:object.SetValue 2
  771. Case 3:object.SetValue 3
  772. End Select
  773. End Sub
  774.  
  775. 'Texts
  776.  
  777. Sub NFadeT(nr, object, message)
  778. Select Case FadingLevel(nr)
  779. Case 4:object.Text = "":FadingLevel(nr) = 0
  780. Case 5:object.Text = message:FadingLevel(nr) = 1
  781. End Select
  782. End Sub
  783.  
  784. Sub NFadeTm(nr, object, b)
  785. Select Case FadingLevel(nr)
  786. Case 4:object.Text = ""
  787. Case 5:object.Text = message
  788. End Select
  789. End Sub
  790.  
  791. '******************************
  792. ' Diverse Collection Hit Sounds
  793. '******************************
  794.  
  795. Sub aMetals_Hit(idx):PlaySound "fx_MetalHit", 0, Vol(ActiveBall), pan(ActiveBall), 0, Pitch(ActiveBall), 0, 0:End Sub
  796. Sub aRubber_Bands_Hit(idx):PlaySound "fx_rubber_band", 0, Vol(ActiveBall), pan(ActiveBall), 0, Pitch(ActiveBall), 0, 0:End Sub
  797. Sub aRubber_Posts_Hit(idx):PlaySound "fx_rubber", 0, Vol(ActiveBall), pan(ActiveBall), 0, Pitch(ActiveBall), 0, 0:End Sub
  798. Sub aRubber_Pins_Hit(idx):PlaySound "fx_postrubber", 0, Vol(ActiveBall), pan(ActiveBall), 0, Pitch(ActiveBall), 0, 0:End Sub
  799. Sub aPlastics_Hit(idx):PlaySound "fx_PlasticHit", 0, Vol(ActiveBall), pan(ActiveBall), 0, Pitch(ActiveBall), 0, 0:End Sub
  800. Sub aGates_Hit(idx):PlaySound "fx_Gate", 0, Vol(ActiveBall), pan(ActiveBall), 0, Pitch(ActiveBall), 0, 0:End Sub
  801. Sub aWoods_Hit(idx):PlaySound "fx_Woodhit", 0, Vol(ActiveBall), pan(ActiveBall), 0, Pitch(ActiveBall), 0, 0:End Sub
  802.  
  803. ' *********************************************************************
  804. ' Supporting Ball & Sound Functions
  805. ' *********************************************************************
  806.  
  807. Function Vol(ball) ' Calculates the Volume of the sound based on the ball speed
  808. Vol = Csng(BallVel(ball) ^2 / 2000)
  809. End Function
  810.  
  811. Function Pan(ball) ' Calculates the pan for a ball based on the X position on the table. "table1" is the name of the table
  812. Dim tmp
  813. tmp = ball.x * 2 / table1.width-1
  814. If tmp > 0 Then
  815. Pan = Csng(tmp ^10)
  816. Else
  817. Pan = Csng(-((- tmp) ^10))
  818. End If
  819. End Function
  820.  
  821. Function Pitch(ball) ' Calculates the pitch of the sound based on the ball speed
  822. Pitch = BallVel(ball) * 20
  823. End Function
  824.  
  825. Function BallVel(ball) 'Calculates the ball speed
  826. BallVel = INT(SQR((ball.VelX ^2) + (ball.VelY ^2)))
  827. End Function
  828.  
  829. '*****************************************
  830. ' JP's VP10 Rolling Sounds
  831. '*****************************************
  832.  
  833. Const tnob = 5 ' total number of balls in this table is 4, but always use a higher number here because of the timing
  834. ReDim rolling(tnob)
  835. InitRolling
  836.  
  837. Sub InitRolling
  838. Dim i
  839. For i = 0 to tnob
  840. rolling(i) = False
  841. Next
  842. End Sub
  843.  
  844. Sub RollingUpdate()
  845. Dim BOT, b
  846. BOT = GetBalls
  847.  
  848. ' stop the sound of deleted balls
  849. For b = UBound(BOT) + 1 to tnob
  850. rolling(b) = False
  851. StopSound("fx_ballrolling" & b)
  852. Next
  853.  
  854. ' exit the sub if no balls on the table
  855. If UBound(BOT) = -1 Then Exit Sub
  856.  
  857. ' play the rolling sound for each ball
  858. For b = 0 to UBound(BOT)
  859. If BallVel(BOT(b)) > 1 AND BOT(b).z < 30 Then
  860. rolling(b) = True
  861. PlaySound("fx_ballrolling" & b), -1, Vol(BOT(b)), Pan(BOT(b)), 0, Pitch(BOT(b)), 1, 0
  862. Else
  863. If rolling(b) = True Then
  864. StopSound("fx_ballrolling" & b)
  865. rolling(b) = False
  866. End If
  867. End If
  868. Next
  869. End Sub
  870.  
  871. '**********************
  872. ' Ball Collision Sound
  873. '**********************
  874.  
  875. Sub OnBallBallCollision(ball1, ball2, velocity)
  876. PlaySound("fx_collide"), 0, Csng(velocity) ^2 / 2000, Pan(ball1), 0, Pitch(ball1), 0, 0
  877. End Sub
  878.  
  879. '************************************
  880. ' LEDs Display
  881. ' Based on Scapino's LEDs
  882. '************************************
  883.  
  884. Dim Digits(38)
  885. Dim Patterns(11)
  886. Dim Patterns2(11)
  887.  
  888. Patterns(0) = 0 'empty
  889. Patterns(1) = 63 '0
  890. Patterns(2) = 6 '1
  891. Patterns(3) = 91 '2
  892. Patterns(4) = 79 '3
  893. Patterns(5) = 102 '4
  894. Patterns(6) = 109 '5
  895. Patterns(7) = 125 '6
  896. Patterns(8) = 7 '7
  897. Patterns(9) = 127 '8
  898. Patterns(10) = 111 '9
  899.  
  900. Patterns2(0) = 128 'empty
  901. Patterns2(1) = 191 '0
  902. Patterns2(2) = 134 '1
  903. Patterns2(3) = 219 '2
  904. Patterns2(4) = 207 '3
  905. Patterns2(5) = 230 '4
  906. Patterns2(6) = 237 '5
  907. Patterns2(7) = 253 '6
  908. Patterns2(8) = 135 '7
  909. Patterns2(9) = 255 '8
  910. Patterns2(10) = 239 '9
  911.  
  912. Set Digits(0) = a0
  913. Set Digits(1) = a1
  914. Set Digits(2) = a2
  915. Set Digits(3) = a3
  916. Set Digits(4) = a4
  917. Set Digits(5) = a5
  918. Set Digits(6) = a6
  919.  
  920. Set Digits(7) = b0
  921. Set Digits(8) = b1
  922. Set Digits(9) = b2
  923. Set Digits(10) = b3
  924. Set Digits(11) = b4
  925. Set Digits(12) = b5
  926. Set Digits(13) = b6
  927.  
  928. Set Digits(14) = c0
  929. Set Digits(15) = c1
  930. Set Digits(16) = c2
  931. Set Digits(17) = c3
  932. Set Digits(18) = c4
  933. Set Digits(19) = c5
  934. Set Digits(20) = c6
  935.  
  936. Set Digits(21) = d0
  937. Set Digits(22) = d1
  938. Set Digits(23) = d2
  939. Set Digits(24) = d3
  940. Set Digits(25) = d4
  941. Set Digits(26) = d5
  942. Set Digits(27) = d6
  943.  
  944. Set Digits(28) = e0
  945. Set Digits(29) = e1
  946. Set Digits(30) = e2
  947. Set Digits(31) = e3
  948.  
  949. Digits(32) = Array(a00, a02, a05, a06, a04, a01, a03)
  950. Digits(33) = Array(a10, a12, a15, a16, a14, a11, a13)
  951. Digits(34) = Array(a20, a22, a25, a26, a24, a21, a23)
  952. Digits(35) = Array(a30, a32, a35, a36, a34, a31, a33)
  953. Digits(36) = Array(a40, a42, a45, a46, a44, a41, a43)
  954. Digits(37) = Array(a50, a52, a55, a56, a54, a51, a53)
  955.  
  956. Sub UpdateLeds
  957. On Error Resume Next
  958. Dim ChgLED, ii, jj, chg, stat, num, obj
  959. ChgLED = Controller.ChangedLEDs(&H0000003f, &Hffffffff)
  960. If Not IsEmpty(ChgLED)Then
  961. For ii = 0 To UBound(ChgLED)
  962. num = chgLED(ii, 0):chg = chgLED(ii, 1):stat = chgLED(ii, 2)
  963. If num < 32 Then
  964. For jj = 0 to 10
  965. If stat = Patterns(jj)OR stat = Patterns2(jj)then Digits(chgLED(ii, 0)).SetValue jj
  966. Next
  967. Else
  968. For Each obj In Digits(num)
  969. If chg And 1 Then obj.State = stat And 1
  970. chg = chg \ 2:stat = stat \ 2
  971. Next
  972. End If
  973. Next
  974. End IF
  975. End Sub
  976.  
  977. 'Bally Medusa
  978. 'added by Inkochnito
  979. Sub editDips
  980. Dim vpmDips:Set vpmDips = New cvpmDips
  981. With vpmDips
  982. .AddForm 700, 400, "Medusa - DIP switches"
  983. .AddChk 0, 5, 120, Array("Match feature", &H08000000) 'dip 28
  984. .AddChk 0, 25, 120, Array("Credits displayed", &H04000000) 'dip 27
  985. .AddFrame 0, 44, 190, "Extra ball match number display adjust", &H00400000, Array("any number flashing will be reset", 0, "any number flashing will for next ball", &H00400000) 'dip 23
  986. .AddFrame 0, 90, 190, "Top Olympus red lites", &H00000020, Array("step back 1 when target is hit", 0, "do not step back", &H00000020) 'dip 6
  987. .AddFrame 0, 136, 190, "Any advanced Colossus bonus lite on", &H00000040, Array("will be reset", 0, "will come back on for next ball", &H00000040) 'dip 7
  988. .AddFrame 0, 182, 190, "Any lit left side 2 or 3 arrow", &H00004000, Array("will be reset", 0, "will come back on for next ball", &H00004000) 'dip 15
  989. .AddFrame 0, 228, 190, "Medusa special lites with", 32768, Array("80K", 0, "40K and 80K", 32768) 'dip 16
  990. .AddFrame 0, 274, 190, "Collect Olympus bonus saucer lite", &H20000000, Array("will be reset", 0, "will come back on for next ball", &H20000000) 'dip 30
  991. .AddFrame 0, 320, 395, "Movable flipper timer adjust", &H00000080, Array("closed flippers will open after 10 seconds until next target is hit", 0, "Hitting top targets adds 10 seconds each to keep flippers closed", &H00000080) 'dip 8
  992. .AddFrame 205, 0, 190, "Maximum credits", &H03000000, Array("10 credits", 0, "15 credits", &H01000000, "25 credits", &H02000000, "40 credits", &H03000000) 'dip 25&26
  993. .AddFrame 205, 76, 190, "Balls per game", &HC0000000, Array("2 balls", &HC0000000, "3 balls", 0, "4 balls", &H80000000, "5 balls", &H40000000) 'dip 31&32
  994. .AddFrame 205, 152, 190, "Olympus bonus red lights", &H00100000, Array("1st 5-3, 2nd 5-2, 3dr 5-1, 4th 5-1", 0, "1st 5-3, 2nd 5-2, 3dr 5-2, 4th 5-2", &H00100000, "1st 5-3, 2nd 5-3, 3dr 5-2, 4th 5-2", &H00200000, "1st 5-3, 2nd 5-3, 3dr 5-3, 4th 5-3", &H00300000) 'dip 21&22
  995. .AddFrame 205, 228, 190, "Medusa bonus from 1 to 19 memory", &H00800000, Array("will be reset", 0, "will come back on for next ball", &H00800000) 'dip 24
  996. .AddFrame 205, 274, 190, "Replay limit", &H10000000, Array("1 replay per game", 0, "unlimited replays", &H10000000) 'dip 29
  997. .AddLabel 30, 390, 350, 15, "Set selftest position 16,17,18 and 19 to 03 for the best gameplay."
  998. .AddLabel 50, 410, 300, 15, "After hitting OK, press F3 to reset game with new settings."
  999. .ViewDips
  1000. End With
  1001. End Sub
  1002. Set vpmShowDips = GetRef("editDips")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement