ID:262911
 
Code:
        Move()
. = ..()
var/path = text2path("/obj/checkers/[src.align == "black" ? "white" : "black"]_checker")
var/c = locate(path) in get_step(src,turn(src.dir,180))
if(c) del(c)
if(((istype(src,/obj/checkers/black_checker) && src.y == 9) || (istype(src,/obj/checkers/white_checker) && src.y == 2)) && !src.kinged)
src.kinged = 1
src.icon_state = "[src.align]_checker_king"
world << "test: [src.align]_checker_king; icon_state: [src.icon_state]"


Problem description:
I have to be missing something here... the output from the debug message is "test: black_checker_king; icon_state: black_checker_king", but the icon state of the checker will not change. I've even retyped the icon state to no avail.
I suppose this is a long shot, but your _checker_king icon state wouldn't happen to be a movement state without a still state, would it?

I had that problem the other night. One of my icon states had no name, and was a still state, and the other ones had just movement states, and when I wasn't moving they'd default to the blank, giving some very interesting results.. Lol. Anyway, it's doubtful, but seeing as your code appears correct, I couldn't think of much else that'd be causing the problem..
Detnom is right, the icon is your problem. If you have a movement and standstill state for one icon_state, you will need it for all. I'd just make a new icon file if I were you, though. Saves some data, really.

And just for safe measures, you may want to put parenthesis around [src.align == "black"
In response to Detnom (#1)
I added a spawn(5) before the state change and it seems to work peachy now...