The program structure can be found in the program.h and program.cpp files. You may need to edit portions of Opensprinkler.cpp, program.cpp, server.h, server.cpp, and main.cpp to add new features and set or modify them using the device buttons or json web interface. There is a lot to look at but the best way to go about adding a feature is to trace another existing feature through the program.
Also if you are adding to the size of any of the structures be sure to allocate enough space for it in the nvram. You can find a decent table of its format in the defines file. You will want to write down your current programs as once you change the layout of the memory you will not be able to import your old programs.
Good luck it can be really rewarding to add a feature and see it working in the real world. Make sure to fork the project on github and post your changes there as it can be useful to others to see what you have done. It also makes it easier for someone to help with an issue to see the full scope of your changes.