alexUnder Ros

Well-known member
Jul 8, 2022
196
267
63
43
Moscow outskirts, Russia
www.artstation.com
explore_jam3_poster1.png


Ranger has tired of infinite battles and decided to visit some peaceful dimensions. Nevertheless boredom is not an option! This time non-combative realms will entertain Ranger with puzzles, traps, tricky movements or simply intriguing story

ENDS: 30 April 2023
PROGS: Arcane Dimensions 1.8
NAMING: ej3_authorname

Countdown: https://www.tickcounter.com/countdown/4061793/explore-jam-3-extension-2
*Practically jam will end when 31th March will end in UTC-12 timezone

RULES
  • AD 1.18.1 progs
  • No theme restrictions
  • Any textures set you like is allowed
  • Peaceful mobs are allowed only with no_axestart 1 and with nomonstercount 1
  • Also pinned non-moving boils are allowed. They're literally function like any other static trap
  • 1 vania item have to be used (jump boots, lava shield, blast belt, air tank or grapple hook)
  • Movement puzzles, demanding tricky movement knowledge, are allowed
  • Map variables 00-95 can be used by any mapper in their map and should be reset to zero on worldspawn
  • 8192 x 8192 limit
  • Music track numbers must be reserved
  • Exit portal of map must go to start map
SUBMISSIONS:
  • Message alexUnder#8923 on Discord
  • upload the zip file to this Slipseer thread
Do not post your maps in "Downloads"!
Dropping your map files in a Discord channel does not count!


Latest A.D. https://www.moddb.com/mods/arcane-dimensions/downloads
Don't forget to check Test Maps: https://www.slipseer.com/index.php?resources/ad-1-8-1-test-map-pack.153/
And Test Map with Variables, they're very much useful for puzzles: https://www.slipseer.com/index.php?resources/ad-1-8-1-variables-test-map-pack.154/

==========


Reserved music tracks
#22 recycledoj
#24 iYago
#28 and #29 Colossus
#58 Aesopolis
#92 CommonCold
#131 spootnik
 
Last edited:
@sock one question comes from discord. I don't know myself what't the answer:
  1. What about runes, can you put runes in your map?
Mappers could use runes, but why?

I would not recommend anyone using runes because there are only 4 and they do affect spawn locations (info_player_start & info_player_start2) in other maps. There is a good testmap "test_mapvar_portal" showing map variables being used like runes to carry over values between map loads.

If someone is wanting a special collection item then use "item_artifact_tomeofpower" for the Tome of Power model or use "item_custom" with any custom model instead. Both of these entities will act like triggers and can work with trigger_counter if wanting to keep track of how many items have been collected.

There are also scoreboard/counter systems if the mappers wants to show progress of what has been collected by the player. Check out the testmap "test_trigger_timer" for examples of the scoreboard/counter system.
 
  • Like
Reactions: alexUnder Ros
Mappers could use runes, but why?

I would not recommend anyone using runes because there are only 4 and they do affect spawn locations (info_player_start & info_player_start2) in other maps. There is a good testmap "test_mapvar_portal" showing map variables being used like runes to carry over values between map loads.

If someone is wanting a special collection item then use "item_artifact_tomeofpower" for the Tome of Power model or use "item_custom" with any custom model instead. Both of these entities will act like triggers and can work with trigger_counter if wanting to keep track of how many items have been collected.

There are also scoreboard/counter systems if the mappers wants to show progress of what has been collected by the player. Check out the testmap "test_trigger_timer" for examples of the scoreboard/counter system.
dude responds:


In explorejam 2, some levels make use of info_playerstart, then give the player a rune instantly, and have a skill chooser section. after which it restarts the level, and because you have gotten a rune, the level goes to info_playerstart2, and from there the level starts. Is there a way to do this with explorejam3? Like: maybe startmap could remove all of the runes?
or maybe AD comes with something but in a different way?
maybe you could do this with map variables?
I'm asking all of these question more so because I'm curious, not because I am sure that I want to make a level yet.
 
In explorejam 2, some levels make use of info_playerstart, then give the player a rune instantly, and have a skill chooser section. after which it restarts the level, and because you have gotten a rune, the level goes to info_playerstart2, and from there the level starts. Is there a way to do this with explorejam3? Like: maybe startmap could remove all of the runes?
or maybe AD comes with something but in a different way?
maybe you could do this with map variables?
I'm asking all of these question more so because I'm curious, not because I am sure that I want to make a level yet.

All skill selection will be done in the start map, so there is no requirement for the "rune on spawn map hack". The other issue with this is that once the player has a rune, its very difficult to remove a rune without losing all other progress (like map variables on start map portals). Also to make this situation worse is that this can only be done once, so only one mapper can use it!

I would not recommend anyone using the rune on spawn map hack, use map variables instead. Look at the test map "test_mapvar_portal" for an example of changing stuff based on map variables when the player spawns.

I would also highly recommend everyone register with slipseer and use the forum for questions, I know modern life is all about instant discord answers, but forums still have their use for asking questions and sharing knowledge, take a slower journey and enjoy some retro forum use! :)
 
@sock
Got another question figured out a little bit about mapvars. You can reset them on worldspawn using the mapvar_update. Is it possible to get a range of mapvars the level makers can use for within their level, and whenever they want to use them, they need to set mapvar_update in worldspawn to something like 0 40 0 ?
And then sock can use a range as well. And if people want to use them for between levels, they can as well? Like, Ideally if there were local mapvars this could also work, which are limited for 1 map, but I don't know if these exist? Although I'm not 100% sure yet of why these mapvars were used in some of the example levels at all yet.
 
I was just curious about why we are limited with mapvars to 8, when we can toggle a larger range off at the start, and this way, we aren't as limited. This would also save the hassle of trying to communicate who will reserve which mapvar. Unless people want to use them in between levels, in which case, they do need to register them.
 
I was just curious about why we are limited with mapvars to 8, when we can toggle a larger range off at the start, and this way, we aren't as limited. This would also save the hassle of trying to communicate who will reserve which mapvar. Unless people want to use them in between levels, in which case, they do need to register them.
I agree its all confusing and messy. To be honest I was not expecting many people to use mapvar's (hence the low value) and just go with the traditional button hunt stuff. I think map variables are confusing, if someone has not used the func_door / shooter map hack. Map variables are mostly used to keep track of start hub portal progress or passing item updates between maps. I spoke to @alexUnder Ros about this and we agreed on the following:

000-95 Temporary, can be used by anyone and should be reset to 0 on map load (mapvar_update command)
96-131 Permenant, used for start map portals and super secret stuff (do not use this range in any map beside start)

I would recommend anyone using map variables to add the following to worldspawn of their map so that all the temporary variables are reset to zero and do not interfere in any map logic setups.

"mapvar_update" "0 95 0"
 
@sock Is it possible to have collectibles in your map, and have them read out whenever you get one with a message like "1 / 40 puzzle pieces collected" or something? We can do trigger_counter with spawnflags 16 and have it read out as "only 19 more to go" but if you were to have multiple types of collectibles, this might not be desirable.
 
Is it possible to have collectibles in your map, and have them read out whenever you get one with a message like "1 / 40 puzzle pieces collected" or something? We can do trigger_counter with spawnflags 16 and have it read out as "only 19 more to go" but if you were to have multiple types of collectibles, this might not be desirable.

Its all possible with trigger_counter, with different messages before, during and after completing the count. Different ways to count forward or backward through lists and the entity can even be linked to the timer display system showing the count quantity ingame. The problem is the FGD for AD 1.8 is lacking tons of options and that is my fault, I should of paid more attention to keeping the FGD/DEF files in sync. Here is the full parameters for trigger_counter in the DEF file. Sorry to say, the DEF file is 100% accurate, the FGD is not.

Code:
/*QUAKED trigger_counter (0.5 0 0.1) (-8 -8 -8) (8 8 8) NOMESSAGE x x x EXACTNO STARTDIS STARTOFF x Not_Easy Not_Normal Not_Hard Not_DM
A counter which triggers target(s) when complete
-------- KEYS --------
targetname  : trigger entity (works with entity state system)
target      : trigger target(s) when complete
startmsg    : message to display before counting begins (use wait for pause time)
message     : message to display when complete (displayed when firing target)
message2    : message to display when complete (ignores NOMESSAGE spawnflag)
counttarget : misc_targetnumber updated with current counter number
lip         : 1=display counter goes up from zero, -1=counts down to zero
count     : number of triggers needed to fire own target, (def=2)
delay     : time delay to fire final trigger event
sounds    : 0=silent,1=Secret,2=talk,3=switch,5=custom,6=secret2
noise     : custom sound to play when complete
wait      : time to pause before starting to count (def=2s)
-------- SPAWNFLAGS --------
NOMESSAGE : disables count display
EXACTNO   : display exact number when counting down
STARTDIS  : Starts disabled and waits for trigger
STARTOFF  : Requires trigger to activate
-------- NOTES --------
A counter which triggers target(s) when complete
*/
 
  • Like
Reactions: alexUnder Ros
Its all possible with trigger_counter, with different messages before, during and after completing the count. Different ways to count forward or backward through lists and the entity can even be linked to the timer display system showing the count quantity ingame. The problem is the FGD for AD 1.8 is lacking tons of options and that is my fault, I should of paid more attention to keeping the FGD/DEF files in sync. Here is the full parameters for trigger_counter in the DEF file. Sorry to say, the DEF file is 100% accurate, the FGD is not.

Code:
/*QUAKED trigger_counter (0.5 0 0.1) (-8 -8 -8) (8 8 8) NOMESSAGE x x x EXACTNO STARTDIS STARTOFF x Not_Easy Not_Normal Not_Hard Not_DM
A counter which triggers target(s) when complete
-------- KEYS --------
targetname  : trigger entity (works with entity state system)
target      : trigger target(s) when complete
startmsg    : message to display before counting begins (use wait for pause time)
message     : message to display when complete (displayed when firing target)
message2    : message to display when complete (ignores NOMESSAGE spawnflag)
counttarget : misc_targetnumber updated with current counter number
lip         : 1=display counter goes up from zero, -1=counts down to zero
count     : number of triggers needed to fire own target, (def=2)
delay     : time delay to fire final trigger event
sounds    : 0=silent,1=Secret,2=talk,3=switch,5=custom,6=secret2
noise     : custom sound to play when complete
wait      : time to pause before starting to count (def=2s)
-------- SPAWNFLAGS --------
NOMESSAGE : disables count display
EXACTNO   : display exact number when counting down
STARTDIS  : Starts disabled and waits for trigger
STARTOFF  : Requires trigger to activate
-------- NOTES --------
A counter which triggers target(s) when complete
*/
The difference between fgd and def is only in amount of descriptions? Or in order for all keys to work I cant use fgd and have to load def while mapping?
 
I needed more help than that. After some digging in the QuakeC source, I came to the following conclusions (feel free to call me out on this if it's wrong @sock .)

# Centerprint functionality
It is NOT possible to change the centerprint message to something that's custom, AKA: "you have collected 23 / 50 gold shards" .
You can only do something more basic for the centerprint.

Message before the main count
Have a message that displays when you activated it for the first time, by setting startmsg. after this message it displays the standard message for this same first interaction

Main count
You can choose between 2 types of messages, standard message:
- "There are more to go..." untill 3, when it specically says the count with "Only 3 more to go..." "Only 2 more to go..." "Only 1 more to go..."
Spefic counting down message (setting lip does not affect this at all)

- "Only X more to go..." where X will be substituted in with the count of how many you still need.
You can set this by applying a spawnflags of 16 (Display Countdown)

Nompleted Message
This message displays right after you have done the thing. If you don't set this you will see the default "Sequence completed!"



The counttarget field

Now, for the completely different behaviour set:
counttarget functionality, id AD, you can place down integrated number display using misc_targetnumber entity , the default (I don't think it comes with another number display model) is a sprite, and in order to see it, you have to set the angle to the direction you want to be able to see it, otherwise it will be invisible).

With this, you can display numbers. However, in order to display bigger numbers you have to use pos1_x and pos1_y (it says pos1 in the docs, but it should be pos1_x and pos1_y (this could have been communicated more clearly in my opinion)) you use pos1_x for 10s and 100s, and 1000s, if you set pos1_x to 2 for example, you can display 0-99. if you set pos1_y to 2, you can display from .00 to .99 . Now, you can connect this entity to the trigger_counter entity by setting the counttarget value of the trigger_counter to the targetname value of the misc_targetnumber.

If you want to count upwards, setting the lip key on the trigger_counter to -1 will update the value in misc_targetnumber so that it goes from 20 -> 0 (or whatever) instead of going from 0 -> 20 (when lip is set to 1)

You can combine 1 dynamic misc_targetnumber and 1 static misc_targetnumber to get a display of 2 / 56 or whatever. But I don't know how you could get the / character in there. Maybe there is a texture somewhere that has a matching slash character.


Moving the misc_targetnumber along with the player so it will always be in view
I don't think you can do this.

Updating the HUD display with your custom counter.
I don't think you can do this either.
 
The difference between fgd and def is only in amount of descriptions? Or in order for all keys to work I cant use fgd and have to load def while mapping?
The DEF file has more keys and descriptions for *some* entities, but the FGD is very close to the DEF, its just not perfect! I would recommend using the FGD as it has the friendly key/value selection system. If you are trying to look for something or want more information about an entity, then open the DEF in a text editor and do a search for the entity name.
 
  • Like
Reactions: alexUnder Ros
I suspect the answer is no, but is it possible to remove the axe and shotgun from the player so they have no weapons DURING the map? So effectively the same result as using no_axestart 1 in worldspawn, but triggered during the course of the map?
 
I suspect the answer is no, but is it possible to remove the axe and shotgun from the player so they have no weapons DURING the map? So effectively the same result as using no_axestart 1 in worldspawn, but triggered during the course of the map?
Sadly this is not possible without some map hacks (which I think I fixed, doh!) You are not the first to ask for this, I never considered removing things from players, just giving it to them! :)
 
Hi! I included a readme, sorry its so ugly! I just wanted to get the idea out. If you don't like masochism atleast a little I'd beware : )
There are many ways to complete the map and lots of avoidable paths and stuff, all you need is the silver key!

3/15/2023 - updated file to fix leak, updated readme.
 

Attachments

  • ej3_bizz.zip
    7 MB · Views: 92
Last edited:
  • Like
Reactions: alexUnder Ros
Hi! I included a readme, sorry its so ugly! I just wanted to get the idea out. If you don't like masochism atleast a little I'd beware : )
I've checked. It's a good map. And looks actually quite nice. As I see it it's classical Explore Jam map. Peaceful. Full of tricky jumps. And the nicest thing that each room offers not 1 but at least 3 decisions - very tricky decisions and not so tricky more casual-player friendly. Very nice map. Thanks
 
Last edited:
  • Like
Reactions: bizzozeron
Are there any resources that cover the fields in "misc_particletemplate"

misc_particletemplate.png


A good working example of this is in AD_ZENDAR map (source files can be downloaded on moddb site) I wanted to use a large light source but I did not want the particles to travel so far upward and through the floor above. So I took the original large flame particle setup and changed its life time value so that the particles disappear before reaching the floor above. Most of the large flames are setup this way in the church area of the map (the GL / Zombie / Ogre ambush), but remember the particle template is ONLY defined ONCE and then referenced (linked via target2) afterward.

The misc_particletemplate entity is a way for the mapper to create their own new particle setups without having to constantly copy over all the parameters to each new misc_particle entity everytime its added to a map. The new particle setup just needs to be defined ONCE and then the target2 key on the misc_particle points to the new template.

There are a crazy amount of parameters for particles in AD, which would be difficult to go into here. Probably be best as a separate forum thread if anyone is really interested (likes of this post might be a good indicator). There are plenty of good example of the parameters in the source file "part_emitter.qc" which is included in the pak files of 1.8+ final release. The source files for the progs are located in the sub directory - "my_progs" and the QC files are just text file which windows Notepad or Notepad++ should be able to read fine. The QC file does include a ton of comments to make the parameters easier to understand.

and what sprites there are that can be used?

Technically any sprite files can be used with particle entities, you just need to define them using the "spr_name1-3" keys. The AD code will try to cache them ready for use if they exist. One thing to note about the particle system is that it can be turned off by the player. If you are planning to do something important or special with particles then remember there are other ways to show sprites in AD (misc_model or misc_particletrail or misc_marshlight) so that they are not removed by the player.
 
View attachment 2515

A good working example of this is in AD_ZENDAR map (source files can be downloaded on moddb site) I wanted to use a large light source but I did not want the particles to travel so far upward and through the floor above. So I took the original large flame particle setup and changed its life time value so that the particles disappear before reaching the floor above. Most of the large flames are setup this way in the church area of the map (the GL / Zombie / Ogre ambush), but remember the particle template is ONLY defined ONCE and then referenced (linked via target2) afterward.

The misc_particletemplate entity is a way for the mapper to create their own new particle setups without having to constantly copy over all the parameters to each new misc_particle entity everytime its added to a map. The new particle setup just needs to be defined ONCE and then the target2 key on the misc_particle points to the new template.

There are a crazy amount of parameters for particles in AD, which would be difficult to go into here. Probably be best as a separate forum thread if anyone is really interested (likes of this post might be a good indicator). There are plenty of good example of the parameters in the source file "part_emitter.qc" which is included in the pak files of 1.8+ final release. The source files for the progs are located in the sub directory - "my_progs" and the QC files are just text file which windows Notepad or Notepad++ should be able to read fine. The QC file does include a ton of comments to make the parameters easier to understand.



Technically any sprite files can be used with particle entities, you just need to define them using the "spr_name1-3" keys. The AD code will try to cache them ready for use if they exist. One thing to note about the particle system is that it can be turned off by the player. If you are planning to do something important or special with particles then remember there are other ways to show sprites in AD (misc_model or misc_particletrail or misc_marshlight) so that they are not removed by the player.
Thanks for the thorough reply Sock! In all honesty I completely forgot about the slipseer thread, but I appreciate AlexUnder forwarding my question. I'll be sure to post any future long-winded or detailed questions here so Alex doesn't have to play mailman all day lol