diff --git a/code/modules/vore/eating/belly_obj_ch.dm b/code/modules/vore/eating/belly_obj_ch.dm index f7f08eed06..9227c78e3e 100644 --- a/code/modules/vore/eating/belly_obj_ch.dm +++ b/code/modules/vore/eating/belly_obj_ch.dm @@ -135,6 +135,7 @@ var/entrance_logs = TRUE // Belly-specific entry message toggle. var/noise_freq = 42500 // Tasty sound prefs. var/item_digest_logs = FALSE // Chat messages for digested items. + var/storing_nutrition = FALSE // Storing gained nutrition as paste instead of absorbing it. /obj/belly/proc/GetFullnessFromBelly() if(!affects_vore_sprites) @@ -232,7 +233,7 @@ for(var/reagent in generated_reagents) reagents.add_reagent(reagent, generated_reagents[reagent] * digest_nutri_gain / gen_cost) else - owner.adjust_nutrition(digest_nutri_gain * owner.get_digestion_efficiency_modifier()) + owner_adjust_nutrition(digest_nutri_gain * owner.get_digestion_efficiency_modifier()) digest_nutri_gain = 0 /obj/belly/proc/GenerateBellyReagents_digested() @@ -579,3 +580,35 @@ return TRUE new /obj/item/debris_pack/digested(src, modified_mats) return TRUE + +/obj/belly/proc/owner_adjust_nutrition(var/amount = 0) + if(storing_nutrition && amount > 0) + for(var/obj/item/trash/rawnutrition/R in contents) + if(istype(R)) + R.stored_nutrition += amount + return + var/obj/item/trash/rawnutrition/NR = new /obj/item/trash/rawnutrition(src) + NR.stored_nutrition += amount + return + else + owner.adjust_nutrition(amount) + +/obj/item/trash/rawnutrition + name = "raw nutrition" + desc = "A nutritious pile of converted mass ready for consumption." + icon = 'icons/obj/recycling.dmi' + icon_state = "matdust" + color = "#664330" + w_class = ITEMSIZE_SMALL + var/stored_nutrition = 0 + +/obj/item/trash/rawnutrition/afterattack(atom/target, mob/living/user, proximity) + if(!proximity) + return + if(isliving(target)) + var/mob/living/L = target + L.nutrition += stored_nutrition + stored_nutrition = 0 + qdel(src) + return + .=..() \ No newline at end of file diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm index 3193987b88..74fc9bac4c 100644 --- a/code/modules/vore/eating/belly_obj_vr.dm +++ b/code/modules/vore/eating/belly_obj_vr.dm @@ -340,6 +340,7 @@ "speedy_mob_processing", "egg_name", "recycling", + "storing_nutrition", "is_feedable", "entrance_logs", "noise_freq", @@ -1468,7 +1469,7 @@ if(digested == FALSE) //CHOMPEdit items_preserved |= item else - owner.adjust_nutrition((nutrition_percent / 100) * 5 * digested) + owner_adjust_nutrition((nutrition_percent / 100) * 5 * digested) //CHOMPEdit // if(isrobot(owner)) //CHOMPEdit: Borgos can now use nutrition too. // var/mob/living/silicon/robot/R = owner // R.cell.charge += ((nutrition_percent / 100) * 50 * digested) @@ -2000,6 +2001,7 @@ dupe.sound_volume = sound_volume dupe.egg_name = egg_name dupe.recycling = recycling + dupe.storing_nutrition = storing_nutrition dupe.is_feedable = is_feedable dupe.entrance_logs = entrance_logs dupe.noise_freq = noise_freq diff --git a/code/modules/vore/eating/bellymodes_datum_vr.dm b/code/modules/vore/eating/bellymodes_datum_vr.dm index 2e1bc7cb0a..b029afc67d 100644 --- a/code/modules/vore/eating/bellymodes_datum_vr.dm +++ b/code/modules/vore/eating/bellymodes_datum_vr.dm @@ -100,13 +100,13 @@ GLOBAL_LIST_INIT(digest_modes, list()) R.cell.charge += 25*damage_gain */ if(offset && damage_gain > 0) // If any different than default weight, multiply the % of offset. if(B.reagent_mode_flags & DM_FLAG_REAGENTSDIGEST && B.reagents.total_volume < B.reagents.maximum_volume) //digestion producing reagents - B.owner.adjust_nutrition(offset * (3 * damage_gain / difference) * L.get_digestion_nutrition_modifier() * B.owner.get_digestion_efficiency_modifier()) //Uncertain if balanced fairly, can adjust by multiplier for the cost of reagent, dont go below 1 or else it will result in more nutrition than normal - Jack + B.owner_adjust_nutrition(offset * (3 * damage_gain / difference) * L.get_digestion_nutrition_modifier() * B.owner.get_digestion_efficiency_modifier()) //Uncertain if balanced fairly, can adjust by multiplier for the cost of reagent, dont go below 1 or else it will result in more nutrition than normal - Jack B.digest_nutri_gain += offset * (1.5 * damage_gain / difference) * L.get_digestion_nutrition_modifier() * B.owner.get_digestion_efficiency_modifier() //for transfering nutrition value over to GenerateBellyReagents_digesting() B.GenerateBellyReagents_digesting() else - B.owner.adjust_nutrition(offset * (4.5 * damage_gain / difference) * L.get_digestion_nutrition_modifier() * B.owner.get_digestion_efficiency_modifier()) //4.5 nutrition points per health point. Normal same size 100+100 health prey with average weight would give 900 points if the digestion was instant. With all the size/weight offset taxes plus over time oxyloss+hunger taxes deducted with non-instant digestion, this should be enough to not leave the pred starved. + B.owner_adjust_nutrition(offset * (4.5 * damage_gain / difference) * L.get_digestion_nutrition_modifier() * B.owner.get_digestion_efficiency_modifier()) //4.5 nutrition points per health point. Normal same size 100+100 health prey with average weight would give 900 points if the digestion was instant. With all the size/weight offset taxes plus over time oxyloss+hunger taxes deducted with non-instant digestion, this should be enough to not leave the pred starved. else - B.owner.adjust_nutrition(offset * (4.5 * damage_gain / difference) * L.get_digestion_nutrition_modifier() * B.owner.get_digestion_efficiency_modifier()) //CHOMPEdit End + B.owner_adjust_nutrition(offset * (4.5 * damage_gain / difference) * L.get_digestion_nutrition_modifier() * B.owner.get_digestion_efficiency_modifier()) //CHOMPEdit End if(L.stat != oldstat) return list("to_update" = TRUE) diff --git a/code/modules/vore/eating/bellymodes_vr.dm b/code/modules/vore/eating/bellymodes_vr.dm index 046a5d81b2..02c2da0cd5 100644 --- a/code/modules/vore/eating/bellymodes_vr.dm +++ b/code/modules/vore/eating/bellymodes_vr.dm @@ -372,20 +372,20 @@ else R.cell.charge += (nutrition_percent / 100) * compensation * 25 * personal_nutrition_modifier*/ if(reagent_mode_flags & DM_FLAG_REAGENTSDIGEST && reagents.total_volume < reagents.maximum_volume) //CHOMP digestion producing reagents - owner.adjust_nutrition((nutrition_percent / 100) * compensation * 3 * personal_nutrition_modifier) + owner_adjust_nutrition((nutrition_percent / 100) * compensation * 3 * personal_nutrition_modifier) GenerateBellyReagents_digested() else - owner.adjust_nutrition((nutrition_percent / 100) * compensation * 4.5 * personal_nutrition_modifier * pred_digestion_efficiency) //CHOMPedit end + owner_adjust_nutrition((nutrition_percent / 100) * compensation * 4.5 * personal_nutrition_modifier * pred_digestion_efficiency) //CHOMPedit end /obj/belly/proc/steal_nutrition(mob/living/L) if(L.nutrition >= 100) var/oldnutrition = (L.nutrition * 0.05) L.nutrition = (L.nutrition * 0.95) if(reagent_mode_flags & DM_FLAG_REAGENTSDRAIN && reagents.total_volume < reagents.maximum_volume) //CHOMPedit: draining reagent production //Added to this proc now since it's used for draining - owner.adjust_nutrition(oldnutrition * 0.75) //keeping the price static, due to how much nutrition can flunctuate + owner_adjust_nutrition(oldnutrition * 0.75) //keeping the price static, due to how much nutrition can flunctuate GenerateBellyReagents_absorbing() //Dont need unique proc so far else - owner.adjust_nutrition(oldnutrition) //CHOMPedit end + owner_adjust_nutrition(oldnutrition) //CHOMPedit end /obj/belly/proc/updateVRPanels() for(var/mob/living/M in contents) diff --git a/code/modules/vore/eating/digest_act_vr.dm b/code/modules/vore/eating/digest_act_vr.dm index 3b10fe5e4c..82db4acc62 100644 --- a/code/modules/vore/eating/digest_act_vr.dm +++ b/code/modules/vore/eating/digest_act_vr.dm @@ -217,6 +217,18 @@ return FALSE . = ..() +/obj/item/trash/rawnutrition/digest_act(atom/movable/item_storage = null) //CHOMPAdd + if(isbelly(item_storage)) + var/obj/belly/B = item_storage + if(istype(B) && B.storing_nutrition) + return FALSE + else if(isliving(B.owner)) + B.owner.nutrition += stored_nutrition + stored_nutrition = 0 + qdel(src) + return w_class + . = ..() + ///////////// // Some more complicated stuff ///////////// diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index ec85af0781..105d8314da 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -219,6 +219,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", "egg_type" = selected.egg_type, "egg_name" = selected.egg_name, //CHOMPAdd "recycling" = selected.recycling, //CHOMPAdd + "storing_nutrition" = selected.storing_nutrition, //CHOMPAdd "entrance_logs" = selected.entrance_logs, //CHOMPAdd "nutrition_percent" = selected.nutrition_percent, "digest_brute" = selected.digest_brute, @@ -312,6 +313,7 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", selected_list["egg_type"] = selected.egg_type selected_list["egg_name"] = selected.egg_name //CHOMPAdd selected_list["recycling"] = selected.recycling //CHOMPAdd + selected_list["storing_nutrition"] = selected.storing_nutrition //CHOMPAdd selected_list["item_digest_logs"] = selected.item_digest_logs //CHOMPAdd selected_list["contaminates"] = selected.contaminates selected_list["contaminate_flavor"] = null @@ -936,6 +938,13 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", if(new_recycling == 1) new_belly.recycling = TRUE + if(isnum(belly_data["storing_nutrition"])) + var/new_storing_nutrition = belly_data["storing_nutrition"] + if(new_storing_nutrition == 0) + new_belly.storing_nutrition = FALSE + if(new_storing_nutrition == 1) + new_belly.storing_nutrition = TRUE + if(isnum(belly_data["entrance_logs"])) var/new_entrance_logs = belly_data["entrance_logs"] if(new_entrance_logs == 0) @@ -2348,6 +2357,9 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", . = TRUE if("b_recycling") host.vore_selected.recycling = !host.vore_selected.recycling + . = TRUE + if("b_storing_nutrition") + host.vore_selected.storing_nutrition = !host.vore_selected.storing_nutrition . = TRUE//CHOMPAdd End if("b_desc") var/new_desc = html_encode(tgui_input_text(usr,"Belly Description, '%pred' will be replaced with your name. '%prey' will be replaced with the prey's name. '%belly' will be replaced with your belly's name. ([BELLIES_DESC_MAX] char limit):","New Description",host.vore_selected.desc, multiline = TRUE, prevent_enter = TRUE)) diff --git a/modular_chomp/code/modules/vore/eating/exportpanel_ch.dm b/modular_chomp/code/modules/vore/eating/exportpanel_ch.dm index c7aa226f42..f5cef5bd15 100644 --- a/modular_chomp/code/modules/vore/eating/exportpanel_ch.dm +++ b/modular_chomp/code/modules/vore/eating/exportpanel_ch.dm @@ -177,6 +177,7 @@ belly_data["egg_name"] = B.egg_name belly_data["selective_preference"] = B.selective_preference belly_data["recycling"] = B.recycling + belly_data["storing_nutrition"] = B.storing_nutrition belly_data["entrance_logs"] = B.entrance_logs belly_data["item_digest_logs"] = B.item_digest_logs diff --git a/tgui/packages/tgui_ch/interfaces/VorePanel.js b/tgui/packages/tgui_ch/interfaces/VorePanel.js index 01e60e7d86..aad6d3d4ed 100644 --- a/tgui/packages/tgui_ch/interfaces/VorePanel.js +++ b/tgui/packages/tgui_ch/interfaces/VorePanel.js @@ -49,7 +49,7 @@ const digestModeToPreyMode = { * show_liq, liq_interacts, liq_reagent_gen, liq_reagent_type, liq_reagent_name, * liq_reagent_transfer_verb, liq_reagent_nutri_rate, liq_reagent_capacity, liq_sloshing, liq_reagent_addons, * show_liq_fullness, liq_messages, liq_msg_toggle1, liq_msg_toggle2, liq_msg_toggle3, liq_msg_toggle4, - * liq_msg_toggle5, liq_msg1, liq_msg2, liq_msg3, liq_msg4, liq_msg5, sound_volume, egg_name, recycling, entrance_logs, item_digest_logs, noise_freq, + * liq_msg_toggle5, liq_msg1, liq_msg2, liq_msg3, liq_msg4, liq_msg5, sound_volume, egg_name, recycling, storing_nutrition, entrance_logs, item_digest_logs, noise_freq, * custom_reagentcolor, custom_reagentalpha, liquid_overlay, max_liquid_level, mush_overlay, reagent_touches, mush_color, mush_alpha, max_mush, min_mush, item_mush_val, * metabolism_overlay, metabolism_mush_ratio, max_ingested, custom_ingested_color, custom_ingested_alpha * @@ -689,6 +689,7 @@ const VoreSelectedBellyOptions = (props, context) => { egg_type, egg_name, recycling, + storing_nutrition, entrance_logs, item_digest_logs, selective_preference, @@ -894,6 +895,16 @@ const VoreSelectedBellyOptions = (props, context) => { content={recycling ? 'Enabled' : 'Disabled'} /> + + ",rt+='
',rt+='
',rt+="Addons:
"+function(e){var t=[];return null==e||e.forEach((function(e){t.push(''+e+"")})),0===t.length&&t.push("No Addons Set"),t}(p)+"

",rt+="== Descriptions ==
",rt+="Vore Verb:
"+a+"

",rt+="Release Verb:
"+i+"

",rt+='Description:
"'+o+'"

',rt+='Absorbed Description:
"'+r+'"

',rt+="
",rt+="== Messages ==
",rt+='
',rt+='
",rt+='
',rt+='
',rt+='
',null==M||M.forEach((function(e){rt+=e+"
"})),rt+="
",rt+='
',null==E||E.forEach((function(e){rt+=e+"
"})),rt+="
",rt+='
',null==O||O.forEach((function(e){rt+=e+"
"})),rt+="
",rt+='
',null==P||P.forEach((function(e){rt+=e+"
"})),rt+="
",rt+='
',null==F||F.forEach((function(e){rt+=e+"
"})),rt+="
",rt+='
',null==D||D.forEach((function(e){rt+=e+"
"})),rt+="
",rt+='
',null==R||R.forEach((function(e){rt+=e+"
"})),rt+="
",rt+='
',null==j||j.forEach((function(e){rt+=e+"
"})),rt+="
",rt+='
',null==W||W.forEach((function(e){rt+=e+"
"})),rt+="
",rt+='
',null==z||z.forEach((function(e){rt+=e+"
"})),rt+="
",rt+='
',null==U||U.forEach((function(e){rt+=e+"
"})),rt+="
",rt+='
',null==H||H.forEach((function(e){rt+=e+"
"})),rt+="
",rt+="
",rt+="
",rt+="
",rt+="
= Idle Messages =

",rt+="

Idle Messages (Hold):

",null==G||G.forEach((function(e){rt+=e+"
"})),rt+="


",rt+="
Idle Messages (Hold Absorbed):

",null==K||K.forEach((function(e){rt+=e+"
"})),rt+="


",rt+="
Idle Messages (Digest):

",null==q||q.forEach((function(e){rt+=e+"
"})),rt+="


",rt+="
Idle Messages (Absorb):

",null==Y||Y.forEach((function(e){rt+=e+"
"})),rt+="


",rt+="
Idle Messages (Unabsorb):

",null==te||te.forEach((function(e){rt+=e+"
"})),rt+="


",rt+="
Idle Messages (Drain):

",null==X||X.forEach((function(e){rt+=e+"
"})),rt+="


",rt+="
Idle Messages (Heal):

",null==$||$.forEach((function(e){rt+=e+"
"})),rt+="


",rt+="
Idle Messages (Size Steal):

",null==Q||Q.forEach((function(e){rt+=e+"
"})),rt+="


",rt+="
Idle Messages (Shrink):

",null==Z||Z.forEach((function(e){rt+=e+"
"})),rt+="


",rt+="
Idle Messages (Grow):

",null==ee||ee.forEach((function(e){rt+=e+"
"})),rt+="


",rt+="
Idle Messages (Encase In Egg):

",null==J||J.forEach((function(e){rt+=e+"
"})),rt+="


",rt+="


",rt+="
",rt+='
',rt+='
',rt+='

',rt+='

",rt+='
',rt+='
',rt+='
    ',rt+='
  • Can Taste: '+(N?'Yes':'No')+"
  • ",rt+='
  • Feedable: '+(g?'Yes':'No')+"
  • ",rt+='
  • Contaminates: '+(V?'Yes':'No')+"
  • ",rt+='
  • Contamination Flavor: '+v+"
  • ",rt+='
  • Contamination Color: '+_+"
  • ",rt+='
  • Nutritional Gain: '+y+"%
  • ",rt+='
  • Required Examine Size: '+100*k+"%
  • ",rt+='
  • Display Absorbed Examines: '+(x?'True':'False')+"
  • ",rt+='
  • Save Digest Mode: '+(w?'True':'False')+"
  • ",rt+='
  • Idle Emotes: '+(L?'Active':'Inactive')+"
  • ",rt+='
  • Idle Emote Delay: '+B+" seconds
  • ",rt+='
  • Shrink/Grow Size: '+100*S+"%
  • ",rt+='
  • Vore Spawn Blacklist: '+(I?'Yes':'No')+"
  • ",rt+='
  • Egg Type: '+T+"
  • ",rt+='
  • Selective Mode Preference: '+A+"
  • ",rt+="
",rt+="
",rt+='
',rt+='

',rt+='

",rt+='
',rt+='
',rt+='
    ',rt+='
  • Fleshy Belly: '+(ne?'Yes':'No')+"
  • ",rt+='
  • Internal Loop: '+(oe?'Yes':'No')+"
  • ",rt+='
  • Use Fancy Sounds: '+(re?'Yes':'No')+"
  • ",rt+='
  • Vore Sound: '+ae+"
  • ",rt+='
  • Release Sound: '+ie+"
  • ",rt+="
",rt+="
",rt+='
',rt+='

',rt+='

",rt+='
",rt+='
',rt+="Vore Sprites",rt+='
    ',rt+='
  • Affect Vore Sprites: '+(ce?'Yes':'No')+"
  • ",rt+='
  • Count Absorbed prey for vore sprites: '+(le?'Yes':'No')+"
  • ",rt+='
  • Animation when prey resist: '+(de?'Yes':'No')+"
  • ",rt+='
  • Vore Sprite Size Factor: '+se+"
  • ",rt+='
  • Belly Sprite to affect: '+ue+"
  • ",rt+="
",rt+="Belly Fullscreens Preview and Coloring",rt+='
    ',rt+='
  • Color: '+me+"",rt+="
",rt+="Vore FX",rt+='
    ',rt+='
  • Disable Prey HUD: '+(pe?'Yes':'No')+"
  • ",rt+="
",rt+="
",rt+='
',rt+='

',rt+='

",rt+='
',rt+='
',rt+="Belly Interactions ("+(he?'Enabled':'Disabled')+")",rt+='
    ',rt+='
  • Escape Chance: '+fe+"%
  • ",rt+='
  • Escape Time: '+Ce/10+"s
  • ",rt+='
  • Transfer Chance: '+be+"%
  • ",rt+='
  • Transfer Location: '+Ne+"
  • ",rt+='
  • Secondary Transfer Chance: '+ge+"%
  • ",rt+='
  • Secondary Transfer Location: '+Ve+"
  • ",rt+='
  • Absorb Chance: '+ve+"%
  • ",rt+='
  • Digest Chance: '+_e+"%
  • ",rt+="
",rt+="
",rt+="Auto-Transfer Options ("+(Be?'Enabled':'Disabled')+")",rt+='
    ',rt+='
  • Auto-Transfer Time: '+ye/10+"s
  • ",rt+='
  • Auto-Transfer Min Amount: '+Se+"
  • ",rt+='
  • Auto-Transfer Max Amount: '+Ie+"
  • ",rt+='
  • Auto-Transfer Primary Chance: '+ke+"%
  • ",rt+='
  • Auto-Transfer Primary Location: '+xe+"
  • ",rt+='
  • Auto-Transfer Primary Whitelist (Mobs): '+m(Te,!0)+"
  • ",rt+='
  • Auto-Transfer Primary Whitelist (Items): '+m(Oe,!0)+"
  • ",rt+='
  • Auto-Transfer Primary Blacklist (Mobs): '+m(Ae,!1)+"
  • ",rt+='
  • Auto-Transfer Primary Blacklist (Items): '+m(Pe,!1)+"
  • ",rt+='
  • Auto-Transfer Secondary Chance: '+we+"%
  • ",rt+='
  • Auto-Transfer Secondary Location: '+Le+"
  • ",rt+='
  • Auto-Transfer Secondary Whitelist (Mobs): '+m(Me,!0)+"
  • ",rt+='
  • Auto-Transfer Secondary Whitelist (Items): '+m(Fe,!0)+"
  • ",rt+='
  • Auto-Transfer Secondary Blacklist (Mobs): '+m(Ee,!1)+"
  • ",rt+='
  • Auto-Transfer Secondary Blacklist (Items): '+m(De,!1)+"
  • ",rt+="
",rt+="
",rt+='
',rt+='

',rt+='

",rt+='
',rt+='
',rt+='
    ',rt+='
  • Generate Liquids: '+(je?'On':'Off')+"
  • ",rt+='
  • Liquid Type: '+We+"
  • ",rt+='
  • Liquid Name: '+ze+"
  • ",rt+='
  • Transfer Verb: '+Ue+"
  • ",rt+='
  • Generation Time: '+He+"
  • ",rt+='
  • Liquid Capacity: '+qe+"
  • ",rt+='
  • Slosh Sounds: '+(Ge?'On':'Off')+"
  • ",rt+='
  • Liquid Addons: '+function(e){var t=[];return null==e||e.forEach((function(e){t.push(''+e+"")})),0===t.length&&t.push("No Addons Set"),t}(Ke)+"
  • ",rt+="
",rt+="
",rt+='
',rt+='

',rt+='

",rt+='
',rt+='
',rt+='
',rt+='
",rt+='
',rt+='
',rt+='
',null==Ze||Ze.forEach((function(e){rt+=e+"
"})),rt+="
",rt+='
',null==et||et.forEach((function(e){rt+=e+"
"})),rt+="
",rt+='
',null==tt||tt.forEach((function(e){rt+=e+"
"})),rt+="
",rt+='
',null==nt||nt.forEach((function(e){rt+=e+"
"})),rt+="
",rt+='
',null==ot||ot.forEach((function(e){rt+=e+"
"})),rt+="
",rt+="
",rt+="
",rt+="
",rt+="
",rt+="
"},h=function(e,t){var n,o=(0,r.useBackend)(e),a=(o.act,o.data),i=a.db_version,c=a.db_repo,l=a.mob_name,d=a.bellies,s=function(){var e=new Date,t=String(e.getHours());t.length<2&&(t="0"+t);var n=String(e.getMinutes());n.length<2&&(n="0"+n);var o=String(e.getDate());o.length<2&&(o="0"+o);var r=String(e.getMonth()+1);return r.length<2&&(r="0"+r)," "+String(e.getFullYear())+"-"+r+"-"+o+" ("+t+" "+n+")"}(),u=l+s+t;if(".html"===t){n=new Blob([''+d.length+" Exported Bellies (DB_VER: "+c+"-"+i+')

Bellies of '+l+'

Generated on: '+s+'

'],{type:"text/html;charset=utf8"}),d.forEach((function(e,t){n=new Blob([n,p(e,t)],{type:"text/html;charset=utf8"})})),n=new Blob([n,"
",'