Seems like there could be a neat novel way to do it, according to MimbleWimble mailing list post by A. Poelstra.
Note that the s' values need to be re-communicated every time the transaction changes (as does the nonce). Because it depends on the other party's nonce, this might require an additional round of interaction per channel update.
Note also ...
There was a bug in the tree_hash function used to compute the transaction Merkle tree that caused the hash of block 202612 to be bbd604d2ba11ba27935e006ed39c9bfdd99b76bf4a50654bc1e1e61217962698 instead of the correct value 3a8a2b3a29b50fc86ff73dd087ea43c6f0d6b8f936c849194d5c84c737903966.
There is a comment in the file src/crypto/tree-hash.c about this:
Monero does not use the height, but that doesn't mean a fork cannot. Just pass the block height to get_block_reward (in src/cryptonote_basic/cryptonote_basic_impl.cpp) and you're set. Don't forget to update the tests :)
This does not control the money supply, contrary to what you might expect. If you want to cap it, you need to change get_block_reward (in src/cryptonote_basic/cryptonote_basic_impl.cpp) and stop emission when your chosen amount of coins is reached.
The preferred setup to fork a new coin from Monero is:
a Linux system, with enough memory (4 GB should be enough, more for parallel building), and a fast SSD (well, for Monero it's a must, but a fork will be fine with a HDD since you won't get the traffic when you start out).
a set of programming tools, including a C compiler, make, cmake, etc.