xref: /plugin/avatar/monsterid.php (revision 1affe9b74f831a77579e4d40c8842e368223b8dc)
1401a61e7Swikidesign<?php
2*1affe9b7Swikidesign/**
3*1affe9b7Swikidesign * @license   GPL 2 (http://www.gnu.org/licenses/gpl.html)
4*1affe9b7Swikidesign * @author    Andreas Gohr <andi@splitbrain.org>
5*1affe9b7Swikidesign */
6401a61e7Swikidesign
7401a61e7Swikidesignbuild_monster($_REQUEST['seed'], $_REQUEST['size']);
8401a61e7Swikidesign
9*1affe9b7Swikidesign/**
10*1affe9b7Swikidesign * Generates a monster for the given seed
11*1affe9b7Swikidesign * GDlib is required!
12*1affe9b7Swikidesign */
13401a61e7Swikidesignfunction build_monster($seed='',$size=''){
14401a61e7Swikidesign    // init random seed
15401a61e7Swikidesign    if($seed) srand( hexdec(substr(md5($seed),0,6)) );
16401a61e7Swikidesign
17401a61e7Swikidesign    // throw the dice for body parts
18401a61e7Swikidesign    $parts = array(
19401a61e7Swikidesign        'legs' => rand(1,5),
20401a61e7Swikidesign        'hair' => rand(1,5),
21401a61e7Swikidesign        'arms' => rand(1,5),
22401a61e7Swikidesign        'body' => rand(1,15),
23401a61e7Swikidesign        'eyes' => rand(1,15),
24401a61e7Swikidesign        'mouth'=> rand(1,10)
25401a61e7Swikidesign    );
26401a61e7Swikidesign
27401a61e7Swikidesign    // create backgound
28401a61e7Swikidesign    $monster = @imagecreatetruecolor(120, 120)
29401a61e7Swikidesign        or die("GD image create failed");
30401a61e7Swikidesign    $white   = imagecolorallocate($monster, 255, 255, 255);
31401a61e7Swikidesign    imagefill($monster,0,0,$white);
32401a61e7Swikidesign
33401a61e7Swikidesign    // add parts
34401a61e7Swikidesign    foreach($parts as $part => $num){
35401a61e7Swikidesign        $file = dirname(__FILE__).'/parts/'.$part.'_'.$num.'.png';
36401a61e7Swikidesign
37401a61e7Swikidesign        $im = @imagecreatefrompng($file);
38401a61e7Swikidesign        if(!$im) die('Failed to load '.$file);
39401a61e7Swikidesign        imageSaveAlpha($im, true);
40401a61e7Swikidesign        imagecopy($monster,$im,0,0,0,0,120,120);
41401a61e7Swikidesign        imagedestroy($im);
42401a61e7Swikidesign
43401a61e7Swikidesign        // color the body
44401a61e7Swikidesign        if($part == 'body'){
45401a61e7Swikidesign            $color = imagecolorallocate($monster, rand(20,235), rand(20,235), rand(20,235));
46401a61e7Swikidesign            imagefill($monster,60,60,$color);
47401a61e7Swikidesign        }
48401a61e7Swikidesign    }
49401a61e7Swikidesign
50401a61e7Swikidesign    // restore random seed
51401a61e7Swikidesign    if($seed) srand();
52401a61e7Swikidesign
53401a61e7Swikidesign    // resize if needed, then output
54401a61e7Swikidesign    if($size && $size < 400){
55401a61e7Swikidesign        $out = @imagecreatetruecolor($size,$size)
56401a61e7Swikidesign            or die("GD image create failed");
57401a61e7Swikidesign        imagecopyresampled($out,$monster,0,0,0,0,$size,$size,120,120);
58401a61e7Swikidesign        header ("Content-type: image/png");
59401a61e7Swikidesign        imagepng($out);
60401a61e7Swikidesign        imagedestroy($out);
61401a61e7Swikidesign        imagedestroy($monster);
62401a61e7Swikidesign    }else{
63401a61e7Swikidesign        header ("Content-type: image/png");
64401a61e7Swikidesign        imagepng($monster);
65401a61e7Swikidesign        imagedestroy($monster);
66401a61e7Swikidesign    }
67401a61e7Swikidesign}
68*1affe9b7Swikidesign
69*1affe9b7Swikidesign//Setup VIM: ex: et ts=4 enc=utf-8 :
70