diff --git a/code/modules/reagents/Chemistry-Colours.dm b/code/modules/reagents/Chemistry-Colours.dm index 41fdc1fa622..a59147e85f6 100644 --- a/code/modules/reagents/Chemistry-Colours.dm +++ b/code/modules/reagents/Chemistry-Colours.dm @@ -1,24 +1,40 @@ /proc/mix_color_from_reagents(var/list/reagent_list) - if(!reagent_list || !reagent_list.len) return 0 + if(!reagent_list || !length(reagent_list)) + return 0 - var/list/rgbcolor = list(0,0,0,0) - var/finalcolor = 0 - for(var/datum/reagent/re in reagent_list) // natural color mixing bullshit/algorithm - if(!finalcolor) - rgbcolor = ReadRGB(re.color) - finalcolor = re.color - else - var/newcolor[4] - var/prergbcolor[4] - prergbcolor = rgbcolor - newcolor = ReadRGB(re.color) + var/contents = length(reagent_list) + var/list/weight = new /list(contents) + var/list/redcolor = new /list(contents) + var/list/greencolor = new /list(contents) + var/list/bluecolor = new /list(contents) + var/i - rgbcolor[1] = (prergbcolor[1]+newcolor[1])/2 - rgbcolor[2] = (prergbcolor[2]+newcolor[2])/2 - rgbcolor[3] = (prergbcolor[3]+newcolor[3])/2 - rgbcolor[4] = (prergbcolor[4]+newcolor[4])/2 + //fill the list of weights + for(i=1; i<=contents; i++) + var/datum/reagent/re = reagent_list[i] + var/reagentweight = re.volume + if(istype(re, /datum/reagent/paint)) + reagentweight *= 20 //Paint colours a mixture twenty times as much + weight[i] = reagentweight - finalcolor = rgb(rgbcolor[1], rgbcolor[2], rgbcolor[3], rgbcolor[4]) + + //fill the lists of colours + for(i=1; i<=contents; i++) + var/datum/reagent/re = reagent_list[i] + var/hue = re.color + if(length(hue) != 7) + return 0 + redcolor[i]=hex2num(copytext(hue,2,4)) + greencolor[i]=hex2num(copytext(hue,4,6)) + bluecolor[i]=hex2num(copytext(hue,6,8)) + + //mix all the colors + var/red = mixOneColor(weight,redcolor) + var/green = mixOneColor(weight,greencolor) + var/blue = mixOneColor(weight,bluecolor) + + //assemble all the pieces + var/finalcolor = rgb(red, green, blue) return finalcolor /proc/mixOneColor(var/list/weight, var/list/color) diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm index 918e10d7c50..8ce9b636b01 100644 --- a/code/modules/reagents/reagent_containers/borghydro.dm +++ b/code/modules/reagents/reagent_containers/borghydro.dm @@ -1,3 +1,4 @@ + /obj/item/weapon/reagent_containers/borghypo name = "Cyborg Hypospray" desc = "An advanced chemical synthesizer and injection system, designed for heavy-duty medical equipment."