do you need to independently create a genesis block for a new altcoin? So if one was to try to create an altcoin that was a fork of the bitcoin code would he/she have to create a genesis block independently first? 

static CBlock CreateGenesisBlock(uint32_t nTime, uint32_t nNonce, uint32_t nBits, int32_t nVersion, const CAmount&amp; genesisReward)
{
    const char* pszTimestamp = "anything you want";
    const CScript genesisOutputScript = CScript() &lt;&lt; ParseHex("04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5f") &lt;&lt; OP_CHECKSIG;
    return CreateGenesisBlock(pszTimestamp, genesisOutputScript, nTime, nNonce, nBits, nVersion, genesisReward);
}


Is changing the variable for pszTimestamp in the above function from chainparams.cpp sufficient? 

If that's all that's necessary, then what is the purpose of this "gensis block generation script"*? 

*From this question.
In old versions of the Bitcoin Core codebase, the genesis block was verified as a normal block. All normal rules had to apply to it, including proof of work and difficulty. This meant that if you would modify the contents of the genesis block arbitrarily, it almost certainly would not validate anymore.

Since the genesis block is actually part of the definition of the chain, there is no real need to verify it. In more recent versions, the genesis block is just valid by fiat. This means that when using such a codebase, no complicated script that "mines" the genesis block is needed anymore to define a new chain.