Hey zacaj, and welcome to the group!
To answer your latter questions: yes all of MPF lights work with incandescents, just set the color to "on" or "FFFFFF"; and 1/0 ints are the best "boolean" we have for player variables.
To answer the light questions: there are lots of different ways that lights can happen, but I'll try to give you some ideas. The light_player is the most hands-on way to do lights, so therefore the most verbose (and occasionally tedious). Shows are good for incorporating light commands in with other commands (slides, sounds, events). Shot profiles are great for defining a progression of lights that can be controlled.
Generally the lighting approach follows the game mechanic that drives it: i.e. is it a counter tracking progress, or a shot lit as a target, or an indicator that some mode/option is activated? I'll toss out a few examples from my game (which are just a few of the options).
Define shows and shot profiles globally
To save yourself some tedium, commonly-used lighting effects can be pre-saved into shows that use "tokens" as variables. For example, I have profiles for flashing alternate colors and a few pulsing patterns. When you play a show that uses tokens, you can pass in token values (like light names, colors, speed) and MPF will map them accordingly. (
http://docs.missionpinball.org/en/dev/shows/tokens.html)
To abstract a level more, shot_profiles can hold a series of shows that they progress through (each time the shot is hit and/or manually by events). For example, a shot thats blinking slow, then gets hit to blink faster, then gets hit again and turns solid. Or a shot that starts blinking slowly, and as timer events tick off the blinking increases in speed.
Use shot profiles to bind lights to something you can enable/disable
The most common lighting effects come from shot profiles attached to shots, but these don't just have to be for targets you shoot with the pinball. A shot is an excellent way to control lights because you can enable/disable them with events and they automatically shut off when their parent mode ends and restore themselves when it comes back. For example, I have an outlane ball save that can be awarded and I use a shot "enabled" to light up the lights. And of course, anything that's an actual shot can use a profile (as much as possible, a common show with tokens)
Use common "shows" with keynames for specific events
For my extra ball, I use the show_player to handle the lights. I use two pre-defined shows ("flash" and "on", at least the latter if not both are included with MPF) and use show tokens to specify which light(s) those shows are played on. Because the "flash" and "on" shows are used frequently, I give these particular instances a unique key so I can address them later (to turn them off). It's a bit complex, but should be a familiar concept to a programmer (if you think of the shows as classes and the show_player using tokens as arguments to create an instance).
show_player:
logicblock_omegarelay_extraball_counter_complete:
flash:
key: extraball_lit_show
show_tokens:
leds: l_kickback_arrow_amber
extra_ball_awarded:
extraball_lit_show:
action: stop
on:
key: extraball_awarded_show
show_tokens:
leds: l_ball_save
player_extra_balls{player_num==current_player.number and value==0}:
extraball_lit_show:
action: stop
Use show player with counters/variables to jump states
I've got three lights on a triple-dropbank and each time the bank is completed, another one lights up. Lighting all three starts a mode, and then they reset. This little setup turns off during other modes, so I use a counter to track the progress and tell the show player which step of the show to play on.
show_player:
mode_field_started:
sbdrops_show:
manual_advance: true
start_step: device.counters.sbdrops_counter.value % 4 + 1
logicblock_sbdrops_counter_hit:
sbdrops_show:
action: advance
shows:
sbdrops_show:
- lights:
l_dropbank_bottom: black
l_dropbank_middle: black
l_dropbank_top: black
- lights:
l_dropbank_bottom: white
l_dropbank_middle: black
l_dropbank_top: black
- lights:
l_dropbank_bottom: white
l_dropbank_middle: white
l_dropbank_top: black
- lights:
l_dropbank_bottom: white
l_dropbank_middle: white
l_dropbank_top: white
And there are plenty more approaches and examples for other strategies. My first recommendation is to look into defining some shows and profiles, and see what can't be done (or what's overly cumbersome). Then, we can look into some more complex solutions.
Hope that helps!