Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # Simple, not-so-user friendly Random Character Generator for PVGames graphics
- # Made by Piotr "Ekhart" Blaut, for 'Blood Desire' game.
- # Date: 19-20/02/2017
- require 'mini_magick'
- # All layers, in order they are drawn
- listOfLayers = {
- "male" => ["shadow", "base", "pants", "feet", "top", "hair", "scars", "facialHair", "head", "accessory"],
- "female" => ["shadow", "base", "pants", "feet", "top", "gloves", "hair", "scars", "head", "accessory"]
- }
- listOfPoses = ["collapse", "collapse_diag", "dead", "dead_diag", "idle1", "idle1_diag", "kneel", "kneel_diag", "running", "running_diag", "sitting1", "sitting1_diag", "sleeping", "sleeping_diag", "walking", "walking_diag"]
- # Chances of selected layers appearing, in % value
- compositionChance = {
- "male" => [100, 100, 100, 100, 100, 90, 20, 50, 10, 10],
- "female" => [100, 100, 100, 100, 100, 35, 100, 3, 10, 10]
- }
- listOfMaleElements = {
- "shadow" => 1,
- "base" => 10,
- "pants" => 16,
- "feet" => 10,
- "top" => 37,
- "hair" => 55,
- "scars" => 5,
- "facialHair" => 20,
- "head" => 20,
- "accessory" => 22
- }
- listOfFemaleElements = {
- "shadow" => 1,
- "base" => 10,
- "pants" => 11,
- "feet" => 7,
- "top" => 41,
- "gloves" => 1,
- "hair" => 65,
- "scars" => 5,
- "head" => 18,
- "accessory" => 27
- }
- # Pick random elements
- graphicsComp = []
- puts "Choose gender: M or F"
- gender = gets.strip
- gender = "male" if gender == "m" || gender == "M"
- gender = "female" if gender == "f" || gender == "F"
- for i in 0...listOfLayers[gender].size
- ch = rand(100)
- # Random chance of piece appearing
- if compositionChance[gender][i] >= ch then
- #this element is added
- if gender=="male" then
- graphicsComp << (rand(listOfMaleElements[listOfLayers[gender][i]]) + 1).to_s
- elsif gender=="female" then
- graphicsComp << (rand(listOfFemaleElements[listOfLayers[gender][i]]) + 1).to_s
- end
- else
- # if piece wasn't added, put "nil" in array
- graphicsComp << "none"
- end
- end
- for position in 0...listOfPoses.size
- # Create a list of filenames
- usedFiles = []
- # For test - only use Idle graphic
- for ex in 0...listOfLayers[gender].size
- #directory = gender + %q{\\} + listOfLayers[gender][ex] + %q{\\} + graphicsComp[ex]
- directory = "#{gender}/#{listOfLayers[gender][ex]}/#{graphicsComp[ex]}"
- if graphicsComp[ex] != "none" then
- Dir.entries(directory).each do |f|
- usedFiles << directory + "/" + f if f.include?(listOfPoses[position] + ".png")
- end
- end
- end
- # Go through all files
- image = MiniMagick::Image.new(usedFiles[0])
- for n in 1...usedFiles.size
- topLayer = MiniMagick::Image.new(usedFiles[n])
- result = image.composite(topLayer) do |c|
- c.compose "Over"
- end
- image = result
- end
- image.write "output_#{listOfPoses[position]}.png"
- puts "Generated and saved: #{listOfPoses[position]}"
- end
- # Generate text file with layers compositionChance
- File.open('layers.txt', 'w+') do |file|
- file.puts(usedFiles)
- end
- puts "Saved used layers to text file"
- puts "\n \n Press enter button to exit"
- dump = gets
Advertisement
Add Comment
Please, Sign In to add comment