Pokémon Script Project Forum Index

Manuel | Search
 Information des admins 
Si vous désirez parler de PSP ou obtenir du soutient là dessus, merci d'aller faire un tour sur https://pokemonworkshop.com/forum/index.php Imbécile heureux

[Script] Ombre dynamique (complet)

 
Post new topic   Reply to topic    Pokémon Script Project Forum Index -> Game Making -> Ressources techniques -> Scripts
Previous topic :: Next topic   
Author Message
Master of Dragons
Membre


Joined: 26 Nov 2010
Posts: 45
Localisation: Sur ma chaise, à mon bureau

PostPosted: Wed 29 Dec - 12:28 (2010)    Post subject: [Script] Ombre dynamique (complet)

Bon, je sais qu'un script de ce genre a déjà été posté, cependant, j'ai remarqué qu'il posait des problèmes à certains...
Alors j'ai cherché, et quand je cherche, je trouve  Clin d'œil foireux

3 scripts :
           

Donc, pour commencer, remplacez Sprite_Character par :

#==============================================================================
# ¦ Sprite_Character modifié (See Sprite_Shadow and Sprite_Sun)
#==============================================================================

class Sprite_Character < RPG::Sprite

attr_accessor :character

def initialize(viewport, character = nil)
super(viewport)
@character = character
#------Sun edit----------
@sunlist=[]
if (character.is_a?(Game_Event) and character.list!=nil and character.list[0].code == 108 and character.list[0].parameters == ["sun"])
if (character.list[1]!=nil and character.list[1].code == 108)
@self_angle=character.list[1].parameters[0]
else
@self_angle=45
end
if (character.list[2]!=nil and character.list[2].code == 108)
@self_opacity=character.list[2].parameters[0]
else
@self_opacity=128
end
for i in $game_map.events.keys.sort
if ($game_map.events.is_a?(Game_Event) and $game_map.events.list!=nil and $game_map.events.list[0].code == 108 and $game_map.events.list[0].parameters == ["o"])
@sunlist = Sprite_Sun.new(viewport, $game_map.events,@self_angle,@self_opacity)
end
end
@sunlist[1] = Sprite_Sun.new(viewport, $game_player,@self_angle,@self_opacity)
end
#------/Sun edit----------
#------Shadows edit---------
@ombrelist=[]
if (character.is_a?(Game_Event) and character.list!=nil and character.list[0].code == 108 and character.list[0].parameters == ["s"])
if (character.list[1]!=nil and character.list[1].code == 108)
@anglemin=character.list[1].parameters[0]
end
if (character.list[2]!=nil and character.list[2].code == 108)
@anglemax=character.list[2].parameters[0]
end
if (character.list[3]!=nil and character.list[3].code == 108)
@distancemax=character.list[3].parameters[0]
end
for i in $game_map.events.keys.sort
if ($game_map.events.is_a?(Game_Event) and $game_map.events.list!=nil and $game_map.events.list[0].code == 108 and $game_map.events.list[0].parameters == ["o"])
@ombrelist = Sprite_Shadow.new(viewport, $game_map.events,self,@anglemin,@anglemax,@distancemax)
end
end
@ombrelist[1] = Sprite_Shadow.new(viewport, $game_player,self,@anglemin,@anglemax,@distancemax)
end
#------/Shadows edit----------
update
end

def update
super
if @tile_id != @character.tile_id or
@character_name != @character.character_name or
@character_hue != @character.character_hue
@tile_id = @character.tile_id
@character_name = @character.character_name
@character_hue = @character.character_hue
if @tile_id >= 384
self.bitmap = RPG::Cache.tile($game_map.tileset_name,
@tile_id, @character.character_hue)
self.src_rect.set(0, 0, 32, 32)
self.ox = 16
self.oy = 32
else
self.bitmap = RPG::Cache.character(@character.character_name,
@character.character_hue)
@cw = bitmap.width / 4
@ch = bitmap.height / 4
self.ox = @cw / 2
self.oy = @ch
end
end
self.visible = (not @character.transparent)
if @tile_id == 0
sx = @character.pattern * @cw
sy = (@character.direction - 2) / 2 * @ch
self.src_rect.set(sx, sy, @cw, @ch)
end
self.x = @character.screen_x
self.y = @character.screen_y
self.z = @character.screen_z(@ch)
self.opacity = @character.opacity
self.blend_type = @character.blend_type
self.bush_depth = @character.bush_depth
if @character.animation_id != 0
animation = $data_animations[@character.animation_id]
animation(animation, true)
@character.animation_id = 0
end
#------Shadows edit----------
if @ombrelist!=[]
for i in 1..@ombrelist.size
if @ombrelist!=nil
@ombrelist.update
end
end
end
#------/Shadows edit----------
#------Shadows edit----------
if @sunlist!=[]
for i in 1..@sunlist.size
if @sunlist!=nil
@sunlist.update
end
end
end
#------/Shadows edit----------
end
end


Ensuite créez un script Sprite_Shadow ou Sprite_Ombre (comme vous voulez) et placez-le au-dessus de Main :

#==============================================================================
# ¦ Sprit_Ombre (Sprite_Ombre )
# Based on Genzai Kawakami's shadows, dynamisme by Rataime, extra features Boushy
#==============================================================================

class Sprite_Shadow < RPG::Sprite

attr_accessor :character # ??????

def initialize(viewport, character = nil,source = nil,anglemin=0,anglemax=0,distancemax=0)
super(viewport)
@anglemin=anglemin.to_f
@anglemax=anglemax.to_f
@distancemax=distancemax.to_f
@character = character
@source = source
update
end

def update
super

if @tile_id != @character.tile_id or
@character_name != @character.character_name or
@character_hue != @character.character_hue
@tile_id = @character.tile_id
@character_name = @character.character_name
@character_hue = @character.character_hue
if @tile_id >= 384
self.bitmap = RPG::Cache.tile($game_map.tileset_name,
@tile_id, @character.character_hue)
self.src_rect.set(0, 0, 32, 32)
self.ox = 16
self.oy = 32
else
self.bitmap = RPG::Cache.character(@character.character_name,
@character.character_hue)
@cw = bitmap.width / 4
@ch = bitmap.height / 4
self.ox = @cw / 2
self.oy = @ch
end
end
self.visible = (not @character.transparent)
if @tile_id == 0
sx = @character.pattern * @cw
@direct=@character.direction

if self.angle>90 or angle<-90

if @direct== 6
sy = ( 4- 2) / 2 * @ch
end
if @direct== 4
sy = ( 6- 2) / 2 * @ch
end
if @direct != 4 and @direct !=6
sy = (@character.direction - 2) / 2 * @ch
end
else
sy = (@character.direction - 2) / 2 * @ch
end
self.src_rect.set(sx, sy, @cw, @ch)
end
self.x = @character.screen_x
self.y = @character.screen_y-5
self.z = @character.screen_z(@ch)-1
self.opacity = @character.opacity
self.blend_type = @character.blend_type
self.bush_depth = @character.bush_depth
if @character.animation_id != 0
animation = $data_animations[@character.animation_id]
animation(animation, true)
@character.animation_id = 0
end
@deltax=@source.x-self.x
@deltay= @source.y-self.y
self.angle = 57.3*Math.atan2(@deltax, @deltay )
@angle_trigo=self.angle+90
if @angle_trigo<0
@angle_trigo=360+@angle_trigo
end
self.color = Color.new(0, 0, 0)
@distance = ((@deltax ** 2) + (@deltay ** 2))
self.opacity = 1200000/(@distance+6000)
@distance = @distance ** 0.5
if @distancemax !=0 and @distance>=@distancemax
self.opacity=0
end
if @anglemin !=0 or @anglemax !=0
if (@angle_trigo<@anglemin or @angle_trigo>@anglemax) and @anglemin<@anglemax
self.opacity=0
end
if (@angle_trigo<@anglemin and @angle_trigo>@anglemax) and @anglemin>@anglemax
self.opacity=0
end
end
end
end



Enfin, créez un troisième script que vous nommerez Sprite_Sun ou Sprite_Soleil (encore une fois, vous choisissez) au dessus de Main :

#==============================================================================
# ¦ Sprite_Sun
# # Based on Sprite_Shadow, modified by Rataime
#==============================================================================

class Sprite_Sun < RPG::Sprite
attr_accessor :character

def initialize(viewport, character = nil, self_angle = 45,self_opacity = 128)
super(viewport)
@character = character
@self_angle=self_angle
@self_opacity=self_opacity
update
end

def update
super
if @tile_id != @character.tile_id or
@character_name != @character.character_name or
@character_hue != @character.character_hue
@tile_id = @character.tile_id
@character_name = @character.character_name
@character_hue = @character.character_hue
if @tile_id >= 384
self.bitmap = RPG::Cache.tile($game_map.tileset_name,
@tile_id, @character.character_hue)
self.src_rect.set(0, 0, 32, 32)
self.ox = 16
self.oy = 32
else
self.bitmap = RPG::Cache.character(@character.character_name,
@character.character_hue)
@cw = bitmap.width / 4
@ch = bitmap.height / 4
self.ox = @cw / 2
self.oy = @ch
end
end

self.visible = (not @character.transparent)

if @tile_id == 0
sx = @character.pattern * @cw
@direct=@character.direction

if self.angle>90 or angle<-90

if @direct== 6
sy = ( 4- 2) / 2 * @ch#@character.direction
end
if @direct== 4
sy = ( 6- 2) / 2 * @ch
end
if @direct != 4 and @direct !=6
sy = (@character.direction - 2) / 2 * @ch
end
else
sy = (@character.direction - 2) / 2 * @ch
end
self.src_rect.set(sx, sy, @cw, @ch)
end
self.x = @character.screen_x
self.y = @character.screen_y-5
self.z = @character.screen_z(@ch)-1
self.opacity = @character.opacity
self.blend_type = @character.blend_type
self.bush_depth = @character.bush_depth
if @character.animation_id != 0
animation = $data_animations[@character.animation_id]
animation(animation, true)
@character.animation_id = 0
end
self.angle = @self_angle-90
self.color = Color.new(0, 0, 0)
self.opacity = @self_opacity
end
end



Pour le fonctionnement :
           

-Créer une source lumineuse :

La source lumineuse sera un évènement parallèle avec, au début, un commentaire : s

-Créer une ombre pour un évènement (autre que le héros) :

L'évènement devra avoir, au début, le commentaire : o
(Par défaut, la source lumineuse projettera le faisceau lumineux à 360 degrés.)

-Petits effets :

Pour l'imiter la source, ajoutez-y deux autres commentaires avec chacun un chiffre qui définie un angle. C'est l'angle de la lumière projetée. Par exemple une lumière qui donne de la lumière seulement vers la droite et non vers la gauche.
Le premier commentaire sera pour définir l'angle de départ, le second, pour l'angle de fin.

Un quatrième commentaire servira à définir la longueur en pixel pour l'ombre. Ce commentaire comportera un chiffre entre 500 et 1000 (nombre de pixels)


Pour l'extérieur, il suffit de mettre, sur un évènement parallèle, un commentaire : sun. Pour limiter le soleil, vous pouvez définir la puissance de luminosité du soleil avec un commentaire comprenant un nombre entre 30 er 200 pour foncé ou pâle (200, c'est très pâle).


NOTE : Le héros a déjà son ombre.
           



Générique :
Scripts de
Rataime et Genzai Kawakami.



REMARQUES(personnelles ^^) :

Ces scripts sont incompatibles avec le "script de reflet sur l'eau" pour deux bonnes raisons :

-Tout d'abord, l'ombre sera décalée par rapport au reflet (très moche)
-Un évènement (sauf le héros) ne peut avoir ET le commentaire pour le reflet ET le commentaire pour l'ombre.

COMPATIBLE AVEC LES SYSTEMES PSP !
         
  

Voilà ^^
J'ai refait entièrement les explications et corrigé les fautes pour une meilleure compréhension.

Merci de me dire si ça vous a servi (que je sache si je peux en mettre d'autres Clin d'œil foireux )


Back to top
Yahoo Messenger
Publicité






PostPosted: Wed 29 Dec - 12:28 (2010)    Post subject: Publicité

PublicitéSupprimer les publicités ?
Back to top
Arc-Arceus
Modérateur
Modérateur


Joined: 21 Feb 2010
Posts: 911
Deus Ex Machina
Localisation: 8e dimension à droite
Féminin

PostPosted: Sat 1 Jan - 18:31 (2011)    Post subject: [Script] Ombre dynamique (complet)

Oui, je me souviens que D-black en avait posté un qui ne marchait pas terrible avec psp...
Tu l'as essayé et il fonctionne ?
Back to top
Master of Dragons
Membre


Joined: 26 Nov 2010
Posts: 45
Localisation: Sur ma chaise, à mon bureau

PostPosted: Sat 1 Jan - 19:12 (2011)    Post subject: [Script] Ombre dynamique (complet)

Il marche très bien.
Aucun problème, sauf peut-être que j'arrive pas à définir l'angle du soleil, mais le reste, c'est au poil Clin d'œil foireux
Back to top
Yahoo Messenger
Nabusius
Membre


Joined: 25 Sep 2012
Posts: 16

PostPosted: Thu 27 Sep - 18:27 (2012)    Post subject: [Script] Ombre dynamique (complet)

Bonjour désoler pour le necro-necro post mais je n'arrive pas a le faire fonctionner :

---------- Erreur de script : Sprite_Character ----------
----- Version du logiciel : PSP DS v0.4
----- Type
NoMethodError

----- Message
- ARGS - []
undefined method `update' for [nil, #<Sprite_Sun:0x827d870>]:Array

----- Position dans Sprite_Character
Ligne 109

----- Backtrace
Script : Sprite_Character | Ligne : 109 | Méthode : in `update'
Script : Sprite_Character | Ligne : 107 | Méthode : in `each'
Script : Sprite_Character | Ligne : 107 | Méthode : in `update'
Script : Sprite_Character | Ligne : 53 | Méthode : in `initialize'
Script : Spriteset_Map | Ligne : 37 | Méthode : in `new'
Script : Spriteset_Map | Ligne : 37 | Méthode : in `initialize'
Script : Spriteset_Map | Ligne : 36 | Méthode : in `each'
Script : Spriteset_Map | Ligne : 36 | Méthode : in `initialize'
Script : Scene_Map | Ligne : 13 | Méthode : in `new'
Script : Scene_Map | Ligne : 13 | Méthode : in `main'
Script : Main | Ligne : 58
Back to top
Zohran
Support Technique
Support Technique


Joined: 14 May 2011
Posts: 906
Localisation: France
Masculin

PostPosted: Sun 25 Nov - 18:03 (2012)    Post subject: [Script] Ombre dynamique (complet)

J'ai exactement le même problème, t'as pas vérifié le script, ça c'est sûr...
Back to top
Master of Dragons
Membre


Joined: 26 Nov 2010
Posts: 45
Localisation: Sur ma chaise, à mon bureau

PostPosted: Tue 9 Apr - 23:14 (2013)    Post subject: [Script] Ombre dynamique (complet)

Après un looong moment d'absence, je reviens sur mes sujets. J'ai réessayé le script, il marche pour moi.
Back to top
Yahoo Messenger
Pαlвσlѕку
Team SDK


Joined: 17 Aug 2008
Posts: 5,983
Masculin

PostPosted: Tue 9 Apr - 23:31 (2013)    Post subject: [Script] Ombre dynamique (complet)

En effet ça fait un bon moment.
Re-bienvenue à toi sur le forum. Imbécile heureux
Back to top
Skype
Master of Dragons
Membre


Joined: 26 Nov 2010
Posts: 45
Localisation: Sur ma chaise, à mon bureau

PostPosted: Tue 9 Apr - 23:32 (2013)    Post subject: [Script] Ombre dynamique (complet)

Merci ^^ Je reviens avec quelques idées nouvelles en épérant qu'elles marcheront et que je pourrais avoir le temps de les finaliser.
Back to top
Yahoo Messenger
Contenu Sponsorisé






PostPosted: Today at 05:10 (2019)    Post subject: [Script] Ombre dynamique (complet)

Back to top
Display posts from previous:   
Post new topic   Reply to topic    Pokémon Script Project Forum Index -> Game Making -> Ressources techniques -> Scripts All times are GMT + 1 Hour
Page 1 of 1

 
Jump to:  

Index | Free forum | Free support forum | Free forums directory | Report a violation | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group
Thème par Thomas et l'équipe de la refonte PSP 2012 (version 1.0)