|
Posted by metlslime on 2007/08/08 04:57:56 |
This is a counterpart to the "Mapping Help" thread. If you need help with QuakeC coding, or questions about how to do some engine modification, this is the place for you! We've got a few coders here on the forum and hopefully someone knows the answer. |
|
|
#2760 posted by metlslime on 2020/02/07 05:45:19
the QdQstats mod is kind of like that, it has built in timers for speedrunners. I don't know enough about the dfrag mod to answer more.
How To Do Func_door From Scratch
#2761 posted by wakey on 2020/02/08 16:13:24
Unfortuantely all qc documentation there is, is spread all over the net. Any leads?
btw, long time no see ^^
Reimplementation Query
#2762 posted by Preach on 2020/02/09 17:01:44
Hi wakey. I haven't seen a re-implementation of func_door before, and I can think of a few reasons why. Firstly, the code for the func_door is one of the more complex parts of standard Quake, it's certainly a longer .qc file than any of the other brush objects (in fact, it's longer than misc.qc which contains definitions of dozens of different classes). Aside from doing lots of stuff, the bits about e.g. linking doors are complex in themselves.
Often when writing a mod, a good degree of compatibility with existing maps is desirable. It would be tough to ensure the rewritten code had that compatibility - remember that the func_door is a really flexible entity, often used to create platforms and other moving objects. Trying to remain compatible with the core function is one thing, staying compatible with all the unusual use cases is harder.
Lastly, it's worth pointing out that some of the standard functionality of a func_door depends on "library functions" like SUB_CalcMove and SUB_UseTargets. Can a re-implementation assume those still exist, or should it also code those functions from scratch?
Given all of that, I hope you don't mind me asking first why you want to write func_door from scratch? If it was for a Total Conversion where you create a 2D platformer in Quake, then a lot of the concerns above go away, your mod only runs on the maps you make for it, so compatibility isn't an issue. If it's for a more standard Quake mod I worry that it's a lot of writing and testing code for a benefit I can't yet see...
Clarification:
#2763 posted by the0programmer on 2020/02/10 03:00:27
Yes, total conversion.(though, not a 2D platformer).
Everything else is already coded from scratch, more or less.(roughly following Ender's "quake from scratch" tutorials, to get basic functionality up and running)
The standard door.qc files all have dependencies that are not implemented yet, thus I can't just drop them in like that.
Lastly, as stated by my colleague, the documentation of the DarkPlaces engine is severely lacking(fragmented at best), when compared to the engines I'm used to (e.g. Unity, Godot, or eaven UE4).
Scratch Tutorials
#2764 posted by Preach on 2020/02/10 23:29:42
The best way for you to get working doors is to add doors.qc, and then fix all the compile errors by pasting the missing functions into the top of doors.qc. Serious advice.
To expand on that a bit: the scratch tutorials are great at what they do. They look at the duties QuakeC has to perform - the things that it's basically impossible to do without, and perform the simplest possible thing to accomplish those duties. It's hard to fit doors into that framework; they aren't essential, and it's unclear what the simplest version of a door is.
The other problem actually really ties into what you're saying about the infrastructure being missing. If you were writing the simplest possible implementation of doors, it's likely you could write a reduced version SUB_CalcMove which does just enough for the doors to function. But that short-sightedness would come back to bite you when you decide later to add trains. It's a catch-22 for the scratch tutorial writer, the simpler you make the current tutorial, the worse a basis for building on you've created.
The thing with infrastructure is that how much of it you need really depends on what your big picture goals for the TC are. If you're only going to include doors in two highly controlled places in your entire game, you probably need less infrastructure that standard Quake - just hard code everything into the mod! On the other hand if you're creating a mappers toolkit complete with detailed customisation of the door acceleration profile, you probably need to build a lot more!
Thank You Very Much
#2766 posted by wakey on 2020/02/23 02:12:20
it's appreciated, Preach :)
As far as i could get it, the0programmer has chosen an mixed approach, between using standart doors.qc and his own code. Works like a charm.
Now we have yet another challenge to come over: How do ssqc and csqc communicate?
He told me something of "hacks" with stuffcmd and cvar's, now i was asking myself if that is the standart approach or if there is another way?
Basically he wants to grab information of a csqc entity for use in ssqc.
CSQC
#2767 posted by Preach on 2020/02/24 20:59:34
Although I've never written anything in CSQC, I'd start with getting to grips with https://quakewiki.org/wiki/EXT_CSQC
There's a section on sending data to the client and it seems like those methods would be better than stuffcmd.
There's also a worked tutorial at
https://web.archive.org/web/20080828083732/http://qexpo.tastyspleen.net/booth.php?id=165&page=317
Hexen 2 Cutscene Help Needed
#2768 posted by Shambler on 2020/02/26 09:39:17
Hello everybody,
I don't know whether the title of this thread is correct.
I currently work on an Hexen II project where I'd like to put some RPG sequences the way Heretic II does.
That is:
1. the view switches to a third person view thanks to a camera_remote (a handy thing we have in H2 which does basically the same as the intermission view, but triggerable mid-map)
2. the view represents the player facing a monster and they interact by talking (with centerprints) or doing something (like one killing the other or running away) by triggering the corresponding animations on the models.
3. the view returns to the player and the adventure goes on.
Has everyone ever tried to do that (would it be thanks to hack or programming)? Succeeded? How?
Thank you in advance for your insights! :-)
CCK
#2769 posted by madfox on 2020/02/26 12:35:55
Although HexenII is more advanced then Quake there is a mod called Visions, which has a Capture Camera Kit.
It has about everything you mentioned, but supports only QuakeI. Maybe with a bit tweaking you could port it to HexenII?
#2770 posted by Inky on 2020/02/26 19:16:26
@madfox Sounds promising! Any idea where I could find it?
Yet, just to be sure there is no misunderstanding, because English is not my mother tongue and it's sometimes hard for me to be clear: my actual problem is not the 1. and 3. above because triggered cameras are a native feature in Hexen II.
The real challenge is to tell monsters and the player how to behave during such cutting scenes: tell them to run, to stand idle, to jump or whatever. What I want to do is puppet mastering. Never mind whether it is the actual monsters and player acting in front of the camera or just fake entities reusing their mdl.
Scripts
#2771 posted by madfox on 2020/02/26 21:49:05
I used this Camera scene Construction Kit in a map to explain a coming event in the game.
It works with scripts from the moment the trigger_camera is touched. The player changes into a moveless point, while the entities can be turned on/off hostile attacking.
There is no way to tell what entities will do, although a func_train or path_info can be used as well as textures on screen.
You can look at it at the map of DarinMcneil visions
madfox... great link... I never knew about this! One other camera system can be found in the custents mod but it's a bit different because it's a security camera but there are controllable actors in the mod as well.
#2773 posted by Inky on 2020/02/27 12:00:39
Thank you so much for those exciting links! Hope I'll be able to do something nice from it. :-)
You'll hear about it anyway. ;-)
Demo Examples
#2774 posted by Preach on 2020/02/27 22:42:01
Inky, in the progs tricks you were interested in how demos work. There used to be something of a scene for making Quake demos, especially in the dial-up era of the internet when youtube didn't exist. I was only an interested observer, but if you were interested in finding out more a good place to start would be reading about
https://en.wikipedia.org/wiki/The_Seal_of_Nehahra
In particular, if you look at the sources there are a couple of interviews archived from machinima.com which go into some detail as to what combination of engine tools, mod-making and live recording were used to produce the demos.
#2775 posted by Inky on 2020/03/01 12:53:05
Dear Preach,
At reading your last paragraph, demos don't seem to be easy stuff and my guess is that anyway I would probably not be able to trigger one mid-game and go back to the action afterwards, like with camera stuff exemplified in the map by Darin Mcneil mentioned above. So learning how to make demos would probably be putting things too far away from actual mapping which I still keep on learning and which already takes me days and days (and days...)
Yet I feel extremely honored by your personalized attention. My project will anyway owe a lot to your map hacks and advice, for sure! Thank you so much for that and for all what you bring to the community, that's so precious for newbies like me! Sorry I didn't notice your kind message sooner (is there a way to be automatically notified when someone posts after you on a thread?)
Demo
#2776 posted by Preach on 2020/03/02 00:05:09
I was thinking of pre- or post-level demo cutscenes when I mentioned it (zerstörer is another good example of doing that). In principle though, you could try the following to get a mid-game cutscene from a demo:
1) Save the game to a fixed filename like 'save interdemo.sav' using stuffcmd
2) Follow that with a command to load the demo 'playdemo cutsc001.dem'
3) insert a stuffcmd into the last frame of the demo which runs 'load interdemo.sav' to resume.
Wouldn't work in co-op, and it wouldn't be seamless because the engine would reload the map, but it's an interesting approach. Certainly would shift the burden from perfectly scripting the cutscene in QC to editing a demo. I suspect you can get good results with less effort through the latter...
#2777 posted by Inky on 2020/03/02 10:54:30
Wow, that's tricky! :-)
The cutscenes I have in mind are mainly dialogs with non playing characters (that is non agressive monsters who give pieces of information to the hero thanks to a dialog, show him a passage, etc.) Could a demo do that? That would save a lot of scripting for sure.
Custents
#2778 posted by Preach on 2020/03/03 00:51:59
I'd say that's probably simple enough that you could avoid the demo route. Have you looked at the in-map cutscenes you can do with the custents mod? They might be enough for your purposes. If you had 5-6 entities interacting in a scene, each with two or three things to do, and a need for some kind of camera movement, a demo is going to be more manageable. But there's overhead to setting up demos as well, and that's not worth incurring if the action is short and simple.
What Makes A Monster Go Infight?
#2779 posted by madfox on 2020/03/14 02:43:57
I'm converting some models and have come to strange point one of them resists to go infight.
It keeps on tracing the player untill it is killed.
Strange enough a hit by another monster just makes it to one counter attack, but then it continues the player.
If another monster gets hurt, it starts infight untill the lame one gets killed.
All the others kill eachother infight, so I can't find a trace to where this infight command is to be found.
Madfox
#2780 posted by metlslime on 2020/03/14 06:25:01
in T_Damage, look for self.enemy = attacker;
If your enemies only do one counter attack and then return to attacking the player, something in your code must be setting self.enemy back to the player.
#2781 posted by madfox on 2020/03/14 09:43:55
I can't find self.enemy = attacker; anywhere.
The macro of a grunt is identical to the enforcer.
What happens is that the enforcer will have infight with the grunt.
Grunt with the same qc code won't infight, and leaves after one attack.
Only thing I can make of is that two enforcers won't attack eachother.
Ie
#2782 posted by madfox on 2020/03/14 09:44:57
the qc of a grunt is the enforcer.qc.
#2783 posted by metlslime on 2020/03/15 06:54:12
I can't find self.enemy = attacker; anywhere.
That would explain why there's no infighting then. Monsters attack their current enemy. So if the enemy is never changed to be their most recent attacker, they won't attack back.
Note that in T_Damage, in standard quake, there is an exception for "soldiers" (e.g. grunts) to allow them to fight each other. Every other class will not fight monsters of the same class.
Grm...
#2784 posted by madfox on 2020/03/15 23:28:08
That explains a bit of the cause.
I have this T_Damage (self.enemy, self, self, ldmg);
The perticular monster is called monster_grunt, while quake uses monster_army.
Could it miss the statement soldier, not seeing a monster_ grunt for a monster_army?
|
|
1 post not shown on this page because it was spam |
|
You must be logged in to post in this thread.
|
Website copyright © 2002-2024 John Fitzgibbons. All posts are copyright their respective authors.
|
|