Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

JeffSventora

Members
  • Posts

    525
  • Joined

  • Last visited

    Never

Everything posted by JeffSventora

  1. Anyone interested in playing through Diablo II? I've been itching to play. I'm down to work out a time to play with a full party, just let me know.
  2. If you pick up C# & XNA you'll be able to easily migrate to Unity/C#. I highly suggest starting there and making your own creations first.
  3. > I never said C# isn't a good starting point. I was just disagreeing with your opinion that the syntax is more difficult to learn than the design patterns. Oh okay, well then I think we both misunderstood each other lol >.< I never said it was more difficult, I was just saying that jumping into programming/tutorials is going to be a lot more work than reading a book about design patterns. Practicing includes implementing these patterns, etc…
  4. > Yes, C# is a language that _strongly _encourages the use of OOP principles; however, you can easily avoid this through the use of globals and various other bad design choices. > > > > I've seen tons of people butcher C# innumerable times, including myself. It doesn't matter what language you're using, any novice will make mistakes. I just personally prefer C# for the syntax, by all means I started with VB6 but looking back I wish I didn't considering that in all of my professional experience I've seen mostly C#/Java jobs and to me, C# is easier simply because Microsoft has way better tools for development.
  5. > I'm going to have to disagree. Learning the C# syntax is nothing compared to learning the different OOP design patterns, etc. C# is OOP by design and extremely easy to learn. Knowing C# can make learning C/C++ & Java easier than others like VB.
  6. Read [[this]](http://www.amazon.com/Object-Oriented-Thought-Process-Developers-Library/dp/0321861272/ref=sr_1_1?s=books&ie=UTF8&qid=1407434318&sr=1-1&keywords=The+Object-Oriented+Thought+Process) before you do any programming and understand it. Then go [[here]](http://www.csharp-station.com/tutorial.aspx) and learn the basics of C#. This is most of the work. Once you understand how C# works, I would either choose to pick up another language or follow XNA tutorials to get a decent sense of how game programming works.
  7. I think a lot of it boils down to the lack of competition in this area of game development. There used to be so many decent communities that existed simultaneously (Mirage, Eclipse, Elysium, Chaos [was decent if you were there], etc…) now it just doesn't seem like a hot topic with things like Unity. if the engine is going to attract people, either make it pro or super user friendly for kids.
  8. Don't forget to wrap your disposable objects in a using statement. This will ensure that your IDisposable objects are disposed and your streams closed when scope is lost for those objects. ``` private static void LoadData() { byte[] FileByteArray; // Create a byte array to store the file contents FileByteArray = File.ReadAllBytes(StartupPath + "\\DataFile.dat"); // Read all the bytes from the data file using (MemoryStream Memory = new MemoryStream(FileByteArray)) // Send all the data to a new memory stream so we can read from it { using (BinaryReader Reader = new BinaryReader(Memory)) // Create a binary reader to read all the data in the memory stream { // Read the data int Number = Reader.ReadInt32(); string Text = Reader.ReadString(); bool Boolean = Reader.ReadBoolean(); } } } ``` I made a slight modification to your code to reflect this change. It's good practice, nice tutorial!
  9. Generating a heightmap is pretty simple, a bit expensive so if you are going to do it during run time I suggest you do it before gameplay. [http://adminspot.net/topic/487-cxnamath-fast-procedural-heightmap-generator-snippet/](http://adminspot.net/topic/487-cxnamath-fast-procedural-heightmap-generator-snippet/)
  10. Honestly, I don't think you need to write any type of specific application. Just write one that shows off your skills and how you can be of service to any company looking for a software engineer. I've been applying to jobs outside of gaming for a week using all of my game projects as my portfolio, almost all of them have moved onto an interview with me. So again, focus on your SKILLS, not what they do.
  11. Cool, glad it worked! Do you understand why that worked?
  12. If you are just trying to make one plane flat plane with two triangles, do something like this. // TRIANGLE 1 v[0].x = -32.0 v[0].z = 32 v[0].y = 0 v[1].x = 32.0 v[1].z = 32 v[1].y = 0 v[2].x = 32.0 v[2].z = -32 v[2].y = 0 // TRIANGLE 2 v[3].x = -32.0 v[3].z = 32 v[3].y = 0 v[4].x = 32.0 v[4].z = -32 v[4].y = 0 v[5].x = -32.0 v[5].z = -32 v[5].y = 0
  13. Trying to keep it clean. ![](http://s21.postimg.org/h8pd7ww6e/desktop.jpg)
  14. I organized it and I made a pastebin link available.
  15. We wrote a deferred rendering system using Direct3D 9\. Working on a new video, there is a blatant difference in quality between that latest video and our current build.
  16. ![](http://www.freemmorpgmaker.com/uploadfiles/5b6aaa5ae696d48489a30f5bfc21b359.png) **What is Way of the Blade?** Way of the Blade is a student project from Full Sail University that is currently in it's BETA phase. This is a project where students get grouped up at the end of their degree program and are tasked to design and develop a full video game in 5 months. This is the game that my group have been working on for roughly 3 months and we are thoroughly enjoying it. Way of the Blade is a 2.5D Hack n' Slash fighter that focuses on balanced fighting mechanics and skillful combat. If you have ever played Bushido Blade, this is very similar. It's all about timing. We really wanted to focus on giving player's the ability to define their own styles of fighting. Combat is broken up into three pieces: - Aggression - Defense - Deception Think of these as rock, paper and scissors. Defense will trump aggression, deception will trump defense and aggression will trump deception. As of right now, there is no released build for you guys to play. We do however, have a Facebook group where we post progress on the current state of the game. So I'd like to share with you the link to the group as well as some videos showing off what we have accomplished within two months of programming (first month is STRICTLY design). Click [HERE](https://www.facebook.com/TeamGLHF?fref=ts) to go to the Facebook page. Latest Build Video (April 16, not the newest. Expect a newer one soon!) [https://www.facebook…v=4658055016355](https://www.facebook.com/photo.php?v=4658055016355) **Also, 95% of the assets are TEMPORARY. Expect a complete face lift this month.**
  17. Wavefront OBJ (.obj) is a popular format for exporting 3D static meshes in Maya and 3DS Max. What makes it popular is the unbelievable ease in which loading meshes can be attained. Please remember, this is for STATIC meshes, no animation data. I also did not release code to read in materials but that can be done easily with some research. By default, Waveffront OBJ files are organized in a way that is pretty friendly with OpenGL but we are going to take the imported data and convert it to an indexed mesh. An indexed mesh is one that does not retain redundant data and uses indices to reference correct vertices when drawing primitives to the screen. If you want to know more about Wavefront OBJ files, you can look here: [http://www.fileforma…ontobj/egff.htm](http://www.fileformat.info/format/wavefrontobj/egff.htm) Here is the code. You can see that I organized the code in an easy to read way, you have a function that loads the mesh, easy enough! [http://pastebin.com/Qk9RecHE](http://pastebin.com/Qk9RecHE) ``` #include #include #include #include #include using std::vector; using std::stringstream; using std::string; using std::ifstream; using std::ofstream; #define TAG_VERTEX_POS "v" #define TAG_VERTEX_NORM "vn" #define TAG_VERTEX_TEX "vt" #define TAG_FACE "f" typedef struct { float x, y, z; } Vec3F; typedef struct { float x, y; } Vec2F; struct obj_vert { Vec3F position; Vec3F normal; Vec2F tex_coord; bool operator==(const obj_vert& comp) const { if( !(comp.position.x == position.x) || !(comp.position.y == position.y) || !(comp.position.z == position.z) ) return false; if( !(comp.normal.x == normal.x) || !(comp.normal.y == normal.y) || !(comp.normal.z == normal.z) ) return false; if( !(comp.tex_coord.x == tex_coord.x) || !(comp.tex_coord.y == tex_coord.y) ) return false; return true; } }; struct obj_face { obj_vert vertices[3]; }; struct obj_face_index { int pos_indices[3]; int norm_indices[3]; int tex_indices[3]; }; typedef struct _mesh { obj_vert* verts; int* indices; int num_verts; int num_indices; _mesh(void) { verts = nullptr; indices = nullptr; } ~_mesh(void) { if(verts != nullptr) { delete [] verts; verts = nullptr; } if(indices != nullptr) { delete [] indices; indices = nullptr; } } } mesh, *lpmesh; // Helper Functions lpmesh load_mesh(const char* file); int contains_vector(const vector& vec, obj_vert check); bool is_obj_file(const char* filename); bool write_mesh(const lpmesh write_mesh, const char* filename); // Entry Point int main(int argc, char* argv[]) { for(int i = 1; i < argc; ++i) { if(is_obj_file(argv[i])) { lpmesh in_mesh = load_mesh(argv[i]); if(!write_mesh(in_mesh, argv[i])) printf("FAILED\n\n"); else printf("SUCCESS\n\n"); } } return getchar(); } // helper Function Definitions lpmesh load_mesh(const char* file) { // Used to build the unique list and indices vector positions; vector normals; vector tex_coords; vector faces; vector unique_verts; vector indices; ifstream filestream; filestream.open(file); if(!filestream.is_open()) return nullptr; // Read every line of the .obj file string line_stream; while(std::getline(filestream, line_stream)) { stringstream str_stream(line_stream); string type_str; str_stream >> type_str; if(type_str == TAG_VERTEX_POS) { Vec3F pos; str_stream >> pos.x >> pos.y >> pos.z; positions.push_back(pos); } else if(type_str == TAG_VERTEX_TEX) { Vec2F tex; str_stream >> tex.x >> tex.y; tex_coords.push_back(tex); } else if(type_str == TAG_VERTEX_NORM) { Vec3F norm; str_stream >> norm.x >> norm.y >> norm.z; normals.push_back(norm); } else if(type_str == TAG_FACE) { obj_face_index face_index; char interrupt; for(int i = 0; i < 3; ++i) { str_stream >> face_index.pos_indices[i] >> interrupt >> face_index.tex_indices[i] >> interrupt >> face_index.norm_indices[i]; } faces.push_back(face_index); } } // Close the file filestream.close(); // Build unique vertex list for(size_t i = 0; i < faces.size(); ++i) { for(int j = 0; j < 3; ++j) { obj_vert new_vert; new_vert.position = positions[faces[i].pos_indices[j] - 1]; new_vert.normal = normals[faces[i].norm_indices[j] - 1]; new_vert.tex_coord = tex_coords[faces[i].tex_indices[j] - 1]; int uindex = contains_vector(unique_verts, new_vert); if(uindex >= 0) indices.push_back(uindex); else { indices.push_back((int)unique_verts.size()); unique_verts.push_back(new_vert); } } } // Fill out the mesh lpmesh new_mesh = new mesh(); new_mesh->num_verts = unique_verts.size(); new_mesh->verts = new obj_vert[new_mesh->num_verts]; new_mesh->num_indices = indices.size(); new_mesh->indices = new int[new_mesh->num_indices]; int size_of_vert = sizeof(obj_vert); memcpy(new_mesh->verts, &unique_verts[0], size_of_vert * new_mesh->num_verts); memcpy(new_mesh->indices, &indices[0], sizeof(int) * new_mesh->num_indices); return new_mesh; } int contains_vector(const vector& vec, obj_vert check) { for(size_t i = 0; i < vec.size(); ++i) if(vec[i] == check) return (int)i; return -1; } bool is_obj_file(const char* filename) { unsigned extension_index = strlen(filename) - 4; string file_mod = filename + extension_index; if(file_mod != ".obj") return false; return true; } bool write_mesh(const lpmesh write_mesh, const char* filename) { printf("Converting \"%s\"\n", filename); if(write_mesh == nullptr) return false; string file_mod = filename; unsigned filename_len = strlen(filename); unsigned ext_begin = file_mod.find('.') + 1; unsigned cur_ext_len = strlen(filename + ext_begin); char* new_file = new char[(filename_len - cur_ext_len) + 4]; memcpy(new_file, filename, filename_len - cur_ext_len); sprintf(new_file + ext_begin, "smo\0"); printf("Writing to \"%s\"\n", new_file); ofstream file; file.open(new_file, std::ios_base::out | std::ios_base::binary); if(!file.is_open()) return false; // Write out the mesh file.write((char*)&write_mesh->num_verts, sizeof(int)); file.write((char*)&write_mesh->num_indices, sizeof(int)); file.write((char*)&write_mesh->verts[0], sizeof(obj_vert) * write_mesh->num_verts); file.write((char*)&write_mesh->indices[0], sizeof(int) * write_mesh->num_indices); // Close the file file.close(); if(new_file != nullptr) { delete [] new_file; new_file = nullptr; } return true; } [/i][/i][/i][/i][/i][/i][/i] ```
  18. I would assume you could get the assets from the actual game. But I don't see the necessity of running the compiled code rather than the ability to learn from it ![:P](http://www.touchofdeathforums.com/community/public/style_emoticons//tongue.png)
  19. Well, thought I would share this ![:)](http://www.touchofdeathforums.com/community/public/style_emoticons//smile.png) [http://sourceforge.net/projects/jediacademy/](http://sourceforge.net/projects/jediacademy/)
  20. Looks pretty cool, I've actually been working on something similar maybe I'll show it off.
  21. As of right now, no. I just started a five month project class that requires all of my time, I'm trying to figure something out though.
  22. Is VB6 dying out? XNA is no longer being developed, but it is surely supported on all of Window's latest machines, including the phones.
  23. VB does also support XNA now.
×
×
  • Create New...