Announcement

Collapse
No announcement yet.

Become a Quake Modder

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • #16
    Custom Prefab Library

    When you have been mapping for a while, you will notice that there comes a point where you need to use something that you have already made at some point. Having to model these things over and over is retarded.

    Custom Prefab Library

    1) Click tools/prefab factory
    2) Click add library
    3) Give your library a name and a brief description, then click OK
    4) Close Prefab Factory

    Adding Prefabs to your Library

    1) Select your entire object. whether it be an arch, a bridge, a custom doorway - you need to make sure that the entire object is selected. You can have entities present in your object.
    2) On the far right click Create Prefab
    3) Give your Prefab a name and a short description.
    4) Select your custom library from the drop-down list and click OK

    Retrieving your Prefab from the library

    1) On the far right under categories select your library from the drop down list
    2) under objects select your desired prefab from the drop-down list
    3) click insert original prefab

    Things to note

    Texture lock DOES NOT work on an object rotation. If you rotate a prefab, you will have to adjust the texture(s) for the entire prefab. sometimes this is no big deal. Other times, once you have adjusted the textures, it is a damn good idea to save another prefab of your rotated version.

    Gypsy
    Last edited by MadGypsy; 03-04-2012, 08:40 AM.
    http://www.nextgenquake.com

    Comment


    • #17
      Map Building Alternative

      So, I was thinking about what GoldenBoy was saying about doing things 1 way being a weakness. I don't like weakness (actually I despise it). So, I spent a whopping 1 hour learning GTKRadiant. There's nothing to it.

      Imma get you all set-up with no guess work. First off you need GTKRadiant 1.5. Then, you need this little side pack I threw together. It has some necessary resources to get GTKRadiant set-up.

      1) install GTK Radiant
      2) unzip my pack and place the wad in your ID1 folder
      3) navigate to ../Program Files/GTKRadiant 1.5.0 and dump hmap2.exe in it
      4) while you are in that folder, further navigate to q1.game\default_build_menu.xml and open it with a text editor
      5) Highlight everything from AFTER --> to right BEFORE the first <build name=.. and paste this:

      Code:
      <project version="2.0">
        <var name="bsp">"[RadiantPath]hmap2.exe"</var>
        <var name="vis">"[RadiantPath]hmap2.exe"</var>
        <var name="light">"[RadiantPath]hmap2.exe"</var>
        <build name="build dammit">
          <command>[bsp] "[MapFile]"</command>
          <command>[vis] -vis "[MapFile]"</command>
          <command>[light] -light -extra4x4 "[MapFile]"</command>
        </build>
      6) Save it and close it
      7) Go start up GTK Radiant and follow the 1 or 2 onscreen prompts
      You're done (sorta)

      Now you need to learn the shit. No problem. Click here, scroll past his "too wordy" setup (that doesn't tell you everything) and learn away.

      Some things to note

      That tutorial teaches you a whole lot of nothing. When you are done you will be able to move around in GTKRadiant, but you still wont be able to play your map. Why? You may ask..well every quake map has to have an "info_player_start". Just right click the grid, select info and then select info_player_start from the drop down menu.Then use the skills the tutorial did give you to move it into a position that makes sense.

      Now that's great and all but you need light too. Just do the same shit (right click the grid) , but with light, monsters, whatever you need. When you are done click Build/Build Dammit to compile your map. I can't figure out the proper code to get it to auto run the game, so just do this:

      1) open notepad (or whatever text editor you use)
      2) paste this in it (respectively)
      Code:
      darkplaces.exe  +map "THE NAME OF YOUR MAP INSIDE OF THESE QUOTES"
      3) save it as WHATEVER_YOU_WANT.bat in the same folder you have "darkplaces" in
      4) make a shortcut of it and drag the shortcut to your taskbar

      Now after you compile a map you can just click the shortcut and you are in business

      Gypsy
      Last edited by MadGypsy; 03-22-2012, 11:25 PM.
      http://www.nextgenquake.com

      Comment


      • #18
        You basically cut out the research and boring work that deters many people from even trying this.

        Great post MadGypsy!
        That means a hell of a lot to me cause that is exactly what I am trying to do. I was actually starting to feel bummed and like nobody gave a crap about all of this. Regardless, I had no intention of stopping though.

        Thank you very much for your kind words.

        Gypsy
        http://www.nextgenquake.com

        Comment


        • #19
          Originally posted by MadGypsy View Post
          Yes, but I can't explain it better than the QC manual that I included with the dev kit download. Here is a brief overview though

          First off, there are no objects (that I know of) in Quake. When I say this I am referring to the fact that there is no:

          Code:
          var player:Object = new Object();
          player =   
          {
              health:100,
              startPosX:0,
              startPosY:0,
              startPosZ:0
          }
          So, in my opinion this means that Quake has no Objects. What quake does have is Entity. From what I can gather typing something as an Entity does nothing but allow it to accept field types and arbitrarily attach it to any given thing in quake that is visible (more on field types below). This is evidenced by the fact that "self", "other" etc can refer to just about anything at any given time. The trick is finding the scope, so you know what it is "currently" referring to. I guess an Entity is an Object in a dot syntax sort of way, but there is no way to declare an Entity and then form a list of it's properties using a structured Object notation.

          Methods

          methods are written like this

          Code:
          return_type (arguments) function_name =
          {
              //code
              return var_of_return_type;
          };
          more definitive example:
          Code:
          float (float b) func_retarded =
          {
              local float a, c;
              a = 10;
              c = a+b;
              return c;
          };
          
          void () func_stupid =
          {
              local float b;
              b = func_retarded(9);
          };
          notice that I defined func_retarded BEFORE I used it in func_stupid. and I typed var b in the func_retarded interface. However you don't have to fully define one method before using it in another BUT YOU DO have to at least type and declare it.

          Code:
          float (float b) func_retarded;
          
          void () func_stupid =
          {
              local float b;
              b = func_retarded(9);
          };
          
          float (float b) func_retarded =
          {
              local float a, c;
              a = 10;
              c = a+b;
              return c;
          };
          hmmm, I hope I did that last example right. Don't consider it biblical. I know you can simply declare it first, but something tells me I screwed up somewhere though. Maybe it just looks strange to me because when you use that way it is generally because the actual full method is in another class that gets declared further down in progs.src

          The types are as follows

          float_____.(ex 16)
          void______(nothing)
          entity____.(ex self)
          vector____(ex '32 32 0') -single quotes
          string____.(ex "I am a string") - double quotes

          if you want to declare a type as a child of an entity (field types) you have to declare it with the dot operator. So, if you see (ex .float power) you automatically know that that "power" belongs to an entity (ex) player.power (is) entity.float

          ex:
          Code:
          .float awesomeness;  //notice the type is declared with a dot
          
          void () some_func =
          {
              if(self.awesomeness)
              {
                 bprint ("Self has awesomeness");
              }
          };
          Of course, this assumes that somewhere before "some_func" you actually set self.awesomeness to something, or at least made it possible to be set, according to some condition or another.

          Aside
          The compiler that I included extends the coding possibilities of QC. For loops, switch/case statements, arrays and more. You might want to take a look at this page to see how your options have been extended with the compiler I provided you.

          Hope this helps and I didn't forget something. I'm not an official QC modder by any means, but it wont stop me from trying to help people. If I make a mistake, some real modders will call me a big idiot and hopefully correct me, I'll edit my mistake and we will all learn something.

          Gypsy
          Okay so all of the "entities" are predefined as part of the standard quake library then, right?

          So I could do something like:

          int(int bri) missile_flare { // declare method "function?" flare on the missile entity. passing in an integer.
          flare.brightness (300, bri, 1); // applying the brightness entity to the flare entity. using the passed in int to define brightness.
          }

          i don't think i'm getting the syntax of this at all. for one i don't understand the difference between a variable and a method, or "function", it seems like the two converge in some weird way. note i am coming from java and not c++ so that might be my hangup here.

          where can i learn these basics?
          Last edited by omicron; 03-04-2012, 11:50 AM.

          Comment


          • #20
            LOL! You quoted my entire tutorial?!

            ok first - there is no int. There is an rint but thats a whole 'nother story. What you want is float and from the way you are trying to use it you want .float.

            All the entities are not defined the way you are trying to define it. "flare" is an effect (but not really). Do this:

            1) Go download notepad++ and install it
            2) Select every .QC file, right click it and select "open with notepad" (ALL OF THEM)
            3) click search / find, type EF_MUZZLEFLASH in the little box
            4) click "find all in all opened documents"

            When the results pop up you can click any line and it will bring you right to the actual line of code in the actual class it came from. Look at all the code around EF_MUZZLEFLASH.

            Now do that again but this time find "EF_". What you are looking at is effect ?flags?. Pay attention to how they get assigned & to what they are assigned to.

            where can i learn these basics?
            The QC source manual that was included with the download, the tutorials link in the first post, this notepad++ search way I just taught you. You are so surrounded with the information that you can't even escape it.

            note i am coming from java and not c++ so that might be my hangup here.
            I am coming from PHP, Javascript, Actionscript and a bunch of other languages that are nothing like QC. You have to push your familiar syntax to the side and only retain the basics. Like: A function is just a function. There may be different ways to syntax it, but in the end it is just a function. Think like a Programmer NOT A Java Programmer

            I'm gonna try one more good try to explain the syntax
            Code:
            Entity You;  //bam! I just declared a var named You and it is of the type Entity
            
            String talk = "hi, I am a var named talk and I am a string";
            
            Float (float x) func_examp; //check me out, I'm a function cause I can accept arguments, but only one in this case and it has to be a float (NUMBER). I return a float too. You can tell cause it says float at the beginning of me
            
            Vector xyz;  //woo hoo, look at me. I'm a vector named xyz. If you are gonna use me you better put some X Y Z co-ordinates in me encapsed in some single quotes - '12 50 18'
            
            Void (vector v) func_other; / /aaaaw shit, I'm a function too you can tell cause I can accept arguments. Only one argument this time though and it has to be a vector. I don't return anything. You can tell cause it says Void at the beginning of me
            
            Float x = .2; //I'm a float also known to lesser humans as any damn number you want me to be
            
            .float health = 100; //I'm a float too but I am expected to be a property of an entity like You.health
            
            Entity (vector v, float f) func_sweet = //aww shit I'm a func with 2 arguments and look at me about to equal some shit
            {
                local entity Returninator; //uh oh I'm bustin out the local vars
                local .vector origin; //lol this is about to make no damn sense
                if (f > 100)     //shoo, I know he did not just use an if statement
                {
            	v_x = 100 * crandom(); //what tha!!! changin that x vector in v mayne
            	v_y = 100 * crandom(); //and y
            	v_z = 200 + 100 * random(); //and z
                 } 
                 Returninator.origin = v;
                 return Returninator;
            }
            
            //I know he aint about to use that shit
            
            void (entity e) func_whatEvah =
            {
               e=func_sweet(self.velocity, self.health);  //awww yeah, I'm more like a flunkedchump than a function but that's why I'm all like whatEvah
            
                self.think = func_other(e.velocity); 
                self.nextthink =  time + 2;   //might as well set a timer to go off in 2 seconds and run a function that we never even defined. BUT we did declare it so the compiler ain't gonna sweat it. 
            }
            I haven't slept in like 50 hours, so I'm just making all this crap up. My last function was an example of how you can prototype. technically it would screw "e" (which would be self) all up cause e would now only have one property. To truly prototype you would have to set every var of self to the prototype and return it. Which would be dumb cause you could just send the property through the function for processing and return it back to the appropriate property of the entity. I wasn't trying to write a real code, just some shit you can ponder on how things connec' up.

            Peace,
            Gypsy
            Last edited by MadGypsy; 03-05-2012, 01:46 PM.
            http://www.nextgenquake.com

            Comment


            • #21
              That wont compile, it would have to be:

              Bob.takedamage = DAMAGE_AIM;

              or

              Bob.takedamage = 2;

              You can spell out the float verbosely, or use a constant....all those are usually defined in defs.qc

              If you add new float values or anything similar to defs.qc make sure its below :

              //+++++++++++++++
              void end_sys_fields;
              //+++++++++++++++


              Otherwise you will get a compiing error stating progdefs.h is out of date.

              The dot (.) is refered to as a specific, or a .float ...which is specific to any non static (dynamic) entity. Note, you can also have more than one dot depending on what is going on, for example:

              self.hook.owner = WORLD;

              In this case, self.hook (usualy the grappling hook in CTF) which is an entity that is specific to the self, also has a .owner entity field......which can be assigned to an entity as well.

              A nice item to keep handy is:

              http://pages.cs.wisc.edu/~jeremyp/qu...kec/quakec.pdf



              Originally posted by omicron
              Bob.takedamage DAMAGE_AIM = 2; would mean that grenades explode upon bob.

              Comment


              • #22
                Search and Rescue (super tut)

                Search and Rescue (super tut) rev 2.0

                Alright, I'm gonna do something a little different this time. I am going to teach you how to learn. I know that sounds retarded, but by the end of this you will not think this is retarded at all. It's supposedly a "fact" that you have to tell someone something 7 times before they officially commit it to memory, so, I'm going to make this tutorial 7 repetitions.

                First of all, I am using Notepad++ for this tutorial. It's free and it's awesome. You should go get it so you can have this invaluable tool at your disposal.

                In notepad++ I opened every single .QC that I have, all at one time. I then randomly clicked a tab and "threw" the scrollbar. I wound up on the LaunchMissle function in Wizard.qc. I then started at the top of the function and read until I hit something I didn't know (it didn't take long).

                Research level: 1


                As you can see I have makevectors highlighted in the image. Of course I understand what something so accurately named is doing, but I want to know how it works. So, I highlighted it, clicked search (in the top bar) and then chose find. Notepad++ automatically places my selection in the find box, so I just clicked find all in all opened documents. The results were what you see at the top of the image.

                We get a nice little chunk of info. From what I highlighted in grey, we can see that makevector sets v_forward, v_up and v_right, but just as important - those three vars are not field types (there is no dot before the vector type). So this means that these vars are global and not a declared property of any specific entity.

                However, there is even more info in that little gray hilight. You see how makevectors = #1. This means that makevectors is a built-in function. In other words, make vectors is used by the quake c code, but it is processed and defined in whatever engine you use. Not only is it a built-in function, but it is the first one. Which actually means little more than you are learning them in order. (lol)

                Let's go ahead and polish off our line by doing a find all in all opened documents for angle and see what else it can tell us

                Research level: 2


                Well, there isn't a whole lot there. So, lets take this research level to address a few other things. When I do the document-wide searches, I am scrolling through the results looking for DEFS.qc. This is the .qc where the grand majority of Quakes variables are defined. I don't just rush to DEFS.qc though. I scan all the other results on the way and fill my head up with my search's various implementations.

                Scanning, that is a nice segue to the next thing we will address. Scan down to the bottom of the results and you will see self.mangle = self.angles. Mangle eh, what the hell is that? Let's find out. First off, we can actually click that line in the search results and it will bring us directly to that line of code in the .qc class that it resides in. So, that's what I did. Do I need to tell you that, once I was brought to the line, I hilighted mangle, clicked search and selected find - followed by clicking find all in all opened documents? Well, I just did.

                Research level: 3


                When the search results appeared, on my way to DEFS.qc, I came across this line (hilighted in the results). It piqued my interest and I found myself in TRIGGERS.qc (this is kinda like a nerd adventure...right? LOL). Now, I already knew that "t" was going to be an entity, because it has a field property. Only entities have field types. However, I wanted to know - what is this "t" they speak of.

                Well, first off the function is teleport_touch. Can you guess what this function is for o.0? The first occurence of "t" (aside from being declared a local entity) is when it is being assigned the return value of the "find" method. Obviously "find" is going to return an entity, but there is something very strange here. If you scan up you will see a line that is wrapping self.targetname in an if statement. This is because targetname is a field property of an entity. To make it simple - it is the entitiy's unique name*. The problem is, in our find function, targetname is not joined to an entity.

                Strange indeed we will have to remember to research this at another level. For now though, we still need to figure out what a mangle is. Off to DEFS.qc.

                *unique name/targetname : when you build maps, in order to determine one object from another, you give entities unique names. These names can be anything the mapper wants them to be. Their sole purpose is to distinguish them from other entities of the same type. So let's assume that you have a trigger that opens a door. Well you don't want the trigger to open every door, so you give the door a targetname and then put that name in the triggers target field. That's how entities are connected and "talk" to each other.

                Research level: 4


                Jackpot! Man, ya' gotta love well commented code. It's right there above the mangle declaration. Mangle holds the variables for pitch, yaw and roll. Since that was so quick and awesome that it stole my thunder for this research level, lets have a chit chat about vectors. So far, we have come across quite a few varieties of vectors and vector processors. It all started with makevectors, which takes the players current angles and sets the global vars v_forward, v_up and v_right. We have to assume that these vars are just place holders that are ready for any entity that needs to use them.

                We have also come across mangle which sets the pitch yaw and roll. There is another often-used field type vector named origin. Now, vectors have a neat little feature. You can capture any property of a vector with what I call underscore syntax. Let's take angles for instance, we can capture the x property of angles with angles_x. The same goes for the y and z property. Origin and other vectors can be treated the same, EXCEPT mangle!

                We got our answer on mangle really quick, but what the search results didn't show is the line directly above it. In this case (as it turns out) mangle is used to set the pitch yaw and roll of the INTERMISSION CAMERA. Now, this isn't it's only use, after all, we were in TRIGGERS.qc and mangle was being calculated from info_teleport_destination -oops you weren't supposed to know that yet. Forget I said that. Crap! now you are probably calculating the use of pitch yaw and roll from the teleport to the teleport destination. After all you don't want to teleport laying down...er I mean forget I said all of this .

                Upon further research of mangle you find that only some doors, platforms and a few monsters use it (mostly). Anyway, enough about mangle and vectors, we know what they do, They are orientation and position co-ordinates. We have that "find" method that we never researched hanging over our head. Let's use our handy-dandy document-wide search to see what we can learn

                Research level: 5


                You still here? Look at you researchin' and learnin' and stuff. What, You think you're smart or somethin'? (LOL). For real though, good job! OK, the find method. When we last left off with this there was an interesting syndrome where we were sticking a naked field type inside of the find method interface. Let's see if we can figure out why.

                Well, a search of targetname just confirms that it is a field type. But look, even more find functions are using the naked version. Lets see if we can figure this out without cheating. Let's review some facts:

                1) the first argument in the find method was world
                2) the second argument was targetname which is the unique name of an entity.
                3) the third argument was self.target, which is the name of the entity that self is targeting.
                4) In this case we know that teleport_touch is self and (because I spilled the beans) we know that "t" is meant to equal the destination based on the return entity of find

                Let's try and turn the statement into English instead of code. Find in the World the targetname that matches the name of self.target. Woah, we did it! That's the key. In this case targetname is not referring to any certain name, it is telling find to search all the targetnames for the one that matches self.target. We're awesome!

                Let's see if we are right. Time for another document-wide search.

                Research level: 6


                Yup! Look, the second parameter of find accepts a string. in this case targetname is not a string but it is a field type of string. Look, they even named the var fld (field) AND they used the dot syntax to declare that only a field type string can be used. Targetname is a field type string. With more scanning of the search results we find there are other field type strings that are used. Classname is one. Classname is the type of entity something is (monster, door, light, etc). So, in that case it would return a certain kind of entity as opposed to a specifically named one.

                So, that's a good lesson right? We learned that you don't always have to put the information of a var in a methods interface. Sometimes it can be simply a var of the correct type and within the method it will be used as a comparison to find things. Like a pointer. Another thing we can learn from these search result is that "find" is a built-in function, but it's not the second one, so I guess our learning them in order thing was short lived.

                Well, we have actually hit a dead end. Or have we? Do you know everything about qc yet? Me either. You know what we do when we reach this point? We go back to the beginning and work our way down the first function where we left off, til we find something that we don't understand. Back to the LaunchMissle method in WIZARD.qc

                Research level: 7


                LOL! Of course our search for something to know would start at practically the next line. What the hell is a mins? Well, according to my document-wide search...........

                Epilogue

                Well, using nothing but an advanced text editor, curiosity and our brain, we were able to take a little journey through the Quake source code and decipher many of its mysteries. Personally, I feel like this method, coupled with using the QC manual is the best way to learn QC.

                QC is not a very advanced or complicated language. In many ways it isn't even as versatile or rich as Javascript. What makes QC confusing is its ambiguous scope and unconventional syntax. Once you learn to decipher the ambiguity and commit the syntax to memory, you will fly as a QC modder.

                Thank you for sticking with me for this tutorial,
                Gypsy
                Last edited by MadGypsy; 08-25-2017, 11:54 AM.
                http://www.nextgenquake.com

                Comment


                • #23
                  Friendly Green Dildo's are awesome bro!
                  Want to get into playing Quake again? Click here for the Multiplayer-Startup kit! laissez bon temps rouler!

                  Comment


                  • #24
                    Guests

                    Guests

                    I have seen my little modder thread with up to 17 guests at one time. I am aware that some of these guests may be actual members that are simply not signed in - this little message is not to those people. This message is to guests that really are guests.

                    I am glad that my thread has information that you find helpful/interesting. After all, that was the entire reason that I created it. I am honored that you come here day after day to see what new information I have posted and utilize all my quick packages that reduce your learning curve. This is all wonderful. You know what would be even more wonderful? - If you simply register for the site. It only takes about 1 minute and then you can actually participate in the community.

                    Instead of coming here and getting information that you have no power to have an input in the direction of, you could actually ask questions and post comments that will help in the development of the information. In short, you could matter.

                    It's a very small thing to consider in contrast to what the site has given you. What if tomorrow, because of draconian SOPA restrictions, QuakeOne became a closed community allowing access to only trusted members? You would be denied access forever. No more Quakeone for you. It's unlikely, but it isn't impossible.

                    register

                    Gypsy
                    http://www.nextgenquake.com

                    Comment


                    • #25
                      Real Quake Code Development Environment

                      In regards to my "Search and Rescue" tutorial, I have compiled a "development environment" that revolves around notepad++.

                      Q-Develop download (14.2 mb)

                      What does the pack contain

                      1) Darkplaces
                      2) A clean Quake 1 source with Darkplaces extension
                      3) Notepad++ (minimalist)
                      4) QC source manual.pdf
                      5) A semi disassembled PAK0.pak from the Free Quake download on this site

                      Why do I want it

                      LITERALLY drop in C:\ and go. There is nothing else to do. NOTHING

                      What does it do

                      1) Click QuakeEditor and it will automatically open all qc files
                      2) all the code is syntax hilighted
                      3) Pressing cntrl+enter presents you with a compile menu
                      choice 1: compile and open log - this is used when you just want to compile and troubleshoot
                      choice 2: compile and start quake - not really sure the point of this but it compiles and starts quake from the beginning
                      choice 3: compile and start quake from a specific map - this option will ask you for a map name, compile and then start the map you specified
                      choice 4: compile and close - this does exactly what it says


                      Are there any issues

                      The compile options menu will potentially not work if you are using windows above XP. I have no way to test this. If you are running above XP and it does not work - send me a PM and I will attempt to write a >XP version. I will also expect you to become my new guinea pig to test my code until "we" get a working version.

                      What is left to do

                      Write out a true qc style definition file. Right now it is using standard c. It's pretty good but I want it to recognize all the qc code.

                      Why did you semi disassemble the pak

                      I pulled maps folder and progs.dat out of the pak. This way, if you want to add maps you can tell your editor to save in the map folder and when you compile it will overwrite progs.dat. I was tempted to eliminate the pak altogether, but keeping the majority of stuff in the pak kept the folder more tidy.

                      Can I put this anywhere other than C:\ or change folder names
                      NO

                      I clicked QuakeEditor but none of the QC files loaded

                      click file/load session and navigate to C:\Q-develop\Quake\ID1\develop\QuakeCompile.ss You should be fine any future time that you click QuakeEditor now.

                      How hard was it to make QuakeEditor

                      I didn't make QuakeEditor, that is a shortcut to a hidden notepad++ that I renamed. I did however make all the compile .bat files, and that was kind of a pain in the ass, cause I don't know what the hell I am doing (never stopped me before)

                      Why did you hide Notepad++

                      1) there is nothing that the "user" needs to do in that folder
                      2) it made the root Q-develop folder all that much cleaner

                      Any advice

                      right click the develop folder and zip it up before you code anything. This way you know you have an un-fucked up copy of your source code - should you completely destroy the one you are working with.

                      If you make some major benchmarks and you have a modded source that works with your new mods - do the exact same thing I just said, for the exact same reason.

                      Never rely on a single back-up of your modded code. Make copies to flash-drives and even internet storage. Nothing sucks more than losing everything cause you are a dumbass.

                      Whatever you do, enjoy it

                      {insert hightech nerd question}

                      I have no freakin' clue


                      Gypsy
                      Last edited by MadGypsy; 03-23-2012, 09:33 AM.
                      http://www.nextgenquake.com

                      Comment


                      • #26
                        Really interesting thread! I have a lot of experience modding for Half-Life (though nothing code related), and want to use the Quake engine for a PSP project eventually.

                        One thing I haven't really found information on online are the specifications of the "animation" system, specifically the play-back rate. I read somewhere that the model frames are displayed/interpolated (?) at 10 fps, with a maximum of 256 frames per mdl, is this correct?

                        Comment


                        • #27
                          Wow, good question bro. Unfortunately, I have no idea. I can say this though - whatever the specs are it is going to be dependent on the engine you use. I highly doubt that every Quake engine has that 256 frame limit for models. As far as the fps on a model goes - just make a model that takes 50 frames to complete one animation (something simple like a full rotation). use a stopwatch to time the rotation - (50/total seconds) = fps.

                          Gypsy

                          P.S> Thanks for putting your fist post in my lil' modder thread
                          Last edited by MadGypsy; 03-18-2012, 12:42 AM.
                          http://www.nextgenquake.com

                          Comment


                          • #28
                            Awesome Post

                            Hi there, just wanted pay my gratitude for this great tutorial you have given for beginners like me. It really helps!

                            Also I notice the Q-Develop seem to be down atm? No worries I'll wait till ya fix it.

                            Keep up the good work!

                            Comment


                            • #29
                              Thanks bro. You are the second person that signed up to post in my lil' modder thread. I wonder if my "sign up if you are a guest" post is actually working. Tonight when I get home from "building the city" (a.k.a work), if I'm not completely exhausted I will see if I can squeeze another tutorial out of my brain for you guys.

                              Since you and Cardinal signed up just to post here if either or both of you guys post something you want to know I will attempt to write a tutorial about it. It's not a first-come first-serve situation. It's a "which one can I answer" situation. So, if one of you guys gets skipped it's cause I have no idea how to tutorialize your question (yet).

                              I fixed the download link. Sorry, about it being dead, but thanks for letting me know.

                              Michael
                              Last edited by MadGypsy; 03-22-2012, 08:29 PM.
                              http://www.nextgenquake.com

                              Comment


                              • #30
                                Thank you

                                Thanks Mad gypsy for fixing the links. I noticed also the long for WorldCrafter is down also. When you get a chance can ya fix it real quick. Thanks!

                                Little bio about myself: I am a novice game designer. I currently a degree in fine arts. However the only thing preventing me from becoming a well rounded game designer is knowing how to go about learning and making programs. I have made the effort to learn myself but I couldn't say how invaluable your post has been. Thank you. I am still trying to understand some of the programming basic concepts and lingo but in due time.

                                Festro

                                Comment

                                Working...
                                X