{"id":27334021,"url":"https://github.com/mkalkbrenner/dof_configtool_client","last_synced_at":"2025-04-12T14:09:24.371Z","repository":{"id":34309242,"uuid":"173289447","full_name":"mkalkbrenner/dof_configtool_client","owner":"mkalkbrenner","description":"DOF Configtool Client","archived":false,"fork":false,"pushed_at":"2022-02-11T02:38:34.000Z","size":8163,"stargazers_count":4,"open_issues_count":16,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2023-03-11T16:07:57.500Z","etag":null,"topics":["dof","pinball","pinball-cabinet","pinball-simulation","vpin","vpinmame","vpx"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mkalkbrenner.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-03-01T11:16:39.000Z","updated_at":"2020-12-31T13:28:15.000Z","dependencies_parsed_at":"2022-08-08T00:16:03.208Z","dependency_job_id":null,"html_url":"https://github.com/mkalkbrenner/dof_configtool_client","commit_stats":null,"previous_names":[],"tags_count":null,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkalkbrenner%2Fdof_configtool_client","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkalkbrenner%2Fdof_configtool_client/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkalkbrenner%2Fdof_configtool_client/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkalkbrenner%2Fdof_configtool_client/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mkalkbrenner","download_url":"https://codeload.github.com/mkalkbrenner/dof_configtool_client/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248578870,"owners_count":21127713,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dof","pinball","pinball-cabinet","pinball-simulation","vpin","vpinmame","vpx"],"created_at":"2025-04-12T14:09:22.542Z","updated_at":"2025-04-12T14:09:24.363Z","avatar_url":"https://github.com/mkalkbrenner.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DOF Configtool Client\n\nThis is (mainly) a client for downloading your config files from http://configtool.vpuniverse.com and for applying\nadditional tweaks to them. In addition it contains some tools to administer the Visual Pinball system itself.\n\nThe latest version could always be downloaded from https://github.com/mkalkbrenner/dof_configtool_client/releases\n\n__Important! If you never did before, download and install the\n[Visual C++ Redistributable for Visual Studio 2015](https://www.microsoft.com/download/details.aspx?id=48145) first!__\n\nSome, but not all features are demonstrated in short video clips at\n[DOF Configtool Client YouTube Channel](https://www.youtube.com/playlist?list=PLhdNz_h1Ek1-pi6V_kmB_sGvXXyeBLuBC).\n\n## Motivation\n\nThe DOF Configtool is a great tool that covers most of the use-cases for the majority of it's users.\nBut DOF itself is more powerful. If you want to achieve special things, you can to that using the DOF Configtool by\nadjusting the individual table settings. But doing so has to downsides:\n* you might have to repeat such an adjustment for a lot or all games\n* as soon as you have done that, you're decoupled from the upstream (the centralized table database) and you need to\n  track changes manually\n\nAll downsides could be avoided if we add more layers of configuration to the DOF Configtool, for example per port or\nper toy. Since it's currently not possible to contribute to the DOF Configtool directly this client aims to add this\nmissing layers by introducing a kind of rule-set config file and a client that downloads your pre-configured\nconfiguration files from the DOF Configtool and tweaks them accordingly.\n\n### Notes\n\nThis client will never replace the awesome DOF Configtool!\nBut whenever you need to make an individual adjustment for _all_ tables for a specific port of an output controller,\nthis tool might become useful﻿ 😉\n\nIn addition to the available tweaks described below you can think of various other tweaks, for example inverting an\neffect or anything else described at http://directoutput.github.io/DirectOutput/inifiles.html.\nJust open an issue at https://github.com/mkalkbrenner/dof_configtool_client/issues if you have an idea or require\nsomething special.\n\nThe client is written in PHP because of the fact that the configtool itself is written in PHP.\nThat will hopefully ease an adoption of (some) features by the DOF configtool itself in the future.\nThe client itself very light wight. But due to the fact that PHP is uncommon for most Windows users, there two variants\nto install the client: As a light wight PHP application as usual requiring a working PHP installation or as an\nall-in-one package based on [php-desktop](https://github.com/cztomczak/phpdesktop).\n\nAnother advantage of this PHP based wev application approach is that you can use the tool remotely, for example using\nyour laptop and your preferred browser.\n\n## Disclaimer\n\nThere's **no warrenty!**\n\nIf you use this software, you do it **on your own risk!**\n\n## Usage\n\n### 1. Configure\n\n* Select `Settings` from the top menu.\n\n* Complete your `Settings`:\n  * You'll find your `LCP_APIKEY` on the start page after login into http://configtool.vpuniverse.com\n\n  * As `DOF path` you have to provide the directory where DOF is installed. In most cases this should be\n    `C:\\DirectOutput\\config`. **_Note:_** you have to ensure that this directory is writable. In case you get an error\n    right click on the directory in Explorer in check this setting.\n\n  * As `Visual Pinball path` you have to provide the directory where Visual Pinball is installed. In most cases this\n    should be `C:\\VisualPinball`. **_Note:_** you have to ensure that this directory is writable. In case you get an\n    error right click on the directory in Explorer in check this setting.\n\n  * Enter the location of `bspatch.exe` as `pspatch Binary' to be able to _colorize_ ROMs. If you used the full\n    installation of the _DOF Configtool Client_, everything is pre-configured here.\n\n  * Decide wether you want to `Enable Version Control via Git` or not. Once enabled, every change to your DOF configs\n    will be tracked. Other features like the day night switch depend on this version control. Therfore enabling version\n    control is **_highly recommended_** .\n\n    * Enter the location of `git.exe` as `Git Binary'. If you used the full installation of the _DOF Configtool Client_,\n      everything is pre-configured here.\n\n    * Even your local git repository requires a user name and an email address. As long as you don't want to share and\n      therefore push you DOF configs to a server, the values don't really matter and you can keep the defaults for\n      `Git User` and `Git Email`.\n\n### 1. Download your configs\n\n* Select `Download` from the top menu.\n\n* Download your configs using the corresponding button. (Note: Sometimes the configtool is slow. So the download could\n  take some time.)\n\n  **_Warning:_** Existing files will be overwritten if you didn't `Enable Version Control via Git`.\n \n### 2. Apply tweaks\n\n**_Note:_** The tweaks will be applied to the files located in `DOF_CONFIG_PATH`. Therefore the download settings have\nto be properly configured as mentioned above, no matter if you really download the files before tweaking them.\n\nSelect `Tweak` form the top menu. First of all you have to define your tweaks. To do so select `Edit tweak settings`and\ncontinue as decribed in the next sections.\n\nTo apply your tweaks hit the corresponding button. That will tweak your existing configs according to your settings.\nBut before the tweaked configs will be finally saved you'll see a confirmation screen that indicates the resulting\nchanges. There you'll have to hit _Save_ to finally persist this changes.\n\n**_Warning:_** The client doesn't detect if a config file has been _tweaked_ already. So executing the tweaks twice\nwithout downloading the original configs before might have unwanted effects. You shoul always replace the config files\nby a fresh download first, before applying new tweaks.\nWhile absolute value tweaks like `effect_duration` should be kind of safe, multiplications like `adjust_intensity` will\nbe applied again on top of the previous tweak if you apply the tweaks twice.\n\n**In general I suggest to use a tool like _git_ to track your config files and their tweaks, but maybe that might be\n\"too much\" for the standard user** 😉\n\n#### Scopes\n\nTweaks could be applied globally per output controller per port or individually per output controller per game per port.\nIn case that both - a global setting and an individual one for a specific game - exist, the individual one wins for that\ngame while the global one gets applied for all the other games.\n\n##### Example:\n```INI\n[directoutputconfig40.ini]\n; Global settings for output controller #40.\ndefault_effect_duration[23] = 100\ndefault_effect_duration[26] = 100\n[abv106]\n; Individual settings for game *abv106* for output controller #40.\ndefault_effect_duration[23] = 230\n\n[directoutputconfig51.ini]\n; Global settings for output controller #51.\ndefault_effect_duration[11] = 60\n[abv106]\n; Individual settings for game *abv106* for output controller #51.\ndefault_effect_duration[13] = 120\n```\n\n* The effect duration for port _**26**_ on output controller _**40**_ will be set to _**100**ms_ for all games.\n* The effect duration for port _**23**_ on output controller _**40**_ will be set to _**100**ms_ for all games except\n  for game _**abv106**_ where the individual overwrite sets it to _**230**ms_.\n* The effect duration for port _**11**_ on output controller _**51**_ will be set to _**60**ms_ for all games.\n* The effect duration for port _**13**_ on output controller _**51**_ will be set to _**120**ms_ only for game\n  _**abv106**_.\n\n#### Available tweaks\n\n##### `default_effect_duration`\n\nThe standard DOF configs define global and individual effect durations. Individual durations need to be set per game per\noutput controller port per trigger.\n\nUsing the DOF configtool it's impossible to set a different default duration other then the global one on a specific\nport. You would have to do that for all tables.\n\nUsing this option you can set such a default duration per port for all games at once. But this will only happen if\nthere's not yet set an individual duration. To modify some of such individual durations see `effect_duration`,\n`target_effect_duration` and `drop_target_effect_duration` below.\n\nSo `default_effect_duration[23] = 100` sets the duration to _100ms_ for all triggers on output _23_ of a given output\ncontroller if an individual setting doesn't exist already.\n\n###### Use-cases\n\nIf you got a mix of different contactors or solenoids in your cabinet, for example some smaller quick ones and some\nreally heavy ones which need a longer trigger to fire correctly, it makes no sense to adjust the global effect duration\nfor **all** effects just to satisfy these heavy contactors because that will have a negative effect on your force\nfeedback toys in general. Your setup will become more _sluggish_.\nUsing this tweak you can limit the modification to the ports where you need it.\n\n##### `effect_duration`\n\nThe standard DOF configs define global and individual effect durations. Individual durations need to be set per game per\noutput controller port per trigger.\n\nUsing this option you can set an individual effect duration per port, regardless what duration has been set before.\n\nSo `effect_duration[7] = 400` sets the duration to _400ms_ for all triggers on output _7_ of a given output\ncontroller.\n\n###### Use-cases\n\nIf you got a mix of different contactors or solenoids in your cabinet, for example some smaller quick ones and some\nreally heavy ones which need a longer trigger to fire correctly, it makes no sense to adjust the global effect duration\nfor **all** effects just to satisfy these heavy contactors because that will have a negative effect on your force\nfeedback toys in general.\nAnother good example a \"Ding Dong\" door bells which give a \"Ding\" at the beginning of the effect and \"Dong\" at the end.\nTo get the best sound, you need to adjust the effect duration to the door bells' mechanics.\n\n##### `target_effect_duration` / `drop_target_effect_duration`\n\nThe standard DOF configs defines global effect durations for _targets_ and _drop targets_. Individual durations need to\nbe set per game per output controller port per trigger.\n\nUsing the DOF configtool it's impossible to set different durations other then the global ones on a specific port. You\nwould have to do that for all tables individually instead.\n\nUsing these options you can overwrite the global duration for _targets_ or _drop targets_ per port for all games at\nonce.\n\nSo `target_effect_duration[23] = 100` sets the duration of a target to _100ms_ for all triggers on output _23_ of a\ngiven output controller if an individual setting doesn't exist already.\n\n###### Use-cases\n\nSame as for `default_effect_duration`.\n\n##### `turn_off` / `turn_on`\n\nThe `turn_off` tweak allows you to turn off specific ports of your output controller for specific games.\nSo `turn_off[18] = hs` turns off the port 18 for the game named _hs_.\n\nThe `turn_on` tweak allows you to turn on specific ports of your output controller **only** for specific games. It is\nthe complement to `turn_off`. So `turn_on[19] = f14,rs` turns on the port 19 **only** for the games named _f14_ and\n_rs_.\n\nIn most cases these two tweaks will be combined to keep the number of tweaks small.\n\n###### Use-cases\n\nThe DOF Configtool only handles one _Beacon_. But a common setup is to have three of them with different colors:\n* red\n* orange/yellow\n* blue\n\nIt most cases you won't run them all in parallel for any game. Therefore you should attach them to three different ports\nof your output controller and assign _Beacon_ to all of them in the DOF Configtool.\nUsing this tweak you can now turn them of individually.\n\nGiven the three beacons example you now have the choice to configure _High Speed_ using the red beacon like used on the\noriginal machine. Or create a nice police effect by turning on the blue and the red one but turn off the yellow one in\nthe middle.\nBut for _Road Show_ you might want to have the orange beacon to be the only one turned on.\nFor _F14 Tomcat_ you would keep all three active.\n\nAnother use-case is the handling of the heavy contactors we already covered in `default_effect_duration`. While these\nare great for simulating bumbers their noice might be too much for other effects, for example the moving head on the\ntop left in _Monster Bash_. But instead of turning off that contactor entirely for that table you can mount small\ncontactors \"in parallel\" in your cabinet but attaching them to separate outputs. Now you can decide to use the heavy or\nthe small one depeneding on your game.\n\n###### Warning!\n\nDon't apply `turn_off` to an RGB port! Use `rgb_brightness[...] = 00` instead!\n \n##### `adjust_intensity`\n\nThis tweak allows you to boost or reduce the intensity off an effect by a given factor on specific ports of your output\ncontroller. So `adjust_intensity[28] = 1.2` will boost all existing intensities by _1.2_. For example an intensity of\n_32_ will become _41_.\n\nThis tweak internally ensures that the intesity will not exceed the DOF maximum of 48.\n\nIn case of reducing the intensity by using a factor like _0.3_ the tweak will not reduce the intensity lower than _1_.\n\n###### Use-cases\n\nMaybe for safety reasons the maximum intensity for a shaker set be the DOF Configtool is _32_ of _48_.\nIn case you have a small shaker motor you might want to reach the maximum by boosting the default by _1.5_.\n\nSince you have different effect levels within the same game, `adjust_intensity` uses a factor instead of absolute\nnumbers to keep these intensity ratio.\n\n##### `pulse`\n\nThis tweak allows you to pulse a constant effect in a configurable frequency on specific ports of your output\ncontroller. So `pulse[28] = 100` will pulse all the signals on port _28_ with a frequency of _1/100ms=10Hz_. The value\nmust has to be between _1_ and _500_ms.\n\nThe effect is not just a simple on/off but more like a zigzag curve.\n\n###### Use-cases\n\nSome shaker motors just create a high frequent vibration which is totally different from a shaker effect in a real\npinball machine. Using this tweak the shaker might behaves more like realistic, especially smaller ones.\n\n##### `merge`\n\nThis tweak merges two ports. In fact it appends the entire content of the second port to the first port. So\n`merge[7] = 14` will append the entire configuration of port _14_ to port _7_. `merge[7] = 14,16` will append the entire\nconfigurations of port _14_ and port _16_ to port _7_\n\n###### Use-cases\n\nIn some way this tweak is comparable to _combos_ in the DOF Configtool. But beside the fact that a `merge` could be\napplied to a specific game only, the main difference is, that `merge` is a kind of _inverted combo_. Instead of\ncombining two toys as one in general, you can replicate one toy on another toys and both are triggerd.\n\nFor example you might wish to turn on your beacon in addition when the fire button or the start button gets illuminated.\nOr you would turn on the fan in addition to the shaker.\n\n##### `merge_and_turn_off`\n\n`merge_and_turn_off` basically works exactly like `merge` in `turn_off` in combination. so `merge_and_turn_off[7] = 14`\nwill append the entire configuration of port _14_ to port _7_ and then turn off port _7_ in general or a given game.\n\n###### Use-cases\n\nSimilar to `merge` you can turn on a beacon but now _instead of_ the fire button or the start button.\n\n##### `replace`\n\nThis tweak works like `merge` as it merges all given ports. But instead of appending their content to a port's\nconfiguration they replace it. So `replace[7] = 14,16` will merge the configurations of port _14_ and _16_ and replace\nport _7_ by it.\n\n###### Use-cases\n\nFor example you can turn off the standard beacon effects by replacing them by the fire button. So the beacon will only\nbe turned on when the fire button gets illuminated.\n\n##### `swap`\n\nThis tweak swaps to ports. So `swap[7] = 14` will assign the configuration of port _14_ to _7_ and vice versa.\n\n###### Use-cases\n\nMaybe you want to swap the gear and the shaker motor for a specific game, who knows? 😉\n\n##### `string_overwrite` and `set`\n\nThis tweak entirely overwrites a port with a custom setting. So `string_overwrite[7] = ON Red` will assign the value\n_ON RED_ to port _7_.\n\n**_Note:_** This tweak might make most sense per table instead of overwriting a port in general.\n\n**_Note:_** `set` is just a synonym for `string_overwrite` and behaves exactly the same. But you can use both in your\nruleset to better express what you mean: `string_overwrite` to replace a DOF setting, `set` to to add a setting where\nDOF doesn't provide anything.\n\n**_Note:_** This tweak could also be used to entirely remove an effect or disable a toy. Just set the value to _0_:\n`set[38] = 0`.\n\n###### Use-cases\n\nFor example you can use a different color for your flipper buttons. Or you can add effects for your fan or shaker on\nyour own if there's no effect for that toy at all.\n\n##### `string_append`\n\nThis tweak appends a string to a port's configuration. So `string_append[7] = Blink` will append the value _Blink_ to\nport _7_. For example _ON RED_ becomes _ON Red Blink_ port _7_.\n\n###### Use-cases\n\nA simple example are blinking flipper buttons (FYI fading is possible.)\n\n##### `move_drop_target`\n\nUsing this tweak you can extract the triggers for a drop target from a port and attach them to a\ndifferent port. So `move_drop_target[17] = 23` will remove all drop target instructions from port _17_ and attach them\nto port _23_. `move_drop_target[17] = 23,36` will remove all drop target instructions from port _17_ and attach them to\nthe ports _23_ and _36_.\n\n###### Use-cases\n\nFor most tables the drop targets are assigned to the bumpers in the online configuartion tool. If you mount heavy\ncontactors at the wall of your cabinet, they sound great for bumpers. But for drop targets the sound\neffect might be too heavy. In this case you might want to move the drop target effects to smaller contactors or\ncontactors not mounted at the wall. The bumper effects themselves will not be touched and remain assigned where they\nshould be.\n\n**_Note:_** These dedicated drop target contactors are for sure not listed in the DOF configtool itself. Once mounted to\nyour controller the DOF Configtool Client introduces them. Like for bumpers you can have up to 6 dedicated drop targets.\nIf you use combos instead of 6 dedicated bumpers, they apply 1:1 for the new drop targets.\n\n##### `move_target`\n\nUsing this tweak you can extract the triggers for a (stand-up) target from a port and attach them to a\ndifferent port. So `move_target[17] = 23` will remove all target instructions from port _17_ and attach them\nto port _23_. `move_target[17] = 23,36` will remove all drop target instructions from port _17_ and attach them to\nthe ports _23_ and _36_.\n\n###### Use-cases\n\nFor most tables the targets are assigned to the bumpers in the online configuartion tool. From my point of view\nthis is completely wrong. A stand-up taget neither sounds like a solenoid nor the haptic feedback is similar to a solenaoid.\nTherefore it is a good idea to move the target effects to smaller contactors or\ncontactors not mounted at the wall. The bumper effects themselves will not be touched and remain assigned where they\nshould be.\n\n**_Note:_** These dedicated target contactors are for sure not listed in the DOF configtool itself. Once mounted to\nyour controller the DOF Configtool Client introduces them. Like for bumpers you can have up to 6 dedicated targets.\nIf you use combos instead of 6 dedicated bumpers, they apply 1:1 for the new drop targets.\n\n##### `copy_drop_target` / `copy_target`\n\nThese two tweaks work exactly like `move_drop_target` and `move_target` decribed above, except that the instructions are\nnot removed from the original port.\n\n##### `rgb_brightness`\n\nThe standard DOF Configtool allows to adjust the three brightness values (only globally for all tables and controllers\nand their ports):\n* PF Strobe MX\n* Flasher\n* Ledstrip Flasher\n\nFor other RGB toys there's no explicit setting at all.\n\nUsing this tweak you can set the brightness of any RGB toy (stripes, flasher, flipper buttons, ...) individually per\ncontroller per port (and individually per table if you like). So `rgb_brightness[11] = 80` will set the brightness of\nport _11_ to _80_. The brightness has to be set as hexadecimal value between _00_ and _FF_. So _FF_ means 100%\nbrightness, _80_ means 50%.\n\n**_Note:_** A RGB toy is alway attached to three controller ports in a row. So the example above would automatically\nadjust ports _12_ and _13_, too. So there's no need to provide dedicated settings for these two ports.\n\n###### Use-cases\n\nMaybe you want to have your addressable LED stripes mounted under the cabinet to have the full brightness while the\nbrightness of the playfield stripes should be reduced.\n\nFor example, if you configured the first three teensy driven stripes to be playfield left, top and right and the fourth\nis the complex undercab illumination, your corresponding tweaks.ini section to set the playfield brightness to 50%\n(hex 80 equals decimal 128, which is 50% of hex FF or decimal 256) and undercab to 80% (hex CD) will look like this:\n\n```INI\n[directoutputconfig30.ini]\nrgb_brightness[1] = 80\nrgb_brightness[4] = 80\nrgb_brightness[7] = 80\nrgb_brightness[10] = CD\n```\n\n##### `strobe_fixed_freq`\n\nThe settings in the standard DOF Configtool for strobes are made for simple lamps / LEDs. Blinking / flashing effects\nand their duration and frequency are created by DOF itself by turning the controllers outputs on and off quickly.\nBut if you own a \"real\" strobe that flashes by itself using an adjustable or fixed frequency, the original settings\nmight cause flashing effects that look \"ugly\" and \"unprofessional\" because the manual triggers of DOF doesn't match the\nfrequency of the strobe.\n\nSo `strobe_fixed_freq[30] = 8` pins a strobe which flashes on its own connected to port _30_ of\nthe controller to a fixed frequency of _8Hz_.\n\n##### `append_ball_out`\n\nThe settings in the standard DOF Configtool don't provide a dedicated toy for _Ball Out_ which is usually a big solenoid\nthat pushes the ball out of the ball pocket in front of the plunger. Usually people assign this effect to the right\nslingshot or the right flipper instead. By setting `append_ball_out[46] = auto` an algorithm tries to auto detect the\ntriggers for the _ball out_ and appends those to the port _46_ on success. In this example port 46 drives a big solenoid\nmounted at the cabinet's wall, like the existing ones for bumpers or a dedicated one to simulate the ball out.\n\n\n#### Another `tweaks.ini` example\n\n```INI\n[directoutputconfig40.ini]\n; Set an effect duration of 100ms on device #40 ports #23 and #26.\ndefault_effect_duration[23] = 100\ndefault_effect_duration[26] = 100\n\n[directoutputconfig51.ini]\n; Set an inverted effect duration of 500ms on device #51 port #11.\neffect_duration[11] = 500\n; Turn off red beacon on device #51 port #18 for Road Show.\nturn_off[18] = rs\n; Turn on orange beacon on device #51 port #19 only for F14 and Road Show. (That\n; implicitly disables the orange beacon for other games like High Speed.)\nturn_on[19] = f14,rs\n; Turn off blue beacon on device #51 port #20 for Road Show.\nturn_off[20] = rs\n; Boost the intensity of the shaker motor on device #51 port #28 by factor 1.5.\nadjust_intensity[28] = 1.5\n; Pulse the shaker motor on device #51 port #28 with 1/50ms = 20Hz.\npulse[28] = 50\n\n[taf]\n; Reduce the intensity of the shaker motor on device #51 port #28 by factor 0.7\n; only for taf.\nadjust_intensity[28] = 0.7\n```\n\n### 3. Day Night Switch\n\nSome VPin controllers offer a _night switch_ to turn off noisy toys during the \"night\". Some users include a\n_kill switch_ in their cabinet to turn off power supplies for noisy toys for the same reason. But based on the tweaks\nand the version controll via git, the _DOF Configtool Client_ offers a sophisticated day night switch that has a lot of\nadvantages compared to the the common approaches mentioned before:\n\n* Independent from concrete VPin controllers, works for any controller and any mix of controllers\n* Much more flexible compared to a \"kill switch\":\n  * for sure you can simply turn off noisy toys\n  * you can adjust/reduce the intensity of any RGB toy\n  * you can adjust/reduce the intensity of shakers\n  * ...\n\nThe day night switch can be controlled via the user interface of the _DOF Configtool Client_. But it's also possible to\ndo the switching via the command line. In this case the _DOF Configtool Client_' doesn't need to run at all, not even in\nbackground because the switching is based on _git_ (and therefore really quick.).\n\nThe required commands could be easily integrated in your preferred VPin frontend. Just copy the required commands as\nshown in the _DOF Configtool Client_ user interface.\n\nUsing the Windows task scheduler you might also automate the switch.\n\nThe _DOF Configtool Client_ user interface currently only supports three states of the DOF configuration:\n* **_download_**: the original configs generated by the _DOF Configtool_\n* **_day_**: the _tweaked_ config to be used at daytime, having all noisy toys turned on\n* **_night_**: the _tweaked_ config to be used at nighttime, having some noisy toys turned off and some illuminations\n               with reduced intensity\n\nIn fact, this concept is not limited to these three mode. If there's demand by the community, more or custom modes could\nbe added.\n\n#### Example based on parts of my own DOF setup\n\n##### Day\n\n```INI\n[directoutputconfig51.ini]\nmove_drop_target[22] = 23\nmove_drop_target[24] = 23\nmove_drop_target[25] = 26\nmove_drop_target[27] = 26\ndefault_effect_duration[23] = 100\ndefault_effect_duration[26] = 100\ntarget_effect_duration[23] = 100\ntarget_effect_duration[26] = 100\nadjust_intensity[28] = 1.2\nrgb_brightness[50] = 80\nstring_append[50] = Blink fu500 fd1550\n```\n\nI have a 10 Bumper setup. The three bumpers of the middle row are mounted to the ports 22, 23, and 24 of a Pinscape\ncontroller. The back row is attached to the ports 25, 26, and 27. The both contactors in the middle atteched to the\nports 23 and 26 are not mounted against the cabinet wall. That's one reason why they sound different then the others.\nThe second reason is that they are of a different model which is heavier. Therefore they require a longer effect\nduration then the 60ms default to get fired completely.\n\n`default_effect_duration[23] = 100` increases the default effect duration from 60ms to 100ms only for this\nport/contactor, which doesn't slow down the others. The global effect duration for _targets_ is et to 60ms, too.\n`target_effect_duration[23] = 100` increases this one as well.\n\nSince the sound of the contactors in the middle is much more appropriate for drop targets compared to the one's mounted\nagainst the cabinet's wall, `move_drop_target[22] = 23` removes the drop target effects from port 22 and attaches them\nto port 23. The other effect reamin on port 22 as pre-configured in the DOF Configtool.\n\nBTW The global effect duration for targets of 120ms is not touched as it fits for the contactors in the middle, too.\n\nSince my shaker motor attached to port 28 is rather a small one compared to other user's setup, I increase it's intensity using\n`adjust_intensity[28] = 1.2`.\n\nThe design of my speaker panel contains an image of a face. The eyes are illuminated via two RGB LEDs using the\n_Flipper Buttons_ RGB toy. But using the default value of _FF_ is way to bright if you stand in front of the cab.\n`rgb_brightness[50] = 80` reduces the brightness by 50% (80 hex). `string_append[50] = Blink fu500 fd1550` turns the\nstatic illumination of the eyes into a \"scary\" pulsing effect 😉\n\n##### Night\n\n```INI\n[directoutputconfig51.ini]\nturn_off[22] = *\nturn_off[23] = *\nturn_off[24] = *\nturn_off[25] = *\nturn_off[26] = *\nturn_off[27] = *\nadjust_intensity[28] = 0.5\nrgb_brightness[50] = 40\nstring_append[50] = Blink fu500 fd1550\n```\n\nCompared to the _day_ setup, the tweaks for the _night_ mode look different. The contactors atteched to ports 22-27 are\nturned off entirely. The intewnsity of the shaker doesn't get increased but reduced by 0.5, just to be still able to\nfeel it but not to heavy to disturb others. The eyes keep their pulsing effect but the brightness is reduced to 25%.\n\n### 4. RegEdit\n\nThe RegEdit feature isn't directly related to DOF config files. But VPinMame will store it's configurations in the\nWindows Registry. If you ever ran into the situation that you have to change such a setting for all your games, you\nmight know uncomfortable that task is. 😉\n\n* Select `RegEdit` from the top menu.\n* Adjust the settings for all games at once.\n* At the moment the moment the adjustable settings are limited for good reasons to ...\n  * cabinet_mode\n  * ignore_rom_crc\n  * sound\n  * samples\n  * ddraw\n  * showpindmd\n  * showwindmd\n  * dmd_colorize\n  * synclevel\n\n### 5. TextEdit\n\nThe TextEdit feature isn't related to DOF config files only. It offers quick edit access to various Virtual Pinball\nrelated configuration files. The editor offers basic syntax highlighting and error detection. The error detection and\nenhanced auto completion will be added in the future. Currently you can edit these files:\n* Cabinet.xml\n* GlobalConfig_B2SServer.xml\n* B2STableSettings.xml\n* DmdDevice.ini\n* ScreenRes.txt\n* ...\n\n### 6. Colorize\n\nThe DMD output of ROM files could be colorized. Depending on the ROM there're two different ways to do so. While one\njust requires to put some files at the right place in the VPinMAME folder structure, the other requires to patch the\nROM binary, name it correctly and to put files at the right place in the VPinMAME folder structure.\n\nThe Colorize function provides a wizard that does everything for you and avoids that you have to deal with Windows\ncommand line.\n\nThe first step is to select and check the color patch zip file you want to apply. Then you just need to follow the\ninstructions.\n\n**_Note:_** In case that a ROM file needs to patched, the wizard starts `bspatch.exe`. So Windows might ask you to allow\nit to apply modifications to the file system, which is required.\n\n**_Note:_** `bspatch.exe` is already included in the DOF Configtool Client. There's no need to download it separately.\n\n### 7. Backglasses\n\nDirectB2S Backglasses need to match the VPX table name. So if you have several versions of a table you might need to\nhave multiple correctly named copies of a backglass. And if you use PUP Packs you need to delete a backglass or rename\nit.\n\nThis simple tool eases such tasks as you can simply assign a backglass to a table or select to use a PUP Pack instead.\nAll the required file system tasks happen tranparently in the background.\n\nIn addition, the tool suggests backglasses for table.\n\n### Leveraged components and their licences\n\n* https://symfony.com - MIT\n* https://github.com/sagebind/windows-registry - Apache 2.0\n* https://github.com/erusev/parsedown - MIT\n* https://github.com/iphis/fine-diff - MIT\n* https://github.com/cpliakas/git-wrapper - MIT\n* https://getbootstrap.com - MIT\n* https://jquery.com - MIT\n* https://popper.js.org/ - MIT\n* https://www.npmjs.com/package/bs-custom-file-input - MIT\n* https://ace.c9.io/ - BSD\n* https://github.com/ace-diff/ace-diff - MIT\n* https://github.com/cztomczak/phpdesktop - BSD 3-clause license\n* http://www.daemonology.net/bsdiff/ - BSD Protection License\n* https://git-scm.com/ - GPLv2\n\nThe _DOF Configtool Client_ source code is licenced under GPLv3.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmkalkbrenner%2Fdof_configtool_client","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmkalkbrenner%2Fdof_configtool_client","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmkalkbrenner%2Fdof_configtool_client/lists"}