• Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
  • Read Evilhog's interview with Gregory Alper, the original composer of the music for WarCraft: Orcs & Humans 🔗Click here to read the full interview.

Blood Splat

This bundle is marked as pending. It has not been reviewed by a staff member yet.
A pack of models based on standard blood splats left after a unit's death (both on ground and on water), taken directly from SplatData.slk.

It includes 60 variations of blood splats as event objects (SPL) – these have the EventObject prefix. To create blood splat, you need to play Death animation of the model. This means you can create and remove a special effect, and a default blood splat will appear in its place.

Additionally, pack contains 60 variations of the same blood splats but in the form of a plane – these have the Plane prefix. They feature Birth Stand Death animations and behave like regular models, allowing them to be used as decorations or controlled dynamically.

Wtf can't I upload all models at once? It's 2025 and uploading them one by one is...

Keywords:
Blood, Splat, Spray, Splash, Splut, Sput
Contents

EventObject_DemonBloodLarge0 (Model)

EventObject_DemonBloodLarge1 (Model)

EventObject_DemonBloodLarge2 (Model)

EventObject_DemonBloodLarge3 (Model)

EventObject_DemonBloodSmall0 (Model)

EventObject_DemonBloodSmall1 (Model)

EventObject_DemonBloodSmall2 (Model)

EventObject_DemonBloodSmall3 (Model)

EventObject_HumanBloodLarge0 (Model)

EventObject_HumanBloodLarge1 (Model)

EventObject_HumanBloodLarge2 (Model)

EventObject_HumanBloodLarge3 (Model)

EventObject_HumanBloodSmall0 (Model)

EventObject_HumanBloodSmall1 (Model)

EventObject_HumanBloodSmall2 (Model)

EventObject_HumanBloodSmall3 (Model)

EventObject_NightElfBloodLarge0 (Model)

EventObject_NightElfBloodLarge1 (Model)

EventObject_NightElfBloodLarge2 (Model)

EventObject_NightElfBloodLarge3 (Model)

EventObject_NightElfBloodSmall0 (Model)

EventObject_NightElfBloodSmall1 (Model)

EventObject_NightElfBloodSmall2 (Model)

EventObject_NightElfBloodSmall3 (Model)

EventObject_OrcBloodLarge0 (Model)

EventObject_OrcBloodLarge1 (Model)

EventObject_OrcBloodLarge2 (Model)

EventObject_OrcBloodLarge3 (Model)

EventObject_OrcBloodSmall0 (Model)

EventObject_OrcBloodSmall1 (Model)

EventObject_OrcBloodSmall2 (Model)

EventObject_OrcBloodSmall3 (Model)

EventObject_UndeadBloodLarge0 (Model)

EventObject_UndeadBloodLarge1 (Model)

EventObject_UndeadBloodLarge2 (Model)

EventObject_UndeadBloodLarge3 (Model)

EventObject_UndeadBloodSmall0 (Model)

EventObject_UndeadBloodSmall1 (Model)

EventObject_UndeadBloodSmall2 (Model)

EventObject_UndeadBloodSmall3 (Model)

EventObject_WaterDemonBloodLarge0 (Model)

EventObject_WaterDemonBloodLarge1 (Model)

EventObject_WaterDemonBloodSmall0 (Model)

EventObject_WaterDemonBloodSmall1 (Model)

EventObject_WaterHumanBloodLarge0 (Model)

EventObject_WaterHumanBloodLarge1 (Model)

EventObject_WaterHumanBloodSmall0 (Model)

EventObject_WaterHumanBloodSmall1 (Model)

EventObject_WaterNightElfBloodLarge0 (Model)

EventObject_WaterNightElfBloodLarge1 (Model)

EventObject_WaterNightElfBloodSmall0 (Model)

EventObject_WaterNightElfBloodSmall1 (Model)

EventObject_WaterOrcBloodLarge0 (Model)

EventObject_WaterOrcBloodLarge1 (Model)

EventObject_WaterOrcBloodSmall0 (Model)

EventObject_WaterOrcBloodSmall1 (Model)

EventObject_WaterUndeadBloodLarge0 (Model)

EventObject_WaterUndeadBloodLarge1 (Model)

EventObject_WaterUndeadBloodSmall0 (Model)

EventObject_WaterUndeadBloodSmall1 (Model)

Plane_DemonBloodLarge0 (Model)

Plane_DemonBloodLarge1 (Model)

Plane_DemonBloodLarge2 (Model)

Plane_DemonBloodLarge3 (Model)

Plane_DemonBloodSmall0 (Model)

Plane_DemonBloodSmall1 (Model)

Plane_DemonBloodSmall2 (Model)

Plane_DemonBloodSmall3 (Model)

Plane_HumanBloodLarge0 (Model)

Plane_HumanBloodLarge1 (Model)

Plane_HumanBloodLarge2 (Model)

Plane_HumanBloodLarge3 (Model)

Plane_HumanBloodSmall0 (Model)

Plane_HumanBloodSmall1 (Model)

Plane_HumanBloodSmall2 (Model)

Plane_HumanBloodSmall3 (Model)

Plane_NightElfBloodLarge0 (Model)

Plane_NightElfBloodLarge1 (Model)

Plane_NightElfBloodLarge2 (Model)

Plane_NightElfBloodLarge3 (Model)

Plane_NightElfBloodSmall0 (Model)

Plane_NightElfBloodSmall1 (Model)

Plane_NightElfBloodSmall2 (Model)

Plane_NightElfBloodSmall3 (Model)

Plane_OrcBloodLarge0 (Model)

Plane_OrcBloodLarge1 (Model)

Plane_OrcBloodLarge2 (Model)

Plane_OrcBloodLarge3 (Model)

Plane_OrcBloodSmall0 (Model)

Plane_OrcBloodSmall1 (Model)

Plane_OrcBloodSmall2 (Model)

Plane_OrcBloodSmall3 (Model)

Plane_UndeadBloodLarge0 (Model)

Plane_UndeadBloodLarge1 (Model)

Plane_UndeadBloodLarge2 (Model)

Plane_UndeadBloodLarge3 (Model)

Plane_UndeadBloodSmall0 (Model)

Plane_UndeadBloodSmall1 (Model)

Plane_UndeadBloodSmall2 (Model)

Plane_UndeadBloodSmall3 (Model)

Plane_WaterDemonBloodLarge0 (Model)

Plane_WaterDemonBloodLarge1 (Model)

Plane_WaterDemonBloodSmall0 (Model)

Plane_WaterDemonBloodSmall1 (Model)

Plane_WaterHumanBloodLarge0 (Model)

Plane_WaterHumanBloodLarge1 (Model)

Plane_WaterHumanBloodSmall0 (Model)

Plane_WaterHumanBloodSmall1 (Model)

Plane_WaterNightElfBloodLarge0 (Model)

Plane_WaterNightElfBloodLarge1 (Model)

Plane_WaterNightElfBloodSmall0 (Model)

Plane_WaterNightElfBloodSmall1 (Model)

Plane_WaterOrcBloodLarge0 (Model)

Plane_WaterOrcBloodLarge1 (Model)

Plane_WaterOrcBloodSmall0 (Model)

Plane_WaterOrcBloodSmall1 (Model)

Plane_WaterUndeadBloodLarge0 (Model)

Plane_WaterUndeadBloodLarge1 (Model)

Plane_WaterUndeadBloodSmall0 (Model)

Plane_WaterUndeadBloodSmall1 (Model)

Totally hear you on the no multi-uploads.

In the meantime. You can ask ChatGPT to generate a script to auto-upload files for you. I used python to quickly upload all these Pokemon icons.


Here's a generic version you can modify to suit your needs.

Python:
import time
import os
import pyautogui
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# Path to your folder containing the files
file_folder = r"<path to the files you want to upload>"

# Get all files in the folder (you can filter specific extensions if needed)
file_list = sorted([f for f in os.listdir(file_folder) if os.path.isfile(os.path.join(file_folder, f))])

print(f"Uploading {len(file_list)} files...")

# Set up the Selenium WebDriver
url = "<create a new resource then go to add resource, then copy and paste the hiveworkshop URL here>"
# Example:
# url = "https://www.hiveworkshop.com/bundles/all-gen-4-pokemon-reforged.357815/add-resource?resource-type=Warcraft3_Icon"

driver = webdriver.Chrome()  # Or specify path to chromedriver
driver.get(url)

# Log in manually or automate login here
input("Press Enter after logging in manually to continue...")

for file_name in file_list:
    # Wait for the page to load completely
    time.sleep(2)  # Adjust as necessary for page load time

    # Scroll to the div.icon to ensure it's in view
    driver.execute_script("arguments[0].scrollIntoView();", driver.find_element(By.CSS_SELECTOR, "div.upload-icon-original-container div.dropzone div.icon"))

    # Click the icon div to open the file input dialog
    icon_div = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.CSS_SELECTOR, "div.upload-icon-original-container div.dropzone div.icon"))
    )
    icon_div.click()  # This triggers the file input dialog

    # Use pyautogui to interact with the file dialog
    time.sleep(1)  # Short delay to ensure dialog is open
    file_path = os.path.join(file_folder, file_name)
    pyautogui.write(file_path)  # Type the file path
    pyautogui.press('enter')  # Press Enter to upload the file

    # Set the title based on the file name (remove extension and capitalize)
    title_field = driver.find_element(By.NAME, "title")
    title_field.clear()  # Clear any pre-existing title
    title_field.send_keys(os.path.splitext(file_name)[0].replace("_", " ").title())

    time.sleep(3)  # Wait for the image to upload

    # Wait for the "Post Resource" button to appear and then click it
    post_button = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, "//span[@class='button-text' and text()='Post resource']"))
    )
    post_button.click()

    # Wait for the resource to be posted before moving to the next one
    time.sleep(5)  # Adjust this based on how long the post process takes

    # Reload the URL to post the next resource
    driver.get(url)

# Done, close the browser
driver.quit()
 
Level 7
Joined
Dec 13, 2015
Messages
25
I guess I was thinking Death models from Starcraft 2, being replicated for Warcraft 3.
One of the confusing points here -- atleast, to me -- is how you are using the word model.

So like, are you looking to use these splats during a custom animation of a model you are converting, or replicating, from Starcraft? If you're referring to the animation or model itself, I think this is just the blood alone. I don't remember what part of the process controls what type of blood a unit bleeds in game, whether that is model data or not - it seems from a glance at your prof you do some model work, so maybe that is what you are referring to or something you would know.

Either way, I think OVO outlined the usecases for these models in-game quite well. You can use triggers to spawn them during a unit's death animation, which can also be incurred using triggers, for instance; I think thats what the EventObjects are for, while the Planes are a more standard model that can be manipulated using like, dummy units for instance, or spell effects.
 
One of the confusing points here -- atleast, to me -- is how you are using the word model.

So like, are you looking to use these splats during a custom animation of a model you are converting, or replicating, from Starcraft? If you're referring to the animation or model itself, I think this is just the blood alone. I don't remember what part of the process controls what type of blood a unit bleeds in game, whether that is model data or not - it seems from a glance at your prof you do some model work, so maybe that is what you are referring to or something you would know.

Either way, I think OVO outlined the usecases for these models in-game quite well. You can use triggers to spawn them during a unit's death animation, which can also be incurred using triggers, for instance; I think thats what the EventObjects are for, while the Planes are a more standard model that can be manipulated using like, dummy units for instance, or spell effects.
If you have Starcraft 2, and use the map editor's console to "browse", look up "MarineDeath", "ZerglingDeath", "HydraliskDeath", "ZealotDeath", etc to see what I mean. But this is all good info too.
 
Top