Your naming of variable is weird. I don't know why you put a z in front of SJ. Usually people will do "sz" prefix to denote a "string terminated by zero" which is variable naming convention called Hungarian notation. "i" would be the proper prefix in this case for "integer". Which brings me to my main point:
Lose this whole zSJ/ zNF thing its not neccessary, all your basically saying is if(true) //execute the following. but since zSJ & zNF are bothe set to 1 and never change they are always true! Instead I would do it like this:
In my opinion that makes a ton more sense, but this is just an organization issue. we still have to figure out why your hack never worked. But coding it in a more readable format makes this easier. 
Lose this whole zSJ/ zNF thing its not neccessary, all your basically saying is if(true) //execute the following. but since zSJ & zNF are bothe set to 1 and never change they are always true! Instead I would do it like this:
Code:
Project.cpp
#include "stdafx.h"
#include "addresses.h" //zSJ, and ADR are define in Addresses.h
void Phcs(); //Another bad naming eww... :{
void Phcs()
{
DWORD dwP1P = *(DWORD*)ADR_P1P;
if(dwP1P != 0)
{
if(GetAsyncKeyState(VK_CONTROL) &1)
{
*(float*)(dwP1P+ZnZ) = 2000.0f;
}
if(dwP1P+ZnZ*(float*) != 20000.0f)
{*(float*)(dwP1P+ZnZ) = -20000.0f;}
}
}

