Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 31.48 KB | None | 0 0
  1. Option Explicit
  2. Randomize
  3.  
  4. On Error Resume Next
  5. ExecuteGlobal GetTextFile("controller.vbs")
  6. If Err Then MsgBox "You need the controller.vbs in order to run this table, available in the vp10 package"
  7. On Error Goto 0
  8.  
  9. Const cGameName="Fathom",UseSolenoids=2,UseLamps=0,UseGI=0,SSolenoidOn="SolOn",SSolenoidOff="SolOff", SCoin="coin"
  10. Const cSingleLFlip = 0
  11. 'Const cSingleRFlip = 0
  12.  
  13. LoadVPM "01130100", "Bally.VBS", 3.21
  14. Dim DesktopMode: DesktopMode = Table1.ShowDT
  15.  
  16. If DesktopMode = True Then 'Show Desktop components
  17. Ramp16.visible=1
  18. Ramp15.visible=1
  19. Primitive13.visible=1
  20. Else
  21. Ramp16.visible=0
  22. Ramp15.visible=0
  23. Primitive13.visible=0
  24. End if
  25.  
  26. '*************************************************************
  27. 'Solenoid Call backs
  28. '**********************************************************************************************************
  29. SolCallback(1) = "dtT.SolDropUp"
  30. SolCallback(2) = "dtL.SolDropUp"
  31. SolCallback(3) = "dtM.SolDropUp"
  32. SolCallback(4) = "dtR.SolDropUp"
  33. SolCallback(6) = "vpmSolSound SoundFX(""Knocker"",DOFKnocker),"
  34. SolCallback(7) = "bsTrough.SolOut"
  35. SolCallback(13) = "bsTopEject.SolOut"
  36. SolCallback(14) = "bsRightEject.SolOut"
  37. SolCallback(15) = "dtT.SolHit 3,"
  38. SolCallback(25) = "dtR.SolHit 1,"
  39. SolCallback(26) = "dtR.SolHit 2,"
  40. SolCallback(27) = "dtR.SolHit 3,"
  41. SolCallback(37) = "dtT.SolHit 1,"
  42. SolCallback(38) = "dtT.SolHit 2,"
  43.  
  44. SolCallback(sLRFlipper) = "SolRFlipper"
  45. SolCallback(sLLFlipper) = "SolLFlipper"
  46.  
  47. Sub SolLFlipper(Enabled)
  48. If Enabled Then
  49. PlaySound SoundFX("fx_Flipperup",DOFContactors):LeftFlipper.RotateToEnd
  50. Else
  51. PlaySound SoundFX("fx_Flipperdown",DOFContactors):LeftFlipper.RotateToStart
  52. End If
  53. End Sub
  54.  
  55. Sub SolRFlipper(Enabled)
  56. If Enabled Then
  57. PlaySound SoundFX("fx_Flipperup",DOFContactors):RightFlipper.RotateToEnd:RightFlipper1.RotateToEnd
  58. Else
  59. PlaySound SoundFX("fx_Flipperdown",DOFContactors):RightFlipper.RotateToStart:RightFlipper1.RotateToStart
  60. End If
  61. End Sub
  62.  
  63. '**********************************************************************************************************
  64.  
  65. 'Solenoid Controlled toys
  66. '**********************************************************************************************************
  67.  
  68. '*****GI Lights On
  69. dim xx
  70. For each xx in GI:xx.State = 1: Next
  71.  
  72. 'Primitive Gate
  73. Sub FlipperTimer_Timer
  74. PrimGate2.Rotz = Gate7.Currentangle
  75. End Sub
  76.  
  77. Sub SolTimer_Timer
  78. Dim ChgSol, tmp, ii, CBoard, solnum
  79. ChgSol = Controller.ChangedSolenoids
  80. If Not IsEmpty(ChgSol) Then
  81. CBoard = Controller.Lamp(47)
  82. For ii = 0 To UBound(ChgSol)
  83. solnum = ChgSol(ii, 0)
  84. If solnum <= 14 and CBoard Then solnum = solnum + 24
  85. tmp = Solcallback(solnum)
  86. If tmp <> "" Then Execute tmp & vpmTrueFalse(ChgSol(ii, 1)+1)
  87. if UseSolenoids > 1 then if solnum = vpmFlips.Solenoid then vpmFlips.TiltSol cBool(ChgSol(ii, 1))
  88. Next
  89. End If
  90. End Sub
  91.  
  92. '**********************************************************************************************************
  93.  
  94. 'Initiate Table
  95. '**********************************************************************************************************
  96. Dim bsTrough, bsRightEject, bsTopEject, dtT, dtL, dtM, dtR
  97. Sub Table1_Init
  98. vpmInit Me
  99. On Error Resume Next
  100. With Controller
  101. .GameName = cGameName
  102. If Err Then MsgBox "Can't start Game" & cGameName & vbNewLine & Err.Description : Exit Sub
  103. .SplashInfoLine = "Fathom (Bally)"&chr(13)&"You Suck"
  104. .HandleMechanics=0
  105. .HandleKeyboard=0
  106. .ShowDMDOnly=1
  107. .ShowFrame=0
  108. .ShowTitle=0
  109. .hidden = 1
  110. If Err Then MsgBox Err.Description
  111. End With
  112. On Error Goto 0
  113. Controller.SolMask(0)=0
  114. vpmTimer.AddTimer 2000,"Controller.SolMask(0)=&Hffffffff'" 'ignore all solenoids - then add the timer to renable all the solenoids after 2 seconds
  115. Controller.Run
  116. If Err Then MsgBox Err.Description
  117. On Error Goto 0
  118.  
  119. PinMAMETimer.Interval=PinMAMEInterval
  120. PinMAMETimer.Enabled=1
  121.  
  122. vpmNudge.TiltSwitch = 15
  123. vpmNudge.Sensitivity = 5
  124. vpmNudge.Tiltobj = Array(LeftSlingshot,RightSlingshot,Bumper1,Bumper2,Bumper3)
  125.  
  126. ' Trough
  127. Set bsTrough = New cvpmBallStack
  128. bsTrough.Initsw 0,1,2,3,0,0,0,0
  129. bsTrough.InitKick BallRelease,55,10
  130. bsTrough.InitExitSnd SoundFX("ballrelease",DOFContactors), SoundFX("Solenoid",DOFContactors)
  131. bsTrough.Balls = 3
  132.  
  133. ' Top Saucer
  134. Set bsTopEject = New cvpmBallStack
  135. bsTopEject.InitSaucer sw4, 4, 275, 13
  136. bsTopEject.InitExitSnd SoundFX("Popper",DOFContactors), SoundFX("Solenoid",DOFContactors)
  137.  
  138. ' Right Saucer
  139. Set bsRightEject = New cvpmBallStack
  140. bsRightEject.InitSaucer sw5, 5, 180, 9
  141. bsRightEject.InitExitSnd SoundFX("Popper",DOFContactors), SoundFX("Solenoid",DOFContactors)
  142.  
  143. Set dtL=New cvpmDropTarget
  144. dtL.InitDrop Array(sw27,sw28,sw29,sw30,sw31,sw32),Array(27,28,29,30,31,32)
  145. dtL.InitSnd SoundFX("DTDrop",DOFContactors),SoundFX("DTReset",DOFContactors)
  146.  
  147. Set dtM=New cvpmDropTarget
  148. dtM.InitDrop Array(sw33,sw34,sw35),Array(33,34,35)
  149. dtM.InitSnd SoundFX("DTDrop",DOFContactors),SoundFX("DTReset",DOFContactors)
  150.  
  151. Set dtT=New cvpmDropTarget
  152. dtT.InitDrop Array(Array(sw44,sw44a),Array(sw43,sw43a),Array(sw42,sw42a)),Array(44,43,42)
  153. dtT.InitSnd SoundFX("DTDrop",DOFContactors),SoundFX("DTReset",DOFContactors)
  154.  
  155. Set dtR=New cvpmDropTarget
  156. dtR.InitDrop Array(sw48,sw47,sw46),Array(48,47,46)
  157. dtR.InitSnd SoundFX("DTDrop",DOFContactors),SoundFX("DTReset",DOFContactors)
  158.  
  159. End Sub
  160.  
  161. '**********************************************************************************************************
  162. 'Plunger code
  163. '**********************************************************************************************************
  164.  
  165. Sub Table1_KeyDown(ByVal KeyCode)
  166. If vpmKeyDown(keycode) Then Exit Sub
  167. If keycode = PlungerKey Then Plunger.Pullback:playsound"plungerpull"
  168. If keycode = RightFlipperKey Then Controller.Switch(7) = 1
  169. End Sub
  170.  
  171. Sub Table1_KeyUp(ByVal KeyCode)
  172. If vpmKeyUp(keycode) Then Exit Sub
  173. If keycode = PlungerKey Then Plunger.Fire:PlaySound"plunger"
  174. If keycode = RightFlipperKey Then Controller.Switch(7) = 0
  175. End Sub
  176.  
  177. '**********************************************************************************************************
  178.  
  179. 'Drain hole
  180. Sub Drain_Hit:playsound"drain":bsTrough.addball me:End Sub
  181. Sub sw4_Hit() : bsTopEject.Addball 0 : playsound SoundFX("popper_ball",DOFContactors): End Sub
  182. Sub sw5_Hit() : bsRightEject.Addball 0 : playsound SoundFX("popper_ball",DOFContactors): End Sub
  183.  
  184. 'Stand Up Target
  185. Sub sw17_Hit : vpmTimer.PulseSw(17) : End Sub
  186.  
  187. 'Spinners
  188. Sub sw18_Spin:vpmTimer.PulseSw 18 : playsound"fx_spinner" : End Sub
  189.  
  190. 'Scoring rubber
  191. Sub sw19_Hit(): vpmtimer.pulsesw 19 : playsound"rubber_hit_3" : End Sub
  192. Sub sw19a_Hit(): vpmtimer.pulsesw 19 : playsound"rubber_hit_3" : End Sub
  193.  
  194. 'Wire Triggers
  195. Sub sw12_Hit:Controller.Switch(12)=1 : playsound"rollover" : End Sub
  196. Sub sw12_unHit:Controller.Switch(12)=0:End Sub
  197. Sub sw13_Hit:Controller.Switch(13)=1 : playsound"rollover" : End Sub
  198. Sub sw13_unHit:Controller.Switch(13)=0:End Sub
  199. Sub sw14_Hit:Controller.Switch(14)=1 : playsound"rollover" : End Sub
  200. Sub sw14_unHit:Controller.Switch(14)=0:End Sub
  201.  
  202. Sub sw21_Hit:Controller.Switch(21)=1 : playsound"rollover" : End Sub
  203. Sub sw21_unHit:Controller.Switch(21)=0:End Sub
  204. Sub sw22_Hit:Controller.Switch(22)=1 : playsound"rollover" : End Sub
  205. Sub sw22_unHit:Controller.Switch(22)=0:End Sub
  206. Sub sw23_Hit:Controller.Switch(23)=1 : playsound"rollover" : End Sub
  207. Sub sw23_unHit:Controller.Switch(23)=0:End Sub
  208. Sub sw24_Hit:Controller.Switch(24)=1 : playsound"rollover" : End Sub
  209. Sub sw24_unHit:Controller.Switch(24)=0:End Sub
  210.  
  211. 'Star Triggers
  212. Sub sw20a_Hit:Controller.Switch(20)=1 : playsound"rollover" : End Sub
  213. Sub sw20a_unHit:Controller.Switch(20)=0:End Sub
  214. Sub sw20b_Hit:Controller.Switch(20)=1 : playsound"rollover" : End Sub
  215. Sub sw20b_unHit:Controller.Switch(20)=0:End Sub
  216. Sub sw20c_Hit:Controller.Switch(20)=1 : playsound"rollover" : End Sub
  217. Sub sw20c_unHit:Controller.Switch(20)=0:End Sub
  218. Sub sw25_Hit:Controller.Switch(25)=1 : playsound"rollover" : End Sub
  219. Sub sw25_unHit:Controller.Switch(25)=0:End Sub
  220. Sub sw26_Hit:Controller.Switch(26)=1 : playsound"rollover" : End Sub
  221. Sub sw26_unHit:Controller.Switch(26)=0:End Sub
  222.  
  223. 'Bumpers
  224. Sub Bumper1_Hit : vpmTimer.PulseSw(40) : playsound SoundFX("fx_bumper1",DOFContactors): End Sub
  225. Sub Bumper2_Hit : vpmTimer.PulseSw(38) : playsound SoundFX("fx_bumper1",DOFContactors): End Sub
  226. Sub Bumper3_Hit : vpmTimer.PulseSw(39) : playsound SoundFX("fx_bumper1",DOFContactors): End Sub
  227.  
  228. 'Drop Targets
  229. Sub Sw27_Dropped:dtL.Hit 1 :End Sub
  230. Sub Sw28_Dropped:dtL.Hit 2 :End Sub
  231. Sub Sw29_Dropped:dtL.Hit 3 :End Sub
  232. Sub Sw30_Dropped:dtL.Hit 4 :End Sub
  233. Sub Sw31_Dropped:dtL.Hit 5 :End Sub
  234. Sub Sw32_Dropped:dtL.Hit 6 :End Sub
  235.  
  236. Sub Sw33_Dropped:dtM.Hit 1 :End Sub
  237. Sub Sw34_Dropped:dtM.Hit 2 :End Sub
  238. Sub Sw35_Dropped:dtM.Hit 3 :End Sub
  239.  
  240. Sub Sw42_Dropped:dtT.Hit 3 :End Sub
  241. Sub Sw43_Dropped:dtT.Hit 2 :End Sub
  242. Sub Sw44_Dropped:dtT.Hit 1 :End Sub
  243.  
  244. Sub Sw46_Dropped:dtR.Hit 3 :End Sub
  245. Sub Sw47_Dropped:dtR.Hit 2 :End Sub
  246. Sub Sw48_Dropped:dtR.Hit 1 :End Sub
  247.  
  248. '***************************************************
  249. ' JP's VP10 Fading Lamps & Flashers
  250. ' Based on PD's Fading Light System
  251. ' SetLamp 0 is Off
  252. ' SetLamp 1 is On
  253. ' fading for non opacity objects is 4 steps
  254. '***************************************************
  255.  
  256. Dim LampState(200), FadingLevel(200)
  257. Dim FlashSpeedUp(200), FlashSpeedDown(200), FlashMin(200), FlashMax(200), FlashLevel(200)
  258.  
  259. InitLamps() ' turn off the lights and flashers and reset them to the default parameters
  260. LampTimer.Interval = 5 'lamp fading speed
  261. LampTimer.Enabled = 1
  262.  
  263. ' Lamp & Flasher Timers
  264.  
  265. Sub LampTimer_Timer()
  266. Dim chgLamp, num, chg, ii
  267. chgLamp = Controller.ChangedLamps
  268. If Not IsEmpty(chgLamp) Then
  269. For ii = 0 To UBound(chgLamp)
  270. LampState(chgLamp(ii, 0) ) = chgLamp(ii, 1) 'keep the real state in an array
  271. FadingLevel(chgLamp(ii, 0) ) = chgLamp(ii, 1) + 4 'actual fading step
  272. Next
  273. End If
  274. UpdateLamps
  275. End Sub
  276.  
  277. '****************************************************************
  278. '* JPJ's inserts - reflection Mod - Lights on layer 5 - __z *
  279. '* Ball parameters changed : Refl 1 to 7 - Bulb 1 to 4 *
  280. '****************************************************************
  281.  
  282. Sub UpdateLamps
  283. NFadeLm 1, l1b
  284. NFadeLm 1, l1z
  285. NFadeL 1, l1
  286. NFadeLm 2, l2z
  287. NFadeL 2, l2
  288. NFadeLm 3, l3z
  289. NFadeL 3, l3
  290. NFadeLm 4, l4z
  291. NFadeL 4, l4
  292. NFadeLm 5, l5z
  293. NFadeL 5, l5
  294. NFadeLm 6, l6z
  295. NFadeL 6, l6
  296. NFadeLm 7, l7z
  297. NFadeL 7, l7
  298. NFadeLm 8, l8z
  299. NFadeL 8, l8
  300. NFadeLm 9, l9z
  301. NFadeL 9, l9
  302. NFadeLm 10, l10z
  303. NFadeL 10, l10
  304. NFadeLm 11, l11z
  305. NFadeL 11, l11
  306. ' NFadeLm 12, L12 'Bumper3
  307. NFadeLm 12, Light12a
  308. NFadeL 12, Light12
  309. 'NFadeL 13, l13 'Ball In Play BG
  310. NFadeLm 14, l14z
  311. NFadeL 14, l14
  312. NFadeLm 15, l15z
  313. NFadeL 15, l15
  314. NFadeLm 17, l17z
  315. NFadeL 17, l17
  316. NFadeLm 18, l18z
  317. NFadeL 18, l18
  318. NFadeLm 19, l19z
  319. NFadeL 19, l19
  320. NFadeLm 20, l20z
  321. NFadeL 20, l20
  322. NFadeLm 21, l21z
  323. NFadeL 21, l21
  324. NFadeLm 22, l22z
  325. NFadeL 22, l22
  326. NFadeLm 23, l23z
  327. NFadeL 23, l23
  328. NFadeLm 24, l24z
  329. NFadeL 24, l24
  330. NFadeLm 25, l25z
  331. NFadeL 25, l25
  332. NFadeLm 26, l26z
  333. NFadeL 26, l26
  334. 'NFadeL 27, l27 'Match BG
  335. 'NFadeLm 28, L28 'Bumper2
  336. NFadeLm 28, Light28a
  337. NFadeL 28, Light28
  338. 'NNFadeL 29, l29 'HSTD BG
  339. NFadeLm 30, l30z
  340. NFadeL 30, l30
  341. NFadeLm 31, l31z
  342. NFadeL 31, l31
  343. NFadeLm 33, l33z
  344. NFadeL 33, l33
  345. NFadeLm 34, l34z
  346. NFadeL 34, l34
  347. NFadeLm 35, l35z
  348. NFadeL 35, l35
  349. NFadeLm 36, l36z
  350. NFadeLm 36, l36
  351. NFadeLm 36, l36az
  352. NFadeL 36, l36a
  353. NFadeLm 37, l37z
  354. NFadeL 37, l37
  355. NFadeLm 38, l38z
  356. NFadeL 38, l38
  357. NFadeLm 39, l39z
  358. NFadeL 39, l39
  359. NFadeLm 40, l40z
  360. NFadeL 40, l40
  361. NFadeLm 41, l41z
  362. NFadeL 41, l41
  363. NFadeLm 42, l42z
  364. NFadeL 42, l42
  365. 'NFadeL 43, l43 'Shoot Again BG
  366. 'NFadeLm 44, L44 'Bumper1
  367. NFadeLm 44, Light44a
  368. NFadeL 44, Light44
  369. 'NFadeL 45, l45 'Game Over BG
  370. NFadeLm 46, l46z
  371. NFadeL 46, l46
  372. NFadeLm 49, l49z
  373. NFadeLm 49, l49
  374. NFadeLm 49, l49b
  375. NFadeLm 49, l49az
  376. NFadeL 49, l49a
  377. NFadeLm 50, l50z
  378. NFadeL 50, l50
  379. NFadeLm 51, l51z
  380. NFadeL 51, l51
  381. NFadeLm 52, l52z
  382. NFadeL 52, l52
  383. NFadeLm 53, l53z
  384. NFadeL 53, l53
  385. NFadeLm 54, l54z
  386. NFadeL 54, l54
  387. NFadeLm 55, l55z
  388. NFadeL 55, l55
  389. NFadeLm 56, l56z
  390. NFadeL 56, l56
  391. NFadeLm 57, l57z
  392. NFadeL 57, l57
  393. NFadeLm 58, l58z
  394. NFadeL 58, l58
  395. NFadeL 59, l59 'Apron Credit Light
  396. NFadeLm 60, l60z
  397. NFadeL 60, l60
  398. 'NFadeL 61, l61 'Tilt BG
  399. NFadeLm 62, l62z
  400. NFadeL 62, l62
  401. NFadeLm 63, l63z
  402. NFadeL 63, l63
  403. NFadeLm 65, l65z
  404. NFadeL 65, l65
  405. NFadeLm 66, Light66g
  406. NFadeLm 66, Light66f
  407. NFadeLm 66, Light66e
  408. NFadeLm 66, Light66d
  409. NFadeLm 66, Light66c
  410. NFadeLm 66, Light66b
  411. NFadeLm 66, Light66a ' JPJ It was NFadeL 66, Light66a
  412. NFadeLm 66, Light66
  413. NFadeLm 66, l66z
  414. NFadeL 66, l66 ' JPJ I add this line there was no assignement for this light
  415. NFadeLm 81, Light81a
  416. NFadeLm 81, l81z
  417. NFadeL 81, l81
  418. NFadeLm 82, Light82g
  419. NFadeLm 82, Light82d
  420. NFadeLm 82, Light82c
  421. NFadeLm 82, Light82b
  422. NFadeLm 82, Light82
  423. NFadeL 82, Light82a
  424. NFadeLm 97, Light97b
  425. NFadeLm 97, l97z
  426. NFadeL 97, l97
  427. NFadeLm 98, Light98g
  428. NFadeLm 98, Light98d
  429. NFadeLm 98, Light98c
  430. NFadeLm 98, Light98b
  431. NFadeLm 98, Light98
  432. NFadeL 98, Light98a
  433. NFadeLm 113, Light113b
  434. NFadeLm 113, l113z
  435. NFadeL 113, l113
  436.  
  437. ' NFadeL 66, Light15
  438. 'GITL001.State = 2
  439.  
  440. '****** End of JPJ's inserts ******
  441.  
  442. UpdateShadows
  443.  
  444.  
  445. End Sub
  446.  
  447. '****** Start of dynamic Light Shadows
  448.  
  449.  
  450. Sub UpdateShadows
  451.  
  452. If sw35.IsDropped Then
  453. If sw34.IsDropped Then
  454. If sw33.IsDropped Then
  455. LTL001.State = 1
  456. LTL101.State = 0
  457. LTL011.State = 0
  458. LTL111.State = 0
  459.  
  460. LTR100.State = 1
  461. LTR101.State = 0
  462. LTR110.State = 0
  463. LTR111.State = 0
  464. Else
  465. LTL001.State = 1
  466. LTL101.State = 0
  467. LTL011.State = 0
  468. LTL111.State = 0
  469.  
  470. LTR100.State = 0
  471. LTR101.State = 1
  472. LTR110.State = 0
  473. LTR111.State = 0
  474. End If
  475. Else If sw33.IsDropped Then
  476. LTL001.State = 0
  477. LTL101.State = 0
  478. LTL011.State = 1
  479. LTL111.State = 0
  480.  
  481. LTR100.State = 0
  482. LTR101.State = 0
  483. LTR110.State = 1
  484. LTR111.State = 0
  485. Else
  486. LTL001.State = 0
  487. LTL101.State = 0
  488. LTL011.State = 1
  489. LTL111.State = 0
  490.  
  491. LTR100.State = 0
  492. LTR101.State = 0
  493. LTR110.State = 0
  494. LTR111.State = 1
  495. End If
  496. End If
  497.  
  498. Else
  499. If sw34.IsDropped Then
  500. If sw33.IsDropped Then
  501. LTL001.State = 0
  502. LTL101.State = 1
  503. LTL011.State = 0
  504. LTL111.State = 0
  505.  
  506. LTR100.State = 1
  507. LTR101.State = 0
  508. LTR110.State = 0
  509. LTR111.State = 0
  510. Else
  511. LTL001.State = 0
  512. LTL101.State = 1
  513. LTL011.State = 0
  514. LTL111.State = 0
  515.  
  516. LTR100.State = 0
  517. LTR101.State = 1
  518. LTR110.State = 0
  519. LTR111.State = 0
  520. End If
  521. Else If sw33.IsDropped Then
  522. LTL001.State = 0
  523. LTL101.State = 0
  524. LTL011.State = 0
  525. LTL111.State = 1
  526.  
  527. LTR100.State = 0
  528. LTR101.State = 0
  529. LTR110.State = 1
  530. LTR111.State = 0
  531. Else
  532. LTL001.State = 0
  533. LTL101.State = 0
  534. LTL011.State = 0
  535. LTL111.State = 1
  536.  
  537. LTR100.State = 0
  538. LTR101.State = 0
  539. LTR110.State = 0
  540. LTR111.State = 1
  541. End If
  542. End If
  543. End If
  544.  
  545. End Sub
  546. '******** End of dynamic Light Shadows
  547.  
  548.  
  549.  
  550.  
  551. ' div lamp subs
  552.  
  553. Sub InitLamps()
  554. Dim x
  555. For x = 0 to 200
  556. LampState(x) = 0 ' current light state, independent of the fading level. 0 is off and 1 is on
  557. FadingLevel(x) = 4 ' used to track the fading state
  558. FlashSpeedUp(x) = 0.4 ' faster speed when turning on the flasher
  559. FlashSpeedDown(x) = 0.2 ' slower speed when turning off the flasher
  560. FlashMax(x) = 1 ' the maximum value when on, usually 1
  561. FlashMin(x) = 0 ' the minimum value when off, usually 0
  562. FlashLevel(x) = 0 ' the intensity of the flashers, usually from 0 to 1
  563. Next
  564. End Sub
  565.  
  566. Sub AllLampsOff
  567. Dim x
  568. For x = 0 to 200
  569. SetLamp x, 0
  570. Next
  571. End Sub
  572.  
  573. Sub SetLamp(nr, value)
  574. If value <> LampState(nr) Then
  575. LampState(nr) = abs(value)
  576. FadingLevel(nr) = abs(value) + 4
  577. End If
  578. End Sub
  579.  
  580. ' Lights: used for VP10 standard lights, the fading is handled by VP itself
  581.  
  582. Sub NFadeL(nr, object)
  583. Select Case FadingLevel(nr)
  584. Case 4:object.state = 0:FadingLevel(nr) = 0
  585. Case 5:object.state = 1:FadingLevel(nr) = 1
  586. End Select
  587. End Sub
  588.  
  589. Sub NFadeLm(nr, object) ' used for multiple lights
  590. Select Case FadingLevel(nr)
  591. Case 4:object.state = 0
  592. Case 5:object.state = 1
  593. End Select
  594. End Sub
  595.  
  596. 'Lights, Ramps & Primitives used as 4 step fading lights
  597. 'a,b,c,d are the images used from on to off
  598.  
  599. Sub FadeObj(nr, object, a, b, c, d)
  600. Select Case FadingLevel(nr)
  601. Case 4:object.image = b:FadingLevel(nr) = 6 'fading to off...
  602. Case 5:object.image = a:FadingLevel(nr) = 1 'ON
  603. Case 6, 7, 8:FadingLevel(nr) = FadingLevel(nr) + 1 'wait
  604. Case 9:object.image = c:FadingLevel(nr) = FadingLevel(nr) + 1 'fading...
  605. Case 10, 11, 12:FadingLevel(nr) = FadingLevel(nr) + 1 'wait
  606. Case 13:object.image = d:FadingLevel(nr) = 0 'Off
  607. End Select
  608. End Sub
  609.  
  610. Sub FadeObjm(nr, object, a, b, c, d)
  611. Select Case FadingLevel(nr)
  612. Case 4:object.image = b
  613. Case 5:object.image = a
  614. Case 9:object.image = c
  615. Case 13:object.image = d
  616. End Select
  617. End Sub
  618.  
  619. Sub NFadeObj(nr, object, a, b)
  620. Select Case FadingLevel(nr)
  621. Case 4:object.image = b:FadingLevel(nr) = 0 'off
  622. Case 5:object.image = a:FadingLevel(nr) = 1 'on
  623. End Select
  624. End Sub
  625.  
  626. Sub NFadeObjm(nr, object, a, b)
  627. Select Case FadingLevel(nr)
  628. Case 4:object.image = b
  629. Case 5:object.image = a
  630. End Select
  631. End Sub
  632.  
  633. ' Flasher objects
  634.  
  635. Sub Flash(nr, object)
  636. Select Case FadingLevel(nr)
  637. Case 4 'off
  638. FlashLevel(nr) = FlashLevel(nr) - FlashSpeedDown(nr)
  639. If FlashLevel(nr) < FlashMin(nr) Then
  640. FlashLevel(nr) = FlashMin(nr)
  641. FadingLevel(nr) = 0 'completely off
  642. End if
  643. Object.IntensityScale = FlashLevel(nr)
  644. Case 5 ' on
  645. FlashLevel(nr) = FlashLevel(nr) + FlashSpeedUp(nr)
  646. If FlashLevel(nr) > FlashMax(nr) Then
  647. FlashLevel(nr) = FlashMax(nr)
  648. FadingLevel(nr) = 1 'completely on
  649. End if
  650. Object.IntensityScale = FlashLevel(nr)
  651. End Select
  652. End Sub
  653.  
  654. Sub Flashm(nr, object) 'multiple flashers, it just sets the flashlevel
  655. Object.IntensityScale = FlashLevel(nr)
  656. End Sub
  657.  
  658.  
  659. '**********************************************************************************************************
  660. 'Digital Display
  661. '**********************************************************************************************************
  662. Dim Digits(32)
  663.  
  664. ' 1st Player
  665. Digits(0) = Array(LED10,LED11,LED12,LED13,LED14,LED15,LED16)
  666. Digits(1) = Array(LED20,LED21,LED22,LED23,LED24,LED25,LED26)
  667. Digits(2) = Array(LED30,LED31,LED32,LED33,LED34,LED35,LED36)
  668. Digits(3) = Array(LED40,LED41,LED42,LED43,LED44,LED45,LED46)
  669. Digits(4) = Array(LED50,LED51,LED52,LED53,LED54,LED55,LED56)
  670. Digits(5) = Array(LED60,LED61,LED62,LED63,LED64,LED65,LED66)
  671. Digits(6) = Array(LED70,LED71,LED72,LED73,LED74,LED75,LED76)
  672.  
  673. ' 2nd Player
  674. Digits(7) = Array(LED80,LED81,LED82,LED83,LED84,LED85,LED86)
  675. Digits(8) = Array(LED90,LED91,LED92,LED93,LED94,LED95,LED96)
  676. Digits(9) = Array(LED100,LED101,LED102,LED103,LED104,LED105,LED106)
  677. Digits(10) = Array(LED110,LED111,LED112,LED113,LED114,LED115,LED116)
  678. Digits(11) = Array(LED120,LED121,LED122,LED123,LED124,LED125,LED126)
  679. Digits(12) = Array(LED130,LED131,LED132,LED133,LED134,LED135,LED136)
  680. Digits(13) = Array(LED140,LED141,LED142,LED143,LED144,LED145,LED146)
  681.  
  682. ' 3rd Player
  683. Digits(14) = Array(LED150,LED151,LED152,LED153,LED154,LED155,LED156)
  684. Digits(15) = Array(LED160,LED161,LED162,LED163,LED164,LED165,LED166)
  685. Digits(16) = Array(LED170,LED171,LED172,LED173,LED174,LED175,LED176)
  686. Digits(17) = Array(LED180,LED181,LED182,LED183,LED184,LED185,LED186)
  687. Digits(18) = Array(LED190,LED191,LED192,LED193,LED194,LED195,LED196)
  688. Digits(19) = Array(LED200,LED201,LED202,LED203,LED204,LED205,LED206)
  689. Digits(20) = Array(LED210,LED211,LED212,LED213,LED214,LED215,LED216)
  690.  
  691. ' 4th Player
  692. Digits(21) = Array(LED220,LED221,LED222,LED223,LED224,LED225,LED226)
  693. Digits(22) = Array(LED230,LED231,LED232,LED233,LED234,LED235,LED236)
  694. Digits(23) = Array(LED240,LED241,LED242,LED243,LED244,LED245,LED246)
  695. Digits(24) = Array(LED250,LED251,LED252,LED253,LED254,LED255,LED256)
  696. Digits(25) = Array(LED260,LED261,LED262,LED263,LED264,LED265,LED266)
  697. Digits(26) = Array(LED270,LED271,LED272,LED273,LED274,LED275,LED276)
  698. Digits(27) = Array(LED280,LED281,LED282,LED283,LED284,LED285,LED286)
  699.  
  700. ' Credits
  701. Digits(28) = Array(LED4,LED2,LED6,LED7,LED5,LED1,LED3)
  702. Digits(29) = Array(LED18,LED9,LED27,LED28,LED19,LED8,LED17)
  703. ' Balls
  704. Digits(30) = Array(LED39,LED37,LED48,LED49,LED47,LED29,LED38)
  705. Digits(31) = Array(LED67,LED58,LED69,LED77,LED68,LED57,LED59)
  706.  
  707. Sub DisplayTimer_Timer
  708. Dim ChgLED,ii,num,chg,stat,obj
  709. ChgLed = Controller.ChangedLEDs(&Hffffffff, &Hffffffff)
  710. If Not IsEmpty(ChgLED) Then
  711. If DesktopMode = True Then
  712. For ii = 0 To UBound(chgLED)
  713. num = chgLED(ii, 0) : chg = chgLED(ii, 1) : stat = chgLED(ii, 2)
  714. if (num < 32) then
  715. For Each obj In Digits(num)
  716. If chg And 1 Then obj.State = stat And 1
  717. chg = chg\2 : stat = stat\2
  718. Next
  719. else
  720. end if
  721. next
  722. end if
  723. end if
  724. End Sub
  725.  
  726.  
  727. '**********************************************************************************************************
  728. '**********************************************************************************************************
  729.  
  730.  
  731.  
  732. 'Bally Fathom
  733. 'added by Inkochnito
  734. Sub editDips
  735. Dim vpmDips : Set vpmDips = New cvpmDips
  736. With vpmDips
  737. .AddForm 700,400,"Fathom - DIP switches"
  738. .AddChk 7,10,120,Array("Match feature",&H08000000)'dip 28
  739. .AddChk 130,10,120,Array("Game over attract",&H20000000)'dip 30
  740. .AddChk 260,10,120,Array("Credits display",&H04000000)'dip 27
  741. .AddFrame 2,30,190,"Maximum credits",&H03000000,Array("10 credits",0,"15 credits",&H01000000,"25 credits",&H02000000,"40 credits",&H03000000)'dip 25&26
  742. .AddFrame 2,106,190,"Locked ball adjustment",&H00000020,Array("eject ball at game end",0,"ball remains locked",&H00000020)'dip 6
  743. .AddFrame 2,152,190,"Bonus special lit at maximum",&H00000040,Array("blue and green bonus",0,"blue or green bonus",&H00000040)'dip 7
  744. .AddFrame 2,198,190,"Extra ball lite is lit for",&H00000080,Array("6 seconds",0,"10 seconds",&H00000080)'dip 8
  745. .AddFrame 2,244,190,"A-B-C special adjust",32768,Array("replay",0,"alternating points or replay",32768)'dip 16
  746. .AddFrame 205,30,190,"Balls per game",&HC0000000,Array("2 balls",&HC0000000,"3 balls",0,"4 balls",&H80000000,"5 balls",&H40000000)'dip 31&32
  747. .AddFrame 205,106,190,"Number of replays per game",&H10000000,Array("Only 1 replay per player per game",0,"All replays earned will be collected",&H10000000)'dip 29
  748. .AddFrame 205,152,190,"Drop target memory",&H00200000,Array("not in memory",0,"kept in memory",&H00200000)'dip 22
  749. .AddFrame 205,198,190,"55,000 bonus lites",&H00400000,Array("not in memory",0,"kept in memory",&H00400000)'dip 23
  750. .AddFrame 205,244,190,"A-B-C lites",&H00800000,Array("not in memory",0,"kept in memory",&H00800000)'dip 24
  751. .AddLabel 50,300,350,20,"Set selftest position 16,17,18 and 19 to 03 for the best gameplay."
  752. .AddLabel 50,320,300,20,"After hitting OK, press F3 to reset game with new settings."
  753. .ViewDips
  754. End With
  755. End Sub
  756. Set vpmShowDips = GetRef("editDips")
  757.  
  758.  
  759. ' *********************************************************************
  760. ' *********************************************************************
  761.  
  762. 'Start of VPX call back Functions
  763.  
  764. ' *********************************************************************
  765. ' *********************************************************************
  766.  
  767.  
  768. '**********Sling Shot Animations
  769. ' Rstep and Lstep are the variables that increment the animation
  770. '****************
  771. Dim RStep, Lstep
  772.  
  773. Sub RightSlingShot_Slingshot
  774. vpmTimer.PulseSw 36
  775. PlaySound SoundFX("right_slingshot",DOFContactors), 0, 1, 0.05, 0.05
  776. RSling.Visible = 0
  777. RSling1.Visible = 1
  778. sling1.TransZ = -20
  779. RStep = 0
  780. RightSlingShot.TimerEnabled = 1
  781. End Sub
  782.  
  783. Sub RightSlingShot_Timer
  784. Select Case RStep
  785. Case 3:RSLing1.Visible = 0:RSLing2.Visible = 1:sling1.TransZ = -10
  786. Case 4:RSLing2.Visible = 0:RSLing.Visible = 1:sling1.TransZ = 0:RightSlingShot.TimerEnabled = 0:
  787. End Select
  788. RStep = RStep + 1
  789. End Sub
  790.  
  791. Sub LeftSlingShot_Slingshot
  792. vpmTimer.PulseSw 37
  793. PlaySound SoundFX("left_slingshot",DOFContactors),0,1,-0.05,0.05
  794. LSling.Visible = 0
  795. LSling1.Visible = 1
  796. sling2.TransZ = -20
  797. LStep = 0
  798. LeftSlingShot.TimerEnabled = 1
  799. End Sub
  800.  
  801. Sub LeftSlingShot_Timer
  802. Select Case LStep
  803. Case 3:LSLing1.Visible = 0:LSLing2.Visible = 1:sling2.TransZ = -10
  804. Case 4:LSLing2.Visible = 0:LSLing.Visible = 1:sling2.TransZ = 0:LeftSlingShot.TimerEnabled = 0:
  805. End Select
  806. LStep = LStep + 1
  807. End Sub
  808.  
  809.  
  810.  
  811. ' *********************************************************************
  812. ' Supporting Ball & Sound Functions
  813. ' *********************************************************************
  814.  
  815. Function Vol(ball) ' Calculates the Volume of the sound based on the ball speed
  816. Vol = Csng(BallVel(ball) ^2 / 2000)
  817. End Function
  818.  
  819. Function Pan(ball) ' Calculates the pan for a ball based on the X position on the table. "table1" is the name of the table
  820. Dim tmp
  821. tmp = ball.x * 2 / table1.width-1
  822. If tmp > 0 Then
  823. Pan = Csng(tmp ^10)
  824. Else
  825. Pan = Csng(-((- tmp) ^10) )
  826. End If
  827. End Function
  828.  
  829. Function Pitch(ball) ' Calculates the pitch of the sound based on the ball speed
  830. Pitch = BallVel(ball) * 20
  831. End Function
  832.  
  833. Function BallVel(ball) 'Calculates the ball speed
  834. BallVel = INT(SQR((ball.VelX ^2) + (ball.VelY ^2) ) )
  835. End Function
  836.  
  837. '*****************************************
  838. ' JP's VP10 Rolling Sounds
  839. '*****************************************
  840.  
  841. Const tnob = 5 ' total number of balls
  842. ReDim rolling(tnob)
  843. InitRolling
  844.  
  845. Sub InitRolling
  846. Dim i
  847. For i = 0 to tnob
  848. rolling(i) = False
  849. Next
  850. End Sub
  851.  
  852. Sub RollingTimer_Timer()
  853. Dim BOT, b
  854. BOT = GetBalls
  855.  
  856. ' stop the sound of deleted balls
  857. For b = UBound(BOT) + 1 to tnob
  858. rolling(b) = False
  859. StopSound("fx_ballrolling" & b)
  860. Next
  861.  
  862. ' exit the sub if no balls on the table
  863. If UBound(BOT) = -1 Then Exit Sub
  864.  
  865. ' play the rolling sound for each ball
  866. For b = 0 to UBound(BOT)
  867. If BallVel(BOT(b) ) > 1 AND BOT(b).z < 30 Then
  868. rolling(b) = True
  869. PlaySound("fx_ballrolling" & b), -1, Vol(BOT(b) ), Pan(BOT(b) ), 0, Pitch(BOT(b) ), 1, 0
  870. Else
  871. If rolling(b) = True Then
  872. StopSound("fx_ballrolling" & b)
  873. rolling(b) = False
  874. End If
  875. End If
  876. Next
  877. End Sub
  878.  
  879. '**********************
  880. ' Ball Collision Sound
  881. '**********************
  882.  
  883. Sub OnBallBallCollision(ball1, ball2, velocity)
  884. PlaySound("fx_collide"), 0, Csng(velocity) ^2 / 2000, Pan(ball1), 0, Pitch(ball1), 0, 0
  885. End Sub
  886.  
  887.  
  888.  
  889. '************************************
  890. ' What you need to add to your table
  891. '************************************
  892.  
  893. ' a timer called RollingTimer. With a fast interval, like 10
  894. ' one collision sound, in this script is called fx_collide
  895. ' as many sound files as max number of balls, with names ending with 0, 1, 2, 3, etc
  896. ' for ex. as used in this script: fx_ballrolling0, fx_ballrolling1, fx_ballrolling2, fx_ballrolling3, etc
  897.  
  898.  
  899. '******************************************
  900. ' Explanation of the rolling sound routine
  901. '******************************************
  902.  
  903. ' sounds are played based on the ball speed and position
  904.  
  905. ' the routine checks first for deleted balls and stops the rolling sound.
  906.  
  907. ' The For loop goes through all the balls on the table and checks for the ball speed and
  908. ' if the ball is on the table (height lower than 30) then then it plays the sound
  909. ' otherwise the sound is stopped, like when the ball has stopped or is on a ramp or flying.
  910.  
  911. ' The sound is played using the VOL, PAN and PITCH functions, so the volume and pitch of the sound
  912. ' will change according to the ball speed, and the PAN function will change the stereo position according
  913. ' to the position of the ball on the table.
  914.  
  915.  
  916. '**************************************
  917. ' Explanation of the collision routine
  918. '**************************************
  919.  
  920. ' The collision is built in VP.
  921. ' You only need to add a Sub OnBallBallCollision(ball1, ball2, velocity) and when two balls collide they
  922. ' will call this routine. What you add in the sub is up to you. As an example is a simple Playsound with volume and paning
  923. ' depending of the speed of the collision.
  924.  
  925.  
  926. Sub Pins_Hit (idx)
  927. PlaySound "pinhit_low", 0, Vol(ActiveBall), Pan(ActiveBall), 0, Pitch(ActiveBall), 0, 0
  928. End Sub
  929.  
  930. Sub Targets_Hit (idx)
  931. PlaySound "target", 0, Vol(ActiveBall), Pan(ActiveBall), 0, Pitch(ActiveBall), 0, 0
  932. End Sub
  933.  
  934. Sub Metals_Thin_Hit (idx)
  935. PlaySound "metalhit_thin", 0, Vol(ActiveBall), Pan(ActiveBall), 0, Pitch(ActiveBall), 1, 0
  936. End Sub
  937.  
  938. Sub Metals_Medium_Hit (idx)
  939. PlaySound "metalhit_medium", 0, Vol(ActiveBall), Pan(ActiveBall), 0, Pitch(ActiveBall), 1, 0
  940. End Sub
  941.  
  942. Sub Metals2_Hit (idx)
  943. PlaySound "metalhit2", 0, Vol(ActiveBall), Pan(ActiveBall), 0, Pitch(ActiveBall), 1, 0
  944. End Sub
  945.  
  946. Sub Gates_Hit (idx)
  947. PlaySound "gate4", 0, Vol(ActiveBall), Pan(ActiveBall), 0, Pitch(ActiveBall), 1, 0
  948. End Sub
  949.  
  950. Sub Spinner_Spin
  951. PlaySound "fx_spinner",0,.25,0,0.25
  952. End Sub
  953.  
  954. Sub Rubbers_Hit(idx)
  955. dim finalspeed
  956. finalspeed=SQR(activeball.velx * activeball.velx + activeball.vely * activeball.vely)
  957. If finalspeed > 20 then
  958. PlaySound "fx_rubber2", 0, Vol(ActiveBall), Pan(ActiveBall), 0, Pitch(ActiveBall), 1, 0
  959. End if
  960. If finalspeed >= 6 AND finalspeed <= 20 then
  961. RandomSoundRubber()
  962. End If
  963. End Sub
  964.  
  965. Sub Posts_Hit(idx)
  966. dim finalspeed
  967. finalspeed=SQR(activeball.velx * activeball.velx + activeball.vely * activeball.vely)
  968. If finalspeed > 16 then
  969. PlaySound "fx_rubber2", 0, Vol(ActiveBall), Pan(ActiveBall), 0, Pitch(ActiveBall), 1, 0
  970. End if
  971. If finalspeed >= 6 AND finalspeed <= 16 then
  972. RandomSoundRubber()
  973. End If
  974. End Sub
  975.  
  976. Sub RandomSoundRubber()
  977. Select Case Int(Rnd*3)+1
  978. Case 1 : PlaySound "rubber_hit_1", 0, Vol(ActiveBall), Pan(ActiveBall), 0, Pitch(ActiveBall), 1, 0
  979. Case 2 : PlaySound "rubber_hit_2", 0, Vol(ActiveBall), Pan(ActiveBall), 0, Pitch(ActiveBall), 1, 0
  980. Case 3 : PlaySound "rubber_hit_3", 0, Vol(ActiveBall), Pan(ActiveBall), 0, Pitch(ActiveBall), 1, 0
  981. End Select
  982. End Sub
  983.  
  984. Sub LeftFlipper_Collide(parm)
  985. RandomSoundFlipper()
  986. End Sub
  987.  
  988. Sub RightFlipper_Collide(parm)
  989. RandomSoundFlipper()
  990. End Sub
  991.  
  992. Sub RandomSoundFlipper()
  993. Select Case Int(Rnd*3)+1
  994. Case 1 : PlaySound "flip_hit_1", 0, Vol(ActiveBall), Pan(ActiveBall), 0, Pitch(ActiveBall), 1, 0
  995. Case 2 : PlaySound "flip_hit_2", 0, Vol(ActiveBall), Pan(ActiveBall), 0, Pitch(ActiveBall), 1, 0
  996. Case 3 : PlaySound "flip_hit_3", 0, Vol(ActiveBall), Pan(ActiveBall), 0, Pitch(ActiveBall), 1, 0
  997. End Select
  998. End Sub
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement