Jump to content
The Dark Mod Forums

Newbie DarkRadiant Questions


demagogue

Recommended Posts

FYI, no static meshes would ever seal anything, not in this generation of engines. As idtech4 shares basically the same building principles as UE2 and other subtractive geometry engines, the methods are similar, i.e. you can create a set of structural meshes, build a playable area with it, then surround it with invisible, non-shadow casting brushes (and then use visportals to optimise the map). The only difference between TDM and TDS for example, is that you just add walls in empty space, you don't carve anything out (there's no division distinction between additive and subtractive brushes). All other design principles are basically the same.

 

The next generation of engines, like UE3, use additive mode only, and static meshes are there for distance culling and automatic optimisation of the map, along with LOD system and a few other things. There's no traditional skybox, everything is a giant open space. Everything is based on lightmaps though, and even some dynamic effects like pulsating or flickering are faked with shader definitions. I'm pretty sure that just a couple of true dynamic lights would make the framerate go down like crazy.

Edited by Judith
Link to comment
Share on other sites

Middle mouse click woes:

 

So I don't recall this being a problem in older DR versions, but 2.2.1 (x64 on Windows 8.1) has my MMB click acting funky. Normally I will hit MMB+<shift> and MMB+<ctrl> in textured mode of the 3D window as needed to clean up patches and brushes - never had issues. Now, there is an inconsistent but very annoying tendency for the 3D camera to shift backwards (and it's always backwards) with MMB click + <any modifier key>. If your pasting tex+scale/coords and the camera moves, any faces touched get retextured.

 

I'm using a Logitech MX500, a pretty bog standard 5 button with a tilt MMB scroll wheel that allows L-R scrolling. It has been my mouse for the past 5 years or so. I'm really careful about not rolling the wheel, and there seems to be no pattern to the camera jumping backwards. I've disabled the side scroll functionality in the registry - so that isn't the problem. Short of disabling all camera functionality with MMB, which I REALLY don't want to do, I can't find a way to stop this behavior.

 

Has something changed since DR 2.03 or so to account for this behavior, and is there a way around it?

 

Also what am I missing to get entities resized through the new snazzy functionality to actually show up in game. I just get the "blah, blah... unable to read coordinates..." warnings and funky black boxes in TDM.

Link to comment
Share on other sites

I'd like to play and audio file for my briefing rather than use text to read it. I've always felt that's more immersive. Since I have

the file by Goldwell, I'd love to use it.

 

The only map I've seen that uses this is Jared Mitchells WIP map Sacred. He has a sound shader in his <mission>/sound folder with this in it

{

//briarwood_briefing
sound/briefing/briefing.ogg
}
Obviously I've changed it to suit my map, but the structure is the same. Just the filename and title has changed. There's a briefing folder,
with the file in there correctly spelt in both. It plays fine; however it won't play during the briefing.
I examined his mainmenu_briefing.gui and there's no mention of it in there. I've messaged him about it, but it might be awhile before he gets to
me and I'd like to release the map.
So I was wondering if anyone knows how to do this?
Thanks
Neon
Edited by NeonsStyle

I have an eclectic YouTube channel making videos on a variety of games. Come and have look here:

https://www.youtube.com/c/NeonsStyleHD

 

Dark Mod Missions: Briarwood Manor - available here or in game

http://forums.thedarkmod.com/topic/18980-fan-mission-briarwood-manor-by-neonsstyle-first-mission-6082017-update-16/

 

 

Link to comment
Share on other sites

Is there a mainmenu_custom_defs.gui file that needs some #define briefingsound, such as the length of the file to be played (as with video, in ms - ie, 4000 = 4s)?
Or worth sniffing around in for this shader..?

I've compiled a directory structure for TDM and where each thing lives:

 

 

 

Mysterious and confusing place, the .pk4 file structure is... A web of inter-dependencies between files, folders and the game, it most surely be.

 

Starting point for comprehension is this long, long list:

 

 

 

Example "full" compile of levelname.pk4.





../darkmod/fms/levelname.pk4 //path

credits.txt //please insert to continue

darkmod.txt //title info

list.txt //this directory listing

readme.txt //readme

startingmap.txt //this level

/dds

/textures

/darkmod

custom_texture.dds //i'm not sure the difference

/decals //between these paths

custom decal.dds //as it seems like it should

/building_facades //work wherever you

levelname_eg.window.dds //put the dds files in here?

/levelname

customtexturemaps.dds

/def

custom_AI_head_and_skin.def //these are def files that

custom_AI_head_and_skin2.def //i have ripped from

custom_AI_inc_props.def //various missions

custom_npc_model_inherit_custom_ai.def //that might prove useful

tdm_ai_custom_ai.def //in the future

tdm_lod_custom_level_of_detail_for_model.def //for specific functions.



/guis

custom_readable_slab.gui //guis for readables

mainmenu_briefing.gui //briefing screen

mainmenu_custom_defs.gui //shop / [item] persistence over campaign / advanced briefing & debrief, eg, start points / replacement music[voiceover] / video.



/assets

briefingX.tga //briefing background

generic_loading_bar1.tga //level load bar

levelname_loading.tga //loading background

next_arrow.tga //briefing arrows

previous_arrow.tga

stop_cross.tga

/game_maps

map_of_levelname.tga //in-game level map

map_of_levelname_icon.tga //icon for level map

/hud

custom_hud.tga //hud changes (hud.gui?)

/inventory_icons

custom_inv_item.tga //extra inventory icons

/splash

levelname_loading.tga //idk the image dimensions...

/map

map_of_levelname.gui //points from game to tga



/lights

custom_light_colour.tga //light shaders

custom_light_nocolour.tga

/maps

levelname.aas_rat //dmap results

levelname.aas32 //required to play game

levelname.cm

levelname.map

levelname.proc

levelname.script

/materials

custom_ai.mtr //material files for several

custom_light.mtr //purposes, definition to include

custom_map.mtr //new textures, light, game map,

custom_obj_lod.mtr //models, fixes, behaviour, etc...

frobhighlight_textures_example.mtr

ghost_collision_draw_fix.mtr

levelname (new textures.surfaces).mtr

levelname_light_textures.mtr

levelname_textures (modified textures).mtr

levelname_video.mtr

stolen_AI_base_WS1ghost.mtr

/models

/darkmod

/decorative //3DSMax / Blender / DR exported .ase files here

/category //requires definition elsewhere.

custom_model.ase

/loot

custom loot model.ase

/misc

/system

skybox_model.lwo

/weapons

custom_weapon(nonplayer).lwo

/levelname

custom_model.ase

/md5 //md5 mesh depot

/chars

/body

/npc

custom_npc_body.md5mesh

/heads

/npc

custom_npc_head.md5mesh

/particles

customparticle.prt //particle info - can be created

tdm_alter_existing_particle.prt //using in-game console

/script

custom_ai.script //script files here

levelname.script

tdm_ai_event.script

tdm_custom_scripts.script

/skins //skins link textures to .ase models

custom_ai.skin

custom_loot.skin

custom_obj_model.skin

tdm_replace_model_texture.skin

texture for model.skin

zombie_replacement.skin

/sound //sound shader replacement pointers

doorsounds.sndshd

effects.sndshd

footsteps.sndshd

music.sndshd

voices.sndshd

/effects //the sound files themselves

custom.effect.ogg

/footsteps

customstep.surface.ogg

/music

levelmusic.ogg

/voices

charvoice.ogg

conversation.ogg

/strings

/fm //each translation requires new

de.lang //repack. Game items must be named

eng.lang //#str or look-up-replaced using...

es.lang //i forgot the name...

pyc.lang

/textures

/darkmod //new textures go here.

custom texture.jpg //normals and other maps must

custom texture.tga //be packaged as .dds

/decals

/blood //alpha channel. 24 or 32bit only

custom_blood.jpg

custom_blood.tga

/dirt

custom_dirt.jpg

custom_dirt.tga

/levelname

custom_texture.tga

/levelname

customtexture.jpg

customtexture.tga

/video

levelname_briefing.roq //format for in-game video (encoder: ftp://ftp.idsoftware.com/idstuff/quake3/tools/roq.zip / decoder: https://github.com/id-Software/Quake-III-Arena/blob/master/code/client/cl_cin.c)

levelname_credits.roq

/xdata

briefing.xd //text only briefing - use gui for moving image, timed sequence, etc...

levelname.xd //readables data

 

 

 

So we're looking in /gui's for everything, it seems.

Maybe there is missing something like #define pos_briefing_ojectives_button/main_menu_button for next/back buttons in the mainmenu_briefing.gui?

or, perhaps:

 
// /mainmenu_briefing.gui

// not /briefing.xd

 
#define briefing_text_scale 1000000

#define briefing_text_fint "fonts/comic_sans"

#define pos objectives n,n,n,n

#define pos menu n,n,n,n


windowdef briefing

{

rect 0,0,640,480

visible 0
background    "blah/whatever/background_empty"
windowdef briefingstateinit
notime1
set "cmd" "log 'briefingstateinit called.'"';
set "briefing::visible" 1;
showcursor "0"

//to force ppl to have to listen and not click next until ontime "n=whatever length of voicetrack". which is showcursor "1" or some automatic advance. I don't want to listen to it every time I play - I've heard it once. So maybe this isn't a good idea...

set "gui::targetmusic" mm_music_briefing;
// idk if this needs pointing/define in custom.gui or would play default, perhaps overwrite default.
resettime "mainmenumusicselect" 0;

ontime 10

set "briefingtext1::visible" "0";

set "briefinganimation::visible" "0"

resettime "briefing animation" 0;

set "notime" 1;
}
}

oh, hang on - I just remembered something...

and transcribe include the a text file that won't be displayed..?

If I try to play techno.ogg and don't include anything to display between the mission unless there is an empty background, is really boring...

Might also be worth checking out the timed-flow briefing stuff in order to make sure the transition of image (trying a mission without briefing text, image [sequence] or video, it simply plays the TDM logo and jumps straight to objectives) is set, if you are doing the voice briefing over a series of images, or use the:

set "nextbuttonN::visible" "1/0" for each section, where the brieftext is not visible...

idk - I'm guessing cos idk and not testing since:


Personally, I'd make a video... because it's a lot easier and requires less effort to achieve the same thing and only requires that custom.gui

oh...

 

I know... Grayman mentioned it before how to do this - I'll find it...:

 

Posted 02 December 2016 - 11:17 PM

The official way to do it is to edit the following lines in "guis/mainmenu_custom_defs.gui":

 

// Uncomment this to override the default non-video briefing sound
00431: #undef MM_BRIEFING_SOUND_CMD
00432: #define MM_BRIEFING_SOUND_CMD "music steele_briefing;"
In sound/mymap.sndshd:
//=================================================
// briefing soundtrack
//=================================================
steele_briefing
{
volume -1
looping
sound/ambient/theme.ogg
}

 


yep. that's it - knew I'd read it before - you need to check the custom_defs.gui and change the name there too.

http://forums.thedarkmod.com/topic/18538-custom-briefing-music/?p=398104

This is probably the oversight that is causing it to not correctly play.

// I'll spoiler the whole answer because the first thing was correct (but I never trust first instinct...) and it's a load of old tosh cos i isn't knowing stuff..

Demagogue says, you can't play 2 at once so the briefing.ogg must be the "complete track" with background music, foley and voice or whatever.

I'd still go with a video... (link to encoder is in the spoilered directory structure for TDM missions).

Edited by teh_saccade
Link to comment
Share on other sites

I have a mirror that is using the texture "textures/common/mirror" on it however ingame I find that lights seem to pop in and out while moving around like this (keep in mind the light is always on ingame):

 

dbbbd4d2809df8cdaf59f91b59d0a7e7.gif

 

 

Does the reflected mirror light switch off because of the way TDM renders mirrors? (which I find can be buggy with certain things) or is this a bug with the how I setup the mirror?

Link to comment
Share on other sites

From the animated image it appears it has something to do with the visportal (the one rendered in green). Hard to tell though without taking a look at the map.

FM's: Builder Roads, Old Habits, Old Habits Rebuild

Mapping and Scripting: Apples and Peaches

Sculptris Models and Tutorials: Obsttortes Models

My wiki articles: Obstipedia

Texture Blending in DR: DR ASE Blend Exporter

Link to comment
Share on other sites

From the animated image it appears it has something to do with the visportal (the one rendered in green). Hard to tell though without taking a look at the map.

 

It's all in the same room through, the player the mirror and the light are in the same visportal section.

Link to comment
Share on other sites

The error occours when the vp is not in the players fov anymore, hence my assumption. But as said, hard to tell exactly without taking a look.

  • Like 1

FM's: Builder Roads, Old Habits, Old Habits Rebuild

Mapping and Scripting: Apples and Peaches

Sculptris Models and Tutorials: Obsttortes Models

My wiki articles: Obstipedia

Texture Blending in DR: DR ASE Blend Exporter

Link to comment
Share on other sites

I have three questions regarding material definitions. Examples are harder to find in TDM as these effects are less common with steampunk assets, and I don't have a copy of Doom 3 to look up any examples, whereas Google is being useless as usual and giving me results about everything other than what I ask it to.

  1. What's the material parameter to specify a glow texture? This is black & white texture overlayed on top of the normal diffuse texture, which shines at full intensity and is not affected by lighting. Commonly used for lamps to make sure the emitting surface glows brightly at all times.
  2. How do you setup a masked reflection cubemap? I know about the "cameraCubeMap" and "texgen reflect", but I don't know how to mask the cube reflection using a texture. The mask texture is similar to the specular texture (mytexture_s.tga) in that it's a grayscale image representing the intensity of the reflection effect.
  3. How do you colorize an overlay texture? This once again includes a grayscale image which I wish to overlap on top of the normal one, but which acts as paint and the color itself is specified in the definition. I want this for both a normal texture (colorized clothing) as well as a glow texture (colorized light source, my question in #1).
Link to comment
Share on other sites

1. If you want an image rendered independent from lighting you use additive blending

{
    blend add                            // blend mode
    map your_image_file_here             // image to get rendered
    rgb any_value_between_zero_and_one   // adjust brightness
}
or
{
    blend add                            // blend mode
    map your_image_file_here             // image to get rendered
    red any_value_between_zero_and_one   // adjust red channel
    green any_value_between_zero_and_one // adjust green channel
    blue any_value_between_zero_and_one  // adjust blue channel
}
or
{
    blend add                            // blend mode
    map your_image_file_here             // image to get rendered
    colored                              // specify color via _color spawnarg on entity
                                         // using this material
}

3. See above code. If you are using the material on entities (everything except worldspawn) colored is the way to go.

  • Like 1

FM's: Builder Roads, Old Habits, Old Habits Rebuild

Mapping and Scripting: Apples and Peaches

Sculptris Models and Tutorials: Obsttortes Models

My wiki articles: Obstipedia

Texture Blending in DR: DR ASE Blend Exporter

Link to comment
Share on other sites

1. If you want an image rendered independent from lighting you use additive blending

{
    blend add                            // blend mode
    map your_image_file_here             // image to get rendered
    rgb any_value_between_zero_and_one   // adjust brightness
}
or
{
    blend add                            // blend mode
    map your_image_file_here             // image to get rendered
    red any_value_between_zero_and_one   // adjust red channel
    green any_value_between_zero_and_one // adjust green channel
    blue any_value_between_zero_and_one  // adjust blue channel
}
or
{
    blend add                            // blend mode
    map your_image_file_here             // image to get rendered
    colored                              // specify color via _color spawnarg on entity
                                         // using this material
}

3. See above code. If you are using the material on entities (everything except worldspawn) colored is the way to go.

 

Awesome, thank you! So if an image has the "colored" flag in the material definition, it will use any color specified on the entity itself through the _color spawn argument? I didn't think such a flexible system existed... this is even more awesome, it should allow characters to be even more customizable :laugh:

 

One remaining question then is how to use this for a normal paint texture: I understand that "blend add" is for glow, but what do I use to overlay a colored graymap that is still affected by lighting? Also still need help figuring out how to restrict the intensity of a cubemap reflection to another texture, which I assume works by defining it in a similar way but I need to know how to define a mask intensity image.

Link to comment
Share on other sites

 


So if an image has the "colored" flag in the material definition, it will use any color specified on the entity itself through the _color spawn argument?

Yes.

 


I understand that "blend add" is for glow, but what do I use to overlay a colored graymap that is still affected by lighting? Also still need help figuring out how to restrict the intensity of a cubemap reflection to another texture, which I assume works by defining it in a similar way but I need to know how to define a mask intensity image.

I am not sure I understand what you are aiming for. Can you be a bit more precise?

FM's: Builder Roads, Old Habits, Old Habits Rebuild

Mapping and Scripting: Apples and Peaches

Sculptris Models and Tutorials: Obsttortes Models

My wiki articles: Obstipedia

Texture Blending in DR: DR ASE Blend Exporter

Link to comment
Share on other sites

I think he means how to mtr to make the skybox appear less reflective on an object, which would usually be a case of reducing the metallic and smoothness of the texture.

Which I'm guessing in TDM would mean re-making the .dds for the texture, bespoke, and not anything as simple as a line in a texture's materials.

Link to comment
Share on other sites

I am not sure I understand what you are aiming for. Can you be a bit more precise?

 

About paint: Just like the glow is overlayed over the normal texture at full brightness (using "blend add"), I also want a texture overlayed over the normal one at standard brightness (presumably "blend alphaover" or something).

 

About reflections: I want to define a cubemap reflection for my material. However I want the intensity of this texture to be controlled by a grayscale texture, similarly to how mytexture_s.tga controls how intense specularity is on mytexture.tga: White is fully reflective, black is no reflection at all. I assume I need to use the graymap as a mask for the cubemap definition, but I have no idea how to do that.

Link to comment
Share on other sites

This is an excerpt of a glass texture which may does what you are aiming for.

 

// this stage sets up the alpha mask (it doesnt render anything)
    // we use another glass texture for the alpha map, so that the reflection
    // shows more clearly and different from what the alpha map of our glass
    // says, that makes it more interesting 
    {
        maskcolor                
        map makealpha(textures/glass/glass1)
    }
    // now use the alpha mask to add some fake reflections
    {
        blend gl_dst_alpha, gl_one
        maskalpha
        cubeMap env/gen2
        // tone down the reflection a bit
        red     Parm0 * 0.2
        green   Parm1 * 0.2
        blue    Parm2 * 0.2
        texgen  reflect
    }

the red, green, blue part could be replaced with colored so you can adjust it via the _color spawnarg like in the example a few posts above.

  • Like 1

FM's: Builder Roads, Old Habits, Old Habits Rebuild

Mapping and Scripting: Apples and Peaches

Sculptris Models and Tutorials: Obsttortes Models

My wiki articles: Obstipedia

Texture Blending in DR: DR ASE Blend Exporter

Link to comment
Share on other sites

I've never messed with campaign stuff, so I have a question. Is it possible to set script flags in one mission that carry over to the next? Say, you steal an item in mission 1, a boolean gets ticked, and as a consequence in mission 2 there are three more guards or something like that. I'm interested in whether it's possible and if yes which script files you'd need to put those variables in. Or perhaps it wouldn't even need scripts, maybe something with spawnargs or objectives?

My FMs: The King of Diamonds (2016) | Visit my Mapbook thread sometimes! | Read my tutorial on Image-Based Lighting Workflows for TDM!

 

 

Link to comment
Share on other sites

FM's: Builder Roads, Old Habits, Old Habits Rebuild

Mapping and Scripting: Apples and Peaches

Sculptris Models and Tutorials: Obsttortes Models

My wiki articles: Obstipedia

Texture Blending in DR: DR ASE Blend Exporter

Link to comment
Share on other sites

This is an excerpt of a glass texture which may does what you are aiming for.

// this stage sets up the alpha mask (it doesnt render anything)
    // we use another glass texture for the alpha map, so that the reflection
    // shows more clearly and different from what the alpha map of our glass
    // says, that makes it more interesting 
    {
        maskcolor                
        map makealpha(textures/glass/glass1)
    }
    // now use the alpha mask to add some fake reflections
    {
        blend gl_dst_alpha, gl_one
        maskalpha
        cubeMap env/gen2
        // tone down the reflection a bit
        red     Parm0 * 0.2
        green   Parm1 * 0.2
        blue    Parm2 * 0.2
        texgen  reflect
    }

the red, green, blue part could be replaced with colored so you can adjust it via the _color spawnarg like in the example a few posts above.

 

Thanks again. Ironically I just found an example of the exact same thing before reading this, but I tried it out and indeed it works! The documentation I used, very helpful for anyone that might have similar questions: https://www.iddevnet.com/doom3/materials.php

Link to comment
Share on other sites

Here's a full material example, in case anyone else ever needs such a thing. It shows how to configure a character skin using: Normal diffuse / specular / normal maps, a customizable shirt color, a customizable glow color, and a masked reflective cubemap. In case anyone's wondering what I'm using this for, stick around, I'm sure you will like it ^_^

models/md5/chars/myset/mychar_body
{
	qer_editorimage	models/md5/chars/myset/mychar_body
	description "mychar, body"
	surftype15
	flesh
	noShadows

	diffusemap models/md5/chars/myset/mychar_body
	bumpmap models/md5/chars/myset/mychar_body_norm
	specularmap models/md5/chars/myset/mychar_body_gloss

	// shirt
	{
		blend diffusemap
		map models/md5/chars/myset/mychar_body_shirt
		colored // specify color via _color spawnarg on entity
	}

	// glow
	{
		blend add
		map models/md5/chars/myset/mychar_body_glow
		colored // specify color via _color spawnarg on entity
	}

	// reflection
	{
		maskcolor
		map makealpha(models/md5/chars/myset/mychar_body_reflect)
	}
	{
		blend gl_dst_alpha, gl_one
		maskalpha
		cubeMap env/gen2
		texgen reflect
	}
}
Link to comment
Share on other sites

Is there a way to fully disable idle animations of an AI? I have an AI in conversation with the player, and he really needs to not do idle animations. I tried

to disable them in the spawnarg list but it doesn't work, ie set idle animatons from the list of them to none.

 

So how do you do it?

I have an eclectic YouTube channel making videos on a variety of games. Come and have look here:

https://www.youtube.com/c/NeonsStyleHD

 

Dark Mod Missions: Briarwood Manor - available here or in game

http://forums.thedarkmod.com/topic/18980-fan-mission-briarwood-manor-by-neonsstyle-first-mission-6082017-update-16/

 

 

Link to comment
Share on other sites

I think it would be great to have a comprehensive material reference page in the wiki, with code and pictures, since these questions repeat quite often. It's a huge task, but it would be great to have something like this: https://docs.unrealengine.com/udk/Three/MaterialExamples.html

Link to comment
Share on other sites

Is there a way to fully disable idle animations of an AI? I have an AI in conversation with the player, and he really needs to not do idle animations. I tried

to disable them in the spawnarg list but it doesn't work, ie set idle animatons from the list of them to none.

 

So how do you do it?

I thinks AI has spawnarg idle_anim_interval or something along those lines. If you set that to huge number (in seconds, a day to two) the AI will never play idle anims unless the player chooses to wait for them.

Clipper

-The mapper's best friend.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recent Status Updates

    • Ansome

      Turns out my 15th anniversary mission idea has already been done once or twice before! I've been beaten to the punch once again, but I suppose that's to be expected when there's over 170 FMs out there, eh? I'm not complaining though, I love learning new tricks and taking inspiration from past FMs. Best of luck on your own fan missions!
      · 4 replies
    • The Black Arrow

      I wanna play Doom 3, but fhDoom has much better features than dhewm3, yet fhDoom is old, outdated and probably not supported. Damn!
      Makes me think that TDM engine for Doom 3 itself would actually be perfect.
      · 6 replies
    • Petike the Taffer

      Maybe a bit of advice ? In the FM series I'm preparing, the two main characters have the given names Toby and Agnes (it's the protagonist and deuteragonist, respectively), I've been toying with the idea of giving them family names as well, since many of the FM series have named protagonists who have surnames. Toby's from a family who were usually farriers, though he eventually wound up working as a cobbler (this serves as a daylight "front" for his night time thieving). Would it make sense if the man's popularly accepted family name was Farrier ? It's an existing, though less common English surname, and it directly refers to the profession practiced by his relatives. Your suggestions ?
      · 9 replies
    • nbohr1more

      Looks like the "Reverse April Fools" releases were too well hidden. Darkfate still hasn't acknowledge all the new releases. Did you play any of the new April Fools missions?
      · 5 replies
    • The Black Arrow

      Hope everyone has the blessing of undying motivation for "The Dark Mod 15th Anniversary Contest". Can't wait to see the many magnificent missions you all may have planned. Good luck, with an Ace!
      · 0 replies
×
×
  • Create New...