Jump to content

Need some help with Overlays


Recommended Posts

7 hours ago, DocClox said:

Now this is unexpected:

 

image.png

 

See the way the tat has overwritten the clothing? Is that what you meant with the priority argument?

I think so, (because why would priority exist?)

the problem is that most overlays are black (so you can't tell)

Link to comment
3 hours ago, Invictusblade said:

so I am working on a new version of condoms using overlays but there is a slight issue(depending on your point of view)

 

they are glow-in-the-dark

(it does remind me of a scene in John Ritter's Skin Deep where there is a scene of complete darkness except for two guys wearing glowing condoms fighting over a woman (they were arrested for cock fighting))

 

so keep the glow-in-the-dark condom? (made with Radium)

or continue to try for a more matte colour(no Glow, might not be possible)

20200412201605_1.jpg

20200412201641_1.jpg

dp you have any ideas how to fix this (if it needs fixing)

Link to comment
8 hours ago, DocClox said:

Interesting stuff.

I had bookmarked, but can't find, a discussion about bgem v bgsm and the effects fo4 made to color spec and clear just by mat files having a different extension. I hate losing obscure tidbits of info like this. If you know of the discussion please point me to it.

Link to comment

Well, I got two colors in. This is using @Invictusblade's suggestion of applying a pink tat first, then black, then white. The white done doesn't seem to want to do anything, but there are probably settings that I've not tried yet.

 

@murf: I also want to try the suggestion from the thread you linked about using one texture with different BGEM settings to do the different colors. Currently I'm using three textures to do one tattoo

 

image.png

 

Not sure why the pink is so red, though.

 

[edit]

 

Never mind. Alpha Blend Mode was set to multiplicative rather than standard.

 

 

image.png

Link to comment

You two are doing great things here. I've wanted scripted face tints and overlays forever. Thanks for doing this publicly where folks can learn from it.

 

I think the secret to using white overlays is in the cum textures used for AAF sex scenes. They so white they look bleached white.

Link to comment
12 hours ago, murf said:

You two are doing great things here. I've wanted scripted face tints and overlays forever

 

You're very welcome. Here's the code for my current tank top script

 

Spoiler

Scriptname rrs:tattoo extends ObjectReference
;
; By DocClox. Permission granted to use this script in other mods.
;
  
import Overlays

string property tat_id auto
string property tat2_id auto
string property tat3_id auto
string[] property slave_names = None auto
string[] property slave_brands = None auto

;
; save a little time adding name/brand pairs
;
function add_brand(string name, string brand)
	slave_names.add(name)
	slave_brands.add("rrs_" + brand)
endfunction

;
; set up the name and brand arrays
;
; why can't papyrus have array literals?
;
function setup()
;
;	we should only be called if the slave_names and slave_brands
;	arrays are None. But it never hurts to double check
;
	if slave_names != None && slave_brands != None
		return
	endif
;
;	go to the set up state so we don't get called from multuple concurrent threads
;
	gotostate("setting_up")
;
;	two empty arrays for the storaage
;
	slave_names = new string[0]
	slave_brands = new string[0]
;
;	now add the names. One argument is the actor name as in the CK
;	the other, the overlay id corresponding
;
	add_brand("Ack-Ack", "ack_ack")
	add_brand("Bedlam", "bedlam")
	add_brand("Big Maude", "big_maude")
	add_brand("Bridget", "bridget")
	add_brand("Cait", "cait")
	add_brand("Chancer", "chancer")
	add_brand("Cinder", "cinder")
	add_brand("Clutch", "clutch")
	add_brand("Curie", "curie")
	add_brand("Darla", "darla")
	add_brand("Dixie", "dixie")
	add_brand("Gunner Commander", "gunner_commander")
	add_brand("Ivey", "ivey")
	add_brand("Kaylor", "kaylor")
	add_brand("Lizzie Wyeth", "lizzie")
	add_brand("Mags Black", "mags")
	add_brand("Nisha", "nisha")
	add_brand("Piper", "piper")
	add_brand("Red Tourette", "red_tourette")
	add_brand("Sparta", "sparta")
	add_brand("Tammy Mac", "tammy_mac")
	add_brand("Tessa", "tessa")
	add_brand("Whiplash", "whiplash")
	add_brand("Walter", "walter")
;
;	come out of the state. There's an argument for staying in state
;	but I'll re-enable it so that if we get the props reset for some reason
;	we can always re-initialize
;
	gotostate("")
endfunction

;
; same function in the setting_up state - ignore the action
;
state setting_up
	function setup()
		; do nothing - another thread is already doing it
	endfunction
endstate

;
; this uses a Just Business script attached to Actor to get the "real" name of a slave
; need to do this since the display name is "Slave" by this point.
;
; if you're using something else to get your slaves, you'll need to make your own arrangements
;
string function get_name(actor a)
	; JB = Just Business - I think this will eval null if JB not installed
	JB:JBSlaveNPCScript slave = a as JB:JBSlaveNPCScript
;
;	Just Business renames slaves to "slave", but stores the old name.
;	We want to tat-match against the actors original name, so we need the stored value
;
	if slave != None && slave.pname != ""
		return slave.pname
	endif
;
;	if that didn't work, there's a chance this isn't a slave 
;	(like maybe someome sent Piper to the stocks as a settler, maybe)
;
;	so return the display name, and maybe we can match on that
;
	return a.GetDisplayName()
endfunction

string function get_brand(actor a)
	string name = get_name(a)
	if name == ""
		return ""	; probably not a slave or we can't find a name for her
	endif
;
;	is the name in our lists?
;
	int idx = slave_names.Find(name)
	if idx < 0
		return ""	; don't have a band for her - nothing to do
	endif
;
;	return the id of the brand for this actor
;
	return slave_brands[idx]
endfunction

;
; adds a tat. does nothing if the id is the empty string
; this means I can have single layer designs and three layer designs 
; at the same time. If an id isn't set, it doesn't get applied
;
function add_tat(actor a, string id)
	if id == ""
		return
	endif
	debug.notification("applying tattoo '" + id + "'")
	AddEntry(a, true, 1, id)
endfunction

Event OnEquipped(Actor a)
	if slave_names == None
		setup()
	endif
;
;	add up to three layers of tats, if defined
;
	add_tat(a, tat_id)
	add_tat(a, tat2_id)
	add_tat(a, tat3_id)
;
;	add a brand, if defined
;
	string brand = get_brand(a)
	add_tat(a, brand)
;
;	update so the tats appear on the actor
;
	Update(a)
EndEvent

;
; check an entry to see if it matches any of our tats
; and remove it if so
;
; I'd include this in the loop, but
; papyrus doesn't have a sodding continue statement either...
;
function check_ent(actor a, entry ent, string brand)
;
;	we only want to remove our own tats
;	and none of them will have empty ids
;	so if this exists, it's not ours and we won't mess with it
;
	if ent.template == ""
		return
	endif
;
;	if the current entry matches any of our tats, delete it
;
;	I'd check for emtpy string ids, but they're not going to match anyway
;
	if ent.template == tat_id
		overlays.remove(a, true, ent.uid)
	endif
	if ent.template == tat2_id
		overlays.remove(a, true, ent.uid)
	endif
	if ent.template == tat3_id
		overlays.remove(a, true, ent.uid)
	endif
;
;	there's an argument for leaving the brand, once applied.
;	but then I ought to check for it when applying
;	and that seems like too much work right now.
;
;	I'll think about it.
;
	if ent.template == brand
		overlays.remove(a, true, ent.uid)
	endif
endfunction

Event OnUnequipped(Actor a)
	Entry[] ents
;
;	not sure why - following InvictusBlade's code here
;
	Utility.Wait(0.1)
;
;	get a list of all overlay entries currently applied to this actor
;
	ents = Overlays.GetAll(a, true)
;
;	get the name brand for this actor, if any
;
	string brand = get_brand(a)
;
;	loop trough the entry list and remove anything that matches any of ours
;
	int i = ents.length
	while i > 0
		i -= 1
		entry ent = ents[i]

		check_ent(a, ent, brand)

	endwhile
;
;	and again, update
;
	Overlays.Update(a)
EndEvent

 

 

That's using three property slots for tattoo ids, and they apply in order. So if you have single monochrome tat, just fill out one slot and it will work. And if you have three, they'll apply in order.

 

image.png   image.png

 

image.png   image.png

 

The script works for any equipable item, so feel to use it if you want. It also has a list of boss name tat_id mappings so it can automatically brand named raiders like Ack-Ack and Clutch with their names on the other cheek. You can chop that out or repurpose it if you want. I'd have made it am array properties, but when I tried that, the values I set in zEdit didn't show up in-game for some reason. I might give that another shot in a bit.

 

Meanwhile, here's our latest acquisition, demonstrating the name brand feature.

 

image.png

12 hours ago, murf said:

Thanks for doing this publicly where folks can learn from it.

 

No problem. I prefer working like this, to be honest.

 

Link to comment
On 4/13/2020 at 10:19 AM, Invictusblade said:

glowing overlays uses BGEM

 

Can confirm :)

 

ScreenShot513.png

 

 

 

That should make it easier to find 'em in the dark. I can say it's all because of quantum nano.

 

[edit]

 

I wonder if that means I'd get better definition from BGSM files. The colors tend to overwhelm the text somewhat - that could be fizzing out from the glow effect, with me not noticing because I always make sure my screenies are well lit. Well. apart from this one, obviously...

Link to comment

Something that's kicking my ass at the moment: sometimes I can have a design look like this:

 

image.png

 

And other times it looks like this:

 

image.png

 

So far as I'm aware, that's without me changing anything about it.

 

Anyone have any ideas why this might happen? I assume I'm doing something wrong, rather than the game engine just feeling cranky.

Link to comment

Think I can answer by own question here: mipmaps! I've been getting some distance to stop NPCs photobombing me, and then zooming in with tfc 1. So I think the texture I'm capturing is one intended for viewing from that distance away. If I go up close I get the results I'd expect.

 

Pics here.

 

 

Link to comment

Here's interesting. Bear in mind that all my tats here are three colors,right? And the font and back tats are all the same texture?

 

So how do I get this on the ass?

 

image.png

 

And THIS on the mons:

 

image.png

 

I figure it's got to the the blending mode.

 

It occurs to me that if we got the blend right, we could probably do formal decomposition and draw any image we liked with RGB or maybe CYMK overlays...

 

[edit]

 

No, that doesn't make sense. It's the same texture and the same material, therefore the same blend mode.

 

It has to be a different shade in the texture from front to back.

 

[edit]

 

And yet ...

 

image.png

 

vs

 

image.png

 

It is the same shade, dammit!

 

[edit]

 

So maybe it's overlaying another color? Turns out not that either. Here's the mons texture with all three layers composited:

 

image.png

 

Here with the blue layer hidden:

 

image.png

 

As you can see, there's no overlap to speak of.

 

Similarly:

 

image.png

 

and

 

image.png

 

So there's nothing under the blue there.. The white does overprint it, but then that happens on the mons too with the "Punish Me?" line.

 

The only real difference I can think of is that the ass is straight out of Inkscape in the first instance, and the mons I put into the Gimp afterwards to get the fussy blue glow around the "Punish Me?" line. I can't see how that changes the color in game though.

 

Anyone have any ideas?

 

Link to comment
  • 1 month later...
On 4/13/2020 at 10:49 PM, DocClox said:

You're very welcome. Here's the code for my current tank top script

Thanks for the code.

 

Computer died twice in last month or so or I'd of spoke up sooner ?.

Link to comment
On 5/17/2020 at 12:26 AM, murf said:

Thanks for the code.

 

Computer died twice in last month or so or I'd of spoke up sooner ?.

 

You're welcome. There'll be more recent versions in the latest RRS download. Feel free to use anything that looks useful.

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more information, see our Privacy Policy & Terms of Use